找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1917|回复: 1

[研讨] 关于 addTransient 对 Dim 类实体的Bug

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-8-13 17:14:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
这是一个用 Transient 绘制 graphics 例子
http://adndevblog.typepad.com/autocad/2012/04/using-transient-graphics.html

实际测试中发现 Dim 部分实体仅能显示 文字,标注线、箭头等无法显示,是不是这个类只能显示简单实体?Dim的源是匿名块,外加了一个反应器
测试环境 Windows 7 32bit + Autocad 2014

  1. AcArray<AcDbEntity *> _markers;
  2. AcArray<int> _viewportNumbers;


  3.         static void ClearTransientGraphics()
  4.         {
  5.                 AcGiTransientManager* pTransientManager = acgiGetTransientManager();
  6.                 UINT64 num = _markers.logicalLength();
  7.                 if (num > 0)
  8.                 {
  9.                         for (int i= 0;i<num;i++)
  10.                         {
  11.                                 AcDbEntity *pEnt = _markers[i];
  12.                                 pTransientManager->eraseTransient
  13.                                         (
  14.                                         pEnt,
  15.                                         _viewportNumbers
  16.                                         );
  17.                                 delete pEnt;
  18.                         }
  19.                         _markers.removeAll();
  20.                         //_markers.erase(viewid);
  21.                 }                

  22.         static void asdkMyGroupMyCommand () {
  23.                 // Put your command code here
  24.                 AcDbDatabase *pDb=acdbHostApplicationServices()->workingDatabase();
  25.                 ClearTransientGraphics();
  26.                 ads_point sp,ep;
  27.                 if (acedGetPoint(NULL,_T("\nFirst Point:"),sp)!=RTNORM)
  28.                 {
  29.                         return;
  30.                 }

  31.                 if (acedGetPoint(sp,_T("\nSecond Point: "),ep)!=RTNORM)
  32.                 {
  33.                         return;
  34.                 }
  35.                 AcDbTransactionManager* pTM = pDb->transactionManager();
  36.                 AcTransaction *pTransaction = pTM->startTransaction();
  37.                 AcGiTransientManager* pTransientManager = acgiGetTransientManager();
  38.                 struct resbuf res;
  39.                 acedGetVar(L"CVPORT", &res);
  40.                 _viewportNumbers.append(res.resval.rint);
  41.                 AcGePoint3d gSp,gEp;
  42.                 gSp=asPnt3d(sp);
  43.                 gEp=asPnt3d(ep);
  44.                 ads_real angle=acutAngle(sp,ep);
  45.                 AcDbRotatedDimension *pDim=new AcDbRotatedDimension();
  46.                 //AcDbObjectPointer<AcDbRotatedDimension> pDim;
  47.                 //pDim.create();
  48.                 pDim->setXLine1Point(gSp);
  49.                 pDim->setXLine2Point(gEp);
  50.                 pDim->setRotation(angle);
  51.                 pDim->setDimLinePoint(gSp);
  52.                 pDim->setDimtxt(10.0);
  53.                 _markers.append(pDim);
  54.                 AcDbLine *pLine=new AcDbLine();
  55.                 pLine->setStartPoint(gSp);
  56.                 pLine->setEndPoint(gEp);
  57.                 pLine->setColorIndex(1);
  58.                 _markers.append(pLine);               
  59.                 AcGiTransientManager *pGM= acgiGetTransientManager();
  60.                 pGM->addTransient(pDim,        kAcGiMain,128,_viewportNumbers);
  61.                 pGM->addTransient(pLine,        kAcGiMain,128,_viewportNumbers);
  62.                 pTM->endTransaction();                 
  63.         }

  1.         virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
  2.                 // TODO: Add your code here

  3.                 // You *must* call On_kUnloadAppMsg here
  4.                 AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
  5.                 ClearTransientGraphics();
  6.                 // TODO: Unload dependencies here

  7.                 return (retCode) ;
  8.         }
复制代码
附件为 Debug

asdkArxProject6.rar

14.29 KB, 下载次数: 3, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2015-8-13 17:20:47 | 显示全部楼层
还有一个问题,图中没有Dim时运行文字都不会显示,当有Dim实体时就会显示文字
tdim.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-24 22:10 , Processed in 0.259835 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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