Bryco 发表于 2008-2-20 09:30:15

VBA中对象的绘制顺序。。

您好,有没有办法从VBA创建的对象中排序绘图顺序
基本上' Check for correct titleblocks..
Select Case entX.Name
      Case "A3 - AbiCAD Titleblock"
                A3logo_IP(0) = 9.442: A3logo_IP(1) = 5: A3logo_IP(2) = 0
                Set blockLOGO_A3 = ThisDrawing.Blocks.Item("A3 - AbiCAD Titleblock").InsertBlock(A3logo_IP, LogoPath, 1#, 1#, 1#, 0)
                blockLOGO_A3.Layer = "ABI-BORDER"
                blockLOGO_A3.Update
                GoTo RUN_TBE
End Select
…当用户选择客户端名称时,它会将该徽标插入主标题栏块,但有些徽标充满颜色,应该位于主标题栏框架线的后面。
VBA中这些块对象是否没有draworder属性,或者是否有其他方法(如果有的话)来实现
有什么想法吗
&nbsp 干杯,保罗basepointdesignzltd.. P4 3.0Ghz/2GB RAM。。

Bryco 发表于 2008-2-20 09:51:09

AcadSortentsTable,这方面的帮助也很好。

Bryco 发表于 2008-2-20 11:42:03

您好,
已经研究过了,我从网上的其他地方复制了一些代码(红色),并出于自己的目的对其进行了修改:
Private Sub cmdUpdateTitleblock_click()
'Draworder the LOGO to the back..
Dim eDictionary As Object
Dim sentityObj As Object
Dim A3_STB(0), A2_STB(0), A1_STB(0) As AcadObject
Set eDictionary = ThisDrawing.PaperSpace.GetExtensionDictionary
Set sentityObj = eDictionary.GetObject("ACAD_SORTENTS")
Set sentityObj = eDictionary.AddObject("ACAD_SORTENTS", "AcDbSortentsTable")
' Loop through every layout in the drawing..
ThisDrawing.ActiveSpace = acPaperSpace
For Each layoutX In ThisDrawing.Layouts
If layoutX.Name"Model" Then 'Disregard ModelSpace..
ThisDrawing.ActiveLayout = layoutX
   
' Start main loop to get attribute values for the attributes..
For Each entX In ThisDrawing.PaperSpace
    ' If the found object is a block..
If entX.EntityName = "AcDbBlockReference" Then
' Check for correct titleblocks and insert logos. Also, set draworder for blocks to movetobottom..
Select Case entX.Name
      Case "A1 - AbiCAD Titleblock"
                A1logo_IP(0) = 446.415: A1logo_IP(1) = 17.085: A1logo_IP(2) = 0
                Set blockLOGO_A1 = ThisDrawing.Blocks.Item("A1 - AbiCAD Titleblock").InsertBlock(A1logo_IP, LogoPath, 1#, 1#, 1#, 0)
                blockLOGO_A1.Layer = "ABI-BORDER"
                blockLOGO_A1.Update
                Set A1_STB(0) = blockLOGO_A1
                sentityObj.MoveToBottom A1_STB
                AcadApplication.Update
                GoTo RUN_TBE
               
      Case "A2 - AbiCAD Titleblock"
                A2logo_IP(0) = 183.049: A2logo_IP(1) = 5: A2logo_IP(2) = 0
                Set blockLOGO_A2 = ThisDrawing.Blocks.Item("A2 - AbiCAD Titleblock").InsertBlock(A2logo_IP, LogoPath, 1#, 1#, 1#, 0)
                blockLOGO_A2.Layer = "ABI-BORDER"
                blockLOGO_A2.Update
                Set A2_STB(0) = blockLOGO_A2
                sentityObj.MoveToBottom A2_STB
                AcadApplication.Update
                GoTo RUN_TBE
               
      Case "A3 - AbiCAD Titleblock"
                A3logo_IP(0) = 9.442: A3logo_IP(1) = 5: A3logo_IP(2) = 0
                Set blockLOGO_A3 = ThisDrawing.Blocks.Item("A3 - AbiCAD Titleblock").InsertBlock(A3logo_IP, LogoPath, 1#, 1#, 1#, 0)
                blockLOGO_A3.Layer = "ABI-BORDER"
                blockLOGO_A3.Update
                Set A3_STB(0) = blockLOGO_A3
                sentityObj.MoveToBottom A3_STB
                AcadApplication.Update
                GoTo RUN_TBE
End Select
            
RUN_TBE:
'blah blah blah more code here for other stuff...
End Sub 但这段代码在'sentityObj。移动到底部A3#U机顶盒&#039'sentityObj。移动到底部A2#U机顶盒#039&amp'sentityObj。移动到底部A1#U机顶盒#039;行,说明:
&039;无效输入#039
怎么了?是将徽标块插入到另一个块(嵌套块)中,还是有简单的解决方案
有什么想法吗
&nbsp 大家好,Paul basepointdesignzltd

Bryco 发表于 2008-2-20 12:20:51

试着做一个函数
但是首先尝试一下帮助的作用,我认为您可能需要学习编程基础知识
首先你要弄清楚怎么做,然后你要弄明白如何使它适应你正在编写的特定代码。这对每个人来说都需要时间。
页: [1]
查看完整版本: VBA中对象的绘制顺序。。