timmy521 发表于 2025-10-31 10:05:28

关于不开图获取属性层块并插入当前新图的求助

我要求的功能是实现在另个一个文件里复制属性块,插入到新的当前图纸里。 我写的程序在普通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文件。")
)
)



kozmosovia 发表于 2025-10-31 10:09:52

LISP是基于doc的,open一个新doc,lsp后继执行的代码在新doc里面是没有定义的。
需要用DBX方式来后台打开DWG并操作,速度也更快。
可以提问让AI用DBX的方式实现。

timmy521 发表于 2025-10-31 14:22:19

有点头痛,没有学过DBX
页: [1]
查看完整版本: 关于不开图获取属性层块并插入当前新图的求助