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

块扩展数据设计中心数据

我没有#039;t将扩展数据连接到as I&#039之前的块;我总是把它添加到blockreferences中
但现在我发现,如果我将其添加到现有块定义中,它将自动成为acad设计中心数据的一部分
此处'这是一对替补来展示它
如果运行第一个,则会得到预期(和期望)结果;1001年&nbsp&nbsp&nbsp 您的;1000&nbsp&nbsp&nbsp CCCC第二个调试。打印;1001年&nbsp&nbsp&nbsp ACAD;1000&nbsp&nbsp&nbsp 设计中心数据;1002&nbsp&nbsp&nbsp {1070 1
;1001年&nbsp&nbsp&nbsp 您的;1000&nbsp&nbsp&nbsp 中交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

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

不知道你在问什么或说什么,因为我不知道block和blockreference之间的区别
我唯一能看到的是,您没有在写入时清除以前的扩展数据。注意:如果是一次性写入,没什么大不了的,但可能您根本没有真正将数据添加到块中。比如,它已经在那里了
在写入之前尝试清除数据。确保测试对象。您看到的数据可能需要acad稍后使用,并导致腐败问题
Public Function setXdataInformation(ByVal itm As AcadObject, sAppName As String, sValue As String) As Boolean
    Dim DataType(0 To 1) As Integer
    Dim Data(0 To 1) As Variant
    Dim clearDataType(0) As Integer
    Dim clearData(0) As Variant
   
    If itm Is Nothing Then
      'MsgBox "not found"
      Exit Function
    End If

    ' -- create new xdata item
    clearDataType(0) = 1001: clearData(0) = sAppName
    itm.SetXData clearDataType, clearData
    ' -- save data
    DataType(0) = 1001: Data(0) = sAppName
    DataType(1) = 1000: Data(1) = sValue
    itm.SetXData DataType, Data
   
    ' -- cleanup
    Set itm = Nothing

End Function

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

Dave我试图表明Acad正在添加内容#039;s自己的。(acad2006)
块基本上是关于如何将一些对象组合在一起的非图形描述,块参照是将对象组插入图形中的图形部分
我可以'我不认为有必要清除扩展数据,因为setxdata似乎已经清除了应用程序中的任何内容

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

感谢您解释差异
我知道你是说ACAD自己写的。我一点也不惊讶,知道它允许程序员在需要的时候创造性地使用它。我们的代码只是不断附加扩展数据,除非它被清除。我甚至看到一些帖子,人们问如何删除它,答案是先不写任何内容,所以我们就是这么做的。也许你的代码和我们当时的代码有点不同。我不知道现在的代码是什么,所以不可能进行比较。
页: [1]
查看完整版本: 块扩展数据设计中心数据