明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1241|回复: 2

200元求一段修改插入基点的ARX代码

[复制链接]
发表于 2015-7-9 23:34 | 显示全部楼层 |阅读模式
要求修改一个包含属性定义的图块的基点,只需贴出关键代码即可。
发表于 2016-1-29 11:25 | 显示全部楼层
这么久了还需要吗,我可以帮你写,QQ974636923
发表于 2016-2-18 09:41 | 显示全部楼层
  1. static void fjbylongArxProject1test(void)
  2.         {
  3.                 // Add your code for command fjbylongArxProject1.test here
  4.                 //更改属性块插入点示例
  5.                 //运行命令test→选中属性块→将块的基点改为p1(0.0 0.0 0.0),
  6.                 //所有属性的基点(如果不是所有属性仅需加一条tag判断)改为p2(1.0 1.0 1.0)---根据需要自行调整
  7.                 ads_name ename;ads_point pt;
  8.                 //强制要求选择一个对象,按ESC退出
  9.                 int sta=ads_entsel(_T("\n请选择属性块:"),ename,pt);
  10.                 while (sta!=RTNORM)
  11.                 {
  12.                         if (sta==RTCAN)
  13.                                 return;       
  14.                         sta=ads_entsel(_T("\n请选择属性块:"),ename,pt);
  15.                 }
  16.                 AcDbObjectId id1,id2;
  17.                 acdbGetObjectId(id1,ename);
  18.                 AcDbEntity *pEnt;
  19.                 acdbOpenAcDbEntity(pEnt,id1,AcDb::kForWrite,false);
  20.                 AcDbBlockReference *pBlkRef=AcDbBlockReference::cast(pEnt);
  21.                 if (pBlkRef==NULL)
  22.                 {
  23.                         acedPrompt(L"\n所选图形不是块参照");
  24.                         return;
  25.                 }
  26.                 id2=pBlkRef->blockTableRecord();
  27.                 AcDbBlockTableRecord *pBlkTblRcd;
  28.                 acdbOpenObject(pBlkTblRcd,id2,AcDb::kForWrite);
  29.                 AcGePoint3d p1(0.0,0.0,0.0),p2(30.0,30.0,0.0);
  30.                 pBlkTblRcd->setOrigin(p1);
  31.                 ACHAR *pName;
  32.                 pBlkTblRcd->getName(pName);
  33.                 if (pBlkTblRcd->hasAttributeDefinitions())
  34.                 {
  35.                         AcDbBlockTableRecordIterator *pItr;
  36.                         pBlkTblRcd->newIterator(pItr);
  37.                         AcDbEntity *pEnt2;
  38.                         for (pItr->start(); !pItr->done(); pItr->step())
  39.                         {
  40.                                 pItr->getEntity(pEnt2, AcDb::kForWrite);
  41.                                 // 检查是否是属性定义
  42.                                 AcDbAttributeDefinition *pAttDef;
  43.                                 pAttDef = AcDbAttributeDefinition::cast(pEnt2);//pAttDef不用关闭
  44.                                 if (pAttDef != NULL)
  45.                                 {
  46.                                         pAttDef->setPosition(p2);                                       
  47.                                         pAttDef->close();
  48.                                 }
  49.                                 pEnt2->close();//pEnt2定义在for外面,关闭在for内
  50.                         }                       
  51.                         delete pItr;
  52.                 }
  53.                
  54.                 pEnt->close();
  55.                 pBlkRef->close();
  56.                 pBlkTblRcd->close();               
  57.                 acedCommand(RTSTR,_T("ATTSYNC"),RTSTR,_T("N"),RTSTR,pName,0);//同步属性块
  58.                 acedSSFree(ename);
  59.         }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 23:55 , Processed in 0.291420 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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