快速选择相同半径的圆
本帖最后由 dasin 于 2015-1-26 20:12 编辑因PROE导过来的2D图,经常在CAD中进行编辑。有时使用“快速先择”命令,也无法筛选出相同大小的圆,可能是导过的尺寸有很小的偏差。本人糊整了一个快速选择相同圆的LISP,但因能力有限无法完成它。请哪位大虾帮忙改进下!!!
(DEFUN C:qc (/ COUNTOR SELECTION DIMSE DIMDE ENTGRP COUNT ENTNAME ENT)
(COMMAND "_.UNDO" "M")
(SETQ COUNTOR 0)
(PRINC "\n批量选取圆!")
(SETQ ENT (ENTSEL "\n选择参照圆:"))
(SETQ ENT (ENTGET (CAR ENT)))
(SETQ DIMSE (CDR (ASSOC 40 ENT)))
;(INITGET "RADIU,R DIAMETER,D ")
;(SETQ SELECTION (GETKWORD "\n孔径匹配模式(半径或直径)(R/D)RADIU?:"))
(PROMPT "\n请选择区域:")
(SETQ ENTGRP (SSGET '((0 . "CIRCLE"))))
(SETQ COUNT 0)
(REPEAT (SSLENGTH ENTGRP)
(SETQ ENTNAME (SSNAME ENTGRP COUNT))
(SETQ ENT (ENTGET ENTNAME))
(IF (EQUAL (CDR (ASSOC 40 ENT)) DIMSE 0.00005);孔径匹配,精度0.00001
(PROGN
(ENTMOD (SUBST (CONS 40 DIMSE) (ASSOC 40 ENT) ENT));更改找到的圆
(SSSETFIRST NIL ENTNAME) ;选中找到的圆
(SETQ COUNTOR (1+ COUNTOR));计数器
))
(SETQ COUNT (1+ COUNT))
)
(PRINC "\n共计圆数量")(PRINC COUNTOR) (PRINC "!!!")
(PRINC " -------OK-------")
(PRINC)
) (defun c:tt (/ sel as-40 get len add nn as)
(and (setq sel (entsel "\n点取参照圆:"))
(progn
(setq as-40 (cdr (assoc 40 (entget (car sel)))))
(princ (strcat "\n参照圆直径=" (rtos (* as-40 2) 2 2)))
(setq get (ssget '((0 . "CIRCLE"))))
(setq len (sslength get))
(setq add (ssadd))
(repeat len
(setq nn (ssname get (setq len (1- len))))
(setq as (cdr (assoc 40 (entget nn))))
(if (equal as-40 as 0.01) (ssadd nn add))
);repeat
(if add (sssetfirst nil add))
)
)
(princ)
) 我一般用小菜选择易 琴剑江山_10184 发表于 2015-1-26 21:41 static/image/common/back.gif
不能直接输入直径?? ysq101 发表于 2015-1-28 16:52 static/image/common/back.gif
不能直接输入直径??
自己改改就行了 ysq101 发表于 2015-1-28 16:52 static/image/common/back.gif
不能直接输入直径??
(defun c:tt (/ sel as-40 get len add nn as)
(setq sel (/ (getdist "\n输入直径:") 2))
(princ (strcat "\n过滤直径=" (rtos(* sel 2) 2 2)))
(setq get (ssget '((0 . "CIRCLE"))))
(setq len (sslength get))
(setq add (ssadd))
(repeat len
(setq nn (ssname get (setq len (1- len))))
(setq as (cdr (assoc 40 (entget nn))))
(if (equal sel as 0.01) (ssadd nn add))
);repeat
(if add (sssetfirst nil add))
(princ)
) (defun c:tt(/ sel funz ss)
(setq sel (/ (getdist "\n输入直径:") 2))
(setq funz (getreal "容差范围:"))
(if(setq ss(ssget(list'(0 . "CIRCLE")'(-4 . "<and")'(-4 . ">=")(cons 40 (- sel funz))'(-4 . "<=")(cons 40 (+ sel funz))'(-4 . "and>"))))
(sssetfirst nil ss))
ss)
页:
[1]