找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1481|回复: 5

[公告] [转贴]:利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块

[复制链接]
发表于 2003-7-29 19:55:59 | 显示全部楼层 |阅读模式

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

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

×
  1. ;;利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块
  2. ;;
  3. ;; INS_BLK.LSP
  4. ;;
  5. ;; 作者: 赖云龙(龙龙仔)
  6. ;;
  7. ;; E_MAIL: [email]lai_wan_lung@pchome.com.tw[/email]
  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 "AxDb15.dll")))
  30.        (alert "Error: Can't locate ObjectDBX Library (AxDb15.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.16")
  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)



  1. ;;
  2. ;;储存档名:INS_BLK.DCL
  3. ;;
  4. blk_1: dialog {      
  5. label = "插入图块";  
  6. spacer;  
  7. : row {  
  8.                   
  9.   : list_box {      
  10.    label = "列示图块名称 : ";
  11.    key = "dcl_blk_list";
  12.                         fixed_width = true;   
  13.    width = 25;     
  14.    height = 8;     
  15.    allow_accept = true;   
  16.    action = "(fill_blk_name)";   
  17.    }   

  18.   : text_part {     
  19.    label = " ";   
  20.    key = "dcl_blk_no";  
  21.    fixed_width = true;   
  22.    width = 12;   
  23.    height = 3;   
  24.    }   

  25.   }
  26. spacer;     
  27. : text_part {     
  28.   key = "txt_2";
  29.                height = 2;   
  30.                 }
  31.         : button {     
  32.   label = "浏览";
  33.   key = "key_insert";   
  34.   }   
  35. : boxed_column {   
  36.   : row{      
  37.    : text_part {     
  38.     label = "插入图块的名称: ";
  39.     key = "txt_1";   
  40.     fixed_width = true;   
  41.     width = 16;   
  42.     }  
  43.    : text_part {     
  44.     key = "dcl_blk_name";  
  45.     fixed_width = true;   
  46.     width = 20;   
  47.     }   

  48.    }   
  49.   spacer;   
  50.   }  
  51. spacer;   
  52. ok_cancel;   
  53. }  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2003-8-1 17:01:49 | 显示全部楼层
既可以合并创建图块库,也能从库中调用插到图形中。做个简单演示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-3-16 17:24:05 | 显示全部楼层
我加载以后出现错误:
命令: ins_blk
; 错误: quit / exit abort
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-22 08:56:37 | 显示全部楼层
這個程序我去年用看過. 呵呵. 我想請問問halibt大哥可不可以把你好個魚的dwg文傳到網上給我下載一會呀. 我很喜歡里面的那些魚. 謝了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-29 12:18:18 | 显示全部楼层
最初由 JOSDENNIS 发布
[B]這個程序我去年用看過. 呵呵. 我想請問問halibt大哥可不可以把你好個魚的dwg文傳到網上給我下載一會呀. 我很喜歡里面的那些魚. 謝了 [/B]
那些鱼都在这里的。可惜图纸中心暂时关闭了
http://www.xdcad.net/forum/showthread.php?s=&threadid=57562
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 15:00 , Processed in 0.259256 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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