本帖最后由 whuluqw 于 2020-11-1 02:01 编辑
最近在找文字对齐的程序,在明经看到这个帖还不错。但是原帖代码在文字有转角的时候仍然按照水平方向对齐,而不是沿着文字方向,于是修改一下考虑了文字角度。选择对象前还加了个if语句,如果没选择对象则自动退出。没有动图软件,放两张图片,需要的自行试用。原帖地址:http://bbs.mjtd.com/forum.php?mo ... 085&fromuid=7328399
- [code=lisp];;******************************************************
- ;; 文字对齐
- ;;******************************************************
- ;;源码来源明经社区,最终由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)
- )
[/code]
|