mangeloooo 发表于 2022-7-5 20:27:30

图层和h的Lisp或脚本

你好
我试图找出如何编写lisp或脚本来满足我的需要,但我找不到我想要的。我认为这是非常基本的。
 
 
我想要它做的是:
创建具有特定名称和颜色的图层,然后选择图形中的所有图案填充并将其移动到该图层,然后清除图形。
 
 
如果你能自动绘制多个图形,这将是一个额外的收获。
 
 
我想这对你们很多人来说都很容易,但我现在不知道从哪里开始。。。
英语不是我的母语,但我希望你能理解我的问题

Tharwat 发表于 2022-7-5 20:32:31

欢迎来到CADTutor
 
试试这个程序,别忘了更改图层的名称,以满足您的需要,以及颜色编号。
 
[未测试代码]
 

(defun c:Test (/ name color doc sel)
;;    Tharwat 17.12.2014    ;;
(setq name"Layer" ;; <= Layer name
       color 1      ;; <= Color of layer
       doc   (vla-get-activedocument (vlax-get-acad-object))
)
(if (not (tblsearch "LAYER" name))
   (entmake (list '(0 . "LAYER")
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbLayerTableRecord")
                  (cons 2 name)
                  (cons 62 color)
                  '(70 . 0)
            )
   )
)
(if (ssget "_X" '((0 . "HATCH")))
   (vlax-for x (setq sel (vla-get-ActiveSelectionSet doc))
   (if (vlax-write-enabled-p x)
       (vla-put-layer x name)
   )
   )
)
(if sel
   (vla-delete sel)
)
(repeat 3 (command "_.-purge" "a" "*" "n"))
(princ)
)
(vl-load-com)

 
干杯

ttray33y 发表于 2022-7-5 20:39:23

非常感谢您的回复。我试过你的密码。我第一次不能上班?不知道我做错了什么(什么都没发生)。第二个(ttray33y)工作得很好,但我不想每次都写图层和颜色。
 
 
我希望层被命名为“K-----------H”,颜色为“254”。
也许有人可以帮我把它放在第一个代码里??也许我自己做的时候做错了什么。。。。
 
 
提前谢谢!

mangeloooo 发表于 2022-7-5 20:40:58

你看到节目里的蓝色文字了吗?
将“layer”更改为“K-----H”

1至254
 
然后再试一次

Tharwat 发表于 2022-7-5 20:45:55

谢谢你的快速回复。
下面我将它粘贴到我的记事本文件(.lsp)中。还是什么都没发生。我是否应该做一些事情,而不仅仅是拖放我保存的文件?
 
 
(defun c:测试(/name color doc sel)
;;    Tharwat 17.12.2014;;
(setq名称“K--------H”;;
颜色254;;
doc(vla get activedocument(vlax get acad object))
)
(如果(不是(tblsearch“LAYER”名称))
(entmake(列表)(0.“层”)
“(100.“AcDbSymbolTableRecord”)
“(100.“AcDbLayerTableRecord”)
(cons 2名称)
(cons 62色)
'(70 . 0)
)
)
)
(if(ssget“_X”'((0。“图案填充”))
(vlax for x(setq sel(vla get ActiveSelectionSet doc))
(如果(vlax-write-enabled-p x)
(vla put layer x name)
)
)
)
(如果选择
(vla删除sel)
)
(重复3(命令“_.-purge”“a”“*”“n”))
(普林斯)
)
(vl load com)

mangeloooo 发表于 2022-7-5 20:51:02

图形中有块中的图案填充对象还是单独的对象?
 
上传样本图纸进行调查(如果可以的话)。

Tharwat 发表于 2022-7-5 20:53:43

没有区块,但有许多单独的舱口。
我在这里附上一个文件进行测试。
测验图纸

mangeloooo 发表于 2022-7-5 21:00:27

尝试上述例程的这个精简版本。
(setq wlayer "MylayerNAME")
(setq ccolor "Red")
(defun c:chal ()
(setvar "cmdecho" 1)
(setq c_wlayer (getstring (strcat "New layer name <" wlayer ">: "))
      c_color (getstring (strcat "\nChoose color <" ccolor ">: "))
)
(if (= c_color "")
    (setq c_color ccolor)
    (setq ccolor c_color)
   )
(if (= c_wlayer "")
(setq c_wlayer wlayer)
(setq wlayer c_wlayer)
)
(if (setq mySet(ssget "X" (list
       (cons -4 "<OR")
         (cons 0 "HATCH")
(cons -4 "OR>")
       )))
   (progn
(command "-layer" "make" wlayer "Color" ccolor "" "")
(command "change" mySet "" "p" "la" wlayer "" "")
)                                    
)                                    
(princ)                              
)      
;simple routine to change layer and color of an object.

ttray33y 发表于 2022-7-5 21:04:44

真是太棒了!谢谢最后一个问题。有没有办法让程序不用我写“chal”就可以启动?每次都能节省我几秒钟

mangeloooo 发表于 2022-7-5 21:06:59

 
如果您试图更改多个图形,我建议您使用autodesk的scriptpro,安装后只需一个脚本即可在最后一个图形中运行lisp。
页: [1] 2
查看完整版本: 图层和h的Lisp或脚本