乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 40|回复: 7

[编程交流] 按层或图案填充区域

[复制链接]

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 15:51:30 | 显示全部楼层 |阅读模式
我正在寻找一个lisp例程,该例程将整个图形或图形中选定区域的图层和/或图案填充区域导出到excel文件。
 
我有大量的图纸,我必须通过(超过100),并必须准备一份工程量清单。如有任何帮助,我们将不胜感激。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:05:24 | 显示全部楼层
这里有一个简单的例子:
  1. (defun c:hareas        (/ _writefile a b key out s)
  2. (defun _writefile (filename lst / file)
  3.    (cond ((and (eq 'str (type filename)) (setq file (open filename "w")))
  4.    (foreach x lst (write-line x file))
  5.    (close file)
  6.    filename
  7.   )
  8.    )
  9. )
  10. (initget 0 "Pattern Layer")
  11. (if (and (or (setq key (getkword "\nPattern or LayerName [<Pattern>]: ")) (setq key "Pattern"))
  12.    (setq s (ssget '((0 . "hatch"))))
  13.      )
  14.    (progn (setq s
  15.           (mapcar
  16.             '(lambda (x)
  17.                (cons (if (= "Pattern" key)
  18.                        (vla-get-patternname x)
  19.                        (vla-get-layer x)
  20.                      )
  21.                      (if (vl-catch-all-error-p (setq a (vl-catch-all-apply 'vla-get-area (list x))))
  22.                        0.0
  23.                        a
  24.                      )
  25.                )
  26.              )
  27.             (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
  28.           )
  29.    )
  30.    (foreach h s
  31.      (if (setq b (assoc (car h) out))
  32.        (setq out (subst (cons (car b) (+ (cdr b) (cdr h))) b out))
  33.        (setq out (cons h out))
  34.      )
  35.    )
  36.    (print (_writefile
  37.             (strcat (getvar 'dwgprefix)
  38.                     (vl-filename-base (getvar 'dwgname))
  39.                     "_Hatch_"
  40.                     key
  41.                     "_Areas.csv"
  42.             )
  43.             (mapcar '(lambda (x) (strcat (car x) "," (vl-princ-to-string (cdr x)))) out)
  44.           )
  45.    )
  46.    (if (setq b (vl-remove-if-not '(lambda (x) (= 0 (cdr x))) out))
  47.      (alert (strcat (itoa (length b)) " hatches have no area property!"))
  48.    )
  49.    )
  50. )
  51. (princ)
  52. )
  53. (vl-load-com)
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:10:06 | 显示全部楼层
感谢ronjonp,它可以很好地处理这个模式,但是,我似乎无法选择层名称,尝试输入层名称本身,但它不起作用。此外,例程对整个图形执行此操作,还需要它覆盖一个选择集。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:24:49 | 显示全部楼层
 
更改:
  1. (setq s (ssget "_X" '((0 . "hatch"))))

收件人:
  1. (setq s (ssget '((0 . "hatch"))))

 
编写代码的方式是按图层名称或填充图案名称对图案填充进行计数。没有内置过滤器。
 
我还在上面添加了一个关于没有面积属性的图案填充的警报:
  1.            (if (setq b (vl-remove-if-not '(lambda (x) (= 0 (cdr x))) out))
  2.      (alert (strcat (itoa (length b)) " hatches have no area property!"))
  3.    )
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:33:41 | 显示全部楼层
嗨,ronjonp,很抱歉,我没能早点给你回复,代码仍然无法按层获取输出,你知道我哪里出错了吗?
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:41:58 | 显示全部楼层
这是我想要的结果
hatchareas图案。csv
hatchareas layername。csv
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:49:04 | 显示全部楼层
您正在寻找的模式的输出甚至不接近您的初始请求?他们层输出(我猜每层的总数)应该是好的,除了它不创建标题。
 
图案比例颜色区域
Ar Con 10红色20
Ar Con 50红色30
Ar Con 50蓝色45
回复

使用道具 举报

33

主题

117

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:55:06 | 显示全部楼层
谢谢你的帮助ronjonp
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:08 , Processed in 1.377424 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表