明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2462|回复: 8

[已解答] 插外部块INS_BLK 程序不能使用了

[复制链接]
发表于 2014-1-16 22:06:07 | 显示全部楼层 |阅读模式
以前在cad2004用的“插外部块INS_BLK”程序,在cad2008以上版本,不能用了,不知为何?
哪位热心人能修改下?


;;利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块
;;
;; INS_BLK.LSP
;;
;; 作者: 赖云龙(龙龙仔)
;;

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-1-17 14:26:32 | 显示全部楼层
给你个arx的插入外部参照的东西,一个07~09的,一个是2012的,
插入块的命令是sd,注意,该命令会自动搜寻cad支持工作目录下的所有块。务必先设置支持目录。
该命令执行了快1年多,无bug

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-1-17 16:24:31 | 显示全部楼层
arx不能定制呀,不能修改程序

Lisp的乐趣就是,能自己动手,部分修改程序,diy成自己版本
发表于 2014-1-17 16:33:20 | 显示全部楼层
不能用了就直接用设计中心好

本帖子中包含更多资源

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

x
发表于 2014-1-19 16:50:25 | 显示全部楼层
  1. ;;利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块
  2. ;;
  3. ;; INS_BLK.LSP
  4. ;;
  5. ;; 作者: 赖云龙(龙龙仔)
  6. ;;
  7. ;; E_MAIL: lai_wan_lung@pchome.com.tw
  8. ;;
  9. ;; 版权所有 (C) 2003
  10. ;;
  11. ;;   本软件免费可供进行任何用途需求的拷贝、修改及发行, 但请遵循下述原则:
  12. ;;
  13. ;;   1)  上列的版权通告必须出现在每一份拷贝里。
  14. ;;   2)  相关的说明文档也必须载有版权通告及本项许可通告。
  15. ;;
  16. ;;   本软件仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
  17. ;;   用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认。
  18. (vl-load-com)
  19. (defun C:INS_BLK (/      DWGNAME NAME1    APP
  20.     DCL_FILE   DCL_NAME DCL_FLAG   BLK_LIST
  21.     OK_ID      DCL_TOG
  22.    )

  23.   (defun REGISTEROBJECTDBX (/ DBXSERVER) ;by Tony Tanzillo
  24.     (cond
  25.       ((vl-registry-read
  26.   "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  27.        )
  28.       )
  29.       ((not (setq DBXSERVER (findfile "AxDb17.dll")))
  30.        (alert "Error: Can't locate ObjectDBX Library (AxDb17.dll)")
  31.       )
  32.       (t
  33.        (startapp "regsvr32.exe" (strcat "/s "" DBXSERVER """))
  34.        (or
  35.   (vl-registry-read
  36.     "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  37.   )
  38.   (alert
  39.     "Error: Failed to register ObjectDBX ActiveX services."
  40.   )
  41.        )
  42.       )
  43.     )
  44.   )

  45.   (defun INS (ENT / SB)
  46.     (if (/= "" DWGNAME)
  47.       (progn
  48. (prompt (strcat "\n从图档"
  49.    DWGNAME
  50.    "插入图块"
  51.    (getvar "insname")
  52.    "\n"
  53.   )
  54. )
  55. (setq SB (vla-item DBXBLOCKS ENT))
  56. (vla-copyobjects
  57.    DBXDOC
  58.    (vlax-safearray-fill
  59.      (vlax-make-safearray
  60.        vlax-vbobject
  61.        '(0 . 0)
  62.      )
  63.      (list SB)
  64.    )
  65.    (vla-get-modelspace DOC)
  66. )
  67. (vlax-release-object SB)
  68.       )
  69.       (prompt
  70. (strcat "\n从图档" NAME1 "插入图块" (getvar "insname") "\n")
  71.       )
  72.     )
  73.     (command "_.INSERT" "")
  74.   )

  75.   (defun DWG_SEL (FLAG / STR1 STR2 BLK BLK_NO BLK_NO_TEXT)

  76.     (if (= FLAG 1)
  77.       (setq DBXBLOCKS (vla-get-blocks DOC))
  78.       (progn
  79. (setq
  80.    DWGNAME (getfiled "选取图档" (getvar "dwgprefix") "dwg" 8)
  81. )
  82. (if (equal (strcase NAME1) (strcase DWGNAME))
  83.    (setq DBXBLOCKS (vla-get-blocks DOC)
  84.   DWGNAME   ""
  85.    )
  86.    (progn
  87.      (vla-open DBXDOC DWGNAME)
  88.      (setq DBXBLOCKS (vla-get-blocks DBXDOC))
  89.    )
  90. )
  91.       )
  92.     )
  93.     (setq BLK_LIST '())
  94.     (vlax-for BLK DBXBLOCKS
  95.       (if (and (not (wcmatch (substr (vla-get-name BLK) 1 1) "`*"))
  96.         (= (vla-get-isxref BLK) :vlax-false)
  97.    )
  98. (setq BLK_LIST
  99.         (append BLK_LIST (list (vla-get-name BLK)))
  100. )
  101.       )
  102.     )

  103.     (if (/= BLK_LIST '())
  104.       (setq BLK_LIST (acad_strlsort BLK_LIST))
  105.     )
  106.     (start_list "dcl_blk_list")
  107.     (mapcar 'add_list BLK_LIST)
  108.     (end_list)

  109.     (setq BLK_NO (length BLK_LIST))
  110.     (setq BLK_NO_TEXT
  111.     (strcat "图档中的图块\n 共计  "
  112.      (itoa BLK_NO)
  113.      "  个"
  114.     )
  115.     )
  116.     (set_tile "dcl_blk_no" BLK_NO_TEXT)
  117.     (set_tile "dcl_blk_list" "0")
  118.     (FILL_BLK_NAME)

  119.     (if (/= "" DWGNAME)
  120.       (set_tile "txt_2"
  121.   (if (< (strlen DWGNAME) 90)
  122.     (progn
  123.       (setq STR1 (substr DWGNAME 1 44)
  124.      STR2 (substr DWGNAME 45)
  125.       )
  126.       (strcat STR1 "\n" STR2)
  127.     )
  128.     (progn
  129.       (setq STR1 (substr DWGNAME 1 40)
  130.      STR2 (vl-filename-base
  131.      (strcase (strcat DWGNAME
  132.         (vl-filename-extension DWGNAME)
  133.        )
  134.      )
  135.           )
  136.       )
  137.       (strcat STR1 "....\n...." STR2)
  138.     )
  139.   )
  140.       )
  141.       (set_tile "txt_2"
  142.   (if (< (strlen NAME1) 90)
  143.     (progn
  144.       (setq STR1 (substr NAME1 1 44)
  145.      STR2 (substr NAME1 45)
  146.       )
  147.       (strcat STR1 "\n" STR2)
  148.     )
  149.     (progn
  150.       (setq STR1 (substr NAME1 1 44)
  151.      STR2 (vl-filename-base
  152.      (strcase (strcat NAME1
  153.         (vl-filename-extension NAME1)
  154.        )
  155.      )
  156.           )
  157.       )
  158.       (strcat STR1 "\n...." STR2)
  159.     )
  160.   )
  161.       )
  162.     )
  163.   )

  164.   (defun FILL_BLK_NAME (/ BLK_ID FILL_NAME)
  165.     (setq BLK_ID (get_tile "dcl_blk_list"))
  166.     (setq BLK_ID (atoi BLK_ID))
  167.     (if (/= BLK_LIST '())
  168.       (progn
  169. (setq FILL_NAME (nth BLK_ID BLK_LIST))
  170. (setvar "insname" FILL_NAME)
  171. (set_tile "dcl_blk_name" FILL_NAME)
  172.       )
  173.       (progn
  174. (setvar "insname" "")
  175. (set_tile "dcl_blk_name" "")
  176.       )
  177.     )
  178.   )

  179.   (setq NAME1 (strcat (getvar "dwgprefix") (getvar "dwgname")))
  180.   (setq DWGNAME "")
  181.   (setq APP (vlax-get-acad-object))
  182.   (setq DOC (vla-get-activedocument APP))
  183.   (if (= "15" (substr (getvar "acadver") 1 2))
  184.     (progn
  185.       (if (not (REGISTEROBJECTDBX))
  186. (exit)
  187.       )
  188.       (setq
  189. DBXDOC (vla-getinterfaceobject APP "ObjectDBX.AxDbDocument")
  190.       )
  191.     )
  192.     (setq
  193.       DBXDOC (vla-getinterfaceobject APP "ObjectDBX.AxDbDocument.17")
  194.     )
  195.   )

  196.   (setq DCL_FILE "ins_blk"
  197. DCL_NAME "blk_1"
  198.   )
  199.   (setq DCL_FLAG (load_dialog DCL_FILE))
  200.   (if (< DCL_FLAG 0)
  201.     (exit)
  202.   )
  203.   (if (not (new_dialog DCL_NAME DCL_FLAG))
  204.     (exit)
  205.   )

  206.   (DWG_SEL 1)
  207.   (set_tile "dcl_blk_list" "0")
  208.   (FILL_BLK_NAME)

  209.   (action_tile "key_insert" "(dwg_sel 0)")
  210.   (action_tile "cancel" "(done_dialog 0)")
  211.   (action_tile
  212.     "accept"
  213.     "(done_dialog 1)"
  214.   )
  215.   (setq OK_ID (start_dialog))
  216.   (unload_dialog DCL_FLAG)
  217.   (if (and (= 1 OK_ID) (/= "" (getvar "insname")))
  218.     (INS (getvar "insname"))
  219.   )
  220.   (vlax-release-object APP)
  221.   (vlax-release-object DOC)
  222.   (vlax-release-object DBXDOC)
  223.   (vlax-release-object DBXBLOCKS)
  224.   (setq DBXDOC NIL
  225. DBXBLOCKS NIL
  226. DOC NIL
  227.   )
  228.   (princ)
  229. )
  230. (prompt "\nType INS_BLK")
  231. (princ)
 楼主| 发表于 2014-1-19 20:22:33 | 显示全部楼层
edata 发表于 2014-1-19 16:50

cad2008测试通过,明天再装上cad其他版本测试下。

明经到处有热心的高手,高手云集,敬佩!

 楼主| 发表于 2014-1-24 16:13:44 | 显示全部楼层
edata 发表于 2014-1-19 16:50

这个程序能在CAD2008使用,其他版本,不能用。

能否针对不同版本CAD,做一个通用的?
发表于 2014-1-24 17:34:30 | 显示全部楼层
pxt2001 发表于 2014-1-24 16:13
这个程序能在CAD2008使用,其他版本,不能用。

能否针对不同版本CAD,做一个通用的?

CAD2006、2013测试通过。
  1. ;;利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块
  2. ;;
  3. ;; INS_BLK.LSP
  4. ;;
  5. ;; 作者: 赖云龙(龙龙仔)
  6. ;;
  7. ;; E_MAIL: lai_wan_lung@pchome.com.tw
  8. ;;
  9. ;; 版权所有 (C) 2003
  10. ;;
  11. ;;   本软件免费可供进行任何用途需求的拷贝、修改及发行, 但请遵循下述原则:
  12. ;;
  13. ;;   1)  上列的版权通告必须出现在每一份拷贝里。
  14. ;;   2)  相关的说明文档也必须载有版权通告及本项许可通告。
  15. ;;
  16. ;;   本软件仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
  17. ;;   用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认。
  18. (vl-load-com)
  19. (defun C:INS_BLK (/      DWGNAME NAME1    APP
  20.     DCL_FILE   DCL_NAME DCL_FLAG   BLK_LIST
  21.     OK_ID      DCL_TOG
  22.    )

  23.   (defun REGISTEROBJECTDBX (/ DBXSERVER) ;by Tony Tanzillo
  24.     (cond
  25.       ((vl-registry-read
  26.   "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  27.        )
  28.       )
  29.       ((not (setq DBXSERVER (findfile (strcat "AxDb"(substr (getvar "acadver") 1 2)".dll"))))
  30.        (alert (strcat "Error: Can't locate ObjectDBX Library (AxDb" (substr (getvar "acadver") 1 2) ".dll)"))
  31.       )
  32.       (t
  33.        (startapp "regsvr32.exe" (strcat "/s \"" DBXSERVER "\""))
  34.        (or
  35.   (vl-registry-read
  36.     "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  37.   )
  38.   (alert
  39.     "Error: Failed to register ObjectDBX ActiveX services."
  40.   )
  41.        )
  42.       )
  43.     )
  44.   )

  45.   (defun INS (ENT / SB)
  46.     (if (/= "" DWGNAME)
  47.       (progn
  48. (prompt (strcat "\n从图档"
  49.    DWGNAME
  50.    "插入图块"
  51.    (getvar "insname")
  52.    "\n"
  53.   )
  54. )
  55. (setq SB (vla-item DBXBLOCKS ENT))
  56. (vla-copyobjects
  57.    DBXDOC
  58.    (vlax-safearray-fill
  59.      (vlax-make-safearray
  60.        vlax-vbobject
  61.        '(0 . 0)
  62.      )
  63.      (list SB)
  64.    )
  65.    (vla-get-modelspace DOC)
  66. )
  67. (vlax-release-object SB)
  68.       )
  69.       (prompt
  70. (strcat "\n从图档" NAME1 "插入图块" (getvar "insname") "\n")
  71.       )
  72.     )
  73.     (command "_.INSERT" "")
  74.   )

  75.   (defun DWG_SEL (FLAG / STR1 STR2 BLK BLK_NO BLK_NO_TEXT)

  76.     (if (= FLAG 1)
  77.       (setq DBXBLOCKS (vla-get-blocks DOC))
  78.       (progn
  79. (setq
  80.    DWGNAME (getfiled "选取图档" (getvar "dwgprefix") "dwg" 8)
  81. )
  82. (if (equal (strcase NAME1) (strcase DWGNAME))
  83.    (setq DBXBLOCKS (vla-get-blocks DOC)
  84.   DWGNAME   ""
  85.    )
  86.    (progn
  87.      (vla-open DBXDOC DWGNAME)
  88.      (setq DBXBLOCKS (vla-get-blocks DBXDOC))
  89.    )
  90. )
  91.       )
  92.     )
  93.     (setq BLK_LIST '())
  94.     (vlax-for BLK DBXBLOCKS
  95.       (if (and (not (wcmatch (substr (vla-get-name BLK) 1 1) "`*"))
  96.         (= (vla-get-isxref BLK) :vlax-false)
  97.    )
  98. (setq BLK_LIST
  99.         (append BLK_LIST (list (vla-get-name BLK)))
  100. )
  101.       )
  102.     )

  103.     (if (/= BLK_LIST '())
  104.       (setq BLK_LIST (acad_strlsort BLK_LIST))
  105.     )
  106.     (start_list "dcl_blk_list")
  107.     (mapcar 'add_list BLK_LIST)
  108.     (end_list)

  109.     (setq BLK_NO (length BLK_LIST))
  110.     (setq BLK_NO_TEXT
  111.     (strcat "图档中的图块\n 共计  "
  112.      (itoa BLK_NO)
  113.      "  个"
  114.     )
  115.     )
  116.     (set_tile "dcl_blk_no" BLK_NO_TEXT)
  117.     (set_tile "dcl_blk_list" "0")
  118.     (FILL_BLK_NAME)

  119.     (if (/= "" DWGNAME)
  120.       (set_tile "txt_2"
  121.   (if (< (strlen DWGNAME) 90)
  122.     (progn
  123.       (setq STR1 (substr DWGNAME 1 44)
  124.      STR2 (substr DWGNAME 45)
  125.       )
  126.       (strcat STR1 "\n" STR2)
  127.     )
  128.     (progn
  129.       (setq STR1 (substr DWGNAME 1 40)
  130.      STR2 (vl-filename-base
  131.      (strcase (strcat DWGNAME
  132.         (vl-filename-extension DWGNAME)
  133.        )
  134.      )
  135.           )
  136.       )
  137.       (strcat STR1 "....\n...." STR2)
  138.     )
  139.   )
  140.       )
  141.       (set_tile "txt_2"
  142.   (if (< (strlen NAME1) 90)
  143.     (progn
  144.       (setq STR1 (substr NAME1 1 44)
  145.      STR2 (substr NAME1 45)
  146.       )
  147.       (strcat STR1 "\n" STR2)
  148.     )
  149.     (progn
  150.       (setq STR1 (substr NAME1 1 44)
  151.      STR2 (vl-filename-base
  152.      (strcase (strcat NAME1
  153.         (vl-filename-extension NAME1)
  154.        )
  155.      )
  156.           )
  157.       )
  158.       (strcat STR1 "\n...." STR2)
  159.     )
  160.   )
  161.       )
  162.     )
  163.   )

  164.   (defun FILL_BLK_NAME (/ BLK_ID FILL_NAME)
  165.     (setq BLK_ID (get_tile "dcl_blk_list"))
  166.     (setq BLK_ID (atoi BLK_ID))
  167.     (if (/= BLK_LIST '())
  168.       (progn
  169. (setq FILL_NAME (nth BLK_ID BLK_LIST))
  170. (setvar "insname" FILL_NAME)
  171. (set_tile "dcl_blk_name" FILL_NAME)
  172.       )
  173.       (progn
  174. (setvar "insname" "")
  175. (set_tile "dcl_blk_name" "")
  176.       )
  177.     )
  178.   )

  179.   (setq NAME1 (strcat (getvar "dwgprefix") (getvar "dwgname")))
  180.   (setq DWGNAME "")
  181.   (setq APP (vlax-get-acad-object))
  182.   (setq DOC (vla-get-activedocument APP))
  183.   (if (= "15" (substr (getvar "acadver") 1 2))
  184.     (progn
  185.       (if (not (REGISTEROBJECTDBX))
  186. (exit)
  187.       )
  188.       (setq
  189. DBXDOC (vla-getinterfaceobject APP "ObjectDBX.AxDbDocument")
  190.       )
  191.     )
  192.     (setq
  193.       DBXDOC (vla-getinterfaceobject APP (strcat "ObjectDBX.AxDbDocument." (substr (getvar "acadver") 1 2)))
  194.     )
  195.   )

  196.   (setq DCL_FILE "ins_blk"
  197. DCL_NAME "blk_1"
  198.   )
  199.   (setq DCL_FLAG (load_dialog DCL_FILE))
  200.   (if (< DCL_FLAG 0)
  201.     (exit)
  202.   )
  203.   (if (not (new_dialog DCL_NAME DCL_FLAG))
  204.     (exit)
  205.   )

  206.   (DWG_SEL 1)
  207.   (set_tile "dcl_blk_list" "0")
  208.   (FILL_BLK_NAME)

  209.   (action_tile "key_insert" "(dwg_sel 0)")
  210.   (action_tile "cancel" "(done_dialog 0)")
  211.   (action_tile
  212.     "accept"
  213.     "(done_dialog 1)"
  214.   )
  215.   (setq OK_ID (start_dialog))
  216.   (unload_dialog DCL_FLAG)
  217.   (if (and (= 1 OK_ID) (/= "" (getvar "insname")))
  218.     (INS (getvar "insname"))
  219.   )
  220.   (vlax-release-object APP)
  221.   (vlax-release-object DOC)
  222.   (vlax-release-object DBXDOC)
  223.   (vlax-release-object DBXBLOCKS)
  224.   (setq DBXDOC NIL
  225. DBXBLOCKS NIL
  226. DOC NIL
  227.   )
  228.   (princ)
  229. )
  230. (prompt "\nType INS_BLK")
  231. (princ)
 楼主| 发表于 2014-1-28 12:47:06 | 显示全部楼层
edata 发表于 2014-1-24 17:34
CAD2006、2013测试通过。

多谢了!
我代表很多人,感谢你!


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-2-22 05:34 , Processed in 0.202407 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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