明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2116|回复: 13

进来指点一二,谢谢

  [复制链接]
发表于 2006-3-7 14:21:00 | 显示全部楼层 |阅读模式

我想计算铝型材的外顶点个数,我的想法是把所有图元形成面域,然后比较出最大的面域,统计出此面域的顶点一个,但是我觉得麻烦了点,形成面域后以后又要炸开,有没有更简单点的方法,请指点一二

发表于 2006-3-7 18:08:00 | 显示全部楼层
贴图说明一下
 楼主| 发表于 2006-3-7 18:37:00 | 显示全部楼层

不会发图片,呵呵

发表于 2006-3-7 18:45:00 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2006-3-7 19:02:00 | 显示全部楼层

我编写了一段程序,不过好象有点问题

Sub point()
      Dim entcount As Integer
    
      Dim i As Integer
     
      Dim regcout As Integer
      Dim regionobj As Variant
      Dim outregion As AcadRegion
     
      Dim Selects As AcadSelectionSet
      Dim p As Integer
      ReDim entobj(0 To entcount - 1) As AcadEntity
      ReDim regions(0 To regcount - 1) As Variant
      entcount = ThisDrawing.ModelSpace.Count
     
      For i = 0 To entcount - 1
          Set entobj(i) = ThisDrawing.ModelSpace.Item(i)          '将图上图元付给图元数组
      Next
      regionobj = ThisDrawing.ModelSpace.AddRegion(entobj)        '将图元组合成区域
      For i = 0 To entcount - 1
          entobj(i).Delete
      Next
      regcount = ThisDrawing.ModelSpace.Count
      If regcount = 1 Then
         Set outregion = ThisDrawing.ModelSpace.Item(0)
      End If
      Do Until regcount = 1
    
      For i = 0 To regcount - 1
          Set regions(i) = ThisDrawing.ModelSpace.Item(i)
      Next
      Set outregion = regions(0)
      Loop
      For i = 1 To regcount - 1
          If regions(i).Area > outregion.Area Then
             Set outregion = regions(i)
          End If
      Next
      Selects.AddItems outregion
      For Each entity In Selects
      If UCase(entity.ObjectName) = "ACDBpoint" Then
         p = p + 1
         End If
         Next
        MsgBox p
   
End Sub

发表于 2006-3-7 19:10:00 | 显示全部楼层

你要获取的到底是什么?

是外部包装尺寸?

 楼主| 发表于 2006-3-7 19:13:00 | 显示全部楼层

就是要计算最外层的顶点的个数

本帖子中包含更多资源

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

x
 楼主| 发表于 2006-3-7 19:14:00 | 显示全部楼层
只要获得点的个数就可以了
发表于 2006-3-7 19:22:00 | 显示全部楼层

图里只有这些图元?

没有其它的?

不用选择么?

发表于 2006-3-7 19:32:00 | 显示全部楼层

注意AddRegion返回的是数组!

下面的函数利用AddRegion函数的返回值获取顶点数(和实体数相等)

Private Function GetPointCount(Regions As Variant)
On Error Resume Next
     Dim pRegion As AcadRegion
     Dim i As AcadEntity
    
     '遍历面域数组找到最大面域
     For Each i In Regions
        If pRegion.Area < i.Area Then
            Set pRegion = i
        End If
     Next i
    
     objs = pRegion.Explode()
     GetPointCount = UBound(objs)
    
     For Each i In objs
        i.Delete
     Next i
    
End Function

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

本版积分规则

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

GMT+8, 2024-11-27 06:41 , Processed in 0.187841 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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