ibach 发表于 2022-7-6 07:08:01

用其他线型替换线型

我有一个巨大的DWG文件,在创建过程中发生了一些奇怪的事情。
线型,如
 
“$0$$0$ACAD\U ISO3W100”
“$0$$0$ACAD_ISO7W100”
“$0$$0$隐藏”
“$0$ACAD_ISO3W100”
“$0$ACAD_ISO7W100”
“$0$ACAD_ISO10W100”
“$0$CENTER”
“$0$DOT”
“$0$隐藏”
“$0$ZIGZAG”
 
出现在区块中。
 
我需要将它们更改为普通命名的,前面没有0$blabla。
 
我真的不知道如何编写一个lisp,它将通过块并在任何对象属性中将例如“$0$ACAD\u ISO10W100”更改为“ACAD\u ISO10W100”。
救命啊!

ibach 发表于 2022-7-6 07:11:53

顺便说一句,这还不是全部。同样的事情也发生在标注样式和文字样式上,所以我需要一个lisps来在绘图和嵌套块中从一种样式更改为另一种样式,并且不会丢失动态块功能。。。
 
这也发生在层上,但我能够将层合并到正常命名的层。

Lee Mac 发表于 2022-7-6 07:18:20

看起来像是绑定BINDTYPE设置为0的外部参照的结果

ibach 发表于 2022-7-6 07:22:52

可能很多人都在做很多不开心的事情。。。现在我是把它带到oreder的人,但打开任何布局都需要3分钟,大约有100个布局。更不用说街区了。。。

ibach 发表于 2022-7-6 07:24:41

顺便说一句,我发现lisp是这样的:
 

(defun c:clr2by (/ doc blks lays lokt new-ltype old-ltype)
;;convert all objects in a drawing to color=bylayer
;;by Jeff Mishler - updated 7/25/05 to handle dimension colors
;;updated 1/05/06 to affect Attributes and to change a specific linetype to another
;;Modified, Bob Shaw (ECCAD)..Added Lists of Linetypes to swap.

(vl-load-com)

;; List of Linetypes to swap..
(setq Old_lt_lst (list
"$$$bla_bla"
))
(setq New_lt_lst (list
"ZIGZAG"
))
;;

(setq doc (vla-get-activedocument (vlax-get-acad-object))
blks (vla-get-blocks doc)
lays (vla-get-layers doc)
;;;;old-ltype "OLD" ;;;;; change this to match your old ltype
;;;;new-ltype "NEW" ;;;;; change this to match your new ltype
)
(vlax-for lay lays
(if (eq (vla-get-lock lay) :vlax-true)
(progn
(setq lokt (cons lay lokt))
(vla-put-lock lay :vlax-false)
)
)
)
(vlax-for blk blks
(vlax-for ent blk
(mapcar '(lambda (x)
(if (vlax-property-available-p ent x)
(vlax-put ent x 256)
)
)
(list "Color" "DimensionLineColor" "ExtensionLineColor" "TextColor")
)
(if (and (vlax-property-available-p ent 'hasattributes)
(eq (vla-get-hasattributes ent) :vlax-true)
)
(foreach att (vlax-invoke ent 'getattributes)
(vla-put-color att 256)
)
)
;;
(setq n 0)
(repeat (length Old_lt_lst)
(setq Olt (nth n Old_lt_lst))
(setq Nlt (nth n New_lt_lst))
   (if (and (eq (vla-get-linetype ent) Olt)
            (tblsearch "LTYPE" Nlt))
      (vla-put-linetype ent Nlt)
   )
(setq n (+ n 1))
); repeat
;;
)
)
(if lokt
(mapcar '(lambda (x)
(vla-put-lock x :vlax-true)
)
lokt
)
)
(princ)
)

(c:clr2by); and run it.

ibach 发表于 2022-7-6 07:28:53

但它也;将图形中的所有对象转换为颜色=bylayer,我不想这样做。

Lee Mac 发表于 2022-7-6 07:32:42

尝试以下快速编写的代码:
 
(defun c:fixlt ( / n )
   (vlax-for b (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
       (if (and
               (= :vlax-false (vla-get-islayout b))
               (= :vlax-false (vla-get-isxref b))
         )
         (vlax-for o b
               (if (and
                     (wcmatch (setq n (vla-get-linetype o)) "*$*")
                     (setq n (substr n (+ 2 (vl-string-position 36 n 0 t))))
                     (tblsearch "LTYPE" n)
                   )
                   (vl-catch-all-apply 'vla-put-linetype (list o n))
               )
         )
       )
   )
   (princ)
)
(vl-load-com) (princ)

ibach 发表于 2022-7-6 07:35:27

虽然我不理解,但我会的。
 
工作工作需要时间。。。同时感谢你的帮助。。。仍在工作。。。

ibach 发表于 2022-7-6 07:41:20

伙计,你写的水壶在10种线型上都能用,但“0$ZIGZAG”仍然存在。我认为这是因为它没有加载。我试着装一下。

ibach 发表于 2022-7-6 07:42:52

现在做了什么?你能简单解释一下吗?
 
是的,Z字形装载成功了!
 
现在所有线型都正常了。谢谢您!!!
 
标注样式和文字样式仍然是一个问题。
页: [1] 2
查看完整版本: 用其他线型替换线型