awill81 发表于 2022-7-6 10:06:03

层Lisp

我不太流利的lisp,所以我希望有人可以帮助我创建一个层更新lisp。我们有旧的图纸,有旧的图层,我们在新的项目中使用它们。我想创建一个lisp,可以将具有相同线宽、颜色和线型的旧图层重命名为较新的名称。我想我需要一些if语句,如果那些较新的层已经存在,或者如果任何较旧的层不存在,它就会创建新层。任何帮助都将不胜感激。

Lee Mac 发表于 2022-7-6 10:11:23

看这里
 

N_461 发表于 2022-7-6 10:12:54

嗨,这正是我一直在寻找的。我是lisp的新手,我们正在尝试制作一个模板。我认为lsip例程是一条出路。我有点理解你的链接,但你能解释一下吗?我只想找一个新的图层部分,我想它应该是洋红类型的?我有点困惑,是哪一部分创建了图层,是哪一部分将旧图层更改为新图层。
 
谢谢

Lee Mac 发表于 2022-7-6 10:17:09

我的代码只会使用子功能“MkLay”创建新图层,它会获取图层名称、颜色、线型、线宽以及图层是否可打印,它不会修改现有图层。
 
我在主函数中使用mapcar在层名称/颜色/线宽等列表中迭代子函数。这是一个旧代码,但很可能编写得更好。

N_461 发表于 2022-7-6 10:20:29

这很有效。
 
我想知道每个层名称和各自的颜色代码、线型等之间的间距——是否有一个特定的数字,或者只要它们在相对列中彼此下面就好吗??
我只是用记事本做编辑。。。。

Lee Mac 发表于 2022-7-6 10:22:54

LISP不关心空格,所以任何空格都可以-唯一的限制条件是它们在列表中的顺序。

N_461 发表于 2022-7-6 10:25:48

嘿,Lee,我填充了lisp来创建一个特定的layerset。我的问题:
如何设置所有图层特性?我有颜色、LT、LW、可打印,但我可以将图层设置为冻结/解冻、打开/关闭、锁定吗?
我可以输入层描述吗?
 
...非常感谢!我实际上在学习。。。。一点。。。

Lee Mac 发表于 2022-7-6 10:28:40

这是很旧的代码,
 
也许可以试试这个:
 

(defun MakeLayer ( name colour linetype lineweight willplot bitflag description )
;; © Lee Mac 2010
(or (tblsearch "LAYER" name)
   (entmake
   (append
       (list
         (cons 0 "LAYER")
         (cons 100 "AcDbSymbolTableRecord")
         (cons 100 "AcDbLayerTableRecord")
         (cons 2name)
         (cons 70 bitflag)
         (cons 290 (if willplot 1 0))
         (cons 6
         (if (and linetype (tblsearch "LTYPE" linetype))
             linetype "CONTINUOUS"
         )
         )
         (cons 62 (if (and colour (< 0 (abs colour) 256)) colour 7))
         (cons 370
         (fix
             (* 100
               (if (and lineweight (<= 0.0 lineweight 2.11)) lineweight 0.0)
             )
         )
         )
       )
       (if description
         (list
         (list -3
             (list "AcAecLayerStandard" (cons 1000 "") (cons 1000 description))
         )
         )
       )
   )
   )
)
)

(defun c:MakeLayers ( )
;; © Lee Mac 2010
(
   (lambda ( lst )
   (mapcar 'cons (car lst) (apply 'mapcar (cons 'MakeLayer lst)))
   )
'(         
   ( "CEN"   "DIMS"   "HAT""HID"   "LOGO" "OBJ""PAPER"   "PHAN"   "TITLE" "TXT" ); Layer Name                     [ STR   ]
   (   6      -1      3      4       176   -2       5         6       176   7   ); Layer Colour (-ve for layer off) [ INT   ]
   ("CENTER"nil      nil"HIDDEN"   nil   nil"PHANTOM" "PHANTOM"   nil    nil); Layer LineType                   [ STR   ]
   (0.18   0.18      0.18   0.15    0.09   0.40    nil      0.18      nil    nil); Layer LineWeight               [ REAL]
   (   T       T      T      T      T   T      nil      T      T      T   ); Plot? (T or nil)               [ BOOLE ]
   (   0       1      5      0      0   3       6         0      1      0   ); Bit Flag (0 = None, 1=Frozen, 2=Frozen in Vp, 4=Locked) [ INT ]
   (nil "Dimensions" nil "Hidden""For Logo" nil    nil      nil"For Title"nil ); Description (nil for none)    [ STR   ]
   )
)
)

N_461 发表于 2022-7-6 10:34:28

哈哈哈-非常好。。。我想我已经迷失在我最初的思路中了,谢谢艾伦。

alanjt 发表于 2022-7-6 10:37:38

看起来更简单,我也试试
页: [1] 2
查看完整版本: 层Lisp