找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: 相信自己666

[已解决] 求把不规则文字或数字对齐并居中到线段的lisp程序!求赐教

[复制链接]

已领礼包: 272个

财富等级: 日进斗金

 楼主| 发表于 2020-3-21 14:00:49 | 显示全部楼层
pxr201419 发表于 2020-3-20 06:27
已更新,这个是通用式的。当然,还是应你的需求写在下面
(defun c:tt(/ olddyn ss i ent type_e line po ...

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

使用道具 举报

已领礼包: 586个

财富等级: 财运亨通

发表于 2020-3-21 15:57:11 | 显示全部楼层
pxr201419 发表于 2020-3-20 06:27
已更新,这个是通用式的。当然,还是应你的需求写在下面
(defun c:tt(/ olddyn ss i ent type_e line po ...

如果文字的对齐方式原先是对齐或调整,好像需要2次操作才能做到.

点评

多谢王老师指点,应该把下面这两句换一下位置,先改对齐方式再改转角 (vlax-put (vlax-ename->vla-object text) 'Rotation ang0) (vlax-put (vlax-ename->vla-object text) 'Alignment 4) 这两种对齐方  详情 回复 发表于 2020-3-21 16:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-3-21 16:30:55 | 显示全部楼层
王鹏_pBZlo 发表于 2020-3-21 15:57
如果文字的对齐方式原先是对齐或调整,好像需要2次操作才能做到.

多谢王老师指点,应该把下面这两句换一下位置,先改对齐方式再改转角
(vlax-put (vlax-ename->vla-object text) 'Rotation ang0)
(vlax-put (vlax-ename->vla-object text) 'Alignment 4)

这两种对齐方式真有个性,Rotation是0,还不让修改
                 

点评

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

使用道具 举报

已领礼包: 586个

财富等级: 财运亨通

发表于 2020-3-21 17:38:48 | 显示全部楼层
参考了PXR201419的程序, 不修改文字的对齐方式

(defun c:tt( / ss i stxt ent lin pend pmid qd ang osm txt entpar pt pt1)
        (defun field(fent / pmin pmax)
        (vla-getboundingbox (vlax-ename->vla-object fent) 'minpoint 'maxpoint)
        (setq pmax (vlax-safearray->list maxpoint) pmin (vlax-safearray->list minpoint))
        (list (list (car pmin) (cadr pmin)) (list (car pmax) (cadr pmax)))
        )
        (vl-load-com)
        (prompt "\n选择1根线和1-2个文字:")
        (while (and (setq ss (ssget (list (cons 0 "TEXT,*LINE,ARC"))))
                  (<= 2 (sslength ss) 3)
                   )
            (setq i -1 stxt (ssadd))
            (while (setq ent (ssname ss (setq i (1+ i))))
              (if (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC")
                (setq lin ent pend (vlax-curve-getendpoint lin)
                                pmid (vlax-curve-getpointatdist lin (/ (vlax-curve-getdistatpoint lin pend) 2))
                   qd (vlax-curve-getfirstderiv lin (vlax-curve-getParamAtPoint lin pmid))        )
                (ssadd ent stxt)
              )
           )
           (if (and lin pmid qd stxt)
              (progn        (setq ang (cond         ((< (car qd) 0) (angle qd (list 0 0)))
                                ((> (car qd) 0) (angle (list 0 0) qd))
                                (t (/ pi 2))))
                (setq osm (getvar "osmode"))
                (setvar "osmode" 0)
                (command "rotate" stxt "" "none" (trans pmid 0 1) (* -180 (/ ang pi)))
                (setq i -1)
                (while (setq txt (ssname stxt (setq i (1+ i))))
                        (setq entpar (entget txt))
                        (setq pt (field txt))
                        (setq pt (/ (+ (cadr (car pt)) (cadr (cadr pt))) 2))
                        (entmod (subst (cons 50 0) (assoc 50 entpar) entpar))
                        (setq pt1 (field txt))
                        (if (> pt (cadr pmid))
                                (command "move" txt ""
                                        (list (/ (+ (car (car pt1)) (car (cadr pt1))) 2) (cadr (car pt1)))
                                        (list (car pmid) (+ (cadr pmid) (/ (cdr (assoc 40 entpar)) 2)))
                                )
                                (command "move" txt ""
                                        (list (/ (+ (car (car pt1)) (car (cadr pt1))) 2) (cadr (cadr pt1)))
                                        (list (car pmid) (- (cadr pmid) (/ (cdr (assoc 40 entpar)) 2)))
                                )
                        )
                )
                (command "rotate" stxt "" (trans pmid 0 1) (* 180 (/ ang pi)))
                (setvar "osmode" osm)
              )
           )
           (prompt "\n选择1根线和1-2个文字:")
        )
        (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 586个

财富等级: 财运亨通

发表于 2020-3-21 17:41:50 | 显示全部楼层
pxr201419 发表于 2020-3-21 16:30
多谢王老师指点,应该把下面这两句换一下位置,先改对齐方式再改转角
(vlax-put (vlax-ename->v ...

如果直线垂直可能会文字方向向右,即文字角度-90度

点评

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

使用道具 举报

已领礼包: 272个

财富等级: 日进斗金

 楼主| 发表于 2020-3-28 15:23:32 | 显示全部楼层
王鹏_pBZlo 发表于 2020-3-21 17:41
如果直线垂直可能会文字方向向右,即文字角度-90度

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:44 , Processed in 0.165892 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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