1、如何画剖面线(见机械 CAD 技术基础)图案填充是指以指定的图案去填充一个封闭的边界。因此为完成图案填充主要要完成选择填充边界、填充图案及填充方式。图案填充在机械 CAD 中主要是为了完成机械制图中的剖面符号。在 AutoCAD 数据库中,图案填充使用 AcDbHatch 类的对象,通过调用其构造函数实现图案填充的创建。l 其构造函数的格式为:Acad:ErrorStatus AcDbHatch ();由于其构造函数仅仅是为 AcDbHatch 类的对象分配了内存空间,其填充边界、填充图案及填充方式必须使用该类的成员函数来设置。图案填充程序设计的步骤:1) 构造边界的对象组。2) 调用 AcD
2、bHatch 类的构造函数生成缺省的 AcDbHatch 类的对象。3) 调用 AcDbHatch 类的成员函数作必要的设置。4) 调用 appendLoop()函数将对象组加入 AcDbHatch 类以构成边界。5) 调用 evaluateHatch()函数显示填充图案,否则图案不显示。6) 要重新打开块表纪录后,再将 AcDbHatch 类的对象添加进图块表记录中。填充边界的设置有两个重要要求,第一完全封闭;第二首尾相连。首尾相连就是前一个曲线的终点和下一个曲线的起点完全重合,如果不能满足要求,则不能正确的进行图案填充。关于这项要求需要详细了解请参阅 AutoCADR10 版本之前的书藉。
3、例 9?5:图案填充程序如下:AcDbBlockTable *pBlockTable;acdbHostApplicationServices()-workingDatabase()/查找并以只读模式-getSymbolTable(pBlockTable, AcDb:kForRead);/打开图块表AcDbBlockTableRecord *pBlockTableRecord;pBlockTable-getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb:kForWrite);/查找并以写模式打开图块表记录(模型空间)pBlockTable-close();
4、/关闭图块表AcDbObjectId lineId1;AcDbObjectId lineId2;AcDbObjectId lineId3;AcGePoint3d Pt1( 3.0, 4.0, 0.0);AcGePoint3d Pt2(110.0, 70.0, 0.0);AcGePoint3d Pt3( 170.0, 20.0, 0.0);AcDbLine *pLine1 = new AcDbLine(Pt1, Pt2);/创建实体AcDbLine *pLine2 = new AcDbLine(Pt2, Pt3);/创建实体AcDbLine *pLine3 = new AcDbLine(Pt3,
5、 Pt1);/创建实体pBlockTableRecord-appendAcDbEntity(lineId1, pLine1);/添加实体返回 IDpBlockTableRecord-appendAcDbEntity(lineId2, pLine2);/添加实体返回 IDpBlockTableRecord-appendAcDbEntity(lineId3, pLine3);/添加实体返回 IDAcDbObjectIdArray dbObjIds;AcDbObjectId Id;dbObjIds.append(lineId1);dbObjIds.append(lineId2);dbObjIds.a
6、ppend(lineId3);pBlockTableRecord-close();/关闭图块表记录pLine1-close();/关闭实体pLine2-close();/关闭实体pLine3-close();/关闭实体AcDbHatch *pHatch = new AcDbHatch();pHatch-setNormal(AcGeVector3d(0.0,0.0,1.0);pHatch-setElevation(0.0);/设置填充平面pHatch-setAssociative(Adesk:kTrue);/设置关联性pHatch-setPatternScale(5);pHatch-setPat
7、tern(AcDbHatch:kPreDefined,_T(“ANSI31“);pHatch-setHatchStyle(AcDbHatch:kNormal);pHatch-appendLoop(AcDbHatch:kExternal,dbObjIds);/添加填充边界pHatch-evaluateHatch();/设置填充对象pHatch-setColorIndex(1);acdbHostApplicationServices()-workingDatabase()/查找并以只读模式-getSymbolTable(pBlockTable, AcDb:kForRead);/打开图块表pBlockTable-getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb:kForWrite);/查找并以写模式打开图块表记录(模型空间)pBlockTable-close();/关闭图块表pBlockTableRecord-appendAcDbEntity(Id, pHatch);/添加实体返回 IDpBlockTableRecord-close();/关闭图块表记录pHatch-close();/关闭实体