乐筑天下

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

[编程交流] 按y值对ss排序

[复制链接]

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 14:31:48 | 显示全部楼层 |阅读模式
我有几行圆,每行都有相同的y值中心点。
如何从下至上处理行?
 
例如,在我的选择集中,我在最下面一行有3行圆圈
有2个7.5半径的圆
然后是2个16半径的圆
然后是2个20半径的圆
 
然而,我的回报中的列表“ListRowDia”:
((2 20.0 20.0) (1 7.5 7.5 7.5) (3 16.0 16.0))
 
但我想:
((1 7.5 7.5 7.5) (2 16.0 16.0)(3 20.0 20.0))
 
这是需要调整的代码:
谢谢你的帮助
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:40:14 | 显示全部楼层
试试这个
 
  1. (defun c:RowA3  (/ jsx test dxf_ent jsx_ename new_xx total areaobj cLst big_Area rad ListRowDia)
  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.              new_xx   (ssget "_X"
  9.                              (list '(0 . "CIRCLE")
  10.                                    '(-4 . "*,=,*")
  11.                                    (assoc 10 dxf_ent)))
  12.              total    0.0
  13.              big_Area nil)
  14.        (foreach ent  (setq new_xxlst (vl-sort (mapcar 'cadr (ssnamex new_xx))
  15.                                               '(lambda (y1 y2) (< (caddr (assoc 10 (entget y1)))
  16.                                                                   (caddr (assoc 10 (entget y2)))))))
  17.          (setq areaobj (vla-get-area
  18.                          (vlax-ename->vla-object ent))
  19.                total   (+ total areaobj)))
  20.        (setq cLst (vl-sort
  21.                     (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) new_xxlst)
  22.                     '(lambda (x1 x2) (< (car x1) (car x2)))))
  23.        (setq Rad (vl-sort
  24.                    (mapcar '(lambda (x) (cdr (assoc 40 (entget x)))) new_xxlst)
  25.                    '(lambda (x1 x2) (> x1 x2))))
  26.        (setq ListRowDia (append (list (cons test Rad)) ListRowDia))
  27.        (mapcar '(lambda (x) (ssdel x jsx)) new_xxlst)
  28.        (princ (strcat "\nRow "
  29.                       (itoa test)
  30.                       "; MinXCtr: "
  31.                       (vl-princ-to-string (car cLst))
  32.                       " MaxRad = "
  33.                       (vl-princ-to-string (car rad))
  34.                       " => "
  35.                       " Total = "
  36.                       (rtos total)
  37.                       "\n-----------------------------------------"))
  38.        (ssdel jsx_ename jsx)
  39.        (setq test (1+ test)))
  40.      (textscr)))
  41. (princ "\n")
  42. (princ ListRowDia)
  43. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:41:14 | 显示全部楼层
只是一条小鱼,在发布代码时,将其封装在
  1. [/ code] tags (without the space) - then the indents in the code are retained.
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 14:48:52 | 显示全部楼层
嗨,李。麦克。是的,很好用。谢谢然而,我不知道如何将您编写的新代码合并到您或Wizman以前编写的代码中。我试着把它们塑造在一起,但它只是挂在这些线上。如何添加:(vl remove if'listp(mapcar'cadr(ssnamex subSs))?
谢谢
 
进入
这显示了我想要修改的更多代码
 
 
]
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:51:09 | 显示全部楼层
也许像这样。。。。
 
  1. (if (setq subSs (ssget "_c" pt1 pt2 (list (cons 0 "CIRCLE")
  2.                                              (cons -4 (if flag ">=,=,*" "<=,=,*"))
  3.                                              (cons 10
  4.                                                (append
  5.                                                  (list
  6.                                                    (apply
  7.                                                      (if flag 'max 'min)
  8.                                                      (mapcar 'car lDat)))
  9.                                                  (cddr (assoc 10 (entget tCirc))))))))
  10.              (progn
  11.                (setq total 0.0)
  12.                (foreach ent (setq  subSs_lst (vl-sort
  13.                                                (vl-remove-if 'listp
  14.                                                  (mapcar 'cadr
  15.                                                    (ssnamex subSs)))
  16.                                                '(lambda (y1 y2) (< (caddr (assoc 10 (entget y1)))
  17.                                                                    (caddr (assoc 10 (entget y2)))))))
  18.                  (setq total (+ total (vla-get-Area
  19.                                         (vlax-ename->vla-object ent)))))
  20.                (setq  cLst(car
  21.                       (vl-sort
  22.                         (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) subSs_lst)
  23.                          '(lambda (x1 x2) (< (car x1) (car x2)))))
  24.                      Rad
  25.                       (car(vl-sort
  26.                         (mapcar '(lambda (x) (cdr (assoc 40 (entget x)))) subSs_lst)
  27.                          '(lambda (r1 r2) (> r1 r2)))))
  28.                  etc  etc etc
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 14:55:10 | 显示全部楼层
这有点复杂,但也许这就是你想要实现的?
 
  1. 4
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:02:17 | 显示全部楼层
很抱歉没有尽快回复-大约5天前我们的办公室一夜之间着火了。我们现在在一个临时办公室。现在我有机会去看看。
是的,这正是我想要实现的——我对它的理解越来越深刻。我正在努力使您的更改适应我的代码。我想我已经找到了你所有的更改,但我不确定是否需要更改过滤器?
我试图将你的过滤器复制到我的代码中,但它不喜欢。是否应更换过滤器?
它卡在线路上:
 
这个问题解决后,我就快到了。
谢谢李的耐心
附件是我的代码
小鱼
行区域X。LSP
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 15:08:39 | 显示全部楼层
好的,我们已经解决了。。。近3周后!。我做的事情比需要的要复杂得多!通过尝试用我的选择集塑造你的选择集代码。我只需要做一个单独的选择集,这样它就可以生成自己的列表。现在我的项目几乎完成了。再次感谢李。
 
干杯小鱼
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:08:52 | 显示全部楼层
 
我很高兴你最后把它整理好了——最近我没有时间看太多,因为这里正在进行考试,但你把它解决了真是太好了。
 
干杯
 
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 15:16:05 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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