Quattro_Trip 发表于 2022-7-5 23:26:29

Lisp搜索层和通道

你好:
 
很好的一天。
 
我是一个新手,试图找出是否有一个Lisp程序,可以帮助我了。
我需要浏览200个图形,并将某些图层更改为特定线宽。
 
以下是我需要做的:
 
选择图层管理器
搜索*furn*-全选-将线宽更改为0.05
搜索*eqpm*
如果*eqpm*的前缀为“mv-”,线宽保持不变,
否则将线宽更改为0.05
搜索*pfix*-全选-将线宽更改为0.05

 
谢谢你的帮助。
-凯尔

Lee Mac 发表于 2022-7-5 23:31:59

嗨,克尔,欢迎来到CADTutor,我希望你会喜欢这里
 
最好的选择是使用脚本打开每个图形,运行LISP程序更改图层线宽,然后保存/关闭图形并移动到下一个图形;或者使用ObjectDBX,尽管设置更复杂,但它可以在不打开它们的情况下处理所有图形(因此它可以在不到一分钟的时间内处理数百个图形)。
 
让我知道你想走哪条路,我会帮你走。
 

Lee Mac 发表于 2022-7-5 23:34:42

对于初学者,请在单个图形上尝试以下代码:
 
不确定如何运行代码?读这个。

Quattro_Trip 发表于 2022-7-5 23:36:08

谢谢李,
我一直是一个球迷,已经在这个论坛上阅读了很长一段时间了,它只是最近,我需要帮助。
 
我想我会运行Lisp程序的例行程序-这将是我最好的选择。因为我不熟悉ObjectDBX。虽然时间至关重要,但我认为我可以遍历每个图形并运行lisp命令。通过这种方式,我也可以看到我是否需要改变什么。
 
谢谢。你们是最棒的

Quattro_Trip 发表于 2022-7-5 23:42:20

看起来很棒。
我们可以修改它以提示我/或要求输入线宽吗

Lee Mac 发表于 2022-7-5 23:45:33

很酷,不用担心
 
如果您决定使用ObjectDBX路径,一种简单的方法是将该程序加载到一个空白的新图形中,然后加载并运行:
 

(defun c:DBXLWChange nil
(foreach x
   (LM:ODBX
   (function
       (lambda ( x / n )
         (vlax-for l (vla-get-layers x)
         (if
             (and
               (wcmatch (setq n (strcase (vla-get-name l))) "*FURN*,*EQPM*,*PFIX*")
               (not (wcmatch n "MV-*EQPM*"))
             )
             (vla-put-lineweight l acLnWt005)
         )
         )
       )
   )
   nil t
   )
   (princ
   (strcat "\n--> Drawing: " (car x)
       (if (vl-catch-all-error-p (cdr x))
         (strcat "\n    Error: " (vl-catch-all-error-message (cdr x)))
         "\nSuccessful."
       )
   )
   )
)
(princ)
)
(vl-load-com) (princ)

 

Lee Mac 发表于 2022-7-5 23:45:34

 
当然,比如:
 
(defun c:LWChange(/lws lw n)(setq lws’(-3.00 0.00 0.05 0.09 0.13 0.15 0.18 0.20 0.25 0.30 0.35 0.40 0.50 0.53 0.60 0.70 0.80 0.90 1.00 1.06 1.20 1.40 1.58 2.00 2.11))(而(和(setq lw(getreal“\n指定线宽(默认值为3):”)(非(成员lw lws))(原理“\n-->无效线宽”)(如果lw(progn(setq lw)(如果(

Quattro_Trip 发表于 2022-7-5 23:49:41

它起作用了。
太棒了!谢谢

Quattro_Trip 发表于 2022-7-5 23:53:16

你让我的生活轻松了一点。
再次感谢。

Lee Mac 发表于 2022-7-5 23:55:13

 
不客气,我只是好奇,你指的是什么代码,ObjectDBX?
 
 
页: [1] 2
查看完整版本: Lisp搜索层和通道