按y值对ss排序
我有几行圆,每行都有相同的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))
这是需要调整的代码:
谢谢你的帮助
试试这个
(defun c:RowA3(/ jsx test dxf_ent jsx_ename new_xx total areaobj cLst big_Area rad ListRowDia)
(vl-load-com)
(if (setq jsx (ssget "_X" '((0 . "CIRCLE"))))
(progn
(setq test 1)
(while (not (zerop (sslength jsx)))
(setq dxf_ent(entget (setq jsx_ename (ssname jsx 0)))
new_xx (ssget "_X"
(list '(0 . "CIRCLE")
'(-4 . "*,=,*")
(assoc 10 dxf_ent)))
total 0.0
big_Area nil)
(foreach ent(setq new_xxlst (vl-sort (mapcar 'cadr (ssnamex new_xx))
'(lambda (y1 y2) (< (caddr (assoc 10 (entget y1)))
(caddr (assoc 10 (entget y2)))))))
(setq areaobj (vla-get-area
(vlax-ename->vla-object ent))
total (+ total areaobj)))
(setq cLst (vl-sort
(mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) new_xxlst)
'(lambda (x1 x2) (< (car x1) (car x2)))))
(setq Rad (vl-sort
(mapcar '(lambda (x) (cdr (assoc 40 (entget x)))) new_xxlst)
'(lambda (x1 x2) (> x1 x2))))
(setq ListRowDia (append (list (cons test Rad)) ListRowDia))
(mapcar '(lambda (x) (ssdel x jsx)) new_xxlst)
(princ (strcat "\nRow "
(itoa test)
"; MinXCtr: "
(vl-princ-to-string (car cLst))
" MaxRad = "
(vl-princ-to-string (car rad))
" => "
" Total = "
(rtos total)
"\n-----------------------------------------"))
(ssdel jsx_ename jsx)
(setq test (1+ test)))
(textscr)))
(princ "\n")
(princ ListRowDia)
(princ))
只是一条小鱼,在发布代码时,将其封装在
[/ code] tags (without the space) - then the indents in the code are retained. 嗨,李。麦克。是的,很好用。谢谢然而,我不知道如何将您编写的新代码合并到您或Wizman以前编写的代码中。我试着把它们塑造在一起,但它只是挂在这些线上。如何添加:(vl remove if'listp(mapcar'cadr(ssnamex subSs))?
谢谢
进入
这显示了我想要修改的更多代码
] 也许像这样。。。。
(if (setq subSs (ssget "_c" pt1 pt2 (list (cons 0 "CIRCLE")
(cons -4 (if flag ">=,=,*" "<=,=,*"))
(cons 10
(append
(list
(apply
(if flag 'max 'min)
(mapcar 'car lDat)))
(cddr (assoc 10 (entget tCirc))))))))
(progn
(setq total 0.0)
(foreach ent (setqsubSs_lst (vl-sort
(vl-remove-if 'listp
(mapcar 'cadr
(ssnamex subSs)))
'(lambda (y1 y2) (< (caddr (assoc 10 (entget y1)))
(caddr (assoc 10 (entget y2)))))))
(setq total (+ total (vla-get-Area
(vlax-ename->vla-object ent)))))
(setqcLst(car
(vl-sort
(mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) subSs_lst)
'(lambda (x1 x2) (< (car x1) (car x2)))))
Rad
(car(vl-sort
(mapcar '(lambda (x) (cdr (assoc 40 (entget x)))) subSs_lst)
'(lambda (r1 r2) (> r1 r2)))))
etcetc etc
这有点复杂,但也许这就是你想要实现的?
4 很抱歉没有尽快回复-大约5天前我们的办公室一夜之间着火了。我们现在在一个临时办公室。现在我有机会去看看。
是的,这正是我想要实现的——我对它的理解越来越深刻。我正在努力使您的更改适应我的代码。我想我已经找到了你所有的更改,但我不确定是否需要更改过滤器?
我试图将你的过滤器复制到我的代码中,但它不喜欢。是否应更换过滤器?
它卡在线路上:
这个问题解决后,我就快到了。
谢谢李的耐心
附件是我的代码
小鱼
行区域X。LSP 好的,我们已经解决了。。。近3周后!。我做的事情比需要的要复杂得多!通过尝试用我的选择集塑造你的选择集代码。我只需要做一个单独的选择集,这样它就可以生成自己的列表。现在我的项目几乎完成了。再次感谢李。
干杯小鱼
我很高兴你最后把它整理好了——最近我没有时间看太多,因为这里正在进行考试,但你把它解决了真是太好了。
干杯
李
页:
[1]
2