插入所有块的lisp
有时文件有很多块,但没有插入。但在清除之前,我希望看到所有的块。因此,我正在搜索lisp以插入所有块。就像附件一样。只需将所有块放入单个DWG文件中的一个块中。然后使用工具选项板或设计中心引入一个块,嵌套在其中的所有其他块将随它一起出现,将它们一次全部插入到当前图形中。 以下是一种在当前图形中插入所有块定义的快速而肮脏的方法。
(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
)
)
)
Thanx公司
这就是我要找的。
我对插入点做了一些更改。
但我必须为每个街区选择一个点。如何对所有块使用同一点 试试这个:
(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))
编辑:对不起,没有读最后一点 试试这个:
(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))
我将使用wba将它们提取到单个图形中,并将其提取到指定的子目录中。lsp,然后我将使用Bi(Blkimport.lsp)将所有提取的块插入到当前图形中,使用它们之间5.0个单位的间隙。。。可以更改lisp内的间隙。
wba。lsp
BI。lsp Thanx RKMCSWAIN公司
Thanx LEE公司
有一个问题
lisp能否计算块宽度,然后在前一个插入点中插入下一个块加上块宽度。 它必须插入块,使用边界框,然后相应地移动块。。。 只要提供这一个,如果您的目的是为了检查,也可以在autocad design center上尝试一下。键入ADC,然后转到“打开图形”选项卡,然后选择“块”。你会在一个窗口中看到所有的缩略图。当你点击一个缩略图时,下面会显示一个更大的缩略图,你可以将其进一步向上拉伸,这样就可以看到一个更大的块视图,而无需插入。
页:
[1]
2