qinleilei 发表于 2014-8-10 17:04:31

关于同心圆的判断与筛选。请各位高手帮帮忙

本帖最后由 qinleilei 于 2014-8-10 22:00 编辑

当一个图面上有很多个直径9.0和直径14.0及其他直径的单个圆还有很多直径为9.014.0 的同心圆及其他直径的同心圆,如何快速筛选出这些直径为9.014.0的同心圆,将他们放入一个选择集里面,而其他的单个圆或者直径不是9.0 14.0 的的同心圆 就直接忽视不选。这种lsp该怎么写。老大们帮忙看看下。只用判断xy的坐标,z轴不用管
本人做模具设计的,经常要选中指定大小的螺丝沉头孔,每次都是手动一个一个的选的,好累




lite 发表于 2014-8-11 18:11:03

本帖最后由 lite 于 2014-8-13 10:09 编辑

附件为我写的关于选取同心圆的程序,为方便使用,写成了函数。

sfzyr 发表于 2022-8-25 03:23:29

zctao1966 发表于 2014-8-13 12:48
①先选择所有的圆
②获取圆的圆心,组成表1
③删除重复的圆心,组成新的圆心表2


这个源程序能否给一个我

琴剑江山_10184 发表于 2014-8-10 19:30:58

(defun c:kk( / ss)
(setq ss (ssget '((-4 . "<OR") (40 . 4.5) (40 . 7.0) (-4 . "OR>"))))
   (if ss
    (progn
      (sssetfirst nil ss)
    )
);if
);给我明经币

SunSpring 发表于 2014-8-10 20:50:16

还有同心呢,你这是所有9和14的都会选中.

Andyhon 发表于 2014-8-10 21:21:54

...螺丝沉头孔...

模具内这些常用的 图党 建议改用 图块
除非您不想搭程序的便车,久用之后会感受到滴
走过... 那冤枉路...
谨供参考

SunSpring 发表于 2014-8-10 21:27:00

本帖最后由 SunSpring 于 2014-8-10 22:08 编辑

(defun c:cc (/ center entdata entname fentdata fradius gentdata gradius
         ptlist radiusmax radiusmin subentgrp
      )
(defun vla-ssname (ss index)
    (vlax-ename->vla-object (ssname ss index))
)
(defun gpax:getboundingbox (entgrp / entname entpl entplx entply entpr
             entprx entpry n
         )
    (if (= (type entgrp) 'ename)
      (setq entgrp (ssadd entgrp))
    )
    (repeat (setq n (sslength entgrp))
      (setq entname (vla-ssname entgrp (setq n (1- n))))
      (vla-getboundingbox entname 'entpl 'entpr)
      (setq entplx (cons (vlax-safearray-get-element entpl 0) entplx)
      entply (cons (vlax-safearray-get-element entpl 1) entply)
      entprx (cons (vlax-safearray-get-element entpr 0) entprx)
      entpry (cons (vlax-safearray-get-element entpr 1) entpry)
      )
    )
    (list (trans (list (apply
       'min
       entplx
         ) (apply
         'min
         entply
       )
   ) 0 1
    ) (trans (list (apply
         'max
         entprx
       ) (apply
         'max
         entpry
         )
       ) 0 1
      )
    )
)
(defun ssdelentgrp (ss1 ss2 / n)
    (repeat (setq n (sslength ss1))
      (ssdel (ssname ss1 (setq n (1- n))) ss2)
    )
)
(if (setq entgrp (ssget '((0 . "CIRCLE"))))
    (progn
      (setq ptlist (gpax:getboundingbox entgrp))
      (setq dephole (ssadd))
      (while (ssname entgrp 0)
(setq entname (ssname entgrp 0)
      entdata (entget entname)
      center (cdr (assoc 10 entdata))
)
(setq subentgrp (ssget "W" (car ptlist) (cadr ptlist) (list
                  (cons 10 center)
                  (cons 0 "CIRCLE")
                  )
      )
)
(if (= (sslength subentgrp) 2)
    (progn
      (setq fentdata (entget (ssname subentgrp 0)))
      (setq gentdata (entget (ssname subentgrp 1)))
      (setq fradius (cdr (assoc 40 fentdata)))
      (setq gradius (cdr (assoc 40 gentdata)))
      (setq radiusmin (min
            fradius
            gradius
          )
      )
      (setq radiusmax (max
            fradius
            gradius
          )
      )
      (if (and
      (= radiusmin 4.5)
      (= radiusmax 7.0)
    )
      (progn
    (ssadd (ssname subentgrp 0) dephole)
    (ssadd (ssname subentgrp 1) dephole)
      )
      )
    )
)
(ssdelentgrp subentgrp entgrp)
      )
    )
)
(sssetfirst nil dephole)
)

可能有些复杂但是可以用.

已经更新.再试下.



qinleilei 发表于 2014-8-10 21:51:13

SunSpring 发表于 2014-8-10 21:27 static/image/common/back.gif
可能有些复杂但是可以用.

错误: no function definition: VLA-SSNAME
试了一下不行。哥们 帮帮忙看下是哪里出了状况。
顺便感谢你下午帮我搞的那个尺寸公差,很给力

qinleilei 发表于 2014-8-10 21:53:58

Andyhon 发表于 2014-8-10 21:21 static/image/common/back.gif
...螺丝沉头孔...

模具内这些常用的 图党 建议改用 图块


用图块不方便,也没有见过用图块的。我们这都是用全3D画的模具再到2D里面出图,标加工注解的,所以螺丝类是一个很反锁的工作量

SunSpring 发表于 2014-8-10 22:03:06

(defun vla-ssname (ss index)
(vlax-ename->vla-object (ssname ss index))
)

前生 发表于 2014-8-10 23:20:01

qinleilei 发表于 2014-8-10 21:53 static/image/common/back.gif
用图块不方便,也没有见过用图块的。我们这都是用全3D画的模具再到2D里面出图,标加工注解的,所以螺丝类 ...

其实,块的应用时很方便的,可以尝试。
3D转过来的图纸,很多事乱七八槽的。
如果,块用的话的话,是很愉快的事

feng582304 发表于 2014-8-11 00:35:06

本帖最后由 feng582304 于 2014-8-11 00:38 编辑

(defun feng:ss:cir:1 ( / ss li n tmp )
(if (setq ss (ssget '((-4 . "<and") (0 . "CIRCLE") (-4 . "<or") (40 . 4.5) (40 . 7.0) (-4 . "or>") (-4 . "and>"))))
    (progn
      (repeat (setq n (sslength ss))
      (setq tmp (ssname ss (setq n (1- n)))
            li (cons (list tmp (cdr (assoc 10 (entget tmp)))) li))
      )
      (feng:ss:cir:3 (feng:ss:cir:2 li))
      )
    )
)
(defun feng:ss:cir:2 ( li / tmp )
(if (setq tmp (vl-remove-if '(LAMBDA (x) (<= (abs (apply '+ (MAPCAR '- (cadr (car li)) (cadr x)))) 1e-05)) li))
    (append (list (MAPCAR 'car (VL-REMOVE-IF-NOT '(LAMBDA (x) (<= (abs (apply '+ (MAPCAR '- (cadr (car li)) (cadr x)))) 1e-05)) li))) (feng:ss:cir:2 tmp))
    (list (MAPCAR 'car li))
    )
)
(defun feng:ss:cir:3 ( li / ss )
(setq ss (ssadd))
(MAPCAR '(LAMBDA (x) (ssadd x ss)) (apply 'append (vl-remove-if-not '(LAMBDA (x) (>= (length x) 2)) li)))
(SSSETFIRST nil ss)
)
(feng:ss:cir:1)
页: [1] 2 3
查看完整版本: 关于同心圆的判断与筛选。请各位高手帮帮忙