乐筑天下

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

[编程交流] 查找圆的区域

[复制链接]

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 14:39:23 | 显示全部楼层 |阅读模式
你好
我想使用ssget或其他方法查找行中的圆区域。
 
例如,假设行上有3个圆,并且中心点y值相同。直径可能不同。
另一行可能有2个圆,并且中心点y值相同
另一行可能有4个圆。
我想计算的是每行的总面积。
因此,我的期末考试将有三个不同行的总面积。(三个答案)
 
 
我尝试在代码中执行以下操作:
1) 创建所有圆的选择集
2) 制作一个过滤器,查找具有相同中心点y值的圆的行。
3) 处理圆形行并找到该行的圆形总面积。
4) 从选择集中删除该行。
5) 转到下一行,计算该行的总面积
以此类推,直到计算出所有行区域。
 
我试图写一些东西,虽然它不起作用。也许有人可以重写一下让它继续?
如果你能破解这个,非常感谢!
这是我的代码:
 
(defun c:RowAreas(/js jsx js\u new n dxf\u ent)
new\u js m new\u xx areaobjn obj1 obj总计)
(vl load com)
(setq jsx(ssget’((0。“圆”))
js_new(ssadd))
(setq n(sslength jsx))
(setq dxf_ent(entget(ssname jsx(setq n(1-n k)а)));获取实体列表
(setq测试1)
(虽然(
(setq new_xx)
(ssget“_X”(列表)(0。“圆”)
“(-4”“*,=,*”)(assoc 10 dxf_ent));相同圆心y值
);setq公司
(setq i 0)
(setq总计0.0)
(setq lenrow(sslength new_xx))
(setq obj(vlax ename->vla object(ssname new\u xx i)))
(setq areaobj(vla get area obj))
(setq total(+total areaobj));同一行上圆的总面积
(setq i(1+i))
(ssdel js_new new_xx)
);虽然
(警报(rtos总计))
(普林斯)
)
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 14:45:49 | 显示全部楼层
请尝试:
 
 
  1. (defun c:RowAreas (/ areaobj dxf_ent i jsx jsx_ename jsx_ ename2 lenrow        new_xx obj test        total)
  2.    (vl-load-com)
  3.    (if        (setq jsx (ssget "_X" '((0 . "CIRCLE"))))
  4. (progn
  5.     (setq test 1)
  6.     (while (not (zerop (sslength jsx)))
  7.         (setq dxf_ent (entget (setq jsx_ename (ssname jsx 0))))
  8.         (setq new_xx
  9.                  (ssget        "_X"
  10.                         (list '(0 . "CIRCLE")
  11.                               '(-4 . "*,=,*")
  12.                               (assoc 10 dxf_ent)
  13.                         )
  14.                  )
  15.         )
  16.         (setq i 0)
  17.         (setq total 0.0)
  18.         (setq lenrow (sslength new_xx))
  19.         (while (< i lenrow)
  20.             (setq obj (vlax-ename->vla-object (setq jsx_ename2 (ssname new_xx i))))
  21.             (setq areaobj (vla-get-area obj))
  22.             (setq total (+ total areaobj))
  23.             (setq i (1+ i))
  24.             (ssdel jsx_ename2 jsx)
  25.         )
  26.         (princ (strcat "Row "
  27.                        (itoa test)
  28.                        ";"
  29.                        " Y = "
  30.                        (rtos (caddr (assoc 10 dxf_ent)))
  31.                        " => "
  32.                        (rtos total)
  33.                        "\n"
  34.                )
  35.         )
  36.         (ssdel jsx_ename jsx)
  37.         (setq test (1+ test))
  38.     )
  39.     (textscr)
  40. )
  41.    )
  42.    (princ)
  43. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:48:11 | 显示全部楼层
很酷的Wizman,从不知道你可以使用:
 
  1. (-4  .  "*,=,*")

 
作为一种过滤方式
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 14:51:50 | 显示全部楼层
嘿,谢谢Wizman!太棒了!
我现在想修改它,使其在“while”循环中进行更多处理。所以我可能会有另一个帖子——当我的轮子开始在泥里打滑的时候。
干杯
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 14:52:23 | 显示全部楼层
实际上,我已经被困在修改它了。
我想找到每一行上最左边位置的圆的中心点值(x,y)。换句话说,最小的x值。不知道在while循环中如何进行。
非常感谢您抽出时间。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:56:11 | 显示全部楼层
试试看,伙计:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:RowAreas  [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] jsx test dxf_ent jsx_ename new_xx total areaobj cLst[b][color=RED])[/color][/b]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  3. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] jsx [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"CIRCLE"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  4.    [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
  5.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] test [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b]
  6.      [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]zerop[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]sslength[/color][/b] jsx[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  7.        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dxf_ent [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] jsx_ename [b][color=RED]([/color][/b][b][color=BLUE]ssname[/color][/b] jsx [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  8.              new_xx  [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b]
  9.                             [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"CIRCLE"[/color][/b][b][color=RED])[/color][/b]
  10.                                   [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"*,=,*"[/color][/b][b][color=RED])[/color][/b]
  11.                                   [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]10[/color][/b] dxf_ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  12.              total   [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b]
  13.        [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] ent  [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] new_xxlst [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]ssnamex[/color][/b] new_xx[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  14.          [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] areaobj [b][color=RED]([/color][/b][b][color=BLUE]vla-get-area[/color][/b]
  15.                          [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  16.                total   [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] total areaobj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  17.        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] cLst [b][color=RED]([/color][/b][b][color=BLUE]vl-sort[/color][/b]
  18.          [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] new_xxlst[b][color=RED])[/color][/b]
  19.            [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x1 x2[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] x1[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] x2[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  20.        [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]ssdel[/color][/b] x jsx[b][color=RED])[/color][/b][b][color=RED])[/color][/b] new_xxlst[b][color=RED])[/color][/b]
  21.        [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"Row "[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] test[b][color=RED])[/color][/b]
  22.                       [b][color=#ff00ff]"; Center: "[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-princ-to-string[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] cLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  23.                       [b][color=#ff00ff]" Y = "[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]10[/color][/b] dxf_ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  24.                       [b][color=#ff00ff]" => "[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] total[b][color=RED])[/color][/b] [b][color=#ff00ff]"\n"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  25.        [b][color=RED]([/color][/b][b][color=BLUE]ssdel[/color][/b] jsx_ename jsx[b][color=RED])[/color][/b]
  26.        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] test [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] test[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  27.      [b][color=RED]([/color][/b][b][color=BLUE]textscr[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  28. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 14:59:25 | 显示全部楼层
嗨,谢谢Wizman-我差一点就到了,只是错过了一辆“车”,而“>”走错了路
再次感谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:03:03 | 显示全部楼层
好的,对不起,但现在我有另一个相当棘手的问题。
我的轮子真的在泥里打转。
正如我在第一篇文章中所描述的,我有一排圆圈。
如果我有一条垂直线,或多或少地穿过整组圆。
因此,大约一半的圆中心点位于直线的一侧,一半位于另一侧。
我想做两组答案(显示面积半径等)-一个用于左边的圆,另一个用于右边的圆。
 
假设Pt1和Pt2代表垂直线。
那么将两组分开的y值将为
(setq Yvalue(汽车Pt1))
现在下一步我真的不知道该怎么做?
虽然我想我需要使用vl排序,然后比较和
从中创建新的两个集合并处理这两个集合。
再次感谢您的时间和努力
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 15:05:26 | 显示全部楼层
 
是的,我在沼泽上发了帖子,从CAB和其他人那里收到了一些好信息
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 15:10:53 | 显示全部楼层
我还没有收到最后一条小鱼的回复,如果这条线是垂直的,那么他一定在检查Xvalue,对吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 00:15 , Processed in 0.496808 second(s), 72 queries .

© 2020-2025 乐筑天下

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