明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2132|回复: 3

[讨论] 多个截面独立求差集

[复制链接]
发表于 2014-6-15 20:49:40 | 显示全部楼层 |阅读模式
本帖最后由 gaics 于 2014-6-15 21:55 编辑

这个标题不知道有没有歧义就是将如下图中的几个多段线构成的截面生成面域,并分别求差集。
实在找不到现成的程序就自己写了一个,请大家指正。看见Gu_xl版说用面域求并集来判断两个面域的关系,道理明白但是不知后面该怎么处理,所以就用最小包围框来判断了。

现在有个问题,如果选择的目标对象包括“圆、椭圆、多段线、面域”,但是圆和椭圆的组码不包含(70 . 1),如何排除不闭合的多段线?

  1. (defun c:tt()
  2.   (command "undo" "be")
  3.   (setq ss(ssget'((0 . "LWPOLYLINE,REGION")(70 . 1))))
  4.   (makereg ss)
  5.   (command "undo" "e")
  6.   (princ)
  7. )

  8. (defun makereg(ss / i sslst ent minpt maxpt ii a b subss ssb)
  9.   (setq i 0)
  10.   (setq sslst'())
  11.   (repeat(sslength ss)
  12.     (setq ent(ssname ss i))
  13.     (if (/= (mydxf ent 0) "REGION")
  14.       (progn
  15.   (command "region" ent "")
  16.   (setq ent(entlast))
  17.       )
  18.     )
  19.     (setq obj(vlax-ename->vla-object ent))
  20.     (vla-getboundingbox obj 'minpt 'maxpt)
  21.     (setq minpt (vlax-safearray->list minpt)
  22.     maxpt (vlax-safearray->list maxpt))
  23.     (setq sslst(cons (list (list(car minpt) (cadr minpt))
  24.          (list(car maxpt) (cadr maxpt))
  25.          ent)
  26.          sslst))
  27.     (setq i(+ i 1))
  28.   )
  29.   (setq i 0)
  30.   (setq subss(ssadd))
  31.   (repeat(length sslst)
  32.     (setq a(nth i sslst))
  33.     (setq ii 0)
  34.     (setq ssb(ssadd))
  35.     (while(and(< ii (length sslst))(entget(caddr a)))
  36.       (setq b(nth ii sslst))
  37.       (if(and(entget(caddr b))
  38.        (< (car(car a)) (car(car b)))
  39.        (< (cadr(car a)) (cadr(car b)))
  40.        (> (car(cadr a)) (car(cadr b)))
  41.        (> (cadr(cadr a)) (cadr(cadr b))))
  42.   (setq ssb (ssadd(caddr b)ssb))
  43.       )
  44.       (setq ii(+ ii 1))
  45.     )
  46.     (if(and(/= ssb nil)(entget(caddr a)))
  47.       (progn(command "subtract" (caddr a) "" ssb "")
  48.   (setq subss(ssadd(caddr a)subss))
  49.       )
  50.       (if(entget(caddr a))(setq subss(ssadd(caddr a)subss)))
  51.     )
  52.     (setq i(+ i 1))
  53.   )
  54.   subss
  55. )

  56. (defun mydxf (ent i)
  57.   (if (= (type ent) 'ename)
  58.     (setq ent (entget ent))
  59.   )
  60.   (cdr (assoc i ent))
  61. )

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-6-17 21:18:24 | 显示全部楼层
没人帮俺看看吗?这个程序好像有问题
发表于 2014-7-10 12:14:28 | 显示全部楼层
(setq ss(ssget '((-4 . "<or") (-4 . "<AND") (0 . "LWPOLYLINE,REGION") (70 . 1) (-4 . "AND>") (0 . "CIRCLE,ELLIPSE") (-4 . "or>"))))

评分

参与人数 1明经币 +1 收起 理由
gaics + 1 赞一个!学到了新东西,呵呵。

查看全部评分

 楼主| 发表于 2014-7-11 07:52:14 | 显示全部楼层
reyun 发表于 2014-7-10 12:14
(setq ss(ssget '((-4 . ""))))

非常感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 07:08 , Processed in 0.195691 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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