天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 49|回复: 0

objectARX中如何插入动态块

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
最近遇到一个任务:提示用户选择一个动态块参照,然后复制这个块参照后提示用户插入到令一个地方。最开始,我将动态块参照复制到内存,然后插入到CAD图形数据库,发现动态属性都丢失了;后来,将块参照的blockTableRecord的ID找到,利用这个ID将块参照插入图形中,动态属性依然丢失。

后经反复验证,发现:

方法AcDbBlockReference::blockTableRecord返回的ID并不是动态块参照块定义的ID,只是图形中显示实体的块定义的ID;

方法AcDbDynBlockReference::dynamicBlockTableRecord()返回的才是动态块定义的ID。

最终效果如下:

20210719172553941.gif

代码实现

以下代码仅仅是插入了一个自定义属性为初始状态的动态块参照,如果需要修改动态块参照的自定义属性,可以通过AcDbDynBlockReference 类中的AcDbDynBlockReference::getBlockProperties获取相关属性,然后再利用自定义属性的方法对属性进行设置。

————————————————

void CopyDynBlockRef()
{
//提示用户选择一个动态块
struct resbuf * rb = acutBuildList(RTDXF0, _T("INSERT"), RTNONE);
ads_name ss;
CString arPrompt[2] = { _T("\n请选择一个块参照对象"),_T("\n删除了一个块参照对象") };
if (RTNORM == acedSSGet(_T(":S:$-M"), &arPrompt, NULL, rb, ss))
{
//查看此块参照是否是动态块参照
ads_name ent;
acedSSName(ss, 0, ent);
AcDbObjectId idBlk;
acdbGetObjectId(idBlk, ent);
//查看是否为动态块参照
AcDbDynBlockReference cDynBlkRef(idBlk);
if (cDynBlkRef.isDynamicBlock())
{
//打开块参照对象
AcGeMatrix3d mat;
AcGePoint3d ptInset;
AcDbEntity* pEnt = NULL;
if (Acad::eOk != acdbOpenObject(pEnt, idBlk, AcDb::kForRead))
{
acedSSFree(ss);
acutRelRb(rb);
return;
}
AcDbBlockReference* pRef = AcDbBlockReference::cast(pEnt);
if (pRef)
{
mat = pRef->blockTransform();
ptInset = pRef->position();
}
pEnt->close();
//取出动态块定义的ID
AcDbObjectId idBlkDef = AcDbObjectId::kNull;
idBlkDef = cDynBlkRef.dynamicBlockTableRecord();
if (idBlkDef)
{
//插入新的动态块
AcDbBlockReference* pBlkRef = new AcDbBlockReference(AcGePoint3d(0, 0, 0), idBlkDef);
pBlkRef->transformBy(mat);
pBlkRef->setPosition(ptInset);
if (AcDbObjectId::kNull == AddToModelSpace(pBlkRef))
{
delete pBlkRef;
acedSSFree(ss);
acutRelRb(rb);
return;
}
//此处省略拖动代码
//.....
}
}
acedSSFree(ss);
}
acutRelRb(rb);
}

 

 

 

 

objectARX中如何插入动态块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 13:36 , Processed in 0.182117 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表