Господа!
Я только начал разбираться с доступом к AutoCAD через COM. Подскажите, как получить доступ к ссылкам на определенный блок в чертеже. Затем нужно из этих ссылок извлечь значение определенных атрибуты. В VisualStudio2008 я сделал такую штуку:
Imports System.IO
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.Interop.Common
Public Class mainForm
Dim ndFile, ndAttr, ndSpace As TreeNode
Dim acaddwg As IAcadDocument 'переменная для работы с активным чертежом
Dim dwgblocks As IAcadBlocks 'переменная для работы с коллекцией блоков в чертеже
Dim dwgcurrblock As IAcadBlock 'переменная для работы с отдельным блоком в чертеже
Dim dwgcurrblockref As IAcadBlockReference 'переменная для работы со ссылкой на блок
Dim blockattrs As Object
Dim acadapp As IAcadApplication 'переменная для работы с приложением AutoCAD
Private Sub DwgOpenLbl_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles DwgOpenLbl.LinkClicked
Select Case OpenDwgDialog.ShowDialog()
Case Windows.Forms.DialogResult.OK
AddFileToTreeView()
Case Windows.Forms.DialogResult.Cancel
Exit Sub
End Select
End Sub
Private Sub AppendAttributesToDwg()
acadapp = GetAcadApplication(True)
acaddwg = acadapp.ActiveDocument
dwgblocks = acaddwg.Blocks
dwgcurrblock = dwgblocks.Item("Kr_MultiPosiciaLeader")
dwgcurrblockref = dwgcurrblock.Item(1)'ВОТ ЗДЕСЬ ПРОБЛЕМА! Как получить ссылки на определенные блок. Потом уже просто. Определяем их количество и в цикле читаем значения атрибутов.
blockattrs = dwgcurrblockref.GetAttributes
Dim strattr As String = ""
For i As Integer = LBound(blockattrs) To UBound(blockattrs)
strattr = strattr + " Tag: " + blockattrs(i).TagString + vbCrLf + _
" Value: " + blockattrs(i).textString
Next
MsgBox("Атрибуты для блока " & dwgcurrblockref.Name & " такие: " & vbCrLf & strattr)
End Sub
Private Sub AddFileToTreeView()
ndFile = New TreeNode(Path.GetFullPath(OpenDwgDialog.FileName), 0, 0)
DwgTreeView.Nodes.Add(ndFile)
AppendAttributesToDwg()
End Sub
Private Function GetAcadApplication(ByVal visible As Boolean) As IAcadApplication
Dim v As Object
Try
v = GetObject(, "AutoCAD.Application")
Catch ex As Exception
v = CreateObject("AutoCAD.Application")
End Try
Return v
v.Visible = visible
End Function
End Class
К приложению доступ есть, документ открывается, блоки в документе вижу и могу работать с ними, а вот ссылки на блоки не получается достать. В help к AutoCAD прочитал, что доступ к ссылке на блок можно получить через:
ModelSpace.Item
PaperSpace.Item
Block.Item
Но как — не написано. Если перебирать все элементы чертежа по типу, то при большом чертеже это будет геморроем.
Надеюсь на помощь спецов, думаю не одному мне эта тема интересна.