明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1428|回复: 7

[提问] 快速选择相同半径的圆

[复制链接]
发表于 2015-1-26 20:10 | 显示全部楼层 |阅读模式
本帖最后由 dasin 于 2015-1-26 20:12 编辑

因PROE导过来的2D图,经常在CAD中进行编辑。有时使用“快速先择”命令,也无法筛选出相同大小的圆,可能是导过的尺寸有很小的偏差。本人糊整了一个快速选择相同圆的LISP,但因能力有限无法完成它。请哪位大虾帮忙改进下!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-1-26 21:25 | 显示全部楼层
  1. (DEFUN C:qc (/ COUNTOR SELECTION DIMSE DIMDE ENTGRP COUNT ENTNAME ENT)
  2.   (COMMAND "_.UNDO" "M")
  3.   (SETQ COUNTOR 0)
  4.   (PRINC "\n批量选取圆!")
  5.   (SETQ ENT (ENTSEL "\n选择参照圆:"))
  6.   (SETQ ENT (ENTGET (CAR ENT)))
  7.   (SETQ DIMSE (CDR (ASSOC 40 ENT)))

  8. ;  (INITGET "RADIU,R DIAMETER,D ")
  9. ;  (SETQ SELECTION (GETKWORD "\n孔径匹配模式(半径或直径)(R/D)RADIU?:"))
  10.   (PROMPT "\n请选择区域:")
  11.   (SETQ ENTGRP (SSGET '((0 . "CIRCLE"))))
  12.   (SETQ COUNT 0)
  13.   (REPEAT (SSLENGTH ENTGRP)
  14.     (SETQ ENTNAME (SSNAME ENTGRP COUNT))
  15.     (SETQ ENT (ENTGET ENTNAME))
  16.     (IF (EQUAL (CDR (ASSOC 40 ENT)) DIMSE 0.00005)  ;孔径匹配,精度0.00001
  17.     (PROGN
  18.       (ENTMOD (SUBST (CONS 40 DIMSE) (ASSOC 40 ENT) ENT));更改找到的圆
  19.       (SSSETFIRST NIL ENTNAME)     ;选中找到的圆
  20.       (SETQ COUNTOR (1+ COUNTOR))  ;计数器
  21.     ))
  22.     (SETQ COUNT (1+ COUNT))
  23.   )
  24.   (PRINC "\n共计圆数量")(PRINC COUNTOR) (PRINC "!!!")
  25.   (PRINC "     -------OK-------")
  26.   (PRINC)
  27. )
复制代码
发表于 2015-1-26 21:41 | 显示全部楼层
  1. (defun c:tt (/ sel as-40 get len add nn as)
  2.   (and (setq sel (entsel "\n点取参照圆:"))
  3.   (progn
  4.   (setq as-40 (cdr (assoc 40 (entget (car sel)))))
  5.   (princ (strcat "\n参照圆直径=" (rtos (* as-40 2) 2 2)))
  6.   (setq get (ssget '((0 . "CIRCLE"))))
  7.   (setq len (sslength get))
  8.   (setq add (ssadd))         
  9.   (repeat len
  10.     (setq nn (ssname get (setq len (1- len))))
  11.     (setq as (cdr (assoc 40 (entget nn))))
  12.     (if (equal as-40 as 0.01) (ssadd nn add))
  13.     );repeat
  14.   (if add (sssetfirst nil add))
  15.   )
  16.        )
  17.   (princ)
  18.   )
发表于 2015-1-26 22:03 | 显示全部楼层
我一般用小菜选择易
发表于 2015-1-28 16:52 | 显示全部楼层
琴剑江山_10184 发表于 2015-1-26 21:41

不能直接输入直径??
发表于 2015-1-28 17:13 | 显示全部楼层
ysq101 发表于 2015-1-28 16:52
不能直接输入直径??

自己改改就行了
发表于 2015-1-28 17:19 | 显示全部楼层
ysq101 发表于 2015-1-28 16:52
不能直接输入直径??

(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)
  )
发表于 2015-2-3 16:37 | 显示全部楼层
  1. (defun c:tt(/ sel funz ss)
  2.   (setq sel (/ (getdist "\n输入直径:") 2))
  3.   (setq funz (getreal "容差范围:"))
  4.   (if(setq ss(ssget(list'(0 . "CIRCLE")'(-4 . "<and")'(-4 . ">=")(cons 40 (- sel funz))'(-4 . "<=")(cons 40 (+ sel funz))'(-4 . "and>"))))
  5.     (sssetfirst nil ss))
  6.   ss)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 09:22 , Processed in 0.284821 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表