把多个动态块直接DXFOUT导出为WRAPDBLK.DXF,然后重命名为WRAPDBLK.TXT。创建VLX时,在资源文件那里选TXT文件并将WRAPDBLK.TXT加入。
将代码中的DYN1修改为其中一个动态块的块名,编译为VLX后,执行IMDB即可导入所有动态块定义。
 - (Defun C:IMDB (/ SaveDXF DAT DOC DXF FNN OLD)
- (Defun SaveDXF (dat fnn / ADO)
- (setq ado (vlax-create-object "ADODB.Stream"))
- (vlax-put-property ado "Type" 1)
- (vlax-invoke ado "Open" nil nil nil nil nil)
- (vlax-invoke-method
- ado
- "Write"
- (vlax-make-variant
- (vlax-safearray-fill
- (vlax-make-safearray
- 17
- (cons 0 (1- (length dat)))
- )
- dat
- )
- )
- )
- (vlax-invoke-method ado "saveToFile" fnn 2)
- (vlax-invoke-method ado "Close")
- (vlax-release-object ado)
- (findfile fnn)
- )
- (and (null (tblsearch "Block" "DYN1"))
- (setq dat (vl-catch-all-apply 'vl-get-resource (list "WRAPDBLK")))
- (not (vl-catch-all-error-p dat))
- (setq dxf (SaveDXF (vl-string->list dat)
- (strcat (car (fnsplitl (vl-filename-mktemp)))
- "WRAPDBLK.dxf"
- )
- )
- )
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (progn
- (setq old (entlast))
- (vla-import doc dxf (vlax-3d-point '(0. 0. 0.)) 1.)
- (if old
- (while (setq old (entnext old)) (entdel old))
- (while (setq old (entlast)) (entdel old))
- )
- (vl-file-delete dxf)
- (and (tblsearch "Block" "WRAPDBLK")
- (vla-erase (vla-item (vla-get-blocks doc) "WRAPDBLK"))
- )
- )
- )
- (tblsearch "Block" "DYN1")
- )
|