找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1318|回复: 5

[其他]:DIM 组码分析

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-2-18 11:10:49 | 显示全部楼层 |阅读模式

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

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

×
在Dimension的DXF组码中一些特性不能直接得到,下面的程序是为了获取字体高度,测试中觉得有意思,发上来给初学Lisp者在编程方面作为解决问题的一种思考方式。第一个是ActiveX方法,是为了检验能否获取Dim的子实体,在块内实体以及选择集遍历方面,VLa方法更简单易用,第二个是在ActiveX方法测试成功后用纯Lisp 方式来实现,在测试中也看到了Dimension内部各个子实体的规律,先是线然后是两侧的斜,接着写文字,最后是几个Point。

  1. [PHP]
  2. (defun c:test (/ e obj blk hi)
  3.   (if (setq e (car (entsel)))
  4.     (progn
  5.       (setq obj        (vlax-ename->vla-object e);;转换Entity 为 Object
  6.             blk        (vla-item (vla-get-blocks
  7.                             (vla-get-activedocument (vlax-get-acad-object))
  8.                           )
  9.                           (cdr (assoc 2 (entget e)))
  10.                 );;获取Dim的块定义本身,不是Reference
  11.       )
  12.       (vlax-for        i blk;;遍历块定义
  13.         ;;(setq elst (cons (vla-get-objectname i) elst));;第一次测试为检验Dim内实体组成
  14.         (if (= (vla-get-objectname i) "AcDbMText");;看到6个实体后增加获取高度
  15.           (setq hi (vla-get-height i))
  16.         )

  17.       )
  18.     )
  19.   )
  20.   hi
  21. )
  22. (defun c:test1 (/ e blk lst hi)
  23.   (if (setq e (car (entsel "\nSelect Dimension: ")))
  24.     (progn
  25.       (setq
  26.         bn  (cdr (assoc 2 (entget e)));;块名
  27.         blk (tblobjname "block" bn);;获取块定义本身
  28.       )
  29.       (while;;检索块内实体,出现文字停止
  30.         (/= (cdr
  31.               (assoc 0
  32.                      (setq lst (entget (setq blk (entnext blk))))
  33.               )
  34.             )
  35.             "MTEXT"
  36.         )
  37.       )
  38.     )
  39.   )
  40.   (cdr (assoc 40 (entget blk)))
  41. )
  42. [/PHP]


说明:测试仅检验了简单的垂直标注,不含公差等等其他形式,以上测试仅提供一种方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-2-18 14:01:33 | 显示全部楼层
实际字高受dimscale的控制吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-2-18 14:47:53 | 显示全部楼层
最初由 陌生人 发布
[B]实际字高受dimscale的控制吧? [/B]

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

使用道具 举报

发表于 2004-2-18 20:05:59 | 显示全部楼层
谢谢eachy斑竹,我又可以写些小程序了。以前我还以为LISP没办法了。再次谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-24 07:45:32 | 显示全部楼层
为什么会有dim那样的组码呢?
用entnext的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 22:56 , Processed in 0.394342 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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