关于不开图获取属性层块并插入当前新图的求助
我要求的功能是实现在另个一个文件里复制属性块,插入到新的当前图纸里。 我写的程序在普通cad里实现,但是到中望cad就不行。一直也找不到原因。(setq sourceDoc (vla-open acadDocs fullFileName)) 就是在这句话一直有问题。麻烦各位大神看看,程序怎么修改,或者有没有更好的实现方法。属性块当普通块插入,插入后,就不成为属性块了。
(vl-load-com) ; 确保加载Visual LISP扩展函数
(defun c:ImportDWGToCurrent (/ acadApp acadDocs sourceDoc sourceModelSpace
targetDoc targetModelSpace entities entity
fullFileName)
;; 定义命令:ImportDWGToCurrent
; 获取AutoCAD应用对象和文档集合
(setq acadApp (vlax-get-acad-object))
(setq acadDocs (vla-get-documents acadApp))
; 当前活动文档为目标文档
(setq targetDoc (vla-get-activedocument acadApp))
(setq targetModelSpace (vla-get-modelspace targetDoc))
; 提示用户选择要导入的DWG文件
(setq fullFileName (getfiled "选择要导入的DWG文件" "" "dwg" 16))
(if (not fullFileName)
(progn
(princ "\n未选择文件。")
(exit)))
; 检查文件是否存在
(if (not (findfile fullFileName))
(progn
(alert (strcat "文件未找到: " fullFileName))
(exit)))
; 在后台打开源图纸
(if (setq sourceDoc (vla-open acadDocs fullFileName))
(progn
(setq sourceModelSpace (vla-get-modelspace sourceDoc))
; 复制实体
(vlax-for entity sourceModelSpace
(if (not (vl-catch-all-error-p
(vl-catch-all-apply 'vla-copy (list entity))))
(progn
(setq entities (cons entity entities)); 成功将实体复制到剪贴板(通过VLA方法)
)))
(princ (strcat "\n找到 " (itoa (length entities)) " 个实体进行处理。"))
(if entities; 使用CopyObjects方法将实体从源文档复制到目标文档
(progn
(vla-copyobjects sourceDoc
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray vlax-vbobject (cons 0 (1- (length entities))))
entities
))
targetModelSpace )
(princ "\n实体已成功复制到当前图纸。"))
(princ "\n源图纸中未找到可复制的实体。") )
;(vla-close sourceDoc :vlax-false); 关闭源文档,不保存更改
(princ "\n已关闭源图纸。")
)
(princ "\n无法打开指定的DWG文件。")
)
)
LISP是基于doc的,open一个新doc,lsp后继执行的代码在新doc里面是没有定义的。
需要用DBX方式来后台打开DWG并操作,速度也更快。
可以提问让AI用DBX的方式实现。 有点头痛,没有学过DBX
页:
[1]