Александр Игнатович, ты гений!!! Спасибо тебе!
Все сработало, но как всегда не обошлось без моих ошибок.
1. App.OpenAndActivateDocument("C:\Users\Pashin.Evgeniy\Desktop\001_Проба.rfa") должно было идти перед объявлением параметров:
Dim App As Autodesk.Revit.UI.UIApplication = myCD.Application()
Dim UIDoc As UIDocument = App.ActiveUIDocument
Dim Doc As Document = App.ActiveUIDocument.Document
2. Удаление элементов Material и LinePatternElement происходит полностью, а вот FillPatternElement - кроме одной «Сплошной заливки». Здесь мне нужно было сделать проверку.
3. Удаление в цикле действительно не срабатывало... Тут я немного ошарашен, поскольку недопонимаю, причем тут цикл? Если можешь, дай ссылку, где об этой особенности можно почитать.
Я использовал форму с кнопкой, что примечательно, что форма должна запускаться именно в режиме ShowDialog.
В общем мое решение получилось таким:
Для внешней команды запускающей форму:
<Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)> _
Public Class Ribbon_Menu_DataTransfer
Implements Autodesk.Revit.UI.IExternalCommand
Public Function Execute(ByVal commandData As Autodesk.Revit.UI.ExternalCommandData, _
ByRef message As String, ByVal elements As Autodesk.Revit.DB.ElementSet) _
As Autodesk.Revit.UI.Result Implements Autodesk.Revit.UI.IExternalCommand.Execute
Dim myNewForm As New Data_Transfer(commandData)
myNewForm.ShowDialog()
Return Autodesk.Revit.UI.Result.Succeeded
End Function
End Class
Для процедуры, выполняющей удаление образцов линий, штриховок и материалов по нажатию кнопки на форме:
Private Sub DataTransferStartButton_Click(sender As Object, e As EventArgs) Handles DataTransferStartButton.Click
' Открываем требуемый документ
myCD.Application.OpenAndActivateDocument("C:\Users\Pashin.Evgeniy\Desktop\001_Проба.rfa")
' Объявляем переменные
Dim App As Autodesk.Revit.UI.UIApplication = myCD.Application()
Dim UIDoc As UIDocument = App.ActiveUIDocument
Dim Doc As Document = App.ActiveUIDocument.Document
' Формируем список элементов на удаление «Штриховки»
Try
Dim coll As FilteredElementCollector = New FilteredElementCollector(Doc).OfClass(GetType(FillPatternElement))
Dim myListOfElement As New List(Of ElementId)
For Each dtSomeElement As Autodesk.Revit.DB.FillPatternElement In coll
If dtSomeElement.Name.ToString <> "Сплошная заливка" Then
myListOfElement.Add(dtSomeElement.Id)
End If
Next
Delete_Element_By_Id(myListOfElement)
Catch ex As Exception
MsgBox(ex.Message)
End Try
' Формируем список элементов на удаление «Матриалы»
Try
Dim coll As FilteredElementCollector = New FilteredElementCollector(Doc).OfClass(GetType(Material))
Dim myListOfElement As New List(Of ElementId)
For Each dtSomeElement As Autodesk.Revit.DB.Material In coll
myListOfElement.Add(dtSomeElement.Id)
Next
Delete_Element_By_Id(myListOfElement)
Catch ex As Exception
MsgBox(ex.Message)
End Try
' Формируем список элементов на удаление «Образцы линий»
Try
Dim coll As FilteredElementCollector = New FilteredElementCollector(Doc).OfClass(GetType(LinePatternElement))
Dim myListOfElement As New List(Of ElementId)
For Each dtSomeElement As Autodesk.Revit.DB.LinePatternElement In coll
myListOfElement.Add(dtSomeElement.Id)
Next
Delete_Element_By_Id(myListOfElement)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Public Sub Delete_Element_By_Id(ByVal lstElement As List(Of ElementId))
Dim tr As New Transaction(myCD.Application.ActiveUIDocument.Document, "Delete current element")
Try
tr.Start()
myCD.Application.ActiveUIDocument.Document.Delete(lstElement)
tr.Commit()
Catch ex As Exception
tr.Commit()
tr.Dispose()
MsgBox(ex.Message)
End Try
End Sub
Все работает!!! Спасибо!
Да, и еще... проработаю свое решение с учетом LINQ и поправлю код, но после того как пойму )))