乐筑天下

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

[编程交流] 帮助计算面积!

[复制链接]

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:16:33 | 显示全部楼层
如果你的形状是区域,我的意思是,对于每个单独的插图,从外部区域减去内部区域,那么很容易一次找到总面积。
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:18:04 | 显示全部楼层
使现代化
 
我已经开始为此编写代码。我的选择集包括特定图层内的所有闭合多段线。然而,我在创建过滤器以从外部区域移除内部区域的区域时遇到了问题。任何帮助创建此过滤器将不胜感激!
 
如果情况更糟,我可以添加代码来填充所有这些多段线形状,然后提取图案填充本身的总面积。不过,我想尽量避免这样做。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:21:34 | 显示全部楼层
您是希望使用单个选择集并以编程方式确定位于该集中其他多段线内的多段线,还是希望使用两个选择集:一个用于内部对象,另一个用于外部对象?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:26:27 | 显示全部楼层
这是一种相当粗糙的方法,使用光线投射算法:
 
  1. [color=GREEN];; Polyline Area  -  Lee Mac[/color]
  2. [color=GREEN];; Prompts the user to make a selection of closed LWPolylines and returns[/color]
  3. [color=GREEN];; the total area of all objects in the selection, subtracting the area[/color]
  4. [color=GREEN];; of objects residing entirely inside other objects.[/color]
  5. ([color=BLUE]defun[/color] c:polyarea ( [color=BLUE]/[/color] dim inc inner lst outer sel spc )
  6.    ([color=BLUE]setq[/color]
  7.        inner 0.0
  8.        outer 0.0
  9.    )
  10.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] sel ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"LWPOLYLINE"[/color]) (-4 . [color=MAROON]"&="[/color]) (70 . 1))))
  11.        ([color=BLUE]progn[/color]
  12.            ([color=BLUE]setq[/color] spc
  13.                ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
  14.                    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))
  15.                        'paperspace
  16.                        'modelspace
  17.                    )
  18.                )
  19.            )
  20.            ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] inc ([color=BLUE]sslength[/color] sel))
  21.                ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] sel ([color=BLUE]setq[/color] inc ([color=BLUE]1-[/color] inc)))) lst))
  22.            )
  23.            ([color=BLUE]foreach[/color] obj1 lst
  24.                ([color=BLUE]if[/color]
  25.                    ([color=BLUE]vl-some[/color]
  26.                        ([color=BLUE]function[/color]
  27.                            ([color=BLUE]lambda[/color] ( obj2 [color=BLUE]/[/color] int pnt tmp )
  28.                                ([color=BLUE]and[/color] ([color=BLUE]null[/color] ([color=BLUE]vlax-invoke[/color] obj1 'intersectwith obj2 [color=BLUE]acextendnone[/color]))
  29.                                    ([color=BLUE]progn[/color]
  30.                                        ([color=BLUE]setq[/color] pnt ([color=BLUE]vlax-curve-getstartpoint[/color] obj1)
  31.                                              tmp ([color=BLUE]vla-addray[/color] spc ([color=BLUE]vlax-3D-point[/color] pnt) ([color=BLUE]vlax-3D-point[/color] ([color=BLUE]polar[/color] pnt 0.0 1.0)))
  32.                                              int ([color=BLUE]vlax-invoke[/color] tmp 'intersectwith obj2 [color=BLUE]acextendnone[/color])
  33.                                        )
  34.                                        ([color=BLUE]vla-delete[/color] tmp)
  35.                                        ([color=BLUE]=[/color] 1 ([color=BLUE]rem[/color] ([color=BLUE]length[/color] int) 2))
  36.                                    )
  37.                                )
  38.                            )
  39.                        )
  40.                        ([color=BLUE]vl-remove[/color] obj1 lst)
  41.                    )
  42.                    ([color=BLUE]setq[/color] inner ([color=BLUE]+[/color] inner ([color=BLUE]vla-get-area[/color] obj1)))
  43.                    ([color=BLUE]setq[/color] outer ([color=BLUE]+[/color] outer ([color=BLUE]vla-get-area[/color] obj1)))
  44.                )
  45.            )
  46.            ([color=BLUE]setq[/color] dim ([color=BLUE]getvar[/color] 'dimzin))
  47.            ([color=BLUE]setvar[/color] 'dimzin 0)
  48.            ([color=BLUE]princ[/color]
  49.                ([color=BLUE]strcat[/color]
  50.                    [color=MAROON]"\nOuter Area: "[/color] ([color=BLUE]rtos[/color] outer 2
  51.                    [color=MAROON]"\nInner Area: "[/color] ([color=BLUE]rtos[/color] inner 2
  52.                    [color=MAROON]"\nTotal Area: "[/color] ([color=BLUE]rtos[/color] ([color=BLUE]-[/color] outer inner) 2
  53.                )
  54.            )
  55.            ([color=BLUE]setvar[/color] 'dimzin dim)
  56.        )
  57.    )
  58.    ([color=BLUE]princ[/color])
  59. )
  60. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:29:41 | 显示全部楼层
这是我的版本。。。(基于最近创建的vlax曲线getfurthestpointfrom)
 
M、 R。
区域形状。lsp
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:31:49 | 显示全部楼层
问题解决了!!!!
 
我要感谢你们两位马尔科·里巴和李·麦克。我现在可以用你的任何一个动作做我想做的。我真的很感激!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:34:15 | 显示全部楼层
Lisp再次更改为只接受闭合椭圆。。。
 
M、 R。
不客气lossan805
回复

使用道具 举报

2

主题

18

帖子

16

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:38:27 | 显示全部楼层
李,谢谢你,这个动作太棒了。我现有的例程设置为进行两个选择,并从另一个中选择一个。效果很好,但如果你有200个外部项目和20个内部项目是痛苦的。(即预制板总面积减去门窗。)为了使您的例程适合我,我正在尝试选择“外部”和“内部”区域值的总数!然而,我不够聪明,无法解读你优雅的逻辑
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:42:23 | 显示全部楼层
 
非常感谢阿马康
 
 
如果我没听错的话,这个小小的修改就足够了:
 
  1. [color=GREEN];; Polyline Area  -  Lee Mac[/color]
  2. [color=GREEN];; Prompts the user to make a selection of closed LWPolylines and returns[/color]
  3. [color=GREEN];; the total area of all objects in the selection, subtracting the area[/color]
  4. [color=GREEN];; of objects residing entirely inside other objects.[/color]
  5. ([color=BLUE]defun[/color] c:polyarea ( [color=BLUE]/[/color] dim inc inner ino lst ono outer sel spc )
  6.    ([color=BLUE]setq[/color]
  7.        inner 0.0
  8.        outer 0.0
  9.        ino   0
  10.        ono   0
  11.    )
  12.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] sel ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"LWPOLYLINE"[/color]) (-4 . [color=MAROON]"&="[/color]) (70 . 1))))
  13.        ([color=BLUE]progn[/color]
  14.            ([color=BLUE]setq[/color] spc
  15.                ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
  16.                    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))
  17.                        'paperspace
  18.                        'modelspace
  19.                    )
  20.                )
  21.            )
  22.            ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] inc ([color=BLUE]sslength[/color] sel))
  23.                ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] sel ([color=BLUE]setq[/color] inc ([color=BLUE]1-[/color] inc)))) lst))
  24.            )
  25.            ([color=BLUE]foreach[/color] obj1 lst
  26.                ([color=BLUE]if[/color]
  27.                    ([color=BLUE]vl-some[/color]
  28.                        ([color=BLUE]function[/color]
  29.                            ([color=BLUE]lambda[/color] ( obj2 [color=BLUE]/[/color] int pnt tmp )
  30.                                ([color=BLUE]and[/color] ([color=BLUE]null[/color] ([color=BLUE]vlax-invoke[/color] obj1 'intersectwith obj2 [color=BLUE]acextendnone[/color]))
  31.                                    ([color=BLUE]progn[/color]
  32.                                        ([color=BLUE]setq[/color] pnt ([color=BLUE]vlax-curve-getstartpoint[/color] obj1)
  33.                                              tmp ([color=BLUE]vla-addray[/color] spc ([color=BLUE]vlax-3D-point[/color] pnt) ([color=BLUE]vlax-3D-point[/color] ([color=BLUE]polar[/color] pnt 0.0 1.0)))
  34.                                              int ([color=BLUE]vlax-invoke[/color] tmp 'intersectwith obj2 [color=BLUE]acextendnone[/color])
  35.                                        )
  36.                                        ([color=BLUE]vla-delete[/color] tmp)
  37.                                        ([color=BLUE]=[/color] 1 ([color=BLUE]rem[/color] ([color=BLUE]length[/color] int) 2))
  38.                                    )
  39.                                )
  40.                            )
  41.                        )
  42.                        ([color=BLUE]vl-remove[/color] obj1 lst)
  43.                    )
  44.                    ([color=BLUE]setq[/color] inner ([color=BLUE]+[/color] inner ([color=BLUE]vla-get-area[/color] obj1))
  45.                          ino   ([color=BLUE]1+[/color] ino)
  46.                    )
  47.                    ([color=BLUE]setq[/color] outer ([color=BLUE]+[/color] outer ([color=BLUE]vla-get-area[/color] obj1))
  48.                          ono   ([color=BLUE]1+[/color] ono)
  49.                    )
  50.                )
  51.            )
  52.            ([color=BLUE]setq[/color] dim ([color=BLUE]getvar[/color] 'dimzin))
  53.            ([color=BLUE]setvar[/color] 'dimzin 0)
  54.            ([color=BLUE]princ[/color]
  55.                ([color=BLUE]strcat[/color]
  56.                    [color=MAROON]"\nOuter Area: "[/color] ([color=BLUE]rtos[/color] outer 2  [color=MAROON]" from "[/color] ([color=BLUE]itoa[/color] ono) [color=MAROON]" object(s)."[/color]
  57.                    [color=MAROON]"\nInner Area: "[/color] ([color=BLUE]rtos[/color] inner 2  [color=MAROON]" from "[/color] ([color=BLUE]itoa[/color] ino) [color=MAROON]" object(s)."[/color]
  58.                    [color=MAROON]"\nTotal Area: "[/color] ([color=BLUE]rtos[/color] ([color=BLUE]-[/color] outer inner) 2
  59.                )
  60.            )
  61.            ([color=BLUE]setvar[/color] 'dimzin dim)
  62.        )
  63.    )
  64.    ([color=BLUE]princ[/color])
  65. )
  66. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:45:34 | 显示全部楼层
 
李,你好!!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:53 , Processed in 0.732919 second(s), 71 queries .

© 2020-2025 乐筑天下

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