fantasywait 发表于 2014-8-22 11:16:32

求大神帮看一下这个对齐问题怎么修改

这是一个将多个单行文字变成等间距且左对齐的lisp源码。我想改掉左对齐的方式,默认的是左对齐,函数取得是插入点的X坐标,我想实现不改变选中的单行文字X坐标,只改变其Y坐标或者干脆居中对齐的方式。 求大神指点

;;;程序名 :dqw.LSP
;;;对齐单行文本,自定义行距程序

(defun c:dqw ();设定快捷键
(setq a (ssget (list (cons 0 "text"))))#;将选择的加入新串行
(setq n (sslength a));将选择的加入新串行
(setq all nil)??
(setq m 0);将M设为0
(while (< m n)
(setq all (append all (list (entget (ssname a m)))))
(setq m (1+ m))
)

(setq l 0);按y坐标降序排列
(setq m 1)
(while (< l n)
(setq b (nth l all)); (nth n 串行) 串行的第n个元素
(while (< m n)
(setq c (nth m all))
(if (> (nth 2 (assoc '10 c)) (nth 2 (assoc '10 b)));(assoc 关键元素 联合串行) :依关键元素找寻联合串行中关系资料
(progn
(setq all (subst 'aa (nth l all) all ) );(subst 新项 旧项 串行) 传回:替换新旧串行后的串行
(setq all (subst 'bb (nth m all) all ) )
(setq all (subst c 'aa all ) )
(setq all (subst b 'bb all ) )
(setq b c)
)
)
(setq m (1+ m))
)
(setq l (1+ l))
(setq m (1+ l))
)

(setq val (getdist "\n行距:"))
(setq p (getpoint "\n首行的插入点:"))
(setq x0 (car p))
(setq y0 (cadr p))

(setq m 0)
(while (< m n)
(setq b (nth m all))
(setq y (- y0 (* m val)))
(setq z (nth 3 (assoc '10 b)))
(setq xyz_new (list '10 x0 y z))
(setq b (subst (cons '72 0) (assoc '72 b) b))
(setq b (subst (cons '73 0) (assoc '73 b) b))
(setq b (subst xyz_new (assoc '10 b) b ) )
(entmod b)
(setq m (1+ m))
)
)
(princ "\n==左对齐单行文本,自定义行距程序成功加载!命令行以dqw启动!")



fantasywait 发表于 2014-8-22 12:35:14

没人吗 自己顶一下
页: [1]
查看完整版本: 求大神帮看一下这个对齐问题怎么修改