明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 521|回复: 2

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

[复制链接]
发表于 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文件。")
  )
)



回复

使用道具 举报

发表于 2025-10-31 10:09:52 | 显示全部楼层
LISP是基于doc的,open一个新doc,lsp后继执行的代码在新doc里面是没有定义的。
需要用DBX方式来后台打开DWG并操作,速度也更快。
可以提问让AI用DBX的方式实现。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-31 14:22:19 | 显示全部楼层
有点头痛,没有学过DBX
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-11-29 12:56 , Processed in 0.235583 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表