田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 11 48
     12
3456789
10111213141516
17181920212223
24252627282930


站点统计

最新评论



CAD启动组文件保存位置 CAD致命错误处理办法【转帖】
未知 VBA对CAD中的图框排序编号   [ 日期:2008-08-30 ]   [ 来自:本站原创 ]  HTML
'S1为图块的名字或图块名字中的一个关键词语,S2为编号的前缀,S2为编号的后缀。
'  比如查找图纸中所有结构图框,那么S1="结构"
'  比如对图框进行编号 GS-01/12,那么S2="GS-" S3="/12"
Function BlockIndex(S1 As String, S2 As String, S3 As String)
    'On Error Resume Next
    Dim I As Integer
    Dim BList() As AcadEntity
    Dim E As AcadEntity
    Dim B As AcadBlockReference
    '将图中所以图框参照块添加到选择集中
    For Each E In ThisDrawing.ModelSpace
        If E.ObjectName = "AcDbBlockReference" Then
            Set B = E
            Prompt B.name & vbCrLf
            If InStr(B.name, S1) > 0 Then
                ReDim Preserve BList(I)
                Set BList(I) = E
                I = I + 1
            End If
        End If
    Next

    BlockPaiXu BList

    Dim varAttributes
    Dim N As Long
    N = UBound(BList)
    For I = 0 To N
        Set B = BList(I)
         ThisDrawing.ModelSpace.AddText I, BList(I).insertionPoint, 7000
        varAttributes = B.GetAttributes
        varAttributes(0).textString = S2 & Format(I + 1, "00") & "/" & Format(N + 1, "00") & S3
    Next I
End Function


'Cad对象(图块按插入点)排序(x坐标从小到大,y坐标从小到大)
Function BlockPaiXu(ByRef BList() As AcadEntity)
    Dim I As Long
    I = UBound(BList)
    Dim Plist() As Variant
    ReDim Plist(I)
    
    Dim Pmin As Variant
    Dim Temp As Double
    Dim J As Long, K As Long, N As Long, M As Long
    Dim P1 As Variant
    Dim P2 As Variant
    Dim P3 As Variant
    Dim B As AcadBlockReference
    Dim E As AcadEntity
    For J = 0 To I
       
        Set B = BList(J)
        MsgBox B.name
        Plist(J) = B.insertionPoint
    Next
    '按x坐标排序
    For J = 0 To I
        For K = J + 1 To I
            P1 = Plist(J)
            P2 = Plist(K)
            If P1(0) >= P2(0) Then
                P3 = Plist(J) '=P1
                Plist(J) = Plist(K)  'p1=P2
                Plist(K) = P3 'P2 = P3
                
                Set E = BList(J)
                Set BList(J) = BList(K)
                Set BList(K) = E
            End If
        Next K
    Next J
    '对x坐标相等的进行y坐标排序
    For J = 0 To I
        For K = 0 To I
            P1 = Plist(J)
            P2 = Plist(K)
            If P1(0) = P2(0) Then
                If P1(1) < P2(1) Then
                    P3 = Plist(J) '=P1
                    Plist(J) = Plist(K)  'p1=P2
                    Plist(K) = P3 'P2 = P3
                    
                    Set E = BList(J)
                    Set BList(J) = BList(K)
                    Set BList(K) = E
                End If
            End If
        Next K
    Next J
End Function


[本日志由 tiancao1001 于 2009-04-05 05:47 PM 编辑]


暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:3*3=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©