magicheno 发表于 2021-7-2 02:31:56

文字对齐基点与对齐点固定距离该如何实现呢

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-7-2 02:31:57

;;******************************************************
;;                  文字对齐
;;******************************************************
;;源码来源明经社区,最终由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)
)

magicheno 发表于 2021-7-2 10:17:22

xvjiex 发表于 2021-7-2 02:31


大佬,如果想把左右中那个取消,不用选择,默认就是左对齐方式,可以吗

magicheno 发表于 2021-7-2 13:45:40

xvjiex 发表于 2021-7-2 02:31


大佬还想请教个问题,比如我的某些文字默认是中间对齐的,用程序后因为是左对齐的缘故,最终文字本身对齐点会变成左对齐,可否最后恢复到原有文字的对齐点呢

xvjiex 发表于 2021-7-2 15:35:16

本帖最后由 xvjiex 于 2021-7-5 12:23 编辑

要做是可以的,但是用原来的程序会比较麻烦。原来的程序是先统一所选文字的对齐点(左、中、右对齐),然后计算目标对齐距离,再逐个移动到位。如果用原程序,必须先记住每行文字的原始对齐点,对齐后再逐个恢复原始对齐点,还不如另辟蹊径。
根据楼主要求更改如下:1.文字改为单选。2.偏移值通过单选时按S键开启设置。3.对齐点全部改为左对齐。4.能在编组内实现调整对齐。5.单选采用循环操作(常规优化)。


magicheno 发表于 2021-7-2 20:47:45

本帖最后由 magicheno 于 2021-7-3 00:40 编辑

xvjiex 发表于 2021-7-2 15:35
要做是可以的,但是用原来的程序会比较麻烦。原来的程序是先统一所选文字的对齐点(左、中、右对齐),然后计 ...
大佬,很给力哈,不过测试后发现一个BUG,就是输入对起点与基点的位置是文字边界至基点的距离哈,但是有些字母对齐点不在文字边上上的,还偏一点的,这样子效果上就出差错啦,比如YL文字当shx字体为romand字体的时候,就有问题了

xvjiex 发表于 2021-7-3 01:56:41

已经优化,请重新下载测试。没有测试文件,不知道情况如何。

magicheno 发表于 2021-7-3 02:08:54

xvjiex 发表于 2021-7-3 01:56
已经优化,请重新下载测试。没有测试文件,不知道情况如何。

大佬,测试了下,貌似还是有问题哈,测试文件上传喽,方便的时候看下哦

xvjiex 发表于 2021-7-3 12:03:46

图纸里看到4个编组,没发现出差错的对齐文字。此插件不能应对编组。

magicheno 发表于 2021-7-3 12:11:18

本帖最后由 magicheno 于 2021-7-3 12:13 编辑

xvjiex 发表于 2021-7-3 12:03
图纸里看到4个编组,没发现出差错的对齐文字。此插件不能应对编组。
大佬,编组关掉后,文字对齐点至基点的位置不对的哈,还有就是怎样可以实现编组打开状态了不影响呢,之前改的那个可以的哈
页: [1] 2
查看完整版本: 文字对齐基点与对齐点固定距离该如何实现呢