| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
 | Optimieren Sie Ihre SOLIDWORKS Tasks mit Visiativ myCADtools - Jetzt Kostenlos testen >>, eine Pressemitteilung
|
Autor
|
Thema: Feature löschen per SolidWorks-API (2093 / 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: 729 Registriert: 17.01.2007 SWX 2023 SP5 Draftsight 2023 Win 11 Enterprise Intel i7-13700 2.10 GHz 64GB RAM Nvidia RTX A2000 12GB SWx EPDM AP+ CSWE 2018
|
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: 158 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: 2800 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: 3352 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 |