找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1456|回复: 6

[教学] API应用 AcDbBlockReference 准确包围盒

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-5 07:42:24 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2014-12-5 07:49 编辑

以前考虑过一直没有动手写,看到老大发了个 ARX 帖子 http://bbs.xdcad.net/thread-677895-1-1.html,就把这个这个代码也写出来试试
  1. (defun c:tt (/ e el pts mat)
  2.   (if (setq e (car (xdrx_entsel "\nPick Insert: " '((0 . "insert")))))
  3.     (progn
  4.       (setq el        (xdrx_getpropertyvalue
  5.                   (cadr (xdrx_getpropertyvalue e "blockTableRecord"));_取出块定义
  6.                   "allEntities"
  7.                 )
  8.             mat        (xdrx_getpropertyvalue e "blocktransform");_insert 的变换矩阵
  9.             pts        (apply 'append (mapcar 'xdrx_entity_box el));_块定义单个实体的 box 构造一个点集
  10.             pts        (apply 'xdrx_points_box pts);_对点集找一个 Box
  11.             pts (xdrx_points_transform pts mat);_对这个点集BOX变换到 Insert 位置
  12.       )
  13.       (apply 'xdrx_polyline_make (cons t pts))
  14.     )
  15.   )
  16.   (princ)
  17. )


Insert 可以拥有 X/Y 方向的不同比例,也可以有角度旋转,同时也可以位于不同的平面,但是 单纯的 AcDbEntity 都有其 getGeomExtents(),实体变换其getGeomExtents() 也进行了相同的变换,尽管部分实体不支持非等比变换,但点的变换不受限制

API 的实现过程也就是 ARX 的实现过程

说明:对于嵌套块,应该再有递归处理,将 BlockDef 内的引用同样方法处理

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-12-5 08:46:52 | 显示全部楼层
试了一个只有一个文字的块,提示错误
命令: tt

Pick Insert: ; 错误: 参数类型错误: listp <图元名: -168b60>

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-5 09:05:55 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-12-5 09:07 编辑
Lisphk 发表于 2014-12-5 08:46
试了一个只有一个文字的块,提示错误
命令: tt



可能是api的allentites对单个实体时返回的不是表,出现过类似问题
你用两个实体以上的块试试

点评

是的,两个实体就没事了 另外大师,对文字怎么能获得实际随着文字方向的包围盒呢,用API怎么写? [attachimg]11883[/attachimg]  详情 回复 发表于 2014-12-5 09:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-12-5 09:13:06 | 显示全部楼层
st788796 发表于 2014-12-5 09:05
可能是api的allentites对单个实体时返回的不是表,出现过类似问题
你用两个实体以上的块试试

是的,两个实体就没事了{:soso_e122:}

另外大师,对文字怎么能获得实际随着文字方向的包围盒呢,用API怎么写?

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-5 09:24:57 来自手机 | 显示全部楼层
Lisphk 发表于 2014-12-5 09:13
是的,两个实体就没事了

另外大师,对文字怎么能获得实际随着文字方向的包围盒呢,用API ...

这个用textbox求正放的再加个旋转即可,另外eachy写过求文字实际长度函数,里面加几句代码就可以返回box

点评

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-12-5 09:42:26 | 显示全部楼层
st788796 发表于 2014-12-5 09:24
这个用textbox求正放的再加个旋转即可,另外eachy写过求文字实际长度函数,里面加几句代码就可以返回box

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-5 10:16:49 来自手机 | 显示全部楼层
Lisphk 发表于 2014-12-5 09:42
大师,帮直接写个函数呗

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 18:05 , Processed in 0.200648 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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