Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.ApplicationServices.Application
Imports Autodesk.AutoCAD.LayerManager
Imports Autodesk.AutoCAD.Windows
Public Class BlokoviForm
Dim mojofdbl As Array
Dim mojofd2 As Array
Dim mojofddxr As Array
Dim mojofdxr As String
Dim check1 As Integer
Function GetTopLevelBlocks(ByVal DatabaseIn As Database) As List(Of String)
Dim myList As New List(Of String)
Using myTrans As Transaction = DatabaseIn.TransactionManager.StartTransaction
Dim myBT As BlockTable = DatabaseIn.BlockTableId.GetObject(OpenMode.ForRead)
For Each myBTRid As ObjectId In myBT
Dim myBTR As BlockTableRecord = myBTRid.GetObject(OpenMode.ForRead)
If myBTR.IsAnonymous = False And myBTR.IsLayout = False And _
myBTR.IsFromExternalReference = False And _
myBTR.IsDependent = False Then
myList.Add(myBTR.Name)
End If
Next
End Using
Return myList
End Function
Function potrazixref(ByVal DatabaseIn As Database) As List(Of String)
Dim myList As New List(Of String)
Using myTrans As Transaction = DatabaseIn.TransactionManager.StartTransaction
Dim myBT As BlockTable = DatabaseIn.BlockTableId.GetObject(OpenMode.ForRead)
For Each myBTRid As ObjectId In myBT
Dim myBTR As BlockTableRecord = myBTRid.GetObject(OpenMode.ForRead)
If myBTR.IsFromExternalReference = True Then
myList.Add(myBTR.Name)
End If
Next
End Using
Return myList
End Function
Private Sub Odaberiblok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Odaberiblok.Click
If RadioButton1.Checked = True Then
Dim myOFD As New OpenFileDialog("Select DWG", "", "dwg", "Select DWG", _
OpenFileDialog.OpenFileDialogFlags.AllowMultiple)
If myOFD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
mojofdbl = myOFD.GetFilenames
For Each myFileName As String In mojofdbl
'Debug.Print("***EXPORT FOR " & myFileName)
Using myDB As New Database(False, True)
myDB.ReadDwgFile(myFileName, FileOpenMode.OpenForReadAndAllShare, True, "")
Using mytrans As Transaction = myDB.TransactionManager.StartTransaction
For Each myBlockName As String In GetTopLevelBlocks(myDB)
'Debug.WriteLine(myBlockName)
If Lblokova.Items.IndexOf(myBlockName) < 0 Then
Lblokova.Items.Add(myBlockName)
End If
'If Lblokova.FindString("myBlockName") Then Else Lblokova.Items.Add(myBlockName)
Next
End Using
End Using
Next
End If
'Lblokova = Lblokova.Distinct().ToList()
Else
Dim myOFD As New OpenFileDialog("Select Folder", "", "", "Select Folder", _
OpenFileDialog.OpenFileDialogFlags.AllowFoldersOnly)
If myOFD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
Dim myDIO As New IO.DirectoryInfo(myOFD.Filename)
For Each myFileInfo As IO.FileInfo In myDIO.GetFiles("*.dwg", _
IO.SearchOption.AllDirectories)
mojofdbl = myDIO.GetFiles("*.dwg", _
IO.SearchOption.AllDirectories)
'Debug.Print("***EXPORT FOR " & myFileName)
Using myDB As New Database(False, True)
myDB.ReadDwgFile(myFileInfo.FullName, FileOpenMode.OpenForReadAndAllShare, True, "")
Using mytrans As Transaction = myDB.TransactionManager.StartTransaction
For Each myBlockName As String In GetTopLevelBlocks(myDB)
'Debug.WriteLine(myBlockName)
If Lblokova.Items.IndexOf(myBlockName) < 0 Then
Lblokova.Items.Add(myBlockName)
End If
'If Lblokova.FindString("myBlockName") Then Else Lblokova.Items.Add(myBlockName)
Next
End Using
End Using
Next
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles brisiblokove.Click
Try
If Lblokova.Items.Count > 0 Then
For i As Integer = 0 To Lblokova.SelectedItems.Count - 1
Dim imebloka As String = (Lblokova.SelectedItems(i).ToString)
' MsgBox(Lblokova.Items(i).ToString)
'-------------------------------------------------------------------------------
For Each myFileName1 As System.IO.FileInfo In mojofdbl
Using myDB As New Database(False, True)
myDB.ReadDwgFile(myFileName1.ToString, FileOpenMode.OpenForReadAndAllShare, True, "")
Using mytrans As Transaction = myDB.TransactionManager.StartTransaction
For Each myBlockName As String In GetTopLevelBlocks(myDB)
Using myBt As BlockTable = mytrans.GetObject(myDB.BlockTableId, OpenMode.ForRead)
If myBt.Has(myBlockName) And myBlockName = imebloka Then
Dim btrId As ObjectId = myBt(myBlockName)
Dim myBtr As BlockTableRecord = mytrans.GetObject(btrId, OpenMode.ForRead)
Dim blkIds As ObjectIdCollection = myBtr.GetBlockReferenceIds(True, True)
For Each blkID As ObjectId In blkIds
Using bref As BlockReference = mytrans.GetObject(blkID, OpenMode.ForWrite)
bref.Erase()
End Using
Next
' ' Now delete the block record itself
myBtr.UpgradeOpen()
myBtr.Erase()
End If
End Using
Next
mytrans.Commit()
End Using ' ' transaction
myDB.SaveAs(myFileName1.ToString, DwgVersion.Current) '<-- 2009
End Using
'End Using
Next ' ' myFileName
'----------------------------------------------------------------------------------------------------
Lblokova.Items.Remove(Lblokova.SelectedItems(i))
Next
Else
Label1.Visible = True
End If
Catch ex As System.Exception
' MsgBox("Greska se pojavila" & vbCr & ex.Message & ex.InnerException.ToString & ex.Source)
MsgBox("Greska se pojavila" & vbCr
& ex
.Message) Finally
End Try
End Sub
End Class