jianlin521 发表于 2012-6-10 23:27:44

选择尺寸或者文字更改图块的属性

求高手解决~~!   现在的效果是:选择的尺寸或者文字只能更改图块属性初始建立的那个属性参照尺寸填入块中时,只取整数。
理想效果是能设定想要更改的目标属性, 标注填入时,取两位小数~~


(defun c:nmn(/ p sn en p1 nam ty e1 e2 st p2 p3 p4 ss );
(command "undo" "g")
(setq os (getvar "osmode") blp (getvar "blipmode"))
(setvar "blipmode" 0)
(setvar "osmode" 0)
(graphscr)
(if (null text0)(setq text0 ""))
(canzhao)
(while (setq p (entsel "请选取需要更改属性的图块~!"))
(setq sn (car p) en (entget sn) p1 (to 10) nam (to 2) ty (to 0))
(if (or (= "规格" ty)(= "INSERT" ty)(= "DIMENSION" ty))
(if (or (= "规格" ty)(= "DIMENSION" ty))
(progn ;; 将文字改为参照的文字内容
(setq e1 (subst (cons 1 st) (assoc 1 en) en))
(entmod e1)
);progn
(progn ;; 将属性改为参照的文字内容
(setq e1 (entget (entnext (cdr (car en)))))
(setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
(entmod e1)(entmod en)
(if (or (eq nam "规格")(eq nam "规格1"))(progn
(setq e2 (entget (entnext (cdr (car e1)))))
(setq e2 (subst (cons 1 st) (assoc 1 e2) e2))
(entmod e2)(entmod en)
))
);progn
)
(progn
(princ "n**所选物体是")
(princ (cdr (assoc 0 en)))
(princ ", 不是文字或图块,请重新选择.**n")
)
)
)
(setvar "osmode" os)
(setvar "blipmode" blp)
(terpri)
(command "undo" "end"))

jianlin521 发表于 2012-6-10 23:36:32

前面没有上全,,不好意思~~~


(defun to (n)
(cdr (assoc n (entget sn)))
)
(defun canzhao (/ sn p13 p14) ;;提取参照文字或属性内容:
(setq sn (car (entsel (strcat "n点取需用参照的文字、属性或尺寸<" text0 ">:"))))
(if (= sn nil)
(setq st text0)
(if (or (= "TEXT" (to 0))(= "INSERT" (to 0))(= "DIMENSION" (to 0)))
(if (= "INSERT" (to 0))
(setq st (entget (entnext (cdr (car (entget sn)))))
st (cdr (assoc 1 st))
);;提取属性
(progn
(if (= "DIMENSION" (to 0))
(progn ;;提取尺寸
(setq p13 (to 13) p14 (to 14))
(if (eq (to 1) "")
(setq st (* (fix (/ (+ (distance p13 p14) 4) 10)) 10)
st (itoa st)
)
(setq st (to 1))
)
)
(setq st (to 1));;提取文字
)
)
);if
(setq st "")
);if
)
(setq text0 st)
)

(defun c:nmn(/ p sn en p1 nam ty e1 e2 st p2 p3 p4 ss );
(command "undo" "g")
(setq os (getvar "osmode") blp (getvar "blipmode"))
(setvar "blipmode" 0)
(setvar "osmode" 0)
(graphscr)
(if (null text0)(setq text0 ""))
(canzhao)
(while (setq p (entsel "请选取需要更改属性的图块~!"))
(setq sn (car p) en (entget sn) p1 (to 10) nam (to 2) ty (to 0))
(if (or (= "规格" ty)(= "INSERT" ty)(= "DIMENSION" ty))
(if (or (= "规格" ty)(= "DIMENSION" ty))
(progn ;; 将文字改为参照的文字内容
(setq e1 (subst (cons 1 st) (assoc 1 en) en))
(entmod e1)
);progn
(progn ;; 将属性改为参照的文字内容
(setq e1 (entget (entnext (cdr (car en)))))
(setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
(entmod e1)(entmod en)
(if (or (eq nam "规格")(eq nam "规格1"))(progn
(setq e2 (entget (entnext (cdr (car e1)))))
(setq e2 (subst (cons 1 st) (assoc 1 e2) e2))
(entmod e2)(entmod en)
))
);progn
)
(progn
(princ "n**所选物体是")
(princ (cdr (assoc 0 en)))
(princ ", 不是文字或图块,请重新选择.**n")
)
)
)
(setvar "osmode" os)
(setvar "blipmode" blp)
(terpri)
(command "undo" "end"))

cztylq520 发表于 2012-6-11 02:48:53

微笑露一点

gigison 发表于 2012-9-24 23:30:21

多发好贴,造福人民!!!

yansu 发表于 2012-11-13 14:12:41

如何修改实现不要只取整数

357785513 发表于 2012-11-13 21:52:47

建议发片说明
页: [1]
查看完整版本: 选择尺寸或者文字更改图块的属性