whuluqw 发表于 2020-11-1 01:55:48

文字对齐源码

本帖最后由 whuluqw 于 2020-11-1 02:01 编辑

最近在找文字对齐的程序,在明经看到这个帖还不错。但是原帖代码在文字有转角的时候仍然按照水平方向对齐,而不是沿着文字方向,于是修改一下考虑了文字角度。选择对象前还加了个if语句,如果没选择对象则自动退出。没有动图软件,放两张图片,需要的自行试用。原帖地址:http://bbs.mjtd.com/forum.php?mo ... 085&fromuid=7328399

;;******************************************************
;;                  文字对齐
;;******************************************************
;;源码来源明经社区,最终由whuluqw修改 2020.11.01
(defun c:wzdq (/ ss ent amode obj i ii p px jd jdx jdy ang)
(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))))
    )
)
;;-------------------------
(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)))
            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)
)


vitalgg 发表于 2021-2-8 08:00:25

那个梁图文字,PKPM下带的那个lsp 程序,可以实现左对齐而不改变文字位置。
但你这个梁图应该有详细点的需求。
比如: 集中标注左对齐, 原位标注,梁下中对齐,梁上,根据支座相对位置确定左或右对齐。

3395426498 发表于 2020-11-29 12:51:11

我有一份图纸,分解后,文字移位了,用CAD的 justifytext 命令选择左对齐,只能在文字当前位置固定
如何能够批量实现文字左对齐,如果有插件,可以付费,联系QQ3395426498

whuluqw 发表于 2021-2-17 22:58:03

guankuiwu 发表于 2021-2-8 22:50
不错,如果 整合均布文字间距就更好

调整间距应该有调整间距的程序,我觉得不是每次对齐都要调整间距吧

panliang9 发表于 2020-11-1 10:48:33

谢谢楼主分享

999999 发表于 2020-11-1 13:53:02

谢谢楼主分享

czb203 发表于 2020-11-2 17:15:41


谢谢楼主分享

sdbaijiao 发表于 2020-11-4 08:54:25

谢谢分享。。。。

f4800 发表于 2020-11-4 23:45:42

多谢分享!!!!

cowboy110 发表于 2020-11-5 16:00:11

感谢分享!!!

669423907 发表于 2020-11-6 09:05:22

谢谢楼主分享好程序

cxjcqu 发表于 2020-11-7 23:54:11

程序还是有点欠缺,如果选中的文字中有多种角度的文字,就不能对齐了,所以除了设置基点外,还应设置对齐的参照角度~谢谢

松树石头哥 发表于 2020-11-19 09:11:55

感谢楼主分享!!!
页: [1] 2 3
查看完整版本: 文字对齐源码