CafeJr 发表于 2022-7-5 20:20:04

Lisp替换属性blo

 
大家好,
 
有人知道Lisp用于用dwg许多文件替换文件夹的内部块。
 
例如:特定文件夹中有一个“n”文件,其中包含使用相同属性和标记的A3格式块,因此,如果有必要对此格式进行一点详细更正,则有必要对所有这些文件逐个进行替换。
 
提前感谢。。。

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

为了明确起见,您希望用另一个块完全替换该块,但保留atribute值或仅更新块的各种属性。
 
第一步是在前后发布一个或两个dwg。

ttray33y 发表于 2022-7-5 20:33:53

如果要保留所有属性值,那么很容易。
1)为新块创建Wblock。
2)将其保存在您常用的目录中(为方便起见)。
3.)将该目录路径添加到Autocad选项中的支持文件搜索路径。
4)只需确保新块和旧块的基点相同。
5.)创建脚本。
6.)安装script pro。
7.)运行script pro,选择图形和脚本,然后运行。
 
注:首先用1张图纸进行测试。

CMDECHO
0
ATTREQ
0
-insert
YOUR_NEW_BLOCK_NAME
0,0,0
1.0
1.0
0.0
-blockreplace
YOUR_OLD_BLOCK_NAME
YOUR_NEW_BLOCK_NAME
y
erase
l

zoom
e
CMDECHO
1
ATTREQ
1
;

 
已经在200-600张图纸中进行了大约2年的此过程。

CafeJr 发表于 2022-7-5 20:41:51

 
Bigal,最好的方法是保留所有dwg文件的属性值,因为每个页面都有特定的标题或特定的细节。更改/更正块后,它将在该文件夹中的所有文件中替换为您以前的信息。
 
谢谢

CafeJr 发表于 2022-7-5 20:47:33

 
 
谢谢你,我会试试的!。。。

ttray33y 发表于 2022-7-5 20:54:09

 
不客气。

abra-CAD-abra 发表于 2022-7-5 20:56:41

我用这个,李麦克-作品每一次!
 
谢谢李。
 

;-----------------------------------------------------------------------------------------------------------------
;http://www.cadtutor.net/forum/archive/index.php/t-52973.html
;-----------------------------------------------------------------------------------------


(defun ReDef (block / *error* oc spc doc block)
(vl-load-com)
;; © Lee Mac 2010

(defun *error* (msg)
   (and oc (setvar 'CMDECHO oc))
   (or        (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **"))
   )
   (princ)
)

(setq        spc
(if
   (or
   (eq AcModelSpace
       (vla-get-ActiveSpace
           (setq doc
                  (vla-get-ActiveDocument
                  (vlax-get-acad-object)
                  )
           )
       )
   )
   (eq :vlax-true (vla-get-MSpace doc))
   )
    (vla-get-ModelSpace doc)
    (vla-get-PaperSpace doc)
)
)

(setq oc (getvar 'CMDECHO))
(setvar 'CMDECHO 0)

(if (setq block (findfile block))
   (progn
   (vla-delete
(vla-insertblock
spc
(vlax-3D-point '(0. 0. 0.))
block
1.
1.
1.
0.
)
   )
   (vl-cmdf "_.attsync" "_N" (vl-filename-base block))
   )
)

(setvar 'CMDECHO oc)
(princ)
)

;;Call like this:

;;(Redef "C:\\MyFolder\\MyBlock.dwg")

ttray33y 发表于 2022-7-5 21:07:27

我也使用了上面李的LISP,但是我认为,它只适用于你的新的和旧的块共享相同的名称。
我认为,重新定义和替换是两个不同的术语。

abra-CAD-abra 发表于 2022-7-5 21:09:24

 
对不起,我没有看完整条线索。
 
给自己的提示:始终阅读线程!
 
干杯

ttray33y 发表于 2022-7-5 21:17:29

你不必道歉,我的朋友,你发的帖子没有问题,我只解释李Lisp程序的用法。
页: [1] 2
查看完整版本: Lisp替换属性blo