GDI/GID+中提供的线型总是有限的,在一些行业应用领域,需要有非常专业的线型定义,如“铁路线”、“长城线”、“断崖”、“国界线”等,这就需要进行自定义的开发。
我的实现思路是:先制作一些线型的图元(图元就是线型的一个片断),矢量格式,然后用线型类来调用,重载系统的MoveTo和LineTo,调用时不用关心底层实现,只要设好线型类型就行。这样设计可以比较方便地实现自定义线型,不过在线型的转角和接缝处要精细处理,保证无缝接合
另外专为制作图元开发了一套小工具。
TGeoSequinType = (GeoNull,GeoPoint,GeoLine,GeoPoly,GeoEllipse);
{
每个线型中的基本组成单位,目前只有点、线、圆和多边形四个类型
每个Sequin有线颜色和填充颜色,无线宽和填充样式
}
TGeoSequin = class(TObject)
private
PtList : TList; //包含PPoint类型
procedure DrawLine(Canvas: TCanvas;dX,dY: double;dSlope: double;dOffsetLength,dEndLength: double;nFlag : integer;nIndex: integer);
procedure DrawETOBLine(Canvas: TCanvas;dSeqX1,dSeqY1,dSlope:double;X,Y:double;CurX,CurY:double;nFlag:integer);
procedure Lin