asos2000 发表于 2022-7-6 06:24:57

插入所有块的lisp

有时文件有很多块,但没有插入。但在清除之前,我希望看到所有的块。因此,我正在搜索lisp以插入所有块。就像附件一样。

tzframpton 发表于 2022-7-6 06:33:24

只需将所有块放入单个DWG文件中的一个块中。然后使用工具选项板或设计中心引入一个块,嵌套在其中的所有其他块将随它一起出现,将它们一次全部插入到当前图形中。

rkmcswain 发表于 2022-7-6 06:40:14

以下是一种在当前图形中插入所有块定义的快速而肮脏的方法。
 


(setq *acad* (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq *ms* (vla-get-ModelSpace *acad*))
(vlax-for
         item
             (vla-get-Blocks *acad*)
(setq name (vla-get-Name item))
(if (not (eq "*" (substr name 1 1)))
   (vlax-invoke-method
   *ms*
   'InsertBlock
   (vlax-3d-point (list 0.0 0.0 0.0))
   (vla-get-Name item)
   1.0
   1.0
   1.0
   0.0
   )
)
)

asos2000 发表于 2022-7-6 06:46:06

Thanx公司
这就是我要找的。
我对插入点做了一些更改。
 
但我必须为每个街区选择一个点。如何对所有块使用同一点

Lee Mac 发表于 2022-7-6 06:51:37

试试这个:
 

(DEFUN C:BLKINS(/ pt name)
(vl-load-com)

(setq *acad* (vla-get-ActiveDocument
                (vlax-get-acad-object)))
(setq *ms*   (vla-get-ModelSpace *acad*))

(vlax-for item (vla-get-Blocks *acad*)

   (if (and (not (eq "*" (substr (setq name (vla-get-Name item)) 1 1)))
            (setq pt (getpoint "\nSelect Point for Block: ")))
   
   (vlax-invoke-method *ms* 'InsertBlock (vlax-3d-point pt) name 1.0 1.0 1.0 0.0)))

(princ))

 
编辑:对不起,没有读最后一点

Lee Mac 发表于 2022-7-6 06:56:40

试试这个:
 

(DEFUN C:BLKINS(/ blks pt name)
(vl-load-com)

(setq *acad* (vla-get-ActiveDocument
                (vlax-get-acad-object)))
(setq *ms*   (vla-get-ModelSpace *acad*))

(if (and (not (zerop (- (vla-get-count (setq blks (vla-get-blocks *acad*))) 1 (length (layoutlist)))))
          (setq pt (getpoint "\nSelect Point for Block: ")))

   (vlax-for item blks

   (if (not (eq "*" (substr (setq name (vla-get-Name item)) 1 1)))
       (vlax-invoke-method *ms* 'InsertBlock (vlax-3d-point pt) name 1.0 1.0 1.0 0.0))))

(princ))

gilsoto13 发表于 2022-7-6 07:04:34

我将使用wba将它们提取到单个图形中,并将其提取到指定的子目录中。lsp,然后我将使用Bi(Blkimport.lsp)将所有提取的块插入到当前图形中,使用它们之间5.0个单位的间隙。。。可以更改lisp内的间隙。
wba。lsp
BI。lsp

asos2000 发表于 2022-7-6 07:10:07

Thanx RKMCSWAIN公司
Thanx LEE公司
有一个问题
lisp能否计算块宽度,然后在前一个插入点中插入下一个块加上块宽度。

Lee Mac 发表于 2022-7-6 07:13:07

它必须插入块,使用边界框,然后相应地移动块。。。

wizman 发表于 2022-7-6 07:21:44

只要提供这一个,如果您的目的是为了检查,也可以在autocad design center上尝试一下。键入ADC,然后转到“打开图形”选项卡,然后选择“块”。你会在一个窗口中看到所有的缩略图。当你点击一个缩略图时,下面会显示一个更大的缩略图,你可以将其进一步向上拉伸,这样就可以看到一个更大的块视图,而无需插入。
 
 
 
页: [1] 2
查看完整版本: 插入所有块的lisp