ObjectARX_填充

HATCH命令:填充数组

填充前:填充后:app

填充对象的步骤:函数

(1)建立一个空的填充对象。
(2)指定填充对象所在的平面。
(3)设置填充对象的关联性;
(4)指定填充图案;
(5)添加填充边界;
(6)显示填充对象;
(7)将其添加到模型空间;
(8)若是是关联性的填充,将填充对象与边界绑定。oop

  须要头文件#include " dbhatch.h "lua

void ZffCHAP2AddHatch()
{
// 提示用户选择填充边界
ads_name ss;
int rt = acedSSGet(NULL, NULL, NULL, NULL, ss);
AcDbObjectIdArray objIds;

// 初始化填充边界的ID数组
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); // 释放选择集
CCreateEnt::CreateHatch(objIds, "SOLID", true); 
}

AcDbObjectId CCreateEnt::CreateHatch(AcDbObjectIdArray objIds,const char* patName, 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, patName);

// 添加填充边界
es = pHatch->appendLoop(AcDbHatch::kExternal, objIds);

// 显示填充对象
es = pHatch->evaluateHatch();

// 添加到模型空间
AcDbObjectId hatchId;
hatchId = CCreateEnt::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;
}

 appendLoop函数定义为:3d

Acad::ErrorStatus appendLoop(Adesk::Int32 loopType,const AcDbObjectIdArray& dbObjIds);

第一个参数:边界类型;第二个参数:边界实体的id数组code

相关文章
相关标签/搜索