Rob-GB 发表于 2022-7-6 14:16:14

Lisp使用不同的线型

我想让我的lisp对一些隐藏线使用不同的线型。可能还需要更换图层!
 

(command "-linetype" "_l" "DASHED2" "acad.lin" "")

这段代码是从ASMI的帖子中借来的,一个问题是我还不明白这一切“DASHED2”acad.lin“到底是什么意思!
任何朝着正确方向的想法或刺激都会受到感激。
抢劫

MSasu 发表于 2022-7-6 14:23:00

命令名前面的“-”强制线型在命令行模式下工作(即没有对话框和用户确认);为了理解其他参数,可以在此模式下测试线型。
“L”=要求将线定义加载到图形,
“DASHED2”=要加载的线定义(替换为所需类型),
“ACAD.LIN”=具有行定义的内置数据库(可以改为用户数据库),
“”=最终完成命令(重复)。
添加“_”是为了确保此代码也适用于AutoCAD的本地化版本。
 
希望这能澄清这个问题。
当做

Lee Mac 发表于 2022-7-6 14:27:53

加载线型的另一种方法是使用vla加载。

Rob-GB 发表于 2022-7-6 14:35:18

感谢您澄清,msasu它确实会有所帮助。
 
Lee有很多vla命令,但我真的不确定所有的基本lisp语言眨眼:
 
我的平开窗绘图代码已经转移到平开窗和滴水槽的侧面和平面视图,我花了几天的时间研究,花了大约一个小时左右的时间才使代码生效。一次一个小胜利,我就会征服密码。
 
抢劫

Rob-GB 发表于 2022-7-6 14:41:16

又卡住了!!很抱歉

(setq OLDTYPE (getvar "LINETYPE")
)
(command "_linetype" "_l" "ACAD_ISO03W100" "Acad.lin" ""
)
(command "_.PLINE" F25 F26 "" ;to be hidden dashed line linetype ACAD_ISO03W100
)
(command "_.PLINE" F33 F34 "" ;to be hidden dashed line
)
(command "_.PLINE" F27 F38 "" ;to be hidden dashed line
)
(command "_.PLINE" F39 F40 "" ;to be hidden dashed line
)
(setvar "LINETYPE" OLDTYPE)

这就是我目前所拥有的。我试图存储现有线型,然后在新线型中绘制几条所需的线,然后恢复旧线型。
我今天不太喜欢跑腿和打电话,所以我可能没想到这件事很简单。

The Buzzard 发表于 2022-7-6 14:47:54

 
 
嘿Rob,
 
 
试试这个,把这个函数放在程序的某个地方。

;;; Layer Function - Set Layer & Linetype.                        ;Function Description
(defun SLL (NLAY CLR LT / LAY FRZ)                                  ;Define function, Declare local variables and arguments
(setq LAY(tblsearch "layer" NLAY))                              ;Search drawing to find layer, Note: (NOT USED)
(if                                                               ;If the following returns true
   (not LAY)                                                       ;Layer not in drawing
   (command "_.layer" "m" NLAY "c" CLR "" "lt" LT "" "")         ;Layer command ~ make new layer with color and linetype
   (progn                                                          ;Then do the following
   (setq FRZ (cdr (assoc 70 LAY)))                               ;Variable FRZ is frozen layer
   (if (= FRZ 65)                                                ;Layer frozen from last edit
       (progn                                                      ;Then do the following
         (command "_.layer" "t" NLAY "")                           ;Thaw new layer if frozen
         (command "_.layer" "s" NLAY ""))                        ;Set new layer
       (command "_.layer" "s" NLAY ""))))                        ;Set new layer
)                                                                   ;End define function
 
 
当你想添加图层时放置这个。
如果图层、颜色和线型不存在或
如果确实存在,请设置它。
 
(SLL "Mylayer" "Mycolor" "MyLinetype")                              ;Go to SLL Layer Function, Set Layer, Color & Linetype
 
 
注意:线型定义需要在ACAD中。要设置的线型的lin文件。
 
任何进一步的帮助,只要问。
 
秃鹰

The Buzzard 发表于 2022-7-6 14:51:04

在这里,您可以演示该程序,看看它是如何工作的。
 
加载此函数并键入HIDLAY。它将创建一个名为Mylayer的层,具有红色和隐藏线型。
 
(defun C:HIDLAY ()
(SLL "Mylayer" "1" "HIDDEN")                                    ;Go to SLL Layer Function
(princ)
)

;;; Layer Function - Set Layer & Linetype.                        ;Function Description
(defun SLL (NLAY CLR LT / LAY FRZ)                                  ;Define function, Declare local variables and arguments
(setq LAY(tblsearch "layer" NLAY))                              ;Search drawing to find layer, Note: (NOT USED)
(if                                                               ;If the following returns true
   (not LAY)                                                       ;Layer not in drawing
   (command "_.layer" "m" NLAY "c" CLR "" "lt" LT "" "")         ;Layer command ~ make new layer with color and linetype
   (progn                                                          ;Then do the following
   (setq FRZ (cdr (assoc 70 LAY)))                               ;Variable FRZ is frozen layer
   (if (= FRZ 65)                                                ;Layer frozen from last edit
       (progn                                                      ;Then do the following
         (command "_.layer" "t" NLAY "")                           ;Thaw new layer if frozen
         (command "_.layer" "s" NLAY ""))                        ;Set new layer
       (command "_.layer" "s" NLAY ""))))                        ;Set new layer
)                                                                   ;End define function

Rob-GB 发表于 2022-7-6 14:58:17

谢谢Buzzard。
为了让我的心态在这一点上正确,我所要做的就是改变;
 
(SLL“Mylayer”“Mycolor”“MyLinetype”)
 
将Mylayer交换为我想要的层的名称
Mycolor表示浅棕色为63
&Mylinetype到Acad_ISO03W100
如果这是真的,那么我相信我已经做到了!
 
我突然意识到,我可能需要做几次这样的defun来组织框架、窗框和扇形窗等的层和线型!如果是这样的话,对他们来说最好的地方就是在任何地方之前_线路或_pline命令:与用户输入命令一起分组?
问候Rob。

The Buzzard 发表于 2022-7-6 15:04:12

 
确切地
 
下面是创建新层并在完成后恢复旧层的相同例程。只是想让你看到不同的可能性。
 
(defun C:HIDLAY ()                                                ;Define function
(setq OLDLAY (getvar "CLAYER"))                                 ;Save current layer to old layer
(SLL "Mylayer" "1" "HIDDEN")                                    ;Go to SLL Layer Function
(setvar "CLAYER" OLDLAY)                                          ;Restore old layer                                       
(princ)                                                         ;Exit quietly
)                                                                   ;End define function

;;; Layer Function - Set Layer & Linetype.                        ;Function Description
(defun SLL (NLAY CLR LT / LAY FRZ)                                  ;Define function, Declare local variables and arguments
(setq LAY(tblsearch "layer" NLAY))                              ;Search drawing to find layer, Note: (NOT USED)
(if                                                               ;If the following returns true
   (not LAY)                                                       ;Layer not in drawing
   (command "_.layer" "m" NLAY "c" CLR "" "lt" LT "" "")         ;Layer command ~ make new layer with color and linetype
   (progn                                                          ;Then do the following
   (setq FRZ (cdr (assoc 70 LAY)))                               ;Variable FRZ is frozen layer
   (if (= FRZ 65)                                                ;Layer frozen from last edit
       (progn                                                      ;Then do the following
         (command "_.layer" "t" NLAY "")                           ;Thaw new layer if frozen
         (command "_.layer" "s" NLAY ""))                        ;Set new layer
       (command "_.layer" "s" NLAY ""))))                        ;Set new layer
)                                                                   ;End define function

Rob-GB 发表于 2022-7-6 15:07:41

谢谢Buzzard,我觉得你的教名很适合你。
今天我的电话忙得不可开交,所以当我试图回复时,我和一个可能的客户挂断了电话,真的,难道他们没有意识到我有比解释一个三岁孩子会明白加税就是加税(英国的增值税)更重要的事情要做吗
在写这篇文章的时候,我又打了17分钟的电话:滚:
页: [1] 2
查看完整版本: Lisp使用不同的线型