匹配道具文本
大家好。。。我有一个问题。。。是否有一个lisp函数可以匹配文本及其属性?
实例
如果有文字或多行文字在绿色图层上显示绿色,但我有文字在蓝色图层上显示蓝色,我运行lisp高亮显示蓝色文字,它匹配绿色属性,并将文字也更改为绿色
谢谢你的帮助
乔伊·G 所以基本上你是在复制。你不能使用复制到层? 我想点击一个文本字符串,然后点击另一个字符串,无论是dtext还是mtext,它复制这个字符串,替换文本字符串,并将其放在同一层上 在这里,只匹配文本内容和图层:
(defun C:test ;| credits to: Lee Mac |;( / se senx de denx )
(setvar 'errno 0)
(while (/= 52 (getvar 'errno))
(setq se (car (nentsel "\nSelect source text object < exit >: ")))
(cond
((= 7 (getvar 'errno))
(princ "\nMissed, try again.") (setvar 'errno 0)
)
((and se (not (member (cdr (assoc 0 (setq senx (entget se)))) '("ATTRIB" "TEXT" "MTEXT"))))
(princ "\nYou must pick a text object.")
)
((and senx (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (cdr (assoc 8 senx))))))))
(princ "\nThis text is on a locked layer.") (setq senx nil)
)
(se
(while (/= 52 (getvar 'errno))
(setq de (car (nentsel "\nSelect destination text object < exit >: ")))
(cond
((= 7 (getvar 'errno))
(princ "\nMissed, try again.") (setvar 'errno 0)
)
((and de (not (member (cdr (assoc 0 (setq denx (entget de)))) '("ATTRIB" "TEXT" "MTEXT"))))
(princ "\nYou must pick a text object.")
)
((and denx (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (cdr (assoc 8 denx))))))))
(princ "\nThis text is on a locked layer.") (setq denx nil)
)
(de (entmod (subst (assoc 8 senx) (assoc 8 denx) (subst (assoc 1 senx) (assoc 1 denx) denx))) (setvar 'errno 52))
(T nil)
)
)
)
(T nil)
)
)
(princ)
) 这真是太棒了。。。。还有李的道具。。谢谢你的帮助 生活会变得更轻松吗? 不。。。。这让一切变得更好 尝试先选择格式化的多行文字,然后选择单个文字(dtext)。 啊。。。我现在明白你在说什么了。。它复制文本,但与属性不匹配。。比如大小和文字样式。 Tharwat是正确的,我(目前)不能对文本格式做任何事情,但对其他属性没有问题:
(defun C:test ;| credits to: Lee Mac |; ( / prps se senx de denx )
(setq prps
(list
"BackgroundFill" "EntityTransparency" "Height" "Layer" "LineSpacingDistance"
"LineSpacingFactor" "LineSpacingStyle" "Linetype" "LinetypeScale" "Lineweight" "Material"
"PlotStyleName" "Rotation" "StyleName" "TextString" "Width" "ColorIndex" "TrueColor"
)
)
(setvar 'errno 0)
(while (/= 52 (getvar 'errno))
(setq se (car (nentsel "\nSelect source text object < exit >: ")))
(cond
((= 7 (getvar 'errno))
(princ "\nMissed, try again.") (setvar 'errno 0)
)
((and se (not (member (cdr (assoc 0 (setq senx (entget se)))) '("ATTRIB" "TEXT" "MTEXT"))))
(princ "\nYou must pick a text object.")
)
((and senx (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (cdr (assoc 8 senx))))))))
(princ "\nThis text is on a locked layer.") (setq senx nil)
)
(se
(while (/= 52 (getvar 'errno))
(setq de (car (nentsel "\nSelect destination text object < exit >: ")))
(cond
((= 7 (getvar 'errno))
(princ "\nMissed, try again.") (setvar 'errno 0)
)
((and de (not (member (cdr (assoc 0 (setq denx (entget de)))) '("ATTRIB" "TEXT" "MTEXT"))))
(princ "\nYou must pick a text object.")
)
((and denx (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (cdr (assoc 8 denx))))))))
(princ "\nThis text is on a locked layer.") (setq denx nil)
)
(de (MyMatchProps (vlax-ename->vla-object se) (vlax-ename->vla-object de) prps) (setvar 'errno 52))
(T nil)
)
)
)
(T nil)
)
)
(princ)
)
(defun MyMatchProps ( SourceObj DestObj PropNamesLst ) ; written by Grrr
(if
(and
(listp PropNamesLst) (apply 'and (mapcar '(lambda (x) (eq 'STR (type x))) PropNamesLst))
(apply 'and (mapcar '(lambda (x) (eq 'VLA-OBJECT (type x))) (list SourceObj DestObj)))
); and
(mapcar
(function
(lambda ( PropName / c )
(if
(and
(eval (read (strcat "(vlax-property-available-p SourceObj \'" PropName ")")))
(eval (read (strcat "(vlax-property-available-p DestObj \'" PropName ")")))
); and
(if (not (member PropName (list "ColorIndex" "TrueColor")))
(eval (read (strcat "(vl-catch-all-apply \'vlax-put (list DestObj \'" PropName " (vlax-get SourceObj \'" PropName ")))")))
(progn
(cond
((= (strcase PropName) (strcase "ColorIndex"))
(vla-put-ColorIndex (setq c (vlax-get DestObj 'TrueColor)) (vla-get-ColorIndex (vlax-get SourceObj 'TrueColor)))
)
((= (strcase PropName) (strcase "TrueColor"))
(vl-catch-all-apply 'vla-SetRGB ; some credits to MP on this part
(append
(list (setq c (vlax-get DestObj 'TrueColor)))
(mapcar
(function
(lambda (p)
(vlax-get (vlax-get SourceObj 'TrueColor) p)
)
)
(list 'Red 'Green 'Blue)
)
)
); apply
)
); cond
(vla-put-TrueColor DestObj c)
); progn
); if
); if
); lambda
)
PropNamesLst
); mapcar
); if
(princ)
);| defun MyMatchProps |; (or (vlax-get-acad-object) (vl-load-com)) (princ)
我以为你只想要内容和图层。
页:
[1]
2