明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1733|回复: 10

[已解答] 求做这种对齐效果

[复制链接]
发表于 2016-3-31 11:14 | 显示全部楼层 |阅读模式
5明经币
效果如图
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

直接将边界图形与文字全选,自动判断边界图形的左右边
发表于 2016-3-31 11:14 | 显示全部楼层
本帖最后由 kozmosovia 于 2016-3-31 20:44 编辑

直接将边界图形与文字全选,自动判断边界图形的左右边

  1. (Defun C:AdjText ( / _GetLeftRight ALI D40 EPT I LR NN SN SS SPT ST TXT)
  2.   (Defun _GetLeftRight (obj / LL UR)
  3.     (vla-getboundingbox (vlax-ename->vla-object obj) 'll 'ur)
  4.     (setq ll (trans (vlax-safearray->list ll) 0 1)
  5.           ur (trans (vlax-safearray->list ur) 0 1)
  6.     )
  7.     (list (car ll) (car ur))
  8.   )
  9.   (if (setq i        -1
  10.             d40        0.0
  11.             lr        (list 1e99 -1e99)
  12.             ss        (ssget '((0 . "text,arc,circle,*line")))
  13.       )
  14.     (progn
  15.       (repeat (sslength ss)
  16.         (setq sn (ssname ss (setq i (1+ i)))
  17.               st (cdr (assoc 0 (entget sn)))
  18.         )
  19.         (if (= st "TEXT")
  20.           (setq        d40 (max d40 (cdr (assoc 40 (entget sn))))
  21.                 txt (cons sn txt)
  22.           )
  23.           (setq        nn (_GetLeftRight sn)
  24.                 lr (list (min (car lr) (car nn))
  25.                          (max (cadr lr) (cadr nn))
  26.                    )
  27.           )
  28.         )
  29.       )
  30.       (initget "Left Middle Right")
  31.       (setq
  32.         ali (getkword "\n Enter Alignment [Left/Middle/Right] <M>:")
  33.       )
  34.       (if (null ali)
  35.         (setq ali "Middle")
  36.       )
  37.       (setq d40 (* 0.5 d40))
  38.       (foreach sn txt
  39.         (setq nn (_GetLeftRight sn))
  40.         (cond ((= ali "Left")
  41.                (setq spt (car nn)
  42.                      ept (+ d40 (car lr))
  43.                )
  44.               )
  45.               ((= ali "Middle")
  46.                (setq spt (* 0.5 (+ (car nn) (cadr nn)))
  47.                      ept (* 0.5 (+ (car lr) (cadr lr)))
  48.                )
  49.               )
  50.               ((= ali "Right")
  51.                (setq spt (cadr nn)
  52.                      ept (- (cadr lr) d40)
  53.                )
  54.               )
  55.         )
  56.         (command "_.Move" sn "" (list spt 0. 0.) (list ept 0. 0.))
  57.       )
  58.     )
  59.   )
  60. )
回复

使用道具 举报

发表于 2016-3-31 16:51 | 显示全部楼层
本帖最后由 被承包的东子 于 2016-3-31 16:55 编辑

提供其中一种的实现,其余的参照修改就OK了!
  1. (defun c:b1()


  2.   (setq line1 (car (entsel "选取左边的线")))
  3.   (setq line1_data (entget line1))
  4.    (setq x1 (cadr (assoc 10 line1_data)))
  5.   (setq line2 (car (entsel "选取右边的线")))
  6.   (setq line2_data (entget line2))
  7.    (setq x2 (cadr (assoc 10 line2_data)))
  8.   (setq ax (/ (+ x1 x2 ) 2))

  9.   (prompt "\n《框选文字》")
  10.   (setq ss (ssget))
  11.   (setq nq 0 k 0)
  12.    (setq mq (sslength ss) )
  13.   (repeat mq
  14.   (Setq en0 (ssname ss nq))

  15. (setq txt_data (entget en0))
  16. (setq old_zb_data (assoc 11 txt_data))
  17.   (setq old_zb_data1 (assoc 72 txt_data))
  18.      (setq new_zb_data1 (cons 72 1))
  19. (setq txt_data (subst new_zb_data1 old_zb_data1 txt_data ))
  20.   (entmod txt_data)
  21.   (setq ty1 (cadr (cdr (assoc 10 txt_data))))
  22.    
  23. (setq new_zb (list ax ty1))
  24. (setq new_zb_data (cons 11 new_zb))

  25. (setq txt_data (subst new_zb_data old_zb_data txt_data ))
  26. (entmod txt_data)
  27. (setq nq (+ 1 nq))
  28.     )

  29.    )
回复

使用道具 举报

 楼主| 发表于 2016-3-31 23:36 | 显示全部楼层
谢谢啊,以后居中就不要这么累了
回复

使用道具 举报

发表于 2016-4-1 08:21 | 显示全部楼层
kozmosovia 发表于 2016-3-31 11:14
直接将边界图形与文字全选,自动判断边界图形的左右边

好多函数 都不认识
回复

使用道具 举报

发表于 2016-4-1 09:01 | 显示全部楼层
kozmosovia 发表于 2016-3-31 11:14
直接将边界图形与文字全选,自动判断边界图形的左右边

貌似看懂了一些
回复

使用道具 举报

发表于 2016-4-2 11:53 | 显示全部楼层
感谢分享学习!!!!
回复

使用道具 举报

发表于 2016-4-2 22:58 | 显示全部楼层
学习了! 感谢分享程序!
回复

使用道具 举报

发表于 2016-4-24 19:42 | 显示全部楼层
谢谢分享好程序,,,
回复

使用道具 举报

发表于 2016-5-9 12:39 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 22:44 , Processed in 0.208662 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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