找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1437|回复: 9

[每日一码] 尺寸对齐

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-6-27 11:52:34 | 显示全部楼层 |阅读模式

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

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

×
我是想一次框选,差不多在一条线的尺寸均对齐
对于尺寸,我只进行了一次预处理(vlax-put x 'TextMovement 0),应该还有别的,等各位高手完善一下
  1.   ;;2.1 首先假定一张图上标注字体是同样大小,小于字高2X认为在同一行(列)
  2.   ;;2.2 以选择或者生成的第一个对象作为基准对象
  3.   ;;2.3 (100 . "AcDbAlignedDimension")才能用以对齐
  4.   (defun DimensionDimDQ        (/ SS TXTHT)
  5.     ;;1 错误处理
  6.     (defun *error* (s)
  7.       (if (= 8 (logand (getvar "undoctl") 8))
  8.         (command "_.undo" "_e")
  9.       )
  10.       (setvar "nomutt" 0)
  11.     )
  12.     ;;2 旋转一个点pnt   
  13.     (defun rotate_pnt (pnt p1 ang)
  14.       (polar p1 (+ (angle p1 pnt) ang) (distance p1 pnt))
  15.     )
  16.     ;;3 对齐
  17.     (defun HH:dimAliDo (SS     /      ANGL0  ANGLN  DIS           EN0          ENTLIS I
  18.                         OB0    P10    P10A   P10N   P10T   P11          P11A         P11N
  19.                         P11P   P11PT  P14    P14N   SS1
  20.                        )
  21.       (setq en0           (ssname ss 0)
  22.             ob0           (vlax-ename->vla-object en0)
  23.             entlis (entget en0)
  24.             p10           (cdr (assoc 10 entlis))
  25.             P14           (cdr (assoc 14 entlis))
  26.             P11           (cdr (assoc 11 entlis))
  27.       )
  28.       (ssdel en0 ss)
  29.       (setq p10a (rotate_pnt p14 p10 (/ pi 2.0))) ;p14绕p10转90度
  30.       (setq p11a (mapcar '+ (mapcar '- p11 p10) p10a)) ;文字方向另一点
  31.       (setq angl0 (abs (angle p10 p14)))          ;角度
  32.       (if (> angl0 Pi)
  33.         (setq angl0 (rem angl0 Pi))
  34.       )
  35.       (if TxtHT
  36.         nil
  37.         (setq TxtHT
  38.                (* (vlax-get ob0 'ScaleFactor) (vlax-get ob0 'TextHeight))
  39.         )
  40.                                                   ;组码10误差在此内是同行(列)
  41.       )
  42.       (setq ss1 (ssadd))
  43.       (repeat (setq i (sslength ss))
  44.         (setq en0    (ssname ss (setq i (1- i)))
  45.               entlis (entget en0)
  46.               p10N   (cdr (assoc 10 entlis))
  47.               P14N   (cdr (assoc 14 entlis))
  48.               P11N   (cdr (assoc 11 entlis))
  49.         )
  50.         ;;但愿基准对象的p10 p14是不等的
  51.         (if (equal p10N P14N 0.001)
  52.           (setq        p10N p10
  53.                 P14N P14
  54.           )
  55.         )
  56.         (setq anglN (abs (angle p10N p14N)))
  57.         (if (> anglN pi)
  58.           (setq anglN (rem anglN pi))
  59.         )
  60.         (setq P10T (inters p10 p10a p10N p14N nil))
  61.         (setq dis (distance P10T p10N))
  62.         ;;如果标注角度相同,高度小于字高一倍
  63.         (if (and (equal anglN angl0 0.001) (< dis TxtHT))
  64.           (progn
  65.             (setq entlis (subst (cons 10 P10T) (assoc 10 entlis) entlis))
  66.             (setq p11P (mapcar '+ (mapcar '- p11N p10N) p14N))
  67.             (setq P11PT (inters p11P P11N p11 P11a nil))
  68.             (entmod (subst (cons 11 P11PT) (assoc 11 entlis) entlis))
  69.           )
  70.           (setq ss1 (ssadd en0 ss1))
  71.         )
  72.       )

  73.       (if (and ss1 (> (sslength ss1) 1))
  74.         (HH:dimAliDo ss1)
  75.       )
  76.     )
  77.     ;;4 主程序
  78.     (princ "\n 第一选择或者生成的尺寸为对齐基准,请框选尺寸:")
  79.     (setvar "nomutt" 1)
  80.     (setq ss (ssget '((0 . "DIMENSION") (100 . "AcDbAlignedDimension"))))
  81.     (setvar "nomutt" 0)
  82.     (command "_.undo" "be")
  83.     (if        (and ss (> (sslength ss) 1))
  84.       (progn
  85.         (vlax-for x
  86.                     (vla-get-ActiveSelectionSet
  87.                       (vla-get-ActiveDocument (vlax-get-acad-object))
  88.                     )
  89.           (vlax-put x 'TextMovement 0)
  90.         )
  91.         (HH:dimAliDo ss)
  92.       )
  93.     )
  94.     (command "_.undo" "e")
  95.     (gc)
  96.     (princ)
  97.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-27 12:01:29 | 显示全部楼层
能放个动画的图片让大家看看吗?

点评

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

使用道具 举报

发表于 2013-6-27 12:22:41 来自手机 | 显示全部楼层
用xdapi的xdrx_entity_movestretchpoint就简单了来自: Android客户端

点评

xdrx_entity_movestretchpoint 看起来这个函数是移动点,关键还是要计算移动哪些点,故仅有这个函数是不够的  详情 回复 发表于 2013-6-27 12:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-6-27 12:36:17 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2013-6-28 12:35 编辑
newer 发表于 2013-6-27 12:01
能放个动画的图片让大家看看吗?



效果如下
1.gif

尺寸工具MyDD.rar

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

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-6-27 12:38:49 | 显示全部楼层
Free-Lancer 发表于 2013-6-27 12:22
用xdapi的xdrx_entity_movestretchpoint就简单了

xdrx_entity_movestretchpoint
看起来这个函数是移动点,关键还是要计算移动哪些点,故仅有这个函数是不够的

点评

试试这个API应用 http://www.xdcad.net/forum/thread-669091-1-1.html  详情 回复 发表于 2013-6-27 17:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-27 12:59:27 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-6-27 12:38
xdrx_entity_movestretchpoint
看起来这个函数是移动点,关键还是要计算移动哪些点,故仅有这个函数是不 ...

返回的夹点对实体是固定的,对尺寸, 12 13 14 15 顺序的。eachy大师总结过,这两天的帖子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-27 13:00:45 | 显示全部楼层
Free-Lancer 发表于 2013-6-27 12:22
用xdapi的xdrx_entity_movestretchpoint就简单了

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-27 13:01:41 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-6-27 12:38
xdrx_entity_movestretchpoint
看起来这个函数是移动点,关键还是要计算移动哪些点,故仅有这个函数是不 ...

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-27 17:39:11 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-6-27 12:38
xdrx_entity_movestretchpoint
看起来这个函数是移动点,关键还是要计算移动哪些点,故仅有这个函数是不 ...

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 21:52 , Processed in 0.604063 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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