明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2768|回复: 9

删除圆内的线

[复制链接]
发表于 2011-9-14 12:48:53 | 显示全部楼层 |阅读模式
大家好,我有一个图里有很多圆,可圆里有很多线,我想选返回圆把圆里的线全都删除,有没有什么更好的办法呀
因为他们是块,后来被人炸开了,现在只要圆就行了.而这个块又到处都有,且又被炸开了,各位大帅看看有没有什么办

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-9-14 13:35:17 | 显示全部楼层
只在 A 开头的图层 ?
直径范围 > 3828 或 what

问这些是关系到 滤取/排除 的条件式
关系到程序效率,特别是在数量大的时候 ....

发表于 2011-9-14 13:53:28 | 显示全部楼层
  1. (defun c:tt(/ getcirpts ssgetcir s en ss)
  2.   ;;;计算园的分割点 en 园的图元名 n 园的分割段数
  3.   (defun getcirpts (en n / i d pl)
  4.     (setq i 0 d (/ pi n 0.5))
  5.     (repeat n
  6.       (setq pl (cons (vlax-curve-getpointatparam en i) pl)
  7.             i (+ i d)
  8.             )
  9.       )
  10.     (reverse pl)
  11.     )
  12.   ;;;参数 cir 园的图元名 filter 过滤表 n 园的分割段数
  13.   (defun ssgetcir (cir filter n)
  14.     (if filter
  15.       (ssget "wp" (getcirpts cir n) filter)
  16.       (ssget "wp" (getcirpts cir n))
  17.       )   
  18.     )
  19.   ;;;选择的园要在图形可见范围内
  20.   (setq s (ssget '((0 . "circle"))))
  21.   (if s
  22.     (repeat (setq k (sslength s))
  23.       (setq en (ssname s (setq k (1- k))))
  24.       (if (setq ss (ssgetcir en '((0 . "line")) 20)) ;_ 过滤表可自行修改
  25.         (command "erase" ss "")
  26.         )
  27.       )
  28.     )
  29.   )
发表于 2011-9-14 14:00:58 | 显示全部楼层

  1. (defun gps->ss-2lst (ss / lst n)
  2.   (if (= (type ss) 'PICKSET)
  3.     (repeat (setq n (sslength ss))
  4.      (setq lst (cons (ssname ss (setq n (1- n))) lst))
  5.     )   
  6.   );lst
  7. )
  8. (defun c:cc  ( / center0 entlst lll n oldosmode pt3 radius0)
  9.   (prompt "\n清理圆内部线,一窗口搞定:")
  10.   (setvar "osmode" 0)  
  11.   (setq oldosmode (getvar "osmode") )     
  12.   (foreach n (gps->ss-2lst (ssget '((0 . "CIRCLE"))))
  13.       (setq entlst (entget n)
  14.         center0 (cdr (assoc 10 entlst))
  15.         radius0 (cdr (assoc 40 entlst))
  16.         LLL 0.0
  17.       )
  18.     (command "_.erase" "wp" )
  19.     (while (< lll 6.29)
  20.       (setq pt3 (polar center0 lll (* radius0 0.9)))
  21.       (command pt3)
  22.       (setq lll (+ 0.2 lll))
  23.     )
  24.   (command "" "")   
  25.   )
  26.   (setvar "osmode" oldosmode)
  27. )
发表于 2011-9-14 15:32:47 | 显示全部楼层
真不错 呵呵 圆内的线也不多啊
 楼主| 发表于 2011-9-14 17:16:42 | 显示全部楼层
三楼楼主的程序对于小于圆的直线来说真是非常棒,不过以下两种情况就不行了曾尝鼎一尝试
(if (setq ss (ssgetcir en '((0 . "line")(0 . "ARC")) 20))或 (if (setq ss (ssgetcir en '((0 . "line""line")) 20))
都不行

本帖子中包含更多资源

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

x
发表于 2011-9-14 18:26:09 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-9-14 19:01 编辑
357785513 发表于 2011-9-14 17:16
三楼楼主的程序对于小于圆的直线来说真是非常棒,不过以下两种情况就不行了曾尝鼎一尝试
(if (setq ss (ss ...


对于1楼的图形,3楼就是答案!对于6楼的图,就稍微复杂点,首先将选择方式 "wp" 要改为"CP",再将圆从选择集中剔除,或者"wP"选完后删掉选到的物体,再用 "F" 栏选,再将圆从选择集中剔除,再判断栏选选到的每图元是否落在园内,判断点是否在多边形内的相关代码明经都能搜到!自己再用用心,就能写出程序来了!
下面的代码,仅对删直线有效,对于其他类型实体,请参照自行修改!
  1. (defun c:tt(/ getcirpts ssgetcir s en ss dxf ptincir-p lineincir-p SS->List)
  2.   ;;;计算园的分割点 en 园的图元名 n 园的分割段数
  3.   (defun getcirpts (en n / i d pl)
  4.     (setq i 0 d (/ pi n 0.5))
  5.     (repeat n
  6.       (setq pl (cons (vlax-curve-getpointatparam en i) pl)
  7.             i (+ i d)
  8.             )
  9.       )
  10.     (reverse pl)
  11.     )
  12.   ;;;参数 cir 园的图元名 filter 过滤表 n 园的分割段数
  13.   (defun ssgetcir (cir filter n / ss)
  14.     (if filter
  15.       (setq ss (ssget "cp" (getcirpts cir n) filter))
  16.       (setq ss (ssget "cp" (getcirpts cir n)))
  17.       )
  18.     (ssdel cir ss)
  19.     (if (> (sslength ss) 0)
  20.       ss
  21.       )
  22.     )
  23.   (defun dxf (ent i)
  24.     (cond ((= (type ent) 'ename)
  25.      (cdr (assoc i (entget ent)))
  26.       )
  27.    ((= (type ent) 'list)
  28.     (cdr (assoc i ent))
  29.     )
  30.     ) ;_ if
  31.   )
  32.   ;;;判断点是否在园内
  33.   (defun ptincir-p (cir pt / r cp d)
  34.     (setq r (dxf cir 40)
  35.    cp (dxf cir 10)
  36.    )
  37.     (or (< (setq d (distance cp pt)) r) (equal d r 0.0001))
  38.     )
  39.   ;;;判断直线是否在园内
  40.   (defun lineincir-p (line cir)
  41.     (and (ptincir-p cir (dxf line 10))
  42.   (ptincir-p cir (dxf line 11))
  43.   )
  44.     )
  45.   ;;;选择集->列表
  46.   (defun SS->List (ss / i s)
  47.     (if ss
  48.       (repeat (setq i (sslength ss))
  49. (setq s (cons (ssname ss (setq i (1- i))) s))
  50.       )
  51.     )
  52.   )
  53.   ;;;选择的园要在图形可见范围内
  54.   (setq s (ssget '((0 . "circle"))))
  55.   (if s
  56.     (progn
  57.       (setq s (ss->list s))
  58.       (foreach cir s
  59.       (if (setq ss (ssgetcir cir '((0 . "line")) 20))
  60.         (progn
  61.    (setq ss (ss->list ss))
  62.    (foreach line ss
  63.      (if (lineincir-p line cir) (entdel line))
  64.      )
  65.    )
  66.         )
  67. )
  68.       )
  69.     )
  70. (princ)
  71.   )

点评

G版,能不能改成直线过圆则圆内部分被剪掉呢?框选的  发表于 2012-9-28 15:39
 楼主| 发表于 2011-9-15 09:01:18 | 显示全部楼层
哦,毛塞敦开,受教了

点评

网络语言?茅塞顿开or毛塞敦开?  发表于 2011-9-20 06:08
发表于 2013-4-23 21:12:31 | 显示全部楼层
无法删除和圆相交的线段。
发表于 2013-4-23 23:50:53 | 显示全部楼层
要这么麻烦吗!快速选择不就可以了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-26 17:12 , Processed in 0.205903 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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