1、填充边界类型
外边界External。
内边界Outermost。
网上基本认为外边界是Outermost,内边界是Default,其实通过分析很容易知道CAD的原理。
hatch.NumberOfLoops
2
hatch.GetLoopAt(0).LoopType
External
hatch.GetLoopAt(1).LoopType
Outermost
2、添加填充边界
添加边界AppendLoop,一次只能添加一条闭合边界,如果有多个怎么处理?通过循环依次添加。
// 添加外边界
for (int i = 0; i < ooic.Count; i++)
{
hatch.AppendLoop(HatchLoopTypes.External, new ObjectIdCollection() { ooic[i] });
}
// 添加内边界
for (int i = 0; i < ioic.Count; i++)
{
hatch.AppendLoop(HatchLoopTypes.Outermost, new ObjectIdCollection() { ioic[i] });
}
标签: AutoCAD, CAD二次开发, ObjectARX, 填充
06-ObjectArx-创建填充
1.添加实体
CwEntity.h
static AcDbObjectId CreateHatch(AcDbObjectIdArray objIds,const ACHAR *patternName,bool bAssociative);
CwEntity.cpp
AcDbObjectId CwEntity::CreateHatch(AcDbObjectIdArray objIds,const ACHAR *patternName,bool bAssociative) { Acad::ErrorStatus es; AcDbHatch *pHatch=new AcDbHatch(); //设置填充面 AcGeVector3d normal(0,0,1); pHatch->setNormal(normal); pHatch->setElevation(0); pHatch->setAssociative(bAssociative); pHatch->setPattern(AcDbHatch::kPreDefined,patternName); //添加填充边界 es=pHatch->appendLoop(AcDbHatch::kExternal,objIds); //显示填充对象 es=pHatch->evaluateHatch(); AcDbObjectId hatchId; hatchId = CwDatabase::PostToModelSpace(pHatch); //如果是关联性填充,将填充对象与边界绑定,以便使其能获得边界对象修改的通知 if(bAssociative) { AcDbEntity *pEnt; for (int i=0;i<objIds.length();i++) { es=acdbOpenAcDbEntity(pEnt,objIds[i],AcDb::kForWrite); if (es==Acad::eOk) { //添加一个永久反应器 pEnt->addPersistentReactor(hatchId); pEnt->close(); } } } return hatchId; }
2.实现
Commands.h
void CreateHatch();
Commands.cpp
void CreateHatch(){ //提示用户选择填充边界 ads_name ss; int rt=acedSSGet(NULL,NULL,NULL,NULL,ss); AcDbObjectIdArray objIds; //初始化填充边界数组 if (rt==RTNORM) { long length; acedSSLength(ss,&length); for (int i=0;i<length;i++) { ads_name ent; acedSSName(ss,i,ent); AcDbObjectId objId; acdbGetObjectId(objId,ent); objIds.append(objId); } } acedSSFree(ss); CwEntity::CreateHatch(objIds,_T("SOLID"),true); }
注册命令
CwEditor::AddCommand(_T("CreateHatch"),ACRX_CMD_MODAL,CreateHatch);
3.实现
画一个闭合的三角形,输入命令createhatch,选择三角形,填充