找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1404|回复: 2

[教学] Trans 在对齐标注中的应用

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-9-26 00:52:41 | 显示全部楼层 |阅读模式

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

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

×
Trans 详细解释见高飞鸟版主帖子
根据这个还可以做成对齐最低、指定对齐哪个
  1. (defun c:tt (/ ss lst base el d13 d14 slst v m bs basedim bp1 bp2 _d10
  2.          fdim)
  3.   (defun getdimang (el / d10 d13 an)
  4.     (setq d10 (cdr (assoc 10 el))
  5.       d14 (cdr (assoc 14 el))
  6.       an  (angle d10 d14)
  7.     )
  8.     (list d10 (polar d10 (+ an _pi2) 1.))
  9.   );_获取标注线的方向上两点
  10.   (if (setq ss (ssget '((0 . "dimension"))))
  11.     (progn
  12.       (setq lst     (xdrx_pickset->ents ss)
  13.         base (car lst)
  14.         el     (entget base)
  15.         _d10 (cdr (assoc 10 el))
  16.         fdim (getdimang el)
  17.         v     (mapcar '- (cadr fdim) (car fdim));_标注方向向量
  18.         m     (trans (mapcar '- (cdr (assoc 14 el)) (car fdim)) 0 v);_标注点在标注的方向
  19.         slst (mapcar '(lambda (x / d10)
  20.                 (setq d10 (cdr (assoc 10 (entget x))))
  21.                 (list (car (trans (mapcar '- d10 _d10) 0 v)) x)
  22.               )
  23.              (cdr lst)
  24.          );_其它标注相对于第一个标注的位置
  25.         slst (mapcar
  26.            'cadr
  27.            (vl-sort slst '(lambda (x1 x2) (< (car x1) (car x2))))
  28.          );_按距离排序
  29.       )
  30.       (if (minusp (car m))
  31.     (setq bs (last slst))
  32.     (setq bs (car slst))
  33.       );_根据标注方向确定基准标注
  34.       (setq basedim (getdimang (entget bs))
  35.         bp1        (car basedim)
  36.         bp2        (cadr basedim)
  37.       );_获取基准标注线
  38.       (mapcar '(lambda (x / l d10 d14 p)
  39.          (if (not (equal x bs))
  40.            (progn
  41.              (setq l   (entget x)
  42.                d10 (cdr (assoc 10 l))
  43.                d14 (cdr (assoc 14 l))
  44.                p   (inters d10 d14 bp1 bp2 nil)
  45.              )
  46.              (entmod (subst (cons 10 p) (assoc 10 l) l))
  47.            )
  48.          )
  49.            )
  50.           lst
  51.       )
  52.     )
  53.   )
  54.   (princ)
  55. )


20140926004933.jpg
dimalign.gif

评分

参与人数 3D豆 +12 收起 理由
xshrimp + 5 很给力!经验;技术要点;资料分享奖!
/db_自贡黄明儒_ + 2 很给力!经验;技术要点;资料分享奖!
zhuizhu + 5 出题引导交流奖!

查看全部评分

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

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2014-9-26 01:57:00 | 显示全部楼层
由 图1 可以看出 trans 这个用法是

AcGeVector3d orthoProject(
    const AcGeVector3d& planeNormal
) const;

在三个平面投影向量的和

_$ p0
(1896.73 1688.36 0.0)
_$ p1
(2753.77 1688.36 0.0)
_$ p2
(2430.77 1357.06 0.0)
_$ (trans (mapcar '- p2 p0) 0 (mapcar '- p1 p0))
(-331.304 0.0 534.034)
_$ (xdrx_vector_orthoproject (mapcar '- p2 p0) '(1.0 0.0 0.0))
(0.0 -331.304 0.0)
_$ (xdrx_vector_orthoproject (mapcar '- p2 p0) '(0.0 1.0 0.0))
(534.034 0.0 0.0)
_$ (xdrx_vector_orthoproject (mapcar '- p2 p0) '(0.0 0.0 1.0))
(534.034 -331.304 0.0)

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2014-9-26 07:42:55 | 显示全部楼层

用 API  方式一
  1. (defun c:tt (/ ss lst first pts p1 p2 slst bs plane )
  2.   (if (setq ss (ssget '((0 . "dimension"))))
  3.     (progn
  4.       (setq lst          (xdrx_pickset->ents ss)
  5.             first (car lst)
  6.             pts          (xdrx_entity_getstretchpoint first)
  7.             p1          (nth 3 pts)
  8.             p2          (nth 4 pts)
  9.             slst  (mapcar '(lambda (x / v)
  10.                              (list
  11.                                (xdrx_point_dist2line
  12.                                  (nth 2 (xdrx_entity_getstretchpoint x))
  13.                                  p1
  14.                                  p2
  15.                                )
  16.                                x
  17.                              )
  18.                            )
  19.                           lst
  20.                   ) ;_其它标注相对于第一个标注的位置
  21.             slst  (mapcar
  22.                     'cadr
  23.                     (vl-sort slst '(lambda (x1 x2) (< (car x1) (car x2))))
  24.                   ) ;_按距离排序
  25.       )
  26.       (if (minusp (xdrx_point_dist2line (car pts) p1 p2))
  27.         (setq bs   (last slst)
  28.               slst (cdr (reverse slst))
  29.         )
  30.         (setq bs   (car slst)
  31.               slst (cdr slst)
  32.         )
  33.       ) ;_根据标注方向确定基准标注
  34.       (setq pts          (xdrx_entity_getstretchpoint bs)
  35.             plane (list (nth 3 pts) (mapcar '- (nth 3 pts) (cadr pts)))
  36.       )
  37.       (mapcar
  38.         '(lambda (x / p)
  39.            (setq p (xdrx_point_orthoproject
  40.                      (xdrx_getpropertyvalue x "dimlinepoint")
  41.                      plane
  42.                    )
  43.            )
  44.            (xdrx_setpropertyvalue x "dimlinepoint" p)
  45.          )
  46.         slst
  47.       )
  48.     )
  49.   )
  50.   (princ)
  51. )

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 18:25 , Processed in 0.301881 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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