多行文字与文字问题
我有以下代码:(defun c:COPYPART (/ ObjC ObjP1 ObjP2 ObjA TxtV Nw1Txt
Nw2txt)
(setq CREcho (getvar "CMDECHO"))
(setq CRSnap (getvar "OSMODE"))
(setq CRortho (getvar "ORTHOMODE"))
;;-------------Error handler---------------
(setq *error* ;;;resets sysvar incase of
(lambda (msg) ;;;an error, esc, exit, cancel
(setvar "cmdecho" CRcecho)
(setvar "OSMODE" CRSnap)
(setvar "ORTHOMODE" CROrtho)
(princ msg)
(princ)))
;;------------------------------------------------
(setvar "ORTHOMODE" 1)
(if (< CRSnap 16384)
(setvar "OSMODE" (+ CRSnap 16384)))
(setq ObjC (entsel "\nSelect object to copy down: "))
(setq ObjP1 (list (car (cadr Objc)) (cadr (cadr Objc))))
(setq ObjA (getangle "\nSpecify direction of copy: " Objp1))
(cond ( (= ObjA 0) (setq ObjP2 (list (+ (car ObjP1) 30)(cadr ObjP1))))
( (= Obja (/ pi 2)) (setq ObjP2 (list (car ObjP1) (+ (cadr ObjP1) 5.25))))
( (= Obja pi)(setq ObjP2 (list (- (car ObjP1) 30)(cadr ObjP1))))
( (= Obja (* 3 (/ pi 2)))(setq ObjP2 (list (car ObjP1) (- (cadr ObjP1) 5.25)))))
(vl-cmdf "_.copy" ObjC "" ObjP1 Objp2)
(setq TxtV (entget(entlast)))
(setq Nw1Txt (subst (cons 1 "###-###") (assoc 1 TxtV) TxtV))
(entmod Nw1Txt)
(entupd TxtV)
(setq NewTxt (strcase (getstring "\nEnter New text value: ")))
(setq Nw2Txt (subst (cons 1 NewTxt) (assoc 1 TxtV) TxtV))
(entmod Nw2Txt)
(setvar "CMDECHO" CREcho)
(setvar "OSMODE" CREnap)
(setvar "ORTHOMODE" CROrtho)
(princ)
)
这就是它所做的。有一些文本已经存在,我只需要将其复制到上/下/左或右的某个距离。复制时,它将文本值更改为“###-####”。然后我需要输入新数据。
如果我复制一个“TEXT”对象,效果很好。如果我选择一个“多行文字”对象,它将进行复制,但不会更改值或给我输入新值的选项。
我认为“TEXT”和“MTEXT”对于文本字符串都有相同的DXF代码,即1。有没有想过为什么这不适用于多行文字? 试试这个:
请记住,当多次修改实体时,必须将变量值更新到新修改的实体数据列表。
PS>2010年,复制命令重复,不确定其他版本-您可能需要在末尾添加“”。
PPS>我会使用vla副本来确定。 嗯,这确实有效。我要通读一遍,试着理解它是如何做到的。我肯定会有一些问题。谢谢,你帮了我很大的忙。 不客气,很乐意帮忙 不复印怎么样?
2 很好的解决方案,艾伦!
页:
[1]