文字对齐基点与对齐点固定距离该如何实现呢
http://bbs.mjtd.com/thread-182535-1-1.html原贴地址,请大佬看下能否实现如下效果呢,想最终实现对齐点和基点在文字角度的方向上 相距是25 或者50等固定距离该如何实现呢[*];;******************************************************
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;; 文字对齐
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;;******************************************************
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;;源码来源明经社区,最终由whuluqw修改 2020.11.01
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(defun c:wzdq (/ ss ent amode obj i ii p px jd jdx jdy ang)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setvar "cmdecho" 0)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;;-------------------------
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(defun getdxf (ent ii)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (if (= (type ent) 'ename)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ent (entget ent))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (cdr (assoc ii ent))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;;-------------------------
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(defun ch_dxf (en num ch / old_num new_num ent)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (if
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ent (entget en)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif new_num (cons num ch)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif old_num (assoc num ent)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (entmod (subst new_num old_num ent))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (entmod (reverse (cons new_num (reverse ent))))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;;-------------------------
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(princ "\n选择要对齐的文字<退出>:")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(if (setq ss (ssget '((0 . "TEXT"))))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (progn
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq p (getpoint "指定对齐基点:"))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq px (car p)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif py (cadr p)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif );;基点x和y坐标
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (initget "L C R")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq amode (getkword "\n选择对齐方式[左(L)/中(C)/右(R)]<左>:"))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (if (not amode)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq amode "L")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (cond
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ((= amode "L")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ii 10)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (command "justifytext" ss "" "L")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ((= amode "C")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ii 11)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (command "justifytext" ss "" "C")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ((= amode "R")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ii 11)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (command "justifytext" ss "" "R")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq i 0)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (while (< i (sslength ss))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ent (ssname ss i))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq jd (getdxf ent ii))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq jdx (car jd)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif jdy (cadr jd)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (princ )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ;;;;;;;;;;;;;;;以下为添加代码 by whuluqw
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq ang (getdxf ent 50)) ;;获取文字转角
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq dx(- jdx px)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif dy(- jdy py)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ) ;;指定对齐点和文字基点距离
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq dx2 (+ (* dx (cos ang)) (* dy (sin ang)))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif dy2 (- (* dy (cos ang)) (* dx (sin ang)))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ) ;;求移动距离
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq newx (- jdx (* dx2 (cos ang)))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif newy (- jdy (* dx2 (sin ang)))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ;;;;;;;;;;;;;;以上为添加代码
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq newjd (list newx newy))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (apply '(lambda (x) (ch_dxf x ii newjd)) (list ent))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif ;(vl-cmdf "_move" (ssname ss i) "" "non" jd "non" (list px jdy))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq i (+ i 1))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(princ)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
;;******************************************************
;; 文字对齐
;;******************************************************
;;源码来源明经社区,最终由xvjiex修改 2021.07.02
(defun c:wzdq (/ ss ent amode obj i ii p px jd jdx jdy ang th1)
(setvar "cmdecho" 0)
;;-------------------------
(defun getdxf (ent ii)
(if (= (type ent) 'ename)
(setq ent (entget ent))
)
(cdr (assoc ii ent))
)
;;-------------------------
(defun ch_dxf (en num ch / old_num new_num ent)
(if
(setq ent (entget en)
new_num (cons num ch)
old_num (assoc num ent)
)
(entmod (subst new_num old_num ent))
(entmod (reverse (cons new_num (reverse ent))))
)
)
;;-------------------------
(or dis(setq dis 50))
(setq th1 (getreal (strcat"\n请输入对齐基点与对齐点固定距离<"(rtos dis 2 3)">:")))
(if th1 (setq dis th1))
(princ "\n选择要对齐的文字<退出>:")
(if (setq ss (ssget '((0 . "TEXT"))))
(progn
(setq p (getpoint "指定对齐基点:"))
(setq px (car p)
py (cadr p)
);;基点x和y坐标
(initget "L C R")
(setq amode (getkword "\n选择对齐方式[左(L)/中(C)/右(R)]<左>:"))
(if (not amode)
(setq amode "L")
)
(cond
((= amode "L")
(setq ii 10)
(command "justifytext" ss "" "L")
)
((= amode "C")
(setq ii 11)
(command "justifytext" ss "" "C")
)
((= amode "R")
(setq ii 11)
(command "justifytext" ss "" "R")
)
)
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq jd (getdxf ent ii))
(setq jdx (car jd)
jdy (cadr jd)
)
(princ )
;;;;;;;;;;;;;;;以下为添加代码 by whuluqw
(setq ang (getdxf ent 50)) ;;获取文字转角
(setq dx(- jdx px)
dy(- jdy py)
) ;;指定对齐点和文字基点距离
(setq dx2 (-(+ (* dx (cos ang)) (* dy (sin ang)))dis)
dy2 (- (* dy (cos ang)) (* dx (sin ang)))
) ;;求移动距离
(setq newx (- jdx (* dx2 (cos ang)))
newy (- jdy (* dx2 (sin ang)))
)
;;;;;;;;;;;;;;以上为添加代码
(setq newjd (list newx newy))
(apply '(lambda (x) (ch_dxf x ii newjd)) (list ent))
;(vl-cmdf "_move" (ssname ss i) "" "non" jd "non" (list px jdy))
(setq i (+ i 1))
)
)
)
(princ)
)
xvjiex 发表于 2021-7-2 02:31
大佬,如果想把左右中那个取消,不用选择,默认就是左对齐方式,可以吗 xvjiex 发表于 2021-7-2 02:31
大佬还想请教个问题,比如我的某些文字默认是中间对齐的,用程序后因为是左对齐的缘故,最终文字本身对齐点会变成左对齐,可否最后恢复到原有文字的对齐点呢 本帖最后由 xvjiex 于 2021-7-5 12:23 编辑
要做是可以的,但是用原来的程序会比较麻烦。原来的程序是先统一所选文字的对齐点(左、中、右对齐),然后计算目标对齐距离,再逐个移动到位。如果用原程序,必须先记住每行文字的原始对齐点,对齐后再逐个恢复原始对齐点,还不如另辟蹊径。
根据楼主要求更改如下:1.文字改为单选。2.偏移值通过单选时按S键开启设置。3.对齐点全部改为左对齐。4.能在编组内实现调整对齐。5.单选采用循环操作(常规优化)。
本帖最后由 magicheno 于 2021-7-3 00:40 编辑
xvjiex 发表于 2021-7-2 15:35
要做是可以的,但是用原来的程序会比较麻烦。原来的程序是先统一所选文字的对齐点(左、中、右对齐),然后计 ...
大佬,很给力哈,不过测试后发现一个BUG,就是输入对起点与基点的位置是文字边界至基点的距离哈,但是有些字母对齐点不在文字边上上的,还偏一点的,这样子效果上就出差错啦,比如YL文字当shx字体为romand字体的时候,就有问题了 已经优化,请重新下载测试。没有测试文件,不知道情况如何。 xvjiex 发表于 2021-7-3 01:56
已经优化,请重新下载测试。没有测试文件,不知道情况如何。
大佬,测试了下,貌似还是有问题哈,测试文件上传喽,方便的时候看下哦
图纸里看到4个编组,没发现出差错的对齐文字。此插件不能应对编组。 本帖最后由 magicheno 于 2021-7-3 12:13 编辑
xvjiex 发表于 2021-7-3 12:03
图纸里看到4个编组,没发现出差错的对齐文字。此插件不能应对编组。
大佬,编组关掉后,文字对齐点至基点的位置不对的哈,还有就是怎样可以实现编组打开状态了不影响呢,之前改的那个可以的哈
页:
[1]
2