找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1469|回复: 15

[求助] 关于外部文件插入块问题求助

[复制链接]

已领礼包: 201个

财富等级: 日进斗金

发表于 2021-2-2 14:17:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 a117034423 于 2021-2-2 14:19 编辑

代码是marting的 我执行不成功
  1. (defun copy-blk (dwg blk / );blkdbx catch odbx)
  2.   (SETQ DWG "H:\\制图标准\\标准节点+楼梯\\制图2019\\标准图\\标准图20201120.dwg")
  3.   (if (findfile dwg)
  4. (progn
  5.       (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
  6.         (setq odbx (vlax-create-object "ObjectDBX.AxDbDocument"))
  7.         (setq odbx (vlax-create-object
  8.                      (strcat "ObjectDBX.AxDbDocument."
  9.                              (substr (getvar "ACADVER") 1 2)
  10.                      )
  11.                    )
  12.         )
  13.       )
  14.       (vla-open odbx dwg)  ;;;此处执行会提示 Application Error: 2 :- Automation 错误。未提供说明。                                     ;;;;ADS 请求错误 Application Error: 0 :- 界面指针为空: #<VLA-OBJECT 0000000000000000>ADS 请求错误
  15.       (if (not
  16.             (setq
  17.               catch (vl-catch-all-error-p
  18.                       (vl-catch-all-apply
  19.                         (function (lambda ()
  20.                                     (setq blkdbx
  21.                                            (vla-item (vla-get-blocks odbx) blk)
  22.                                     )
  23.                                   )
  24.                         )
  25.                       )
  26.                     )
  27.             )
  28.           )
  29.         (vla-copyobjects
  30.           odbx
  31.           (vlax-safearray-fill
  32.             (vlax-make-safearray vlax-vbObject '(0 . 0))
  33.             (list blkdbx)
  34.           )
  35.           (vla-get-blocks
  36.             (vla-get-activedocument (vlax-get-acad-object))
  37.           )
  38.         )
  39.       )
  40.       (vlax-release-object odbx)
  41.       (if
  42.         (and (null catch)
  43.              (vla-item (vla-get-blocks
  44.                          (vla-get-activedocument (vlax-get-acad-object))
  45.                        )
  46.                        blk
  47.              )
  48.         )
  49.          T
  50.          nil
  51.       )
  52.     )
  53.     nil
  54.   )
  55. )
marting来解解惑呗

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-2-2 15:21:42 | 显示全部楼层
查询下
(vla-open odbx dwg) 这句前,
odbx的值是什么,dwg 的值是什么

点评

dwg H:\\制图标准\\标准节点+楼梯\\制图2019\\标准图\\标准图20201120.dwg odbx #  详情 回复 发表于 2021-2-2 17:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-2-2 17:00:16 | 显示全部楼层
marting 发表于 2021-2-2 15:21
查询下
(vla-open odbx dwg) 这句前,
odbx的值是什么,dwg 的值是什么

dwg “H:\\制图标准\\标准节点+楼梯\\制图2019\\标准图\\标准图20201120.dwg“
odbx #<VLA-OBJECT IAxDbDocument 00000000510d02b0>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-2-2 17:38:10 | 显示全部楼层
a117034423 发表于 2021-2-2 17:00
dwg “H:\\制图标准\\标准节点+楼梯\\制图2019\\标准图\\标准图20201120.dwg“
odbx #

那接着执行
(vla-open odbx dwg)

提示什么?

点评

提示 Application Error: 2 :- Automation 错误。未提供说明。 ;;;;ADS 请求错误 Application Error: 0 :- 界面指针为空: #ADS 请求错误 我重启电脑有时成功 有时失败  详情 回复 发表于 2021-2-3 08:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2021-2-2 19:43:57 | 显示全部楼层
1 要open的图尽量用低的版本
2 图中不要有代理实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 914个

财富等级: 财运亨通

发表于 2021-2-3 00:28:08 | 显示全部楼层
学习了,感谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-2-3 08:02:30 | 显示全部楼层
本帖最后由 a117034423 于 2021-2-3 08:47 编辑
marting 发表于 2021-2-2 17:38
那接着执行
(vla-open odbx dwg)

提示 Application Error: 2 :- Automation 错误。未提供说明。                                     ;;;;ADS 请求错误 Application Error: 0 :- 界面指针为空: #<VLA-OBJECT 0000000000000000>ADS 请求错误
我重启电脑有时成功 有时失败我用的是CAD2012
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2021-2-3 08:23:25 | 显示全部楼层
a117034423 发表于 2021-2-3 08:02
提示 Application Error: 2 :- Automation 错误。未提供说明。                                     ;;; ...

blk 是什么东西??

点评

块名 str 前面是findname 路径名  详情 回复 发表于 2021-2-3 08:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-2-3 08:25:45 | 显示全部楼层

块名 str 前面是findname 路径名
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-2-3 09:25:54 | 显示全部楼层
a117034423 发表于 2021-2-3 08:02
提示 Application Error: 2 :- Automation 错误。未提供说明。                                     ;;; ...

时好时不好?

1、确认DWG版本比你用的CAD一样或低?
2、你的CAD是简化版?

点评

不是简化版 完整的 版本也一样 我也找了好久原因 我再测试一下吧  详情 回复 发表于 2021-2-3 10:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-2-3 10:31:10 | 显示全部楼层
marting 发表于 2021-2-3 09:25
时好时不好?

1、确认DWG版本比你用的CAD一样或低?

不是简化版 完整的 版本也一样 我也找了好久原因
我再测试一下吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2021-2-3 14:12:28 | 显示全部楼层
a117034423 发表于 2021-2-3 10:31
不是简化版 完整的 版本也一样 我也找了好久原因
我再测试一下吧

对于有些图,vla-open确实打不开,改成如下写法
(not        (VL-CATCH-ALL-ERROR-P (VL-CATCH-ALL-APPLY 'vla-open (list dbxDoc DwgName)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-2-3 14:15:13 | 显示全部楼层
本帖最后由 marting 于 2021-2-3 14:22 编辑
a117034423 发表于 2021-2-3 10:31
不是简化版 完整的 版本也一样 我也找了好久原因
我再测试一下吧

你去试试N版发布的这个函数

(XD::ODBX)处理外部DWG通用接口函数
0 个回复 - 0 次查看
**** 本内容被作者隐藏 **** 设置存盘版本通过函数: xd::odbx:savevertion 函数实现,如:(xd::odbx:savevertion "2004")
2021-2-3 13:31 - newer - 开源函数库



下面是一个通用的框架,可以修改,处理外部DWG的图层,图块,线型。。。。



  1. (defun c:tt ()
  2.   (defun _remove (doc)
  3.     (defun _print-progess (doc gap / dwg)
  4.       (setq dwg        (vla-get-name doc)
  5.             dwg        (strcat (vl-filename-base dwg) (vl-filename-extension dwg))
  6.       )
  7.       (princ (xd::string:tailcut (strcat "\n处理 " dwg) gap "..."))
  8.     )
  9.     (textpage)
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11.     ;;单文件信息打印框架            
  12.     (setq num1 0)
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.     (_print-progess doc 30)
  15.     (setq lay (vla-item (vla-get-layers doc) "0"))
  16.     (setq e (vlax-vla-object->ename lay))
  17.     (xdrx_database_setpropertyvalue e "clayer" "0")
  18.     (xdrx_database_select e)
  19.     (setq lst1 nil)
  20.     (vlax-for blk (vla-get-blocks doc)
  21.       (if (and (/= (vla-get-isxref blk) :vlax-true)
  22.                (/= (vla-get-islayout blk):vlax-true))
  23.         (progn
  24.           (setq lst1 (cons (vla-get-name blk) lst1))
  25.         )
  26.       )
  27.     )
  28.     (xdrx_database_select)
  29.     (setq num (1+ num))
  30. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31.     ;;单文件信息打印框架
  32.     (setq lxd lst1)
  33.     (princ (strcat "  处理了 " (itoa (length lst1)) " 图块."))
  34. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  35.     (princ)
  36.   )
  37. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  38.   (defun _check        ()
  39.     (if        (or (not xd::vla:odbx) (not (= (type xd::vla:odbx) 'SUBR)))
  40.       (progn (princ "\n请加载晓东通用LISP函数库再执行.") (exit))
  41.       t
  42.     )
  43.   )
  44. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  45.   ;;主程序框架                      ;
  46.   (defun _main ()
  47.     (xdrx_begin)
  48.     (setq num 0
  49.           fns 0
  50.     )
  51.     (xd::odbx '_remove nil t)
  52.     (princ (strcat "\n\n共处理了 " (itoa num) " 个DWG文件."))
  53.     (xdrx_end)
  54.     (princ)
  55.   )
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57.   ;;main                            ;
  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  59.   (_main)
  60.   (princ)
  61. )






命令: TT



处理 坝下浑何南绥化路北地....  处理了 201 图块.



共处理了 1 个DWG文件.



命令:

命令: !lst1

("树01" "13" "网球场1" "新块" "GUIBAI" "B07031" "B07008" "ll" "14" "阔叶1" "阔叶7" "16" "TREE-2" "块别墅2" "块别墅" "01" "301" "929" "927" "512" "175" "503" "2006" "2005" "942" "247" "950" "998" "454" "994" "912" "509" "520" "POLYLINE478" "箭头" "gc168" "gc126" "gc251" "gc253" "gc201" "GC038" "GC115" "252" "677" "302" "GC079" "GC151" "gc129a" "gc019" "GC041" "gc211" "gc232" "gc254" "gc208" "gc043" "gc212" "GC143" "gc086" "gc013a" "gc146" "gc106" "gc181" "gc013c" "gc013b" "gc170" "GC200" "ARC979" "ARC380" "ARC377" "ARC376" "ARC375" "ARC374" "ARC373" "ARC372" "ARC371" "ARC370" "ARC369" "ARC368" "ARC367" "ARC366" "ARC365" "ARC364" "ARC363" "ARC362" "ARC361" "ARC360" "ARC359" "ARC358" "ARC357" "ARC356" "ARC355" "ARC354" "ARC353" "ARC352" "ARC351" "ARC350" "ARC349" "ARC348" "ARC347" "ARC346" "ARC345" "ARC344" "ARC343" "ARC342" "ARC341" "ARC340" "ARC339" "ARC338" "ARC337" "ARC336" "ARC335" "ARC334" "ARC333" "ARC332" "ARC331" "ARC330" "ARC329" "ARC328" "ARC327" "ARC326" "ARC325" "ARC324" "ARC323" "ARC322" "ARC321" "ARC320" "ARC164" "ARC163" "ARC162" "ARC161" "ARC160" "ARC159" "ARC158" "ARC157" "ARC156" "ARC155" "ARC154" "ARC153" "ARC152" "ARC151" "ARC150" "ARC149" "ARC148" "ARC147" "ARC146" "ARC145" "ARC144" "ARC143" "ARC142" "ARC141" "ARC140" "ARC139" "ARC138" "ARC137" "ARC87" "ARC86" "ARC83" "GC134" "ELLIPSE" "GC048" "GC042" "GC129" "GC104" "GC132" "GC111" "GC091" "GC050" "GC133" "GC160" "GC096" "GC107" "GC243" "GC021" "GC161" "GC052" "GC245" "GC244" "GC297" "GC095" "GC123" "GC103" "GC223" "GC097" "GC155" "GC154" "GC018" "GC250" "GC098" "GC100" "GC044" "GC037" "GC156" "GC120" "GC125" "GC124" "GC159" "GC121" "GC122" "GC119" "GC002")

点评

谢了marting小哥  详情 回复 发表于 2021-2-3 20:25
我再看看我的电脑吧,最近不知道怎么回事,有时会自动关闭先选择后执行 lisp也有恶意程序吗  详情 回复 发表于 2021-2-3 20:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2021-2-3 14:34:54 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2021-2-3 14:12
对于有些图,vla-open确实打不开,改成如下写法
(not        (VL-CATCH-ALL-ERROR-P (VL-CATCH-ALL-APPLY 'vla- ...

理论上
(vla-open dwg blk)

(VL-CATCH-ALL-ERROR-P (VL-CATCH-ALL-APPLY 'vla-open (list dwg blk))

是一样的,第一个如果出错,下面那个写法也一样出错,
只是下面的写法,不会中断程序,能捕捉到错误进行处理而已。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-2-3 20:22:58 | 显示全部楼层
marting 发表于 2021-2-3 14:15
你去试试N版发布的这个函数

(XD::ODBX)处理外部DWG通用接口函数0 个回复 - 0 次查看**** 本内容被作 ...

我再看看我的电脑吧,最近不知道怎么回事,有时会自动关闭先选择后执行
lisp也有恶意程序吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 08:22 , Processed in 0.419392 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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