Ahankhah 发表于 2022-7-5 18:00:47

如何使用LI添加DWS文件

大家好,
 
如何将文件添加到“CAD标准”中,以通过LISP检查当前图形是否存在任何违规行为?
 
附笔。
我在以下地址找到了一个很好的代码,可以从图形中删除以前添加的文件:
可以用LISP例程删除(DWS)文件吗?
非常感谢Block和我亲爱的朋友Lee Mac。
... 但我的问题仍然没有答案。

Ahankhah 发表于 2022-7-5 18:13:10

我这里有一些有用的AutoLISP代码。
非常感谢Stig Madsen和Afralisp。
 
但仍在寻找香草。。。

Lee Mac 发表于 2022-7-5 18:16:26

试试这个Mehrdad,
 

(defun c:test ( / file )
   (if (setq file (getfiled "Select DWS File" "" "dws" 16))
       (AddDWSAssociation file)
   )
)

;; Add DWS Association-Lee Mac
;; dws = filename of DWS file.
;; Returns XRecord entity name if successful

(defun AddDWSAssociation ( dws / dict elst i item lst )
   (setq dict
       (if (setq dict (dictsearch (namedobjdict) "AcStStandard"))
         (cdr (assoc -1 dict))
         (dictadd (namedobjdict) "AcStStandard"
               (entmakex
                  '(
                     (0 . "DICTIONARY")
                     (100 . "AcDbDictionary")
                     (280 . 0)
                     (281 . 1)
                   )
               )
         )
       )
   )

   (setq elst (entget dict))
   (while (setq item (assoc 350 elst))
       (setq lst
         (cons
               (list
                   (cdr (assoc 1 (entget (cdr item))))
                   (cdr item)
                   (cdr (assoc 3 elst))
               )
               lst
         )
       )
       (setq elst (cdr (member item elst)))
   )

   (if (assoc dws lst)
       (cadr (assoc dws lst))
       (progn
         (setq lst (mapcar 'caddr lst)
                   i -1
         )
         (while (member (itoa (setq i (1+ i))) lst))
         (dictadd dict (itoa i)
               (entmakex
                   (list
                      '(0 . "XRECORD")
                      '(100 . "AcDbXrecord")
                      '(280 . 1)
                     (cons 1 dws)
                   )
               )
         )
       )
   )
)

Ahankhah 发表于 2022-7-5 18:23:08

杰出的
非常感谢李。

Lee Mac 发表于 2022-7-5 18:33:36

 
不客气,阿汉哈-如果你对代码有任何问题,尽管问。

bennyboy86 发表于 2022-7-5 18:34:54

李,你好,
 
你能帮我一下吗?我已经看了代码,但我不明白我必须做什么才能让它为我工作。我以前做过一些基本的lisp,知道如何加载它们等等。但在阅读代码时一无所获。希望你能像一个虚拟向导一样为我解释。
 
谢谢

Ahankhah 发表于 2022-7-5 18:45:13

Lee的代码将DWS文件添加到“Standards”命令中,而无需按顺序(1)打开对话框,(2)按+按钮,(3)然后选择DWS文件将其添加到对话框的左侧列表框。

Lee Mac 发表于 2022-7-5 18:51:34

 
函数“AddDWSAssociation”是一个需要一个参数的函数:与活动DWG文件关联的DWS文件的文件名。
 
您可以像调用任何其他需要参数的LISP函数一样调用函数AddDWSAssociation,例如,“+”函数需要一个或多个数值参数:
 
(+ 1 2 3)

==>6
在我上面的代码中,我包含了另一个函数:“c:test”,它可以在命令行中调用(因为它包含“c:”前缀)。
 
如果用户从GetField对话框中选择了DWS文件,则此函数(c:test)使用DWS文件的文件名调用AddDWSAssociation函数。

amir 发表于 2022-7-5 18:56:25

 
我做错了什么?
我收到消息:搜索模式无效*。C: \ SCRIPTS\986116\TataStandard2012。dws。
 
De代码:
 
(defun c:test ( / file )
   (if (setq file (getfiled "Select DWS File" "" "C:\\SCRIPTS\\986116\\TataStandard2012.dws" 16))
       (AddDWSAssociation file)
   )
)

;; Add DWS Association-Lee Mac
;; dws = filename of DWS file.
;; Returns XRecord entity name if successful

(defun AddDWSAssociation ( dws / dict elst i item lst )
   (setq dict
       (if (setq dict (dictsearch (namedobjdict) "AcStStandard"))
         (cdr (assoc -1 dict))
         (dictadd (namedobjdict) "AcStStandard"
               (entmakex
                  '(
                     (0 . "DICTIONARY")
                     (100 . "AcDbDictionary")
                     (280 . 0)
                     (281 . 1)
                   )
               )
         )
       )
   )

   (setq elst (entget dict))
   (while (setq item (assoc 350 elst))
       (setq lst
         (cons
               (list
                   (cdr (assoc 1 (entget (cdr item))))
                   (cdr item)
                   (cdr (assoc 3 elst))
               )
               lst
         )
       )
       (setq elst (cdr (member item elst)))
   )

   (if (assoc dws lst)
       (cadr (assoc dws lst))
       (progn
         (setq lst (mapcar 'caddr lst)
                   i -1
         )
         (while (member (itoa (setq i (1+ i))) lst))
         (dictadd dict (itoa i)
               (entmakex
                   (list
                      '(0 . "XRECORD")
                      '(100 . "AcDbXrecord")
                      '(280 . 1)
                     (cons 1 dws)
                   )
               )
         )
       )
   )
)

Lee Mac 发表于 2022-7-5 19:01:33

更改:
4至:
我还建议您阅读GetField函数的文档。
页: [1]
查看完整版本: 如何使用LI添加DWS文件