- 积分
- 296
- 明经币
- 个
- 注册时间
- 2023-8-29
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|

楼主 |
发表于 2023-9-10 17:04:49
|
显示全部楼层
本帖最后由 520key 于 2023-9-10 17:06 编辑
加上这句后,源块没有问题了,但是New的块有问题了,1是源块,2是NEW后的块,附上文件和代码
- 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);
- AcDbDynBlockReference dynBlock(pBlkRef);
- if (dynBlock.isDynamicBlock())
- {
- AcDbDynBlockReferencePropertyArray DynBlkRefPropArray;//动态块参照属性数组
- dynBlock.getBlockProperties(DynBlkRefPropArray);
- AcDbDynBlockReferenceProperty DynBlockReferenceProp; //动态块参照属性
- for (int i = 0; i < DynBlkRefPropArray.length(); i++)
- {
- DynBlockReferenceProp = DynBlkRefPropArray.at(i);
- bool bShow = DynBlockReferenceProp.show(); //是否在面板中显示
- auto type = DynBlockReferenceProp.propertyType(); //属性类型
- CString strName = DynBlockReferenceProp.propertyName().kwszPtr(); //属性名
- if (strName.Find(_T("翻转")) >= 0)
- {
- Acad::ErrorStatus es = DynBlockReferenceProp.setValue(short(1));
- if (Acad::eOk != es)
- {
- acutPrintf(_T("\n设置【%s】属性值失败,错误代码:%s"), strName, acadErrorStatusText(es));
- }
- continue;
- }
- }
- pBlkRef->recordGraphicsModified();
- }
- if (AcDbObjectId::kNull == Database::PostToModelSpace(pBlkRef))
- {
- delete pBlkRef;
- //acedSSFree(ss);
- //acutRelRb(rb);
- //return;
- }
- }
- }
- acedSSFree(ss);
- }
- acutRelRb(rb);
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|