明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3796|回复: 10

[求助]识别图幅大小

  [复制链接]
发表于 2004-5-14 11:12:00 | 显示全部楼层 |阅读模式
请问各位版主、高手:


今有一图,怎样判断它是A0、A1、A2、A3、A4中的哪一种,更确切地说是接近于哪一种呢?请贴个代码,谢谢!!!
 楼主| 发表于 2004-5-14 15:13:00 | 显示全部楼层
问题是不是太小了,怎么没人回答呀
 楼主| 发表于 2004-5-14 15:29:00 | 显示全部楼层
这样行吗?
  1.   Public Function Extents(points)
  2.        Dim min, max
  3.        Dim i As Long, j As Long, pt, retVal(0 To 1)
  4.        min = points(LBound(points))
  5.        max = points(LBound(points))
  6.        For i = LBound(points) To UBound(points)
  7.                pt = points(i)
  8.                For j = LBound(pt) To UBound(pt)
  9.                        If pt(j) < min(j) Then min(j) = pt(j)
  10.                        If pt(j) > max(j) Then max(j) = pt(j)
  11.                Next
  12.        Next
  13.        retVal(0) = min: retVal(1) = max
  14.        Extents = retVal
  15. End FunctionPublic Function ssExtents(ss As AcadSelectionSet) As Variant
  16.        Dim points(), c As Long
  17.        Dim min, max, util As AcadUtility
  18.        Set util = ThisDrawing.Utility
  19.        c = 0
  20.        For i = 0 To ss.Count - 1
  21.                ss.Item(i).GetBoundingBox min, max
  22.                min = util.TranslateCoordinates(min, acWorld, acUCS, False)
  23.                max = util.TranslateCoordinates(max, acWorld, acUCS, False)
  24.                ReDim Preserve points(0 To c + 1)
  25.                points(c) = min: points(c + 1) = max
  26.                c = c + 2
  27.        Next
  28.        ssExtents = Extents(points)
  29. End FunctionPublic Function CreateSelectionSet(Optional ssName As String = "ss") As AcadSelectionSet
  30.        Dim ss As AcadSelectionSet
  31.        On Error Resume Next
  32.        Set ss = ThisDrawing.SelectionSets(ssName)
  33.        If Err Then Set ss = ThisDrawing.SelectionSets.Add(ssName)
  34.        ss.Clear
  35.        Set CreateSelectionSet = ss
  36. End FunctionSub kr_limit()
  37.   Dim ss As AcadSelectionSet
  38.   Set ss = CreateSelectionSet
  39.   ss.Select acSelectionSetAll
  40.   Dim retVal
  41.   retVal = ssExtents(ss)End Sub
发表于 2004-5-14 20:17:00 | 显示全部楼层
问题是你的图幅实际是以什么来表示的?是做成图块的图框,还是只能通过范围来判断
发表于 2004-5-14 20:54:00 | 显示全部楼层
这个问题没有一个通用的方法,只能针对一些特殊的情况进行处理,比如:可以把所有的图框都分别做成块A1,A2,A3,A4,然后在判断它的图块名称就知道它是几号图了,不知道有没有更好的方法?
发表于 2004-5-14 21:02:00 | 显示全部楼层
我就这样做
发表于 2004-5-14 22:56:00 | 显示全部楼层
通过范围来判断有点问题,计算量大不说,你怎么判断A1、A3幅面



还是判断图块名称好些,


如果是成套软件,可以考虑附在扩展数据上
发表于 2004-5-14 23:26:00 | 显示全部楼层
我是全图后用extmin,extmax
 楼主| 发表于 2004-5-15 08:53:00 | 显示全部楼层
谢谢大家的指点!!! 我们公司的图中比较乱,有块的也有用线画的,我原来的目的是用范围来判断,故编的上面的程序。此程序不知对不对?(后来测试了一下好像是对的,呵呵) 不过看了myfreemind兄的回复,才知道原来还可以这样简单!!!谢谢!!! 我也觉得用块好些,准确!
 楼主| 发表于 2004-5-15 08:56:00 | 显示全部楼层
lzh741206发表于2004-5-14 22:56:00通过范围来判断有点问题,计算量大不说,你怎么判断A1、A3幅面 还是判断图块名称好些, 如果是成套软件,可以考虑附在扩展数据上
同意lzh741206兄的观点!!!但我从来不知道怎样运用扩展数据,惭愧!lzh741206兄能指点一下吗?谢谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 05:32 , Processed in 0.191202 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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