GdiPlus[38]: IGPGraphicsPath (五) 路径标记
IGPGraphicsPath.SetMarker //建立一个标记 IGPGraphicsPath.ClearMarkers //取消全部标记
在路径中每建立一个图形都可以同时做个 Marker,
真正使用这些个标记时, 主要通过 IGPGraphicsPathIterator 的 NextMarker() 方法.
下面是建立并遍历 Marker 的演示代码, 暂未使用 IGPGraphicsPathIterator.
uses GdiPlus;procedure TForm1.FormCreate(Sender: TObject); varPt1,Pt2: TGPPoint;Rect: TGPRect;Path: IGPGraphicsPath;i: Integer;str: string; beginPt1.Initialize(20, 20);Pt2.Initialize(150, 150);Rect.InitializeFromLTRB(Pt1.X, Pt1.Y, Pt2.X , Pt2.Y);Path := TGPGraphicsPath.Create;{ 路径有四个图形(或叫子路径构成), 并在每个图形后做了 marker; 第一个前不需要也作不上. }Path.AddRectangle(Rect);Path.SetMarker;Path.AddEllipse(Rect);Path.SetMarker;Path.AddLine(Pt1.X, Pt1.Y, Pt2.X, Pt2.Y);Path.SetMarker;Path.AddLine(Pt1.X, Pt2.Y, Pt2.X, Pt1.Y);Path.SetMarker;{ 检索看看都是哪个点上有 Marker, 它的类型标识是 $20 }str := '';for i := 0 to Path.PointCount - 1 doif Path.PathTypes[i] and $20 = $20 thenstr := str + IntToStr(i+1) + ' ';ShowMessage(TrimRight(str)); // 4 17 19 21{ 执行 ClearMarkers, 重新检索看看 }Path.ClearMarkers;str := '';for i := 0 to Path.PointCount - 1 doif Path.PathTypes[i] and $20 = $20 thenstr := str + IntToStr(i+1) + ' ';ShowMessage(TrimRight(str)); // 当然不会再有了 end;
使用 IGPGraphicsPathIterator 检索 Marker 的例子:
uses GdiPlus;varPath: IGPGraphicsPath;PathIterator: IGPGraphicsPathIterator;procedure TForm1.FormCreate(Sender: TObject); varPt1,Pt2: TGPPoint;Rect: TGPRect; beginPt1.Initialize(20, 20);Pt2.Initialize(150, 150);Rect.InitializeFromLTRB(Pt1.X, Pt1.Y, Pt2.X , Pt2.Y);Path := TGPGraphicsPath.Create;//建立四个图形并添加两个标记Path.AddRectangle(Rect);Path.SetMarker;Path.AddEllipse(Rect);Path.AddLine(Pt1.X, Pt1.Y, Pt2.X, Pt2.Y);Path.SetMarker;Path.AddLine(Pt1.X, Pt2.Y, Pt2.X, Pt1.Y);//建立 PathIteratorPathIterator := TGPGraphicsPathIterator.Create(Path); end;procedure TForm1.Button1Click(Sender: TObject); varm1,m2: Integer;i: Integer; begini := 0;PathIterator.Rewind;while PathIterator.NextMarker(m1, m2) > 0 dobeginInc(i);ShowMessageFmt('第 %d - %d 个标记的范围: %d - %d', [i-1, i, m1, m2]);end; {第 0 - 1 个标记的范围: 0 - 3第 1 - 2 个标记的范围: 4 - 18第 2 - 3 个标记的范围: 19 - 20 } //就添加了两个标记怎么会检索出三个范围呢? 两个点把路径分成了三段! end;//IGPGraphicsPathIterator.NextMarker 的第二种用法 procedure TForm1.Button2Click(Sender: TObject); vari,r: Integer; begini := 0;PathIterator.Rewind;while True dobeginr := PathIterator.NextMarker(Path);if r = 0 then Break;Inc(i);ShowMessageFmt('第 %d - %d 个标记间共有 %d 个点', [i-1, i, r]);end; {第 0 - 1 个标记间共有 4 个点第 1 - 2 个标记间共有 15 个点第 2 - 3 个标记间共有 2 个点 } end;
GdiPlus[38]: IGPGraphicsPath (五) 路径标记相关推荐
- poj 3310(并查集判环,图的连通性,树上最长直径路径标记)
题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...
- 路径标记语法 in Windows Presentation Foundation(WPF)
WPF 中的形状和基本绘图概述和 Geometry 概述 中对路径进行了讨论,不过,本主题详细介绍功能强大.用法复杂的 mini-language,利用此语言并借助可扩展应用程序标记语言 (XAML) ...
- 博客总目录(2007.11.12 - 2010.4.25)
如果我的学习记录和历程能对你有所帮助, 我非常高兴; 但是 -- "万一" 不是高手.更不是大师, 只是利用工作之余学点东西, 并感觉学得挺吃力. 内容都是写时才会, 难免稚嫩, ...
- Quartz-2D绘图之路径(Paths)详解
在上篇文章中,我们简单的理解了绘图上下文,今天我们来认识一下Quartz-2D中另一个重要的概念,路径(Paths). 一.理解路径 路径定义了一个或多个形状,或是子路径.一个子路径可由直线,曲线,或 ...
- 第38章 I2S—音频播放与录音输入—零死角玩转STM32-F429系列
第38章 I2S-音频播放与录音输入 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 2021年全球飞机标记和标牌收入大约16百万美元,预计2028年达到18百万美元
本文研究全球市场.主要地区和主要国家飞机标记和标牌的销量.销售收入等,同时也重点分析全球范围内主要厂商(品牌)竞争态势,飞机标记和标牌销量.价格.收入和市场份额等. 针对过去五年(2017-2021) ...
- 基于MATLAB的无人机路径规划设计
全套资源下载地址:https://download.csdn.net/download/sheziqiong/86776455 全套资源下载地址:https://download.csdn.net/d ...
- 【Python】五种Pandas图表美化样式汇总
Pandas是一种高效的数据处理库,它以dataframe和series为基本数据类型,呈现出类似excel的二维数据. 在Jupyter中,会美化Pandas的输出.不同于IDE展示的文本形式,Ju ...
- vue中地图怎么标记数据库传过来的点_【Point小数点 图表挑战总结03】如何使用六边形网格地图(下)...
禹洋:[Tableau] 如何使用六边形网格地图(Hex Map)--图表挑战总结03zhuanlan.zhihu.com 上一篇文章使用的网格地图的画法,在DashBoard排版时非常难控制,也算 ...
最新文章
- php7 mysql 卡顿_不要在PHP7中踩这些坑
- Day 17: 使用 JBoss Forge 和 OpenShift 构建部署 JAVA EE 6 应用
- PHP中text里数字相加,excel文字数字如何混合求和
- 工作81:图片间隙问题
- 线性代数应该这样讲(四)-奇异值分解与主成分分析
- linux查看帮助信息,命令帮助信息的获取
- Python使用组合、排列和动态规划算法求解0-1背包问题
- openpythonxl_常用模块之openpyxl (python3入门)
- 删除AdminServer logs下的log文件后开启AdminServer报错
- 电磁波传播matlab程序,电磁波在不同介质中传播的 MATLAB 仿真教学实践论文
- 2021人工智能太湖论坛
- 最新资讯:iPhone 11显示模块更换计划,用于解决触摸问题
- 文件包含漏洞及漏洞利用
- Android 全景视频播放器(VR视频播放器探索二)
- 【算法上车②】编译打包华为摄像头yolov3 狗识别demo
- JavaScript ES12新特性抢先体验
- 【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码
- 打造数字人民币的大运应用场景
- 实战:第十三章:工作中熬夜加班学到的
- shader拖尾_Unity LineRenderer 之 鼠标轨迹记录和拖尾实现