明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: linheyuanpcb

[提问] 这种情况怎么选择指定的圆操作?

[复制链接]
发表于 昨天 22:21 | 显示全部楼层
找出面积最大的多段线 和其内部的圆选择集 然后把其内部的所有相对小的多段线内部的圆从选择集中删除 剩下的就是夹层中的圆
回复 支持 反对

使用道具 举报

发表于 半小时前 | 显示全部楼层
实现方式很多的,基本选多了减去.
但是曲线选择或者排除就要费一番功夫而已.
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 分钟前 | 显示全部楼层
(defun c:tt  (/ EN I LST SS SS_C SS_PL)
  (defun ss->enamelst  (ss)
    (vl-remove-if-not
      (function (lambda (x) (= (type x) 'ename)))
      (mapcar 'cadr (ssnamex ss))))
  (setq ss_pl (ssget "x" '((0 . "*polyline") (8 . "2"))))
  (setq ss_pl (ss->enamelst ss_pl))
  (setq ss_pl (vl-sort ss_pl
         '(lambda (x y)
     (> (vla-get-area (vlax-ename->vla-object x))
        (vla-get-area (vlax-ename->vla-object y))))))
  (setq en (car ss_pl))
  (setq lst (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget en)))
  (setq lst (mapcar 'cdr lst))
  (setq ss_c (ssget "x"
      (list '(0 . "circle")
     '(8 . "1")
     '(-4 . "<or")
     (cons 40 (/ 1.23 2))
     (cons 40 (/ 1.17 2))
     '(-4 . "or>"))))
  (setq ss (ssget "cp"
    lst
    (list '(0 . "circle")
   '(8 . "1")
   '(-4 . "<or")
   (cons 40 (/ 1.23 2))
   (cons 40 (/ 1.17 2))
   '(-4 . "or>"))))
  (cond ((and ss (> (sslength ss_c) (sslength ss)))
  (setq i 0)
  (while (< i (sslength ss))
    (setq ss_c (ssdel (ssname ss i) ss_c)
   i    (1+ i)))
  (if ss_c
    (command "erase" ss_c "")))
((and ss_c (null ss))
  (command "erase" ss_c "")))
  (princ)
        )
现在是通过保留最大外形,删除在最大外形后符合的圆,但当有两个或者多个一样大的时候,就只选中一个来处理,。这样就会误删除。请老大们改下下。谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 08:35 , Processed in 0.156542 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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