找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 161|回复: 0

[每日一码] ARX实例代码 -- 使用ARX转写VLISP同功能的VLA-函数

[复制链接]

0

主题

0

回帖

28

积分

管理员

积分
28
发表于 2024-3-14 20:28:15 | 显示全部楼层 |阅读模式
  1. 问题:
  2. 我想把VLISP的VLA-开头的一些函数用ARX转写,我想获得INSERT实体的比例、旋转角,能否给我一个例子代码?下面是我的LISP代码。
  3. 普通浏览复制代码
  4. (setq pntCenter (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint IAcadBlockRef)))
  5. dAngle (vla-get-Rotation IAcadBlockRef)
  6. dXScale (vla-get-XScaleFactor IAcadBlockRef)
  7. 解决方案:
  8. 下面的代码能够做你的要求,同时使用了“聪明”的指针,确保你打开对象操作后忘记关闭对象。
  9. 普通浏览复制代码
  10. // extract some data from a Block Reference using ObjectARX, by Fenton Webb, DevTech, 20/12/2010
  11. void GetBlockReferenceDetails()
  12. {
  13.   ads采用name ename; ads采用point pt;
  14.   // select the block off the screen in AutoCAD
  15.   int res = acedEntSel(L"\nSelect INSERT: ", ename, pt);
  16.   // if ok
  17.   if (res == RTNORM)
  18.   {
  19.     // then convert the old ename to an ObjectARX ObjectId22
  20.     AcDbObjectId objId;
  21.     acdbGetObjectId(objId, ename);
  22.     // now open the object for read
  23.     AcDbObjectPointer<AcDbBlockReference> blockRef(AcDb::kForRead);
  24.     // if it opened ok
  25.     if (blockRef.openStatus() == Acad::eOk)
  26.     {
  27.       // extract the data from the block reference
  28.       AcGePoint3d insPnt = blockRef->position();
  29.       double rotation = blockRef->rotation();
  30.       AcGeScale3d xScale = blockRef->scaleFactors();
  31.     }
  32.   }
  33. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 05:37 , Processed in 0.178850 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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