找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1772|回复: 22

[求助] [求助]:一个导出图形的线,文本,图块,图层,文字样式的程序问题

[复制链接]
发表于 2005-12-5 13:02:24 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. (defun c:batchblit(/ filestring f curdoc activedoc)
  3.    (defun layerprint(doc / layersel layerobj layername f)
  4.      (setq layersel (vla-get-layers doc))
  5.      (setq filename (vla-get-name doc))
  6.      (setq f (open "d:\\output\\layers.txt" "a"))
  7.      (write-line filename f)
  8.      (vlax-for layerObj layersel
  9.         (setq layername (vla-get-name layerObj))
  10.         (write-line layername f)
  11.      )
  12.      (close f)
  13.      (princ "\n图层的列表信息已写入到 D:\\output\\layers.txt")
  14.      (princ)
  15.     )

  16.    (defun textstyleprint(doc / textstylesel textstyleobj textstylename f)
  17.      (setq filename (vla-get-name doc))
  18.      (setq textstylesel (vla-get-textstyles doc))
  19.      (setq f (open "d:\\output\\textstyles.txt" "a"))
  20.      (write-line filename f)
  21.      (vlax-for textstyleObj textstylesel
  22.         (setq textstylename (vla-get-name textstyleObj))
  23.         (write-line textstylename f)
  24.      )
  25.      (close f)
  26.      (princ "\n文字样式的列表信息已写入到 D:\\output\\textstyles.txt")
  27.      (princ)
  28.     )

  29.    (defun blockprint(doc / blocksel blockobj blockname i f)
  30.      (setq filename (vla-get-name doc))
  31.      (setq blocksel (vla-get-blocks doc) i 0)
  32.      (vlax-for blockObj blocksel
  33.        (setq blockname (vla-get-name blockObj))
  34.        (if (/= (substr blockname 1 1) "*")
  35.          (progn
  36.            (setq i (1+ i))
  37.          )
  38.        )
  39.      )
  40.      (if (/= i 0)
  41.        (progn
  42.           (setq f (open "d:\\output\\blocks.txt" "a"))
  43.           (write-line filename f)
  44.           (vlax-for blockObj blocksel
  45.              (setq blockname (vla-get-name blockObj))
  46.              (if (/= (substr blockname 1 1) "*")
  47.                 (write-line blockname f)
  48.              )
  49.           )
  50.           (close f)
  51.           (princ "\n文字样式的列表信息已写入到 D:\\output\\blocks.txt")
  52.        )
  53.        (princ "\n******图中不存在有名图块! ******")
  54.      )
  55.      (princ)
  56.     )

  57.    (defun information(doc / filename linenumber blocknumber textnumber linesel blocksel

  58. textsel f)
  59.      (setq filename (vla-get-name doc))
  60.      (vla-activate doc)
  61.      (setq linesel (ssget "X" '((0 . "*LINE"))))
  62.      (setq blocksel (ssget "X" '((0 . "INSERT"))))
  63.      (setq textsel (ssget "X" '((0 . "*TEXT"))))
  64.      (if (/= linesel nil)
  65.          (setq linenumber (sslength linesel))
  66.          (setq linenumber 0)
  67.      )
  68.      (if (/= blocksel nil)
  69.          (setq blocknumber (sslength blocksel))
  70.          (setq blocknumber 0)
  71.      )
  72.      (if (/= textsel nil)
  73.          (setq textnumber (sslength textsel))
  74.          (setq textnumber 0)
  75.      )
  76.      (setq f (open "d:\\output\\information.txt" "a"))
  77.      (write-line (strcat filename
  78.                          "         "
  79.                          (itoa linenumber)
  80.                          "         "
  81.                          (itoa blocknumber)
  82.                          "         "
  83.                          (itoa textnumber)
  84.                  )
  85.                          f)
  86.      (close f)
  87.      (princ "\n线、图块、文字的数量信息已写入到 D:\\output\\information.txt")
  88.      (princ)
  89.     )
  90.   
  91.   (vl-load-com)
  92.   (setq AcadObject (vlax-get-acad-object)
  93.         AcadDocument (vla-get-ActiveDocument AcadObject)
  94.   )
  95.   (setq Documents (vla-get-Documents (vla-get-Application AcadDocument)))
  96.   (setq f (open "d:\\output\\dwgs.txt" "r"))
  97.   (if (null f)
  98.      (alert "d:\\output\\dwgs.txt文件不存在!\n请建立!")
  99.      (progn
  100.         (while (setq filestring (read-line f))
  101.            (setq activedoc (vla-open Documents filestring))
  102.            (if (/= activedoc nil)
  103.               (progn
  104.                  (layerprint activedoc)
  105.                  (information activedoc)
  106.                  (blockprint activedoc)
  107.                  (textstyleprint activedoc)
  108.                  (vla-close activedoc)
  109.               )
  110.            )
  111.         )
  112.         (close f)
  113.      )
  114.   )
  115.   (princ)
  116. )
  117.   [/FONT]


这个程序的目的是将存在的文件打开,并将新打开的文件的图层,图块(种类),文字样式和线,文本,块(个数)的数量信息分别导入到相关的文件中。
导出的线,文本,块的数量信息,是当前图形文件的,而不是新打开的文件的;图层,图块,文字样式信息也不完全相符,特别是文字样式信息,有时候出现前一个图形文件的某个文字样式信息,不知道问题出在什么地方,请高手帮忙给调一下。谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-6 08:42:47 | 显示全部楼层
不大会写这种vb类型的lisp
胡弄了一个小时,才算搞定
程序如下
用的时候,dwgs.txt里面应该是类似k:\seven2.dwg的字样
版主说的问题主要出现在information这一段,其他的块,层,文字式样都
是没有问题的。
原问题的出错的地方在于其information段与layerprint等段不一样
它采用了(setq linesel (ssget "X" '((0 . "LINE"))))这种语句
而其他的子程序采用的是 (setq layersel (vla-get-layers doc))
     (vlax-for layerObj layersel)
     这样子的VL语句,因此information段出现了在当前图形内进行找线
     找文字的做法。
     现在我主要是修改成为(setq mSpace (vla-get-ModelSpace doc))
     (VLAX-FOR entry mSpace)
     的VL写法,这样子就不会导致文件空间的混乱
     试了一下,大概是没有问题的。
     不知道在楼主那里如何


  1.     (defun c:batchblit(/ filestring f curdoc activedoc)
  2.    (defun layerprint(doc / layersel layerobj layername f)
  3.      (setq layersel (vla-get-layers doc))
  4.      (setq filename (vla-get-name doc))
  5.      (setq f (open "d:\\output\\layers.txt" "a"))
  6.      (write-line filename f)
  7.      (vlax-for layerObj layersel
  8.         (setq layername (vla-get-name layerObj))
  9.         (write-line layername f)
  10.      )
  11.      (close f)
  12.      (princ "\n图层的列表信息已写入到 D:\\output\\layers.txt")
  13.      (princ)
  14.     )

  15.    (defun textstyleprint(doc / textstylesel textstyleobj textstylename f)
  16.      (setq filename (vla-get-name doc))
  17.      (setq textstylesel (vla-get-textstyles doc))
  18.      (setq f (open "d:\\output\\textstyles.txt" "a"))
  19.      (write-line filename f)
  20.      (vlax-for textstyleObj textstylesel
  21.         (setq textstylename (vla-get-name textstyleObj))
  22.         (write-line textstylename f)
  23.      )
  24.      (close f)
  25.      (princ "\n文字样式的列表信息已写入到 D:\\output\\textstyles.txt")
  26.      (princ)
  27.     )

  28.    (defun blockprint(doc / blocksel blockobj blockname i f)
  29.      (setq filename (vla-get-name doc))
  30.      (setq blocksel (vla-get-blocks doc) i 0)
  31.      (vlax-for blockObj blocksel
  32.        (setq blockname (vla-get-name blockObj))
  33.        (if (/= (substr blockname 1 1) "*")
  34.          (progn
  35.            (setq i (1+ i))
  36.          )
  37.        )
  38.      )
  39.      (if (/= i 0)
  40.        (progn
  41.           (setq f (open "d:\\output\\blocks.txt" "a"))
  42.           (write-line filename f)
  43.           (vlax-for blockObj blocksel
  44.              (setq blockname (vla-get-name blockObj))
  45.              (if (/= (substr blockname 1 1) "*")
  46.                 (write-line blockname f)
  47.              )
  48.           )
  49.           (close f)
  50.           (princ "\n文字样式的列表信息已写入到 D:\\output\\blocks.txt")
  51.        )
  52.        (princ "\n******图中不存在有名图块! ******")
  53.      )
  54.      (princ)
  55.     )

  56.    (defun information(doc / filename linenumber blocknumber textnumber linesel blocksel

  57. textsel f)
  58.      (setq filename (vla-get-name doc))
  59.      ;(vla-activate doc)
  60.      (setq mSpace (vla-get-ModelSpace doc))
  61.      (setq i1 0 i2 0 i3 0)
  62.      (VLAX-FOR entry mSpace
  63.     (setq objName (vla-get-ObjectName entry))
  64. (if (wcmatch objname "*ine") (setq i1 (1+ i1)))
  65. (if (wcmatch objname "*Text") (setq i2 (1+ i2)))
  66. (if (wcmatch objname "*Block*") (setq i3 (1+ i3)))
  67.   )
  68.   (princ)
  69.      (setq f (open "d:\\output\\information.txt" "a"))
  70.      (write-line (strcat filename
  71.                          "         "
  72.                          (itoa i1)
  73.                          "         "
  74.                          (itoa i2)
  75.                          "         "
  76.                          (itoa i3)
  77.                  )
  78.                          f)
  79.      (close f)
  80.      (princ "\n线、图块、文字的数量信息已写入到 D:\\output\\information.txt")
  81.      (princ)
  82.     )
  83.   
  84.   (vl-load-com)
  85.   (setq AcadObject (vlax-get-acad-object)
  86.         AcadDocument (vla-get-ActiveDocument AcadObject)
  87.   )
  88.   
  89.   (setq Documents (vla-get-Documents (vla-get-Application AcadDocument)))
  90.   
  91.   
  92.   (setq f (open "d:\\output\\dwgs.txt" "r"))
  93.   (if (null f)
  94.      (alert "d:\\output\\dwgs.txt文件不存在!\n请建立!")
  95.      (progn
  96.         (while (setq filestring (read-line f))
  97.         
  98.            (setq activedoc (vla-open Documents filestring))
  99.            (if (/= activedoc nil)
  100.               (progn
  101.               (layerprint activedoc)
  102.                (information activedoc)
  103.                (blockprint activedoc)
  104.                (textstyleprint activedoc)
  105.                  (vla-close activedoc)
  106.               )
  107.            )
  108.              
  109.           
  110.           
  111.         )
  112.         (close f)
  113.      )
  114.   )
  115.   (princ)
  116. )

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

使用道具 举报

 楼主| 发表于 2005-12-6 14:14:16 | 显示全部楼层
楼上改过的程序有两个问题,
1、不能将文件路径中的“\\”改成“\”;
2、不能将新打开的文件设成当前文件,否则程序将会中断,得点击那个运行程序的文件才能继续。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-6 17:06:52 | 显示全部楼层
第一个问题比较奇怪,我在Lisplink中是\\的,来了这边变成单个\,可能是格式问题,容我改过
查了一下,我原来用的是php代码,有这个bug,现在改成code代码,就可以了

第二个问题我并没有改到,原程序似乎也有如此问题(不知道在楼主那里是否没有,
如若没有,倒是有点想不通)
仔细查了一下,是 (vla-activate doc)的问题,把它去掉应该就可以了
二楼的程序重新修改过了,楼主看看是不是已经可以:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-6 17:30:02 | 显示全部楼层
我前面说得那两个问题我都已经改过了。
现在的问题就是文字样式,不完全正确,有的时候这个图形的文字样式会出现上一个图形文件的文字样式,(很少出现,但是我碰到了)。

老是打开图形,执行的速度比较慢,有没有不打开的图形就能获得上面说到的信息的方法??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-6 17:45:43 | 显示全部楼层
:)不想打开图形的话,我认为可以用什么软件批量转化为DXF
直接用LISP对DXF文本进行查询就可以
要是懂的DWG的格式,应该也可以这样作吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-6 18:33:14 | 显示全部楼层
不打开图形的方法要使用ObjectDBX,LUCAS发过很多很好的例子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-6 22:20:35 | 显示全部楼层
EACHY,估计我一时半会也学不会,还是麻烦你给我做一个吧。先谢谢你了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-7 02:58:06 | 显示全部楼层
写了一部分,用ObjectDBX就没有 SSGET 了,只能 Vlax-for Modelspace。剩下的工作你自己先修改了。

声明:本程序只是一个思路,并不能运行,包括错误。


  1. (defun ms_getfilem (maxfs flags diatl filter initdir / wincomdlg)
  2.   (vl-load-com)
  3.   (if (not (vlax-create-object "mscomdlg.commondialog"))
  4.     (vl-registry-write
  5.       "HKEY_CLASSES_ROOT\\LICENSES\\4d553650-6abe-11cf-8adb-00aa00c00905"
  6.       ""
  7.       "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
  8.     )
  9.   )
  10.   (setq wincomdlg (vlax-create-object "mscomdlg.commondialog"))
  11.   (vlax-put-property wincomdlg 'cancelerror :vlax-false)
  12.   (vlax-put-property wincomdlg 'maxfilesize maxfs)
  13.   (vlax-put-property
  14.     wincomdlg
  15.     'flags
  16.     flags
  17.   )
  18.   (vlax-put-property wincomdlg 'dialogtitle diatl)
  19.   (vlax-put-property
  20.     wincomdlg
  21.     'filter
  22.     filter
  23.   )
  24.   (vlax-put-property wincomdlg 'initdir initdir)
  25.   (vlax-invoke-method wincomdlg 'showopen)
  26.   (setq filem (vlax-get wincomdlg 'filename))
  27.   (vlax-release-object wincomdlg)
  28.   (fstr->lst filem)
  29. )
  30. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31. (defun fstr->lst (fm / n)
  32.   (setq ff nil)
  33.   (if (vl-string-position (ascii "\000") fm)
  34.     (progn
  35.       (while (vl-string-position (ascii "\000") fm)
  36.         (setq n (vl-string-position (ascii "\000") fm))
  37.         (setq ff (append ff (list (substr fm 1 n))))
  38.         (setq fm (substr fm (+ n 2) (- (strlen fm) n 1)))
  39.       )
  40.       (setq ff (append ff (list fm)))
  41.     )
  42.     (progn
  43.       (setq ff (vl-filename-directory fm))
  44.       (setq ff (list ff (vl-string-subst "" ff fm)))
  45.     )
  46.   )
  47. )
  48. (defun c:tt (/ app dbxdoc diatl        dwgs filename filter flags initdir maxfs
  49.              path)
  50.   (defun layerprint (doc / layersel layerobj layername f)
  51.     (setq layersel (vla-get-layers doc))
  52.     (setq filename (vla-get-name doc))
  53.     (setq f (open "d:\\output\\layers.txt" "a"))
  54.     (write-line filename f)
  55.     (vlax-for layerObj layersel
  56.       (setq layername (vla-get-name layerObj))
  57.       (write-line layername f)
  58.     )
  59.     (close f)
  60.     (princ "\n图层的列表信息已写入到 D:\\output\\layers.txt")
  61.     (princ)
  62.   )

  63.   (defun textstyleprint
  64.          (doc / textstylesel textstyleobj textstylename f)
  65.     (setq filename (vla-get-name doc))
  66.     (setq textstylesel (vla-get-textstyles doc))
  67.     (setq f (open "d:\\output\\textstyles.txt" "a"))
  68.     (write-line filename f)
  69.     (vlax-for textstyleObj textstylesel
  70.       (setq textstylename (vla-get-name textstyleObj))
  71.       (write-line textstylename f)
  72.     )
  73.     (close f)
  74.     (princ
  75.       "\n文字样式的列表信息已写入到 D:\\output\\textstyles.txt"
  76.     )
  77.     (princ)
  78.   )

  79.   (defun blockprint (doc / blocksel blockobj blockname i f)
  80.     (setq filename (vla-get-name doc))
  81.     (setq blocksel (vla-get-blocks doc)
  82.           i           0
  83.     )
  84.     (vlax-for blockObj blocksel
  85.       (setq blockname (vla-get-name blockObj))
  86.       (if (/= (substr blockname 1 1) "*")
  87.         (progn
  88.           (setq i (1+ i))
  89.         )
  90.       )
  91.     )
  92.     (if        (/= i 0)
  93.       (progn
  94.         (setq f (open "d:\\output\\blocks.txt" "a"))
  95.         (write-line filename f)
  96.         (vlax-for blockObj blocksel
  97.           (setq blockname (vla-get-name blockObj))
  98.           (if (/= (substr blockname 1 1) "*")
  99.             (write-line blockname f)
  100.           )
  101.         )
  102.         (close f)
  103.         (princ "\n文字样式的列表信息已写入到 D:\\output\\blocks.txt"
  104.         )
  105.       )
  106.       (princ "\n******图中不存在有名图块! ******")
  107.     )
  108.     (princ)
  109.   )

  110.   (defun information (doc          /              filename          linenumber
  111.                       blocknumber textnumber  linesel          blocksel
  112.                       textsel          f
  113.                      )
  114.     (setq filename (vla-get-name doc))
  115.     (vla-activate doc)
  116.     (setq linesel (ssget "X" '((0 . "*LINE"))))
  117.     (setq blocksel (ssget "X" '((0 . "INSERT"))))
  118.     (setq textsel (ssget "X" '((0 . "*TEXT"))))
  119.     (if        (/= linesel nil)
  120.       (setq linenumber (sslength linesel))
  121.       (setq linenumber 0)
  122.     )
  123.     (if        (/= blocksel nil)
  124.       (setq blocknumber (sslength blocksel))
  125.       (setq blocknumber 0)
  126.     )
  127.     (if        (/= textsel nil)
  128.       (setq textnumber (sslength textsel))
  129.       (setq textnumber 0)
  130.     )
  131.     (setq f (open "d:\\output\\information.txt" "a"))
  132.     (write-line
  133.       (strcat filename
  134.               "         "
  135.               (itoa linenumber)
  136.               "         "
  137.               (itoa blocknumber)
  138.               "         "
  139.               (itoa textnumber)
  140.       )
  141.       f
  142.     )
  143.     (close f)
  144.     (princ
  145.       "\n线、图块、文字的数量信息已写入到 D:\\output\\information.txt"
  146.     )
  147.     (princ)
  148.   )
  149.   (setq        maxfs        32767
  150.         flags        (+ 4 512 524288 1048576 1024)
  151.         diatl        "请选择"
  152.         filter        "处理(*.dwg)|*.dwg"
  153.         initdir        ""
  154.   )
  155.   (if path
  156.     (setq initdir path)
  157.     (setq initdir "")
  158.   )
  159.   (setq dwgs (ms_getfilem maxfs flags diatl filter initdir))
  160.   (if (/= (car dwgs) "")
  161.     (progn
  162.       (setq app (vlax-get-acad-object))
  163.       (setq path (car dwgs)
  164.             dwgs (cdr dwgs)
  165.       )
  166.       (foreach fn dwgs
  167.         (setq dbxdoc (vla-getinterfaceobject
  168.                        app
  169.                        "objectdbx.axdbdocument.16"
  170.                      )
  171.         )
  172.         (vla-open dbxdoc (strcat path fn))
  173.         (layerprint dbxdoc)
  174.         (information dbxdoc)
  175.         (blockprint dbxdoc)
  176.         (textstyleprint dbxdoc)
  177.         (vlax-release-object dbxdoc)
  178.       )
  179.     )
  180.   )
  181.   (princ)
  182. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-8 18:47:53 | 显示全部楼层
下午抽时间写完了,要是会VB的话是不是可以写个EXE文件,不用启动CAD就能写出需要的信息:)
  1. ;|

  2. 第一次使用 ObjectDBX,其实在Lisp中,ObjectDBX使用的
  3. 方法和在Activedocument中类似的。

  4. XP+CAD2006 基本可用

  5. 尚需完善部分

  6. 1 状态行进度提示可以更直观些
  7. 2 对 dwgs 的处理可以更好些

  8. written by eachy [[url]www.xdcad.net[/url]] 2005.12.8
  9. |;
  10. (defun xdl-getfiles (msg ext / x erg)
  11.   (if (or (setq x (vlax-create-object "UserAccounts.CommonDialog"))
  12.           (setq x (vlax-create-object "MSComDlg.CommonDialog"))
  13.       )
  14.     (progn (vlax-put-property x "Filename" ext)
  15.            (vlax-put-property x "Filter" ext)
  16.            (vlax-put-property x "Flags" 512)
  17.            (setq r (vlax-invoke-method x 'ShowOpen))
  18.            (if (= 0 r)
  19.              nil
  20.              (vlax-get-property x 'FileName)
  21.            )
  22.     )
  23.     nil
  24.   )
  25. )
  26. (defun c:tt (/ myerr olderr dwgs app path prossfn)
  27.   (defun prossfn (fn            /              layers        blocks          textstyles
  28.                   blks            blockname bn        tn          ln
  29.                   textstylename              ename        ent          layername
  30.                   f            openfl
  31.                  )
  32.     (defun openfl (fl / file)
  33.       (if (not (setq file (open fl "a")))
  34.         (open fl "w")
  35.         file
  36.       )
  37.     )
  38.     (grtext -2
  39.             (strcat "正在处理  "
  40.                     fn
  41.             )
  42.     )
  43.     (vla-open dbxdoc fn)
  44.     ;;get layers info
  45.     (setq layers     (vla-get-layers dbxdoc)
  46.           textstyles (vla-get-textstyles dbxdoc)
  47.           blocks     (vla-get-blocks dbxdoc)
  48.     )
  49.     (setq f (openfl "d:\\output\\layers.txt"))
  50.     (write-line fn f)
  51.     (vlax-for layerObj layers
  52.       (setq layername (vla-get-name layerObj))
  53.       (write-line layername f)
  54.     )
  55.     (close f)
  56.     ;;get textstyles info
  57.     (setq f (openfl "d:\\output\\textstyles.txt"))
  58.     (write-line fn f)
  59.     (vlax-for textstyleObj textstyles
  60.       (setq textstylename (vla-get-name textstyleObj))
  61.       (write-line textstylename f)
  62.     )
  63.     (close f)
  64.     ;;get blocks info
  65.     (vlax-for blockobj blocks
  66.       (setq blockname (vla-get-name blockObj))
  67.       (if (/= (substr blockname 1 1) "*")
  68.         (setq blks (cons blockname blks))
  69.       )
  70.     )
  71.     (if        blks
  72.       (progn
  73.         (setq f (openfl "d:\\output\\blocks.txt"))
  74.         (write-line fn f)
  75.         (foreach ff blks
  76.           (write-line ff f)
  77.         )
  78.         (close f)
  79.       )
  80.     )
  81.     ;;get entity info
  82.     (vlax-for ent (vla-get-modelspace dbxdoc)
  83.       (setq ename (strcase (vla-get-objectname ent)))
  84.       (cond
  85.         ((wcmatch ename "*LINE")
  86.          (if (not ln)
  87.            (setq ln 1)
  88.            (setq ln (1+ ln))
  89.          )
  90.         )
  91.         ((wcmatch ename "INSERT")
  92.          (if (not bn)
  93.            (setq bn 1)
  94.            (setq bn (1+ bn))
  95.          )
  96.         )
  97.         ((wcmatch ename "*TEXT")
  98.          (if (not tn)
  99.            (setq tn 1)
  100.            (setq tn (1+ tn))
  101.          )
  102.         )
  103.         (t)
  104.       )
  105.     )
  106.     (setq f (openfl "d:\\output\\information.txt"))
  107.     (write-line
  108.       (strcat fn
  109.               "         "
  110.               (if (not ln)
  111.                 "0"
  112.                 (itoa ln)
  113.               )
  114.               "         "
  115.               (if (not bn)
  116.                 "0"
  117.                 (itoa bn)
  118.               )
  119.               "         "
  120.               (if (not tn)
  121.                 "0"
  122.                 (itoa tn)
  123.               )
  124.       )
  125.       f
  126.     )
  127.     (close f)
  128.   )
  129.   (defun myerr (msg)
  130.     (if        (/= msg "Cancel")
  131.       (princ "\n*Cancel*")
  132.     )
  133.     (vlax-release-object dbxdoc)
  134.     (setq *error* olderr)
  135.     (princ)
  136.   )
  137.   ;;main program  
  138.   (if (and (setq dwgs (xdl-getfiles "选择需处理图形" "*.dwg"))
  139.            (/= dwgs "*.dwg") ;_ canceled
  140.       )
  141.     (progn
  142.       (setq olderr  *error*
  143.             *error* myerr
  144.       )
  145.       (setq app           (vlax-get-acad-object)
  146.             dbxdoc (vla-getinterfaceobject
  147.                      app
  148.                      "objectdbx.axdbdocument.16"
  149.                    ) ;_Only For 2004+
  150.       )
  151.       (if (vl-string-search " " dwgs)
  152.         (progn
  153.           (setq        dwgs (mapcar 'vl-princ-to-string
  154.                              (read (strcat "(" dwgs ")"))
  155.                      )
  156.                 path (car dwgs)
  157.                 dwgs (mapcar '(lambda (x) (strcat path x ".dwg"))
  158.                              (cdr dwgs)
  159.                      )
  160.           )
  161.           (foreach fn dwgs
  162.             (prossfn fn)
  163.           )
  164.         )
  165.         (prossfn dwgs)
  166.       )
  167.       (vlax-release-object dbxdoc)
  168.       (setq *error* olderr)
  169.     )
  170.   )
  171.   (princ)
  172. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-9 12:03:39 | 显示全部楼层
EACHY,单个双击文件的时候可以导出图形文件的信息,选择全部文件的时候不执行,也没有错误信息。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-9 13:11:39 | 显示全部楼层
你有先建立"d:\\output" 这个目录吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-12-9 17:14:59 | 显示全部楼层

  1. ;;ObjectDBX 要先注册
  2. (defun REGISTEROBJECTDBX (/ DBXSERVER)
  3.   (cond
  4.     ((vl-registry-read
  5.        "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  6.      )
  7.     )
  8.     ((not (setq DBXSERVER (findfile "AxDb15.dll")))
  9.      (alert "错误: Can't locate ObjectDBX Library (AxDb15.dll)")
  10.     )
  11.     (t
  12.      (startapp "regsvr32.exe" (strcat "/s "" DBXSERVER """))
  13.      (or
  14.        (vl-registry-read
  15.          "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  16.        )
  17.        (alert
  18.          "错误: Failed to register ObjectDBX ActiveX services."
  19.        )
  20.      )
  21.     )
  22.   )
  23. )

  24. (defun DBX ()
  25.      (if (> (atoi (getvar "AcadVer")) 15)
  26.     (setq DBXDOC (vla-getinterfaceobject
  27.                    (vlax-get-acad-object)
  28.                    "ObjectDBX.AxDbDocument.16"
  29.                  )
  30.     )
  31.     (progn
  32.       (if (not (REGISTEROBJECTDBX))
  33.         (exit)
  34.       )
  35.       (setq DBXDOC (vla-getinterfaceobject
  36.                      (vlax-get-acad-object)
  37.                      "ObjectDBX.AxDbDocument"
  38.                    )
  39.       )
  40.     )
  41.   )
  42.   (if (not DBXDOC)
  43.     (exit)
  44.   )
  45. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 20:22 , Processed in 0.243419 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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