明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8015|回复: 25

调整文字到引线上方并自动对齐

  [复制链接]
发表于 2012-8-21 10:44 | 显示全部楼层 |阅读模式
本帖最后由 ★飞飛★ 于 2012-8-21 10:48 编辑

  1. ;;--------------------------------------------------------------------
  2. ;; 程序功能:调整文字到引线上方并自动对齐
  3. ;; 程序命令:ty
  4. ;; 程序编写:★飞飛★  2012.8.12
  5. ;; 注意事项:此程序使用前,请将左向引线标注的文字左对正,右向右对正。
  6. ;;--------------------------------------------------------------------
  7. (defun c:ty (/ selobjs ENT1 PT1 ss11 zss2 ENT2
  8.              PT2 ss12 PT3 zg PT20 PT21 ss2 )
  9.   (setq *error* nil)
  10.   (setvar "cmdecho" 0)
  11.   (princ "\n调整文字到引线位置,请选择文字和引线:")
  12. (while (and
  13.   (setq selobjs (ssget '((0 . "LEADER,*TEXT"))))
  14.   (setq k 0)
  15.   (setq  selobjs1 (ssadd)
  16.   selobjs2 (ssadd)
  17.   )
  18.   (repeat (sslength selobjs)
  19.     (setq en0  (ssname selobjs k)
  20.     ent0 (entget en0)
  21.     typ  (cdr (assoc 0 ent0))
  22.     )
  23.     (if  (= typ "LEADER")
  24.       (setq selobjs1 (ssadd en0 selobjs1))
  25.       (setq selobjs2 (ssadd en0 selobjs2))
  26.     )
  27.     (setq k (1+ k))
  28.   ) ;repeat
  29. ) ;and
  30.   (setvar 'osmode 0)
  31.     (setq ENT1 (entget (ssname selobjs1 0) )
  32.     PT1 (assoc 10 (reverse ENT1) )
  33.     PT11 (cdr PT1)
  34.           ss11 (cadr PT11)
  35.     )

  36.     (setq zss2 (ssname selobjs2 0 )
  37.           ENT2 (entget (ssname selobjs2 0) )
  38.           PT2  (assoc 10 ENT2 )
  39.           ss12 (cadr (cdr PT2 ))
  40.     PT3 (assoc 40 ENT2 )
  41.           zg (cdr PT3 )
  42.     )

  43.    (setq PT20 (cdr (assoc 11 ENT2 )) )
  44.    (if (and (= 0 (car PT20)) (= 0 (cadr PT20)) )
  45.        (setq PT21 (cdr PT2 ) )
  46.        (setq PT21 PT20 )
  47.    )

  48.    (setq ss2 (polar PT11 (/ pi 2) (* zg 0.2) ))
  49.    (if (and (= (car PT21) (car ss2)) (= (cadr PT21) (cadr ss2)) )
  50.        (princ "所选对象已调整完成。")
  51.        (command "move" zss2 "" PT21 ss2 )
  52.    )
  53.   (setvar 'osmode 6907)
  54. ) ;while
  55.   (setvar "cmdecho" 1)
  56.   (princ)
  57. )
注:此程序能自动调整文字到引线上方并对齐,不足之处为只能两两选择(即一个文本对应一个引线同时选择),不能实现框选多重的文字和引线的最近捕捉搭配,这是个复杂的问题,自己很努力的去编写过但没能完成,望明经的高手们赐教!
提供思路:框选多重的文字和引线对象后,第一层循环为分别找出所有引线端点坐标,第二层循环为分别计算所有文本端点坐标,并用第1个文本的端点去一一匹配引线端点坐标,如文本端点Y坐标距某引线端点Y坐标为最小,则此文本与此引线配对;接着用第2个文本的端点去一一匹配引线端点坐标,如文本端点Y坐标距某引线端点Y坐标为最小,则此文本与此引线配对……如此循环下去,直到所有的文本与最近的引线配对完成后退出。

发表于 2012-8-26 12:52 | 显示全部楼层
xyp1964 发表于 2012-8-26 08:47

这个看着很牛
回复 支持 1 反对 0

使用道具 举报

发表于 2012-8-26 08:47 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2012-8-22 12:50 | 显示全部楼层
(defun c:dqw ()
  (prompt "\n选择文字或属性块:")
  (setq ent (entsel "\n 选择:"))
  (setq ent1 (cdr (assoc 10 (entget (car ent)))))
  (prompt "\n选择引线:")
  (setq ent2 (vla-get-Coordinates (vlax-ename->vla-object (car (entsel)))))
  (setq ent2 (vlax-safearray->list (vlax-variant-value ent2)))
  (setq ent3 (repeat (- (length ent2) 3) (setq ent2 (cdr ent2))))
  (command ".copy" ent "" ent1 ent3)
)

我也是写了一个,不过也是只能两个对齐。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2012-8-21 10:56 | 显示全部楼层
本帖最后由 ★飞飛★ 于 2012-8-21 11:14 编辑

文字调整前:                                          文字调整后:

本帖子中包含更多资源

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

x
发表于 2012-8-22 07:36 | 显示全部楼层
楼主,得考虑一下几行文字与一条线对齐时,如何使用。
 楼主| 发表于 2012-8-22 18:17 | 显示全部楼层
fanqinwei 发表于 2012-8-22 07:36
楼主,得考虑一下几行文字与一条线对齐时,如何使用。

通常引线标注的时候都是一行文字上引线上方或一行文字在上方一行文字在下方这两种情况的,如遇几行文字的情况就最好用另外一程序了。
发表于 2012-8-26 01:27 | 显示全部楼层
呵呵,顶一个,谢谢了
 楼主| 发表于 2012-8-27 13:57 | 显示全部楼层
xyp1964 发表于 2012-8-26 08:47

这个有点眼晕,可否上传一下原码,大家共同研究研究学习学习啊。
发表于 2012-8-27 14:05 | 显示全部楼层
★飞飛★ 发表于 2012-8-27 13:57
这个有点眼晕,可否上传一下原码,大家共同研究研究学习学习啊。

;; 伪源码需要e派工具箱(XCAD)的支持,程序仅针对特殊的图层文字进行处理。





本帖子中包含更多资源

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

x

点评

请教院长,如何设置文字与下方直线间距离,原程序文字离得太近了,谢谢  发表于 2013-1-31 12:19
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 11:40 , Processed in 1.596171 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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