明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2391|回复: 10

[求助]难!好难!真的很难!

  [复制链接]
发表于 2007-9-18 09:16 | 显示全部楼层 |阅读模式

不好意思!各位,写标题冲动了点。。。这个对小弟我确实有点难,不过我相信应该有很多高手能帮小弟这个忙。

如图

如何利用boundary命令,将红线范围内所有能 “边界”化都“边界”化,并且将每个“边界”化的图元储存在表中。(不能有重复)

看到这帖的,只要你有啥看法或思路,都可以顶一下。。谢谢,谢谢了。。。

本帖子中包含更多资源

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

x
发表于 2007-9-18 15:01 | 显示全部楼层

所说的"能边界化"的含义是什么?两个相邻的方格,算是两个还是三个?

 楼主| 发表于 2007-9-18 17:33 | 显示全部楼层

谢谢回帖!!!

只能算2个。。。

我们知道,2个相邻的方格,如果用“boundary”命令,要给出内部点,不论你点2个方格内任何点,都不会使外方格“边界”化的(当然,除非中间那条线没跟两边的线相交)。

发表于 2007-9-18 19:45 | 显示全部楼层

炸开,交点打断 ,region生成面域...

 楼主| 发表于 2007-9-19 08:13 | 显示全部楼层

不好意思,没说明白。。。图形是由各直线组成的,并非是块,无法炸开。如果在红色外框用region选面域只能选中红色格子,里面的灰色格子选不中。。

我现在想到一种思路,可还不完善,希望大家帮忙想办法。。谢谢。

我的思路是:1.圈选范围,求出范围内所有交点;2.为防止有重复线,导致重复交点,自定义个函数删除重复点;3.取出每行的交点,以同行两点的中点上方为内部点

这个思路的主要问题:内部点不全(三角形斜边向下的照这种思路取不到内部点)

另外图形并非只有这种,还有其他形状的

发表于 2007-9-19 08:44 | 显示全部楼层

"图形是由各直线组成的,并非是块,无法炸开"

是楼上你没理解明白,

复制直线,直线交点打断.region生成面域...

将复制后的直线删除...完毕.

无痕版主的意思..

发表于 2007-9-19 11:56 | 显示全部楼层

作了一个,简单些的,不知是不是这样。

其中第二行中的a,大小要合适,看你的具体坐标大小。如果不设定该值,就要将交点排序,较复杂,自己作吧。

对象捕捉也要关掉,要在程序中关也可,自己作吧。

(defun c:boun( )
  (setq a 10)
  (setq sspt nil ssmh nil)
  (setq ssline (ssget))
  (setq n (sslength ssline) i 0 j 1)
  (while (< i (- n 1))
    (if (= (cdr (assoc 0 (entget (ssname ssline i)))) "LINE")
      (progn
    (setq pt0 (cdr (assoc 10 (entget (ssname ssline i)))))
    (setq pt1 (cdr (assoc 11 (entget (ssname ssline i)))))
    (setq j 1)
    (while (< j n)
      (if (= (cdr (assoc 0 (entget (ssname ssline j)))) "LINE")
        (progn
      (setq pt2 (cdr (assoc 10 (entget (ssname ssline j)))))
      (setq pt3 (cdr (assoc 11 (entget (ssname ssline j)))))
      (if (inters pt0 pt1 pt2 pt3)
         (setq sspt (cons (inters pt0 pt1 pt2 pt3) sspt)))))
      (setq j (+ j 1)))
    ))
    (setq i (+ i 1)))
  (setq n (length sspt) i 0)
  (while (< i n)
    (setq pt0 (list (+ (car (nth i sspt)) a) (+ (cadr (nth i sspt)) 10) a))
    (command "boundary"  pt0 "")
    (setq mh (entlast))
    (if (= (cdr (assoc 0 (entget mh))) "LWPOLYLINE")
      (setq ssmh (cons mh ssmh)))
    (setq i (+ i 1))
    )
   )

发表于 2007-9-21 18:12 | 显示全部楼层

用求交点计算的话的确是可以,但程序需要不断地判断有无相重合的点,感觉很麻烦,是否可以按距离来计算,计算出这些内部线条间线条与线条的距离,就可以求出BOUNDARY所需的内部点,一次性将所有的内部线条进行BOUNDARY,

发表于 2007-9-21 23:12 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2007-9-21 23:14 | 显示全部楼层

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-18 06:03 , Processed in 0.216351 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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