spp_wall 发表于 2014-10-23 20:25:06

帮忙看看这个提取属性块的程序!

(defun c:tt (/ d r ss n obj atts)
(while (setq d (tblnext "block" (null d)))
    (setq r (cons (cdr (assoc 2 d)) r))
)
(and r
       (setq filename (getfiled "属性输出文件名" "" "csv" 1))
       )
(if filename
    (progn
      (setq f (open filename "w"))
(foreach name r
   (setq ss (ssget "X" '((0 . "INSERT"))));选择对象,修改这里.
    ;(ssget ss(SSGET "X" '((0 . "INSERT") (8 . "目录")(66 . 1)) ));怎么全选目录这个属性块
    (if ss
      (progn
(setq atts (append
   (vlax-invoke (setq obj (vlax-ename->vla-object (ssname ss 0))) 'GetConstantAttributes)
   (vlax-invoke obj 'GetAttributes)
   )
   )
      (princ "序号," f)
      (foreach att atts
      (princ (vla-get-TagString att) f)
      (princ "," f)
      );求出属性列表,写表头
      (princ "\n" f)
      (setq n -1)
      (repeat (sslength ss)
      (setq obj (vlax-ename->vla-object (ssname ss (setq n (1+ n)))))
      (setq atts (append
       (vlax-invoke obj 'GetConstantAttributes)
       (vlax-invoke obj 'GetAttributes)
       )
       )
(princ (1+ n) f) (princ "," f)
      (foreach att atts
          (princ (vla-get-TextString att) f) (princ "," f)
          )
      (princ "\n" f);写出属性值
      )
      )
      )
    )
      (close f)
)
    )
)
有几个问题:
1:现在提取的数据会重复3次!
2:能否只提取 目录 这个属性块的值,我改了无法实现
3:能不能实现批量提取一个文件夹的数据!

newer 发表于 2014-10-24 00:10:20

;(ssget ss(SSGET "X" '((0 . "INSERT") (8 . "目录")(66 . 1)) ));怎么全选目录这个属性块

祖玛8是层名啊。 而且属性是子实体,你提取不到的,你得先得到属性实体,再判断是否你需要的。

spp_wall 发表于 2014-10-24 11:42:22

我的层名改成目录好像也不行。

newer 发表于 2014-10-24 13:12:40

spp_wall 发表于 2014-10-24 11:42
我的层名改成目录好像也不行。

直接是SSGET不了的。

Free-Lancer 发表于 2014-10-24 13:55:04

用vla只能一次都提出来再用tag判断

spp_wall 发表于 2014-10-24 14:44:01

newer 发表于 2014-10-24 13:12
直接是SSGET不了的。

那有啥办法么!!!!

newer 发表于 2014-10-24 14:47:23

spp_wall 发表于 2014-10-24 14:44
那有啥办法么!!!!

选完INSERT后,自己去找他下面的属性,判断啊。

zxq0220 发表于 2014-10-24 20:14:43

(defun c:tt (/ d r ss n obj atts)
(while (setq d (tblnext "BLOCK" (null d)))
    (setq r (cons (cdr (assoc 2 d)) r))
)
(and r (setq filename (getfiled "属性输出文件名" "" "csv" 1)))
(if filename (progn
   (setq f (open filename "w"))
   (foreach name r
    (setq ss (ssget "X" (list '(0 . "INSERT")(cons 2 name)'(8 . "目录")'(66 . 1))))
;    (setq ss (ssget "X" '((0 . "INSERT"))));选择对象,修改这里.
    (if ss (progn
   (setq atts (append
       (vlax-invoke (setq obj (vlax-ename->vla-object (ssname ss 0))) 'GetConstantAttributes)
       (vlax-invoke obj 'GetAttributes)
      )
   )
   (princ "序号," f)
   (foreach att atts
      (princ (vla-get-tagstring att) f)
      (princ "," f)
      );求出属性列表,写表头
      (princ "\n" f)
      (setq n -1)
      (repeat (sslength ss)
       (setq obj (vlax-ename->vla-object (ssname ss (setq n (1+ n)))))
       (setq atts (append
         (vlax-invoke obj 'GetConstantAttributes)
         (vlax-invoke obj 'GetAttributes)
      )
       )
       (princ (1+ n) f) (princ "," f)
       (foreach att atts(princ (vla-get-textstring att) f) (princ "," f))
       (princ "\n" f);写出属性值
   )
    ))
   )
   (close f)
))
(princ)
)

spp_wall 发表于 2014-10-24 22:34:13

zxq0220 发表于 2014-10-24 20:14


好像只能对打开的图有效,能选择文件夹批量处理 一个文件夹得图纸么!

Free-Lancer 发表于 2014-10-25 20:04:54

spp_wall 发表于 2014-10-24 22:34
好像只能对打开的图有效,能选择文件夹批量处理 一个文件夹得图纸么!

需要使用 ObjectDBX

spp_wall 发表于 2014-10-25 22:19:16

Free-Lancer 发表于 2014-10-25 20:04
需要使用 ObjectDBX

本人功力不够 !!!

liuchong1988 发表于 2014-10-29 13:21:39

溜达溜达!!!!!

zxc001975cvb 发表于 2024-2-27 14:01:40

学习学习!
页: [1]
查看完整版本: 帮忙看看这个提取属性块的程序!