革天明 发表于 2012-5-10 15:33:58

如何得到一个选择集中最左端圆的第三象限点坐标?

现有一个选择集ss,求出选择集中最左端圆的圆心。选择集中有实体、圆、直线、圆弧等。
下面是示意图,求图中的0点坐标。


革天明 发表于 2012-5-10 15:36:00

我主要是不知道如何从已有选择集中将圆过滤出来,在选择集已经存在的条件下,如何只将圆过滤出来?

wowan1314 发表于 2012-5-10 15:38:00

(SSGET "P" '((0 . "圆")))

革天明 发表于 2012-5-10 22:43:14

目前使用 (setq s1 (ssget "p" '((0 . "circle"))))得到新的选择集,可是如何得到每个圆的圆心的半径并组成表,再将这样的每个表组成新表,这步我得不到,不知诸位有现有的代码可用吗?
谢谢诸位了!自己试着自定义一个函数,可((圆心) 半径)这样的单个表都得不到,

ZZXXQQ 发表于 2012-5-10 23:09:17

本帖最后由 ZZXXQQ 于 2012-5-11 21:35 编辑

这个是可以窗选的。
(defun c:tt ( / pcl)
(if (setq ss (ssget '((0 . "CIRCLE")))) (progn
(setq ssl (reverse(cdr(reverse(mapcar 'cadr (ssnamex ss))))))
(foreach x ssl
   (setq ent (entget x)
         pcl (cons (list(cdr(assoc 10 ent)) (cdr(assoc 40 ent))) pcl))
)
(princ pcl)
;...
))
(princ)
)

Andyhon 发表于 2012-5-10 23:17:32

最左端圆的第三象限点坐标
(car (acet-geom-ss-extents (ssget "p" '((0 . "circle"))) nil))

ZZXXQQ 发表于 2012-5-11 21:37:14

5楼已改

革天明 发表于 2012-5-12 08:50:24

此题完整的方法已求得,自己自定义了一个从已知选择集中过滤自己想要选择集的函数,看各位是还还有其它方法,此题目完整的解决方法在下面的LSP中。
;;本函数用于从已知选择集中过滤出所需要的对象的图元名列表
;;使用循环的方式可能有麻烦,但对选择集的要求降低了,不必再考虑选择集的“时效性”
;;ss为已知选择集,str为要过滤得到的元素,如"CIRCLE"、"LINE"、"MTEXT"等
;;明经通道革天明2012年5月12日
(defun myget (ss str / n enname)
(setq n 0
namelst '()
)
(repeat (sslength ss)
    (if (= (cdr (assoc 0 (entget (ssname ss n)))) str)
      (progn
(setq enname (cdr (assoc -1 (entget (ssname ss n)))))
(setq namelst (cons enname namelst))
      )
    )
    (setq n (1+ n))
)
namelst
)

773786668 发表于 2016-4-27 20:53:41

哎呦,不错哦,马克。
页: [1]
查看完整版本: 如何得到一个选择集中最左端圆的第三象限点坐标?