Bryco 发表于 2007-4-8 12:42:57

阻止 xdata 设计中心数据

我以前没有将扩展数据附着到块,因为我总是将其添加到块参照中。
但现在我发现,如果将它添加到现有的块定义中,它会自动成为acad设计中心数据的一部分。
这里有几个例子来展示它。
如果运行第一个,您将得到预期的(和想要的)结果
1001您的
1000 CCCC
第二个debug . prints
1001 ACAD
1000设计中心数据
1002 {
1070 1
1070 1
1002 }
1001您的
1000 CCCC
Sub MakeBlockwithXdata()
    Dim oBlock As AcadBlock
    Dim Zero(2) As Double
    Set oBlock = ThisDrawing.Blocks.Add(Zero, "L")
    oBlock.AddCircle Zero, 4
    Dim DataType(1) As Integer
    Dim Data(1) As Variant
    DataType(0) = 1001: Data(0) = "Yours"
    DataType(1) = 1000: Data(1) = "CCCC"
    oBlock.SetXData DataType, Data
    getxd "L"
   
End Sub
Sub AddXdatatoBlock()
    Dim oBlock As AcadBlock, P
    Dim br As AcadBlockReference
    ThisDrawing.Utility.GetEntity br, P, "Pick"
    Set oBlock = ThisDrawing.Blocks(br.Name)
    Dim DataType(1) As Integer
    Dim Data(1) As Variant
    DataType(0) = 1001: Data(0) = "Yours"
    DataType(1) = 1000: Data(1) = "CCCC"
    oBlock.SetXData DataType, Data
    getxd oBlock.Name
   
End Sub
Function getxd(sBlock As String)
    Dim oBlock As AcadBlock
    Set oBlock = ThisDrawing.Blocks(sBlock)
    Dim sMt As String
    Dim xdataOut As Variant
    Dim xtypeOut As Variant
    Dim i As Integer
   
    Debug.Print
    oBlock.GetXData "", xtypeOut, xdataOut
    If IsEmpty(xtypeOut) = False Then
    For i = 0 To UBound(xtypeOut)
      Debug.Print xtypeOut(i), xdataOut(i)
    Next
    End If
   
End Function
**** Hidden Message *****

DaveW 发表于 2007-4-8 23:57:45

不确定你在问什么或告诉什么,因为我不知道块或块引用之间的区别。
我唯一能看到的是你没有在写入时清除以前的xdata。注意:如果是一次写入,没什么大不了的,但也许你根本没有真正将数据添加到块中。就像在,它已经在那里了???
尝试在写入之前清除数据。确保您测试了对象。您看到的数据可能需要由acad稍后使用并导致损坏问题???

Bryco 发表于 2007-4-9 10:26:21

Dave我试图证明Acad正在自己添加东西。(acad2006)
块基本上是对如何将一些对象组合在一起的非图形描述,块引用是将对象组插入绘图的图形部分。
我看不出有必要清除xdata,因为setxdata似乎已经清除了应用程序中的任何内容。

DaveW 发表于 2007-4-9 10:48:40

感谢您解释差异。
我看到你说ACAD自己写了这一点。我并不感到惊讶,并且知道在那里允许编码人员在需要时以创造性的方式使用它。
有趣。我们的代码只是不断追加xdata,除非它被清除。我甚至看到过人们询问如何删除它的帖子,答案是先写任何东西,所以这就是我们所做的。也许你的代码和我们当时的代码之间有细微的区别。我不知道现在的代码是什么,所以不可能进行比较。
页: [1]
查看完整版本: 阻止 xdata 设计中心数据