[求助]arx中如何画到角和剖面线
如何画剖面线(见《机械CAD技术基础》)
图案填充是指以指定的图案去填充一个封闭的边界。因此为完成图案填充主要要完成选择填充边界、填充图案及填充方式。图案填充在机械CAD中主要是为了完成机械制图中的剖面符号。在AutoCAD数据库中,图案填充使用AcDbHatch类的对象,通过调用其构造函数实现图案填充的创建。
l 其构造函数的格式为:
Acad::ErrorStatus AcDbHatch ();
由于其构造函数仅仅是为AcDbHatch 类的对象分配了内存空间,其填充边界、填充图案及填充方式必须使用该类的成员函数来设置。
图案填充程序设计的步骤:
1) 构造边界的对象组。
2) 调用AcDbHatch类的构造函数生成缺省的AcDbHatch类的对象。
3) 调用AcDbHatch类的成员函数作必要的设置。
4) 调用appendLoop()函数将对象组加入AcDbHatch类以构成边界。
5) 调用evaluateHatch()函数显示填充图案,否则图案不显示。
6) 要重新打开块表纪录后,再将AcDbHatch类的对象添加进图块表记录中。
填充边界的设置有两个重要要求,第一完全封闭;第二首尾相连。首尾相连就是前一个曲线的终点和下一个曲线的起点完全重合,如果不能满足要求,则不能正确的进行图案填充。关于这项要求需要详细了解请参阅AutoCADR10版本之前的书藉。
例 95:图案填充
程序如下:
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()//查找并以只读模式
->getSymbolTable(pBlockTable, AcDb::kForRead);//打开图块表
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);//查找并以写模式打开图块表记录(模型空间)
pBlockTable->close();//关闭图块表
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, Pt1);//创建实体
pBlockTableRecord->appendAcDbEntity(lineId1, pLine1);//添加实体返回ID
pBlockTableRecord->appendAcDbEntity(lineId2, pLine2);//添加实体返回ID
pBlockTableRecord->appendAcDbEntity(lineId3, pLine3);//添加实体返回ID
AcDbObjectIdArray dbObjIds;
AcDbObjectId Id;
dbObjIds.append(lineId1);
dbObjIds.append(lineId2);
dbObjIds.append(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->setPattern(AcDbHatch::kPreDefined,"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);//添加实体返回ID
pBlockTableRecord->close();//关闭图块表记录
pHatch->close();//关闭实体
}
如何画到角
倒角需自己设计[原创]
非常感谢 非常感谢!
页:
[1]