Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Feature löschen per SolidWorks-API

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Feature löschen per SolidWorks-API (786 mal gelesen)
SWX-Quäler
Mitglied
Software Developer


Sehen Sie sich das Profil von SWX-Quäler an!   Senden Sie eine Private Message an SWX-Quäler  Schreiben Sie einen Gästebucheintrag für SWX-Quäler

Beiträge: 30
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von CAD-Maler an!   Senden Sie eine Private Message an CAD-Maler  Schreiben Sie einen Gästebucheintrag für CAD-Maler

Beiträge: 639
Registriert: 17.01.2007

SWX 2017 SP5
AutoCAD 2016
Win 10 pro 64 bit
Intel Xeon 3,6GHz
64GB RAM
Nvidia Quadro M5000
SWx EPDM

erstellt am: 13. Sep. 2016 11:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SWX-Quäler 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von Winni-two an!   Senden Sie eine Private Message an Winni-two  Schreiben Sie einen Gästebucheintrag für Winni-two

Beiträge: 136
Registriert: 12.03.2010

SW 2018 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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SWX-Quäler 10 Unities + Antwort hilfreich

Hallo,

ich würde erst alle unterdrückten Features selektieren und erst nach der Schleife dann alle selektierten löschen.

Gruss Winni

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SWX-Quäler
Mitglied
Software Developer


Sehen Sie sich das Profil von SWX-Quäler an!   Senden Sie eine Private Message an SWX-Quäler  Schreiben Sie einen Gästebucheintrag für SWX-Quäler

Beiträge: 30
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2354
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 13. Sep. 2016 14:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SWX-Quäler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von SWX-Quäler an!   Senden Sie eine Private Message an SWX-Quäler  Schreiben Sie einen Gästebucheintrag für SWX-Quäler

Beiträge: 30
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank an alle, die mir geholfen haben.  Das Thema kann dann zu.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 2431
Registriert: 04.04.2001

SWX2016sp5 WIN10
(SWX2019 testweise)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19) CSWP 12/2015

erstellt am: 14. Sep. 2016 12:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SWX-Quäler 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz