钢筋文字替换的问题!!
主要是两个问题,一是在原文字上面改的话,就没反应,要复制一个出来才能改二是复制出来的已经改了 想改原来的一个,但是却还是改到了复制的一个(defun c:17()
(func1 "1%%13212")
(func2)
)
(defun c:27()
(func1 "2%%13212")
(func2)
)
(defun c:37()
(func1 "3%%13212")
(func2)
)
(defun c:47()
(func1 "4%%13212")
(func2)
)
(defun func1(a / name pt1 list1 pt2 l pt_jd 1_old 1_new)
;;; =========文字的对齐改变 ==============================
(setvar "cmdecho" 0)
(setq name(entsel "\n选择文字:")
pt1 (cadr name)
list1 (entget (car name))
pt2 (textbox list1);pt2是返回的矩形框的左下点和右上点的表
l (caadr pt2)
pt_jd (cdr (assoc 10 list1));jd基点
)
(if (> (distance pt_jd pt1) (/ l 2));判断基点到选择点与文字长度二分之一的比值
(command "justifytext" (entlast) "" "r") ;需要在(entlast)后面加""才行
);endif
;;; =========文字的内容改变==============================
(setq list1 (entget (entlast));这句至关重要,因为前面的list1是左对齐的属性,现在要重新获取了
1_old (assoc 1 list1)
1_new (cons 1 a)
list1 (subst 1_new 1_old list1)
);endsetq
(entmod list1)
(setvar "cmdecho" 1)
(princ)
);endfunc1
(defun func2();还原左对齐方式
(command "justifytext" (entlast) "" "l")
) 这样试试:(defun c:17() (func1 "1%%13212") (func2))
(defun c:27() (func1 "2%%13212") (func2))
(defun c:37() (func1 "3%%13212") (func2))
(defun c:47() (func1 "4%%13212") (func2))
(defun func1(a / name pt1 list1 pt2 l pt_jd 1_old 1_new)
;;; =========文字的对齐改变 ==============================
(setvar "cmdecho" 0)
(setq name(entsel "\n选择文字:")
pt1 (cadr name)
list1 (entget (car name))
pt2 (textbox list1);pt2是返回的矩形框的左下点和右上点的表
l (caadr pt2)
pt_jd (cdr (assoc 10 list1));jd基点
)
(if (> (distance pt_jd pt1) (/ l 2)) (progn ;判断基点到选择点与文字长度二分之一的比值
(command "justifytext" (car name) "" "r")
(setq list1 (entget(entlast)));只有在改基点后才用
));endif
;;; =========文字的内容改变==============================
(entmod (subst (cons 1 a) (assoc 1 list1) list1))
(setvar "cmdecho" 1)
(princ)
);endfunc1
(defun func2();还原左对齐方式
(setvar "cmdecho" 0)
(command "justifytext" (entlast) "" "l")
(setvar "cmdecho" 1)
(princ)
) 本帖最后由 朱正伟206 于 2014-8-13 20:58 编辑
;;;;;;;;;;;替换文字内容修改对齐点;;;;;;;;;;;;;;;;;;;;
(defun tdq~1 (%k / &k1 &k2 @p1 #k1 %k1 @p2 L @p3 dis 1_old 1_new %k)
(setq &k1 (entsel "\n选择文字:"))
(if (/= &k1 nil)
(progn
(setq @p1 (cadr &k1);选择点
&k2 (car &k1);图元名
#k1 (entget &k2);图元属性列表
%k1 (cdr (assoc 0 #k1));图元属性
)
(if (/= (member %k1 (list "TEXT" "MTEXT")) nil);如果是文字或多行文字
(progn
(setq @p2 (textbox #k1);取得数值
L (caadr @p2);取得文字长度
@p3 (cdr (assoc 10 #k1));文字基点
dis (distance @p1 @p3);选择点与基点距离
1_old (assoc 1 #k1);旧文字内容
1_new (cons 1 %k);新文字内容
#k1 (subst 1_new 1_old #k1);替换
)
(entmod #k1);刷新文字
(if (> dis (/ L 2))
(command "justifytext" &k2 "" "r") ;如果符合条件那么右对齐
)
(if (<= dis (/ L 2))
(command "justifytext" &k2 "" "L") ;如果符合条件左对齐
)
)
)
(if (= (member %k1 (list "TEXT" "MTEXT")) nil);如果选择的不是文字就不动作
(setq &k1 nil)
)
)
)
&k1
)
;;;;;;;;;;;;;;;
(defun C:sx9 ( / %k name)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(if (null #1bszxmode) (setq #1bszxmode "E") );设置
(initget "E 1 2 3 4")
(setq %k (getkword (strcat "\n请选择方式:<" #1bszxmode ">")));选择一个方式命令多了,会忘记命令,综合一下
(if (= %k nil) (setq %k #1bszxmode));如果没有输入就默认
(if (= %k "e") (setq %k "E"));小写变大写
(setq #1bszxmode %k);修改设置
(if (/= %k "E");如果动作了就决定内容
(progn
(setq %k (strcat #1bszxmode "%%13212"))
(setq name t)
(while name (setq name (tdq~1 %k)) );循环选择到结束
)
)
(princ)
) 本帖最后由 朱正伟206 于 2014-8-14 05:17 编辑
主要(entlast)不对,使用了(princ (entget (entlast)));查看属性列表,结果发现,不是这个字。
		页: 
[1]