ObjectARX填充

作者: admin 分类: C++,CAD,ObjectARX 发布时间: 2022-01-04 23:19

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,选择三角形,填充

up-30a58b51437c6b59b5820e20436789347f2.png

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

标签云