| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Mit Windgeschwindigkeit zum Projektziel dank SOLIDWORKS |
Autor
|
Thema: Feature löschen per SolidWorks-API (1640 mal gelesen)
|
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 13. Sep. 2016 10:43 <-- editieren / zitieren --> Unities abgeben:
Guten Tag, ich habe ein kleines Problem mit dem löschen von Features per API und hoffe auf Hilfe von Euch. Was will ich tun? Nun, ich möchte alle unterdrückten Features eines PARTS-Dokumentes löschen. Leider wird bei meinen Versuchen immer nur ein unterdrücktes Feature gelöscht, statt alle unterdrückten Features. Wo muss ich dran drehen, damit ich mein Ziel erreichen kann? Hier mal mein Beispielcode
Code:
'---------------------------------- 'Einzelteil muß bereits offen sein! '---------------------------------- '------------------------------------------------------------------------------------------------------------------------------------------- 'IsSuppressed2 Method (IFeature) 'http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeature~issuppressed2.html '------------------------------------------------------------------------------------------------------------------------------------------- '------------------------------------------------------------------------------------------------------------------------ 'Is Feature Suppressed in Configuration Example (VBA) 'http://help.solidworks.com/2015/english/api/sldworksapi/Is_Feature_Suppressed_in_Specified_Configurations_Example_VB.htm '------------------------------------------------------------------------------------------------------------------------ '------------------------------------------------------ 'Logical and Bitwise Operators in Visual Basic 'https://msdn.microsoft.com/de-de/library/wz3k228a.aspx '------------------------------------------------------ 'And Operator (Visual Basic) 'https://msdn.microsoft.com/de-de/library/sdbcfyzh.aspx '------------------------------------------------------Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As IModelDoc2 Dim swModelDocExt As IModelDocExtension Dim swFeat As IFeature Dim vConfName As Variant Dim vSuppressed As Variant Dim sConfigName As String Dim sFeatureName As String Dim sTypName As String Dim sTyp2Name As String Dim bSuppressed As Boolean Dim bSelect As Boolean Dim bDelete As Boolean Dim iUBound As Integer Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension Set swFeat = swModel.FirstFeature vConfName = swModel.GetConfigurationNames swModel.ClearSelection2 True Do While Not swFeat Is Nothing vSuppressed = swFeat.IsSuppressed2(swInConfigurationOpts_e.swThisConfiguration, vConfName) iUBound = UBound(vConfName) For i = 0 To UBound(vConfName) sConfigName = vConfName(i) bSuppressed = vSuppressed(i) If bSuppressed Then sFeatureName = swFeat.Name 'Debug-Info sTypName = swFeat.GetTypeName 'Debug-Info sTyp2Name = swFeat.GetTypeName2 'Debug-Info swModel.ClearSelection2 True bSelect = swFeat.Select2(False, 0) If bSelect Then bDelete = swModelDocExt.DeleteSelection2(swDeleteSelectionOptions_e.swDelete_Advanced And swDeleteSelectionOptions_e.swDelete_Children) End If End If Next i Set swFeat = swFeat.GetNextFeature Loop End Sub
Vielen Dank für Eure hilfreichen Antworten. [Diese Nachricht wurde von SWX-Quäler am 13. Sep. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 13. Sep. 2016 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Ich hatte hier: Blockdefinitionen löschen das gleiche Problem. Wie Stefan so schön dazu bemerkt hat: Zitat: Original erstellt von StefanBerlitz: du sägst dir mit dem Löschen ja selbst das Feature weg, welches du dann anschließend mit swFeat.GetNextFeature benutzen wolltest. Das funktioniert vermutlich nur mit einem Nekromantie-Addin
Ich hatte das Glück, dass ich das Ganze über eine andere Harangehensweise lösen konnte. Ich würde 2 Dinge probieren, die vielleicht funktionieren könnten: 1. Anstelle von GetNextFeature wieder aufs erste Feature (FirstFeature) zurückspringen. 2. Die Namen der unterdrückten Features vorher in ein Array schmeißen und dann einzeln per Name selektieren und löschen. Code: .Extension.SelectByID2(...)
Gruß, Jens ------------------ CSWA, CSWP =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 13. Sep. 2016 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
|
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 13. Sep. 2016 11:18 <-- editieren / zitieren --> Unities abgeben:
Hallo und vielen Dank für Eure Anregungen. ich habe jetzt eine Lösung für mein Problem gefunden und möchte sie Euch vorstellen (fett gedruckt). Code:
Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As IModelDoc2 Dim swModelDocExt As IModelDocExtension Dim swFeat As IFeature Dim vConfName As Variant Dim vSuppressed As Variant Dim sConfigName As String Dim sFeatureName As String Dim sTypName As String Dim sTyp2Name As String Dim bSuppressed As Boolean Dim bSelect As Boolean Dim bDelete As Boolean Dim iUBound As Integer Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swModelDocExt = swModel.Extension Set swFeat = swModel.FirstFeature vConfName = swModel.GetConfigurationNames swModel.ClearSelection2 True Do While Not swFeat Is Nothing vSuppressed = swFeat.IsSuppressed2(swInConfigurationOpts_e.swThisConfiguration, vConfName) iUBound = UBound(vConfName) For i = 0 To UBound(vConfName) sConfigName = vConfName(i) bSuppressed = vSuppressed(i) If bSuppressed Then sFeatureName = swFeat.Name 'Debug-Info sTypName = swFeat.GetTypeName 'Debug-Info sTyp2Name = swFeat.GetTypeName2 'Debug-Info swModel.ClearSelection2 True bSelect = swFeat.Select2(False, 0) If bSelect Then bDelete = swModelDocExt.DeleteSelection2(swDeleteSelectionOptions_e.swDelete_Advanced And swDeleteSelectionOptions_e.swDelete_Children) If bDelete Then Set swFeat = swModel.FirstFeature End If End If End If Next i Set swFeat = swFeat.GetNextFeature Loop End Sub
Kann ich das so lassen oder seht Ihr mögliche Stolperfallen? PS. Was wäre denn eine optimale Angabe von "DeleteOptions" bei swModelDocExt.DeleteSelection2(), wenn ich alle abhängigen Sub-Features mit löschen möchte? Es gibt folgende "DeleteOptions" swDeleteSelectionOptions_e.swDelete_Absorbed swDeleteSelectionOptions_e.swDelete_Advanced swDeleteSelectionOptions_e.swDelete_Children Ich habe diese Kombi gewählt: swDeleteSelectionOptions_e.swDelete_Advanced And swDeleteSelectionOptions_e.swDelete_Children [Diese Nachricht wurde von SWX-Quäler am 13. Sep. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 13. Sep. 2016 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Hallo, hier mal meine Interpretation: swDeleteSelectionOptions_e.swDelete_Absorbed = Absorbierte (Untergeordnete) Skizzen, Kurven etc. mitlöschen. swDeleteSelectionOptions_e.swDelete_Advanced = Erweiterte Einstellungen, diese kann man aber wohl noch nicht genauer angeben bzw. wüsste ich jetzt nicht wie. swDeleteSelectionOptions_e.swDelete_Children = Kind (direkt) Abhängige Feature mitlöschen. Also macht in deinem Fall wohl Absorbed und Children sinn. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SWX-Quäler Mitglied Software Developer
Beiträge: 34 Registriert: 04.07.2016 Windows 7 Professionel SP1 SOLIDWORKS Premium 2017 SP5.0 X64 Edition SOLIDWORKS PDM Professional 17.05.0089
|
erstellt am: 13. Sep. 2016 14:23 <-- editieren / zitieren --> Unities abgeben:
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 14. Sep. 2016 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für SWX-Quäler
Allerdings würd ich bei "absorbed" aufpassen, wenn ihr die Skizzen in mehreren Features verwendet ... wäre das nicht gut ... vermutlich werden die auch deshalb nicht mit unterdrückt, wenn man das Feature unterdrückt ... da könnte noch etwas kommen. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |