找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 460|回复: 9

[求助] 求填充图案面积,请大师赐教,感谢!

[复制链接]

已领礼包: 272个

财富等级: 日进斗金

发表于 2020-4-7 23:29:46 | 显示全部楼层 |阅读模式
悬赏20D豆未解决
求填充图案面积,我论坛里找到个程序,可是统计出来的结果不正确,麻烦大师给看看解决下,请大师赐教,感谢!
(defun c:XDTB_TJHATCH (/ blk clr e ha hascl head height keyword ln lst lyr                         mode name pt row scl ss str tarea tb x y                      )  (defun _prompt ()    (xdrx_prompt "\n统计方式:按*" (cond                                     ((= #mode 0)                                       (setq head (list "图  例" "图  层"                                                        "数 量" "总面积"                                                  )                                       )                                       "图层"                                     )                                     ((= #mode 1)                                       (setq head (list "图  例" "颜色号"                                                        "数 量" "总面积"                                                  )                                       )                                       "颜色"                                     )                                     (t                                       (setq head (list "图  例" "模  式"                                                        "数 量" "总面积"                                                  )                                       )                                       "模式"                                     )                                   ) "*"    )  )  (defun _keyword (keyword)    (cond      ((= keyword "TC")        (setq #mode 0)      )      ((= keyword "YS")        (setq #mode 1)      )      (t        (setq #mode 2)      )    )    (_prompt)  )  (defun _name (x mode)    (cond      ((= mode "layer")        (car (xdrx_getpropertyvalue x mode))      )      ((= mode "color")        (setq ln (xdrx_getpropertyvalue x mode))        (if (= ln 256)          (progn            (setq lyr (cadr (xdrx_getpropertyvalue x "layer")))            (xdrx_getpropertyvalue lyr "color")          )          ln        )      )      (t        (xdrx_getpropertyvalue x mode)      )    )  )  (defun _maketuli (clr mode)    (setq e (xdrx_polyline_make (xd::pnt:getrecpnts '(0 0 0) (* scl 10.)                                                    (* 5 scl)                                ) t            )    )    (xdrx_setpropertyvalue e "constantwidth" (* scl 0.3) "color" 7)    (setq ha (xdrx_hatch_make e))    (xdrx_setpropertyvalue ha "color" clr "patternname" mode)    (setq name (xdrx_prompt "XD-TJ-HA-" mode "-" clr t))    (if (not (setq blk (xdrx_object_get "block" name)))      (progn        (xdrx_block_make (strcase name) (list e ha) '(0 0 0.) t)        (xdrx_entity_delete (entlast))        (setq blk (xdrx_object_get "block" name))        (xdrx_draworder->back (setq ha (car (xdrx_block_getentities blk '                                                                    (                                                                     (0 . "HATCH")                                                                    )                                            )                                       )                              )        )        (if (= #mode 2)          (progn            (setq hascl (XD::Hatch:GetSclByGap mode (* 1.414 scl)))            (xdrx_setpropertyvalue ha "PatternScale" hascl "patternname"                                   (list 1 mode)            )          )        )      )    )    blk  )  (defun _makelst (ss mode)    (setq lst (mapcar                '(lambda (x)                   (list (_name x mode) x)                 )                (xdrx_pickset->ents ss)              )    )  )  (defun _getHa (str)    (cond      ((= #mode 0)        (setq e (ssget "x" (list (cons 8 str) '(0 . "HATCH")))              e (ssname e 0)              clr (xdrx_getpropertyvalue e "color" t)        )        (_makeTuLi clr "SOLID")      )      ((= #mode 1)        (_makeTuLi str "SOLID")      )      (t        (setq e (ssget "x" (list (cons 2 str)))              e (ssname e 0)              clr (xdrx_getpropertyvalue e "color" t)        )        (_makeTuLi clr str)      )    )  )  (defun _data ()    (cond      ((= #mode 0)        (setq lst (_makelst ss "layer"))      )      ((= #mode 1)        (setq lst (_makelst ss "color"))      )      (t        (setq lst (_makelst ss "patternname"))      )    )    (setq lst (xd::list:groupbyindex lst 1e-3)          lst (vl-sort lst '(lambda (x y)                              (< (car x) (car y))                            )              )          lst (mapcar                '(lambda (x)                   (list (_getHa (car x)) (car x) (length (cdr x))                         (rtos (apply                                 '+                                 (mapcar                                   '(lambda (y)                                      (xdrx_getpropertyvalue y "area")                                    )                                   (cdr x)                                 )                               ) 2 1                         )                   )                 )                lst              )          lst (cons head lst)          lst (cons (list "填充面积统计表" "" "" "") lst)          tarea (mapcar                  'last                  lst                )          tarea (apply                  '+                  (mapcar                    'atof                    (cddr tarea)                  )                )          lst (append                lst                (list (list "" "合  计" "" (rtos tarea 2 1)))              )    )  )  (defun _table ()    (if (setq pt (getpoint "\n表格插入点<退出>:"))      (progn        (xd::text:init 1)        (setq tb (XD::Table:MakeFromList lst pt #height (/ #height 2.0)))        (setq row (1- (length lst)))        (xdrx_table_MergeCells tb row row 0 1)        (xdrx_table_SetTextString tb row 0 "合    计")        (xdrx_setpropertyvalue tb "color" 7)      )    )  )  (xdrx_begin)  (xdrx_sysvar_push '("dimzin" 0))  (if (not #mode)    (setq #mode 0)  )  (if (not #height)    (setq #height 4.)  )  (setq scl (* (xd::var:getratio) (xd::var:getscaleratio)))  (if (setq height (getreal (strcat (xdrx_prompt "\n表格字高<" #height ">:"                                                 t                                    )                            )                   )      )    (setq #height height)  )  (if (and        (_prompt)        (xdrx_initssget "\n选取要统计的填充[图层(TC)/颜色(YS)/模式(MS)]<退出>:"                        "TC YS MS" "移除不统计的填充[添加(A)]<退出>:"                        "_keyword" ""        )        (setq ss (xdrx_ssget '((0 . "HATCH"))))      )    (progn      (setq lst (_data))      (_table)    )  )  (xdrx_sysvar_pop)  (xdrx_end)  (princ))

求填充图案面积.jpg

求填充图案面积.rar

38.62 KB, 下载次数: 5, 下载积分: D豆 -1 , 活跃度 1

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-4-8 08:05:50 | 显示全部楼层
那就是你画的填充有问题,你看看有没有用 特性管理器查看,面积为0的填充?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-4-8 08:20:52 | 显示全部楼层
第二个填充有面积,面积计算是正确的

搜狗截图20200408081856.jpg


第一个填充,你画的有问题,CAD自身看不到面积

搜狗截图20200408082024.jpg

点评

老师,完整的填充可以计算出来,是不是填充的图案里不能有其他图形啊?这个插件能不能改下?请老师赐教,感谢!  详情 回复 发表于 2020-4-8 09:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 272个

财富等级: 日进斗金

 楼主| 发表于 2020-4-8 09:10:59 | 显示全部楼层
Lisphk 发表于 2020-4-8 08:20
第二个填充有面积,面积计算是正确的

老师,完整的填充可以计算出来,是不是填充的图案里不能有其他图形啊?这个插件能不能改下?请老师赐教,感谢!
1586307133(1).jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-4-8 11:17:10 | 显示全部楼层
本帖最后由 pxr201419 于 2020-4-8 11:20 编辑

还真是有趣,当圆和矩形的边相切,“选择对象”方式产生的填充,特性栏显示面积,“拾取点”方式产生的填充,特性栏不显示面积
A.png
B.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-4-8 12:45:40 | 显示全部楼层
pxr201419 发表于 2020-4-8 11:17
还真是有趣,当圆和矩形的边相切,“选择对象”方式产生的填充,特性栏显示面积,“拾取点”方式产生的填充 ...

相切也是自交, 边界只要自交,填充就没面积

点评

多谢老师指点,这种情况如何取得它的面积呢?  详情 回复 发表于 2020-4-8 13:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-4-8 12:46:47 | 显示全部楼层
相信自己666 发表于 2020-4-8 09:10
老师,完整的填充可以计算出来,是不是填充的图案里不能有其他图形啊?这个插件能不能改下?请老师赐教, ...

画填充的时候,边界别自交, 你的图,下面的几个园和边界相切了,在内部别相切就行了,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-4-8 13:01:45 | 显示全部楼层
Lisphk 发表于 2020-4-8 12:45
相切也是自交, 边界只要自交,填充就没面积

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-4-8 13:34:38 | 显示全部楼层
pxr201419 发表于 2020-4-8 13:01
多谢老师指点,这种情况如何取得它的面积呢?

避免这样画图,用替代的方法画

点评

老师,画这种图通常都是这样画的,能不能上面那个lsp程序基础上做调整啊?  详情 回复 发表于 2020-4-8 17:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 272个

财富等级: 日进斗金

 楼主| 发表于 2020-4-8 17:01:08 | 显示全部楼层
Lisphk 发表于 2020-4-8 13:34
避免这样画图,用替代的方法画

老师,画这种图通常都是这样画的,能不能上面那个lsp程序基础上做调整啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 04:53 , Processed in 0.389448 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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