按层或图案填充区域
我正在寻找一个lisp例程,该例程将整个图形或图形中选定区域的图层和/或图案填充区域导出到excel文件。我有大量的图纸,我必须通过(超过100),并必须准备一份工程量清单。如有任何帮助,我们将不胜感激。 这里有一个简单的例子:
(defun c:hareas (/ _writefile a b key out s)
(defun _writefile (filename lst / file)
(cond ((and (eq 'str (type filename)) (setq file (open filename "w")))
(foreach x lst (write-line x file))
(close file)
filename
)
)
)
(initget 0 "Pattern Layer")
(if (and (or (setq key (getkword "\nPattern or LayerName [<Pattern>]: ")) (setq key "Pattern"))
(setq s (ssget '((0 . "hatch"))))
)
(progn (setq s
(mapcar
'(lambda (x)
(cons (if (= "Pattern" key)
(vla-get-patternname x)
(vla-get-layer x)
)
(if (vl-catch-all-error-p (setq a (vl-catch-all-apply 'vla-get-area (list x))))
0.0
a
)
)
)
(mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
)
)
(foreach h s
(if (setq b (assoc (car h) out))
(setq out (subst (cons (car b) (+ (cdr b) (cdr h))) b out))
(setq out (cons h out))
)
)
(print (_writefile
(strcat (getvar 'dwgprefix)
(vl-filename-base (getvar 'dwgname))
"_Hatch_"
key
"_Areas.csv"
)
(mapcar '(lambda (x) (strcat (car x) "," (vl-princ-to-string (cdr x)))) out)
)
)
(if (setq b (vl-remove-if-not '(lambda (x) (= 0 (cdr x))) out))
(alert (strcat (itoa (length b)) " hatches have no area property!"))
)
)
)
(princ)
)
(vl-load-com)
感谢ronjonp,它可以很好地处理这个模式,但是,我似乎无法选择层名称,尝试输入层名称本身,但它不起作用。此外,例程对整个图形执行此操作,还需要它覆盖一个选择集。
更改:
(setq s (ssget "_X" '((0 . "hatch"))))
收件人:
(setq s (ssget '((0 . "hatch"))))
编写代码的方式是按图层名称或填充图案名称对图案填充进行计数。没有内置过滤器。
我还在上面添加了一个关于没有面积属性的图案填充的警报:
(if (setq b (vl-remove-if-not '(lambda (x) (= 0 (cdr x))) out))
(alert (strcat (itoa (length b)) " hatches have no area property!"))
) 嗨,ronjonp,很抱歉,我没能早点给你回复,代码仍然无法按层获取输出,你知道我哪里出错了吗? 这是我想要的结果
hatchareas图案。csv
hatchareas layername。csv 您正在寻找的模式的输出甚至不接近您的初始请求?他们层输出(我猜每层的总数)应该是好的,除了它不创建标题。
图案比例颜色区域
Ar Con 10红色20
Ar Con 50红色30
Ar Con 50蓝色45 谢谢你的帮助ronjonp
页:
[1]