In the docs it says this method doesn’t ask the user to confirm deletion, but it still pops up this dialog. grrr!
I think I’ve added the features to the array in reverse tree order as in my mind I thought this may help but I suppose it depends on the tree dependencies.
I messed around with the options and it worked great until it didn’t lol
BTW All the features ARE deleted. It does leave behind some empty folders which I was going to deal with next
Option Explicit
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then Exit Sub
Dim swFeatureManager As SldWorks.FeatureManager
Set swFeatureManager = swModel.FeatureManager
Dim swFeature As SldWorks.Feature
Set swFeature = swModel.FirstFeature
Dim SelectionCollection As New Collection
Do
If swFeature.IsSuppressed2(swInConfigurationOpts_e.swAllConfiguration, Nothing)(0) Then
SelectionCollection.Add swFeature
End If
Set swFeature = swFeature.GetNextFeature
Loop While Not swFeature Is Nothing
If SelectionCollection.Count > 0 Then
ReDim SelectionArray(SelectionCollection.Count) As SldWorks.Feature
Dim i As Long
For i = SelectionCollection.Count To 1 Step -1
Set SelectionArray(i - 1) = SelectionCollection(i)
Next i
Set SelectionCollection = Nothing
swModel.Extension.MultiSelect2 SelectionArray, False, Nothing
swModel.Extension.DeleteSelection2 swDeleteSelectionOptions_e.swDelete_Absorbed + swDeleteSelectionOptions_e.swDelete_Children + swDeleteSelectionOptions_e.swDelete_Advanced
DeleteBrokenEquations swModel
swModel.EditRebuild3
End If
End Sub
Private Function DeleteBrokenEquations(swModel As SldWorks.ModelDoc2) As Boolean
Dim DeletionOccured As Boolean
Dim swEquationManager As SldWorks.EquationMgr
Set swEquationManager = swModel.GetEquationMgr()
Dim i As Long
For i = swEquationManager.GetCount - 1 To 0 Step -1
If IsEquationBroken(swEquationManager, i) Then
swEquationManager.Delete i
DeletionOccured = True
End If
Next
DeleteBrokenEquations = DeletionOccured
End Function
Function IsEquationBroken(swEquationManager As SldWorks.EquationMgr, i As Long) As Boolean
Dim value As String
value = swEquationManager.value(i)
Debug.Print value
IsEquationBroken = (swEquationManager.Status = -1)
End Function
Maybe you are trying to delete features that have already been deleted. That’s one of the dangers of editing a list while going through that same list.
So deleting one at a time in reverse order gets us there - but is very slow in comparison.
I’ll have turn off the tree/ graphics update
If SelectionCollection.Count > 0 Then
Dim i As Long
For i = SelectionCollection.Count To 1 Step -1
Set swFeature = SelectionCollection(i)
swFeature.Select2 False, -1
swModel.Extension.DeleteSelection2 0
Next i
DeleteBrokenEquations swModel
swModel.EditRebuild3
End If
Deleting is a slow action because it triggers a rebuild. But why delete features one by one when you already have a collection of items to be deleted? Just select them all and call DeleteSelection2.
Even going through the feature tree in reverse may cause trouble because a child can have multiple parents and vice versa. But if you only select and delete suppressed features, it may just work.
I’ve sent a ticket into my VAR about it for what good it will do lol
I’ve disabled the view and tree and the speed is alright.
I use this as part of my configuration ripping process so I’d prefer a bit slower but with no pops up so I can do something else. Like have a coffee and a smoke lol
You can definitely suppress some dialogbox messages in SOLIDWORKS by using the “/r/b” arguments when launching sldworks.exe process. I’m not too sure that particular messagebox is affected by it.
Are there any check you can perform to see if the feature can be delete prior to deleting them?
Yeah. It could also be that you are deleting features using a loop (for i or for each) and those features depend on each other so by deleting one, you are deleting others in the array causing that error message.
Yeah - notice there’s no way, no combination of options to delete without this problem. It exists in Solidworks 2018 when I’m using it manually. That’s why this macro solution is better.
The other pop up I hate is the one you get when you select a driven dimension… yeah I know its driven… duh!