JoeyG_77 发表于 2022-7-5 16:59:05

匹配道具文本

大家好。。。我有一个问题。。。
是否有一个lisp函数可以匹配文本及其属性?
实例
如果有文字或多行文字在绿色图层上显示绿色,但我有文字在蓝色图层上显示蓝色,我运行lisp高亮显示蓝色文字,它匹配绿色属性,并将文字也更改为绿色
 
谢谢你的帮助
乔伊·G

ReMark 发表于 2022-7-5 17:07:14

所以基本上你是在复制。你不能使用复制到层?

JoeyG_77 发表于 2022-7-5 17:08:31

我想点击一个文本字符串,然后点击另一个字符串,无论是dtext还是mtext,它复制这个字符串,替换文本字符串,并将其放在同一层上

Grrr 发表于 2022-7-5 17:15:01

在这里,只匹配文本内容和图层:

(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)
)

JoeyG_77 发表于 2022-7-5 17:21:04

这真是太棒了。。。。还有李的道具。。谢谢你的帮助

ReMark 发表于 2022-7-5 17:25:25

生活会变得更轻松吗?

JoeyG_77 发表于 2022-7-5 17:27:46

不。。。。这让一切变得更好

Tharwat 发表于 2022-7-5 17:35:58

尝试先选择格式化的多行文字,然后选择单个文字(dtext)。

JoeyG_77 发表于 2022-7-5 17:40:26

啊。。。我现在明白你在说什么了。。它复制文本,但与属性不匹配。。比如大小和文字样式。

Grrr 发表于 2022-7-5 17:43:55

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
查看完整版本: 匹配道具文本