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 (五) 路径标记相关推荐

  1. poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

    题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...

  2. 路径标记语法 in Windows Presentation Foundation(WPF)

    WPF 中的形状和基本绘图概述和 Geometry 概述 中对路径进行了讨论,不过,本主题详细介绍功能强大.用法复杂的 mini-language,利用此语言并借助可扩展应用程序标记语言 (XAML) ...

  3. 博客总目录(2007.11.12 - 2010.4.25)

    如果我的学习记录和历程能对你有所帮助, 我非常高兴; 但是 -- "万一" 不是高手.更不是大师, 只是利用工作之余学点东西, 并感觉学得挺吃力. 内容都是写时才会, 难免稚嫩, ...

  4. Quartz-2D绘图之路径(Paths)详解

    在上篇文章中,我们简单的理解了绘图上下文,今天我们来认识一下Quartz-2D中另一个重要的概念,路径(Paths). 一.理解路径 路径定义了一个或多个形状,或是子路径.一个子路径可由直线,曲线,或 ...

  5. 第38章 I2S—音频播放与录音输入—零死角玩转STM32-F429系列

    第38章     I2S-音频播放与录音输入 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  6. 2021年全球飞机标记和标牌收入大约16百万美元,预计2028年达到18百万美元

    本文研究全球市场.主要地区和主要国家飞机标记和标牌的销量.销售收入等,同时也重点分析全球范围内主要厂商(品牌)竞争态势,飞机标记和标牌销量.价格.收入和市场份额等. 针对过去五年(2017-2021) ...

  7. 基于MATLAB的无人机路径规划设计

    全套资源下载地址:https://download.csdn.net/download/sheziqiong/86776455 全套资源下载地址:https://download.csdn.net/d ...

  8. 【Python】五种Pandas图表美化样式汇总

    Pandas是一种高效的数据处理库,它以dataframe和series为基本数据类型,呈现出类似excel的二维数据. 在Jupyter中,会美化Pandas的输出.不同于IDE展示的文本形式,Ju ...

  9. vue中地图怎么标记数据库传过来的点_【Point小数点 图表挑战总结03】如何使用六边形网格地图(下)...

    禹洋:[Tableau] 如何使用六边形网格地图(Hex Map)--图表挑战总结03​zhuanlan.zhihu.com 上一篇文章使用的网格地图的画法,在DashBoard排版时非常难控制,也算 ...

最新文章

  1. php7 mysql 卡顿_不要在PHP7中踩这些坑
  2. Day 17: 使用 JBoss Forge 和 OpenShift 构建部署 JAVA EE 6 应用
  3. PHP中text里数字相加,excel文字数字如何混合求和
  4. 工作81:图片间隙问题
  5. 线性代数应该这样讲(四)-奇异值分解与主成分分析
  6. linux查看帮助信息,命令帮助信息的获取
  7. Python使用组合、排列和动态规划算法求解0-1背包问题
  8. openpythonxl_常用模块之openpyxl (python3入门)
  9. 删除AdminServer logs下的log文件后开启AdminServer报错
  10. 电磁波传播matlab程序,电磁波在不同介质中传播的 MATLAB 仿真教学实践论文
  11. 2021人工智能太湖论坛
  12. 最新资讯:iPhone 11显示模块更换计划,用于解决触摸问题
  13. 文件包含漏洞及漏洞利用
  14. Android 全景视频播放器(VR视频播放器探索二)
  15. 【算法上车②】编译打包华为摄像头yolov3 狗识别demo
  16. JavaScript ES12新特性抢先体验
  17. 【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码
  18. 打造数字人民币的大运应用场景
  19. 实战:第十三章:工作中熬夜加班学到的
  20. shader拖尾_Unity LineRenderer 之 鼠标轨迹记录和拖尾实现

热门文章

  1. Linux:客户端的实现
  2. CVE-2009-3459
  3. 电商第一季函数笔记(1)
  4. Java日期处理 开始时间-结束时间查询
  5. Android之网络编程利用PHP操作MySql插入数据(四)
  6. MySQL找出锁等待
  7. MyEclipse10 Tomcat7 JDK1.7 配置
  8. HTML5/CSS3系列教程:HTML5 区域(Sectioning)的重要性
  9. 【转】Tomcat+MyEclipse
  10. asp.net Session丢失问题