| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
|
Autor
|
Thema: API: IsSuppressed2 (842 mal gelesen)
|
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 22. Jan. 2008 12:29 <-- editieren / zitieren --> Unities abgeben:         
Ich als humpelnder Do-it-yourself-Programmierer stolper über ein Problem, das für Leute vom Fach vermutlich eine Kleinigkeit ist. Mein Makro durchläuft alle Features in einem Teil und soll eine Routine nur ausführen, wenn das betreffende Feature nicht unterdrückt ist. Der alte Befehl Feature.IsSuppressed ist obsolete und funktioniert auch nicht. Also versuche ich es mit dem neuen Befehl *states = Feature.IsSuppressed2 ( config_opt, config_names) Input: (long) config_opt Configuration option as defined by swInConfigurationOpts_e Input: (VARIANT) config_names Array of configuration names Output: (VARIANT *) *states Array of the suppression states for the feature in the specified configurations Laut der Überwachung gibt die Funktion immer die Boolean-Werte Falsch oder Wahr aus. Aber wie verknüpfe ich die mit meiner Abfrage? Hier ein Code-Ausschnitt: Dim swFeat As Object 'SldWorks.feature Dim FeatureName As String ' nur zum debuggen Dim SuppressionStatus As Variant Dim StrStatus As String Do 'geht alle Features durch und sucht nach Fehlern FeatureName = swFeat.Name SuppressionStatus = swFeat.IsSuppressed2(swThisConfiguration, vConfigName) ' StrStatus = CStr(SuppressionStatus) If SuppressionStatus = False Then <<<<<< Typen unverträglich! .... End If Set swFeat = swFeat.GetNextFeature Loop While Not swFeat Is Nothing
Wie man sieht, hab ich versucht, den Variant "Suppressionstatus" in einen String umzuwandeln, das hat genausowenig funktioniert wie die Umwandlung in einen Boolean.
Weiß jemand Rat? Piet
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 22. Jan. 2008 12:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Der Rückgabewert ist ja ein Array. Mit UBound(SuppressionStatus) kannst du ermitteln wie groß das Array ist und dann einfach mit SuppressionStatus(i) darauf zugreifen. Da du nur die aktuelle Konfiguration angibst sollte dass Arry immer nur ein Objekt enthalten. Gruß Oliver ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 22. Jan. 2008 12:38 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Hallo Piet, ich denke mal es liegt am Rückgabe Typ Variant of Array! Die Umwandlung kann also auch nur in ein Array of Boolean erfolgen. Habe es jetzt allerding nicht ausprobiert! [Edit]Oliver war schneller :-)[/Edit] ------------------ Mfg Daniel [Diese Nachricht wurde von tbd am 22. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 23. Jan. 2008 09:29 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank euch beiden. Mit If SuppressionStatus(0) = False Then ist immerhin die Fehlermeldung wegen unverträglicher Typen weg, allerdings hat die Zeile immer noch keine Auswirkung. Ich such weiter... Danke, Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 23. Jan. 2008 10:27 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
Zitat: Original erstellt von Piet: allerdings hat die Zeile immer noch keine Auswirkung
Hallo Piet, was verstehst du unter keine Auswirkung? Welchen Inhalt hat den die Variable? So wie ich das sehe, müssten in deinem Array Boolean Werte stehen, welche die mitteilen ob das Feature in den übergebenen Konfigurationen unterdrück ist. Also der Index das Arrays ist abhängig vom Parameter config_names.
------------------ Mfg Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 24. Jan. 2008 09:40 <-- editieren / zitieren --> Unities abgeben:         
Die Fehlererkennung im Teil funktioniert immer noch nicht. Was die Sub tun soll: - Mit der ersten Skizze anfangen und alle weiteren Features im Featurebaum durchgehen. - Wenn das Feature nicht unterdrückt ist (das funktioniert nicht), das Feature auf Fehler prüfen. - wenn ein Fehler vorliegt, die Variable "Fehler" auf "True" setzen und den Namen der betreffenden Konfiguration auf die Liste der fehlerhaften Konfigs setzen, dann weiter zur nächsten Konfiguration - wenn kein Fehler vorliegt, weiter zum nächsten Feature - wenn alle Features fehlerfrei sind, den Namen der Konfiguration in die Liste der fehlerfreien Konfigs eintragen Die Abfrage If swFeat.IsSuppressed = False Then funktioniert nicht, auch unterdrückte Features werden geprüft. Ich habe diese Schleife auch mit swFeat.IsSuppressed2 durchgeführt, mit demselben Ergebnis. Der Grund ist mir ein völliges Rätsel. Hier der Code der Routine: Sub chkFeatures() 'Prüft Features auf Fehler Dim ErrorType As Long Dim FeatureName As String ' nur zum debuggen Dim ErrorCode As Long 'nur zum debuggen Dim i As Integer Dim Featurenummer As Integer Dim vFeatArray() As Object Set swFeat = ModelDoc.FirstFeature Featurenummer = 0 ReDim vFeatArray(swFeatMgr.GetFeatureCount(False)) Do Set swFeat = swFeat.GetNextFeature Featurenummer = Featurenummer + 1 FeatureName = swFeat.Name Set vFeatArray(Featurenummer) = swFeat Loop Until swFeat.IsBase2 = True 'sucht das erste Basisfeature Set swFeat = vFeatArray(Featurenummer - 1) 'nimmt die Skizze des ersten Basisfeatures FeatureName = swFeat.Name Do 'geht alle Features durch und sucht nach Fehlern FeatureName = swFeat.Name 'nur zum debuggen If swFeat.IsSuppressed = False Then '<<<<<<<<<<<<<<<<<<<<<not working!*************************************** ErrorType = swFeat.GetErrorCode() If ErrorType > 0 Then 'wenn irgenein Fehler vorliegt ' ErrorCode = swFeat.GetErrorCode Fehler = True frmKonfigtest.lstFehlerKonfigs.AddItem (vConfigName) 'fügt den Namen der Konfig zur Liste der fehlerhaften Konfigs hinzu Exit Sub 'wenn ein Fehler gefunden ist, abbrechen und nächste Konfig End If End If Set swFeat = swFeat.GetNextFeature Loop While Not swFeat Is Nothing If Fehler = False Then frmKonfigtest.lstiOKonfigs.AddItem (vConfigName) 'fügt den Namen der Konfig zur Liste der fehlerfreien Konfigs hinzu End If End Sub Anbei mein Makro und mein Prüfteil, das enthält eine fehlerfreie Konfig ("io"), eine, bei der das fehlerhafte Feature unterdrückt ist, die fehlerhafte Skizze aber aktiv ("nur Skizzenfehler"), und eine, bei der nichts unterdrückt ist ("Featurefehler"). Das Makro selbst ist noch sehr im Rohzustand, falls es jemand ausprobieren will. Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 24. Jan. 2008 10:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
hi, bist du sicher, dass du durch alle features durchgehst? hast du mal die featuer-namen vor der überprüfung ausgeben? denn.... zum einen finde ich dein startfeature etwas merkwürdig. Set swFeat = vFeatArray(Featurenummer - 1) warum soll das die erste skizze sein? und war es nicht so, dass man mit swFeat.GetNextFeature nur das nächsten feature auf der gleichen ebene bekommt und nicht die kinder. um wirklich durch alle features zu laufen, muss man doch mit Feature.GetFirstSubFeature arbeiten. /edit nein, es war nicht so. sw liefert alle feature edit/ gruß oliver ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de
[Diese Nachricht wurde von jens_oliver am 24. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 24. Jan. 2008 12:01 <-- editieren / zitieren --> Unities abgeben:         
Doch, durch die Features geht das Makro durch. Ich hab "Featurename" überwacht (siehe Anhang), und das Makro geht den Featurebaum komplett von oben nach unten durch. Seltsamerweise produzieren "Beschriftung", "Kommentare" und ähnliche Features einen unbekannten Fehler. Deshalb lasse ich die Schleife durchlaufen, bis das erste Basisfeature auftaucht, das ist das erste Feature, welches einen Körper austrägt. Ein Feature davor ist die dazugehörige Skizze. Mein Problem ist offenbar, dass auch unterdrückte Features ausgelesen werden, das ist der Punkt, an dem ich nicht weiterkomme. Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 24. Jan. 2008 14:05 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
|
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 24. Jan. 2008 14:49 <-- editieren / zitieren --> Unities abgeben:         
Jetzt bin ich platt. Das funktioniert bei dir mit dem von mir angehängten Teil? Das Makro müsste am Schluß die beiden Konfigurationen "Featurefehler" und "nur Skizzenfehler" als fehlerhaft listen und die Konfiguration "io" als fehlerfrei. Funktioniert das bei dir auch immer gleich, wenn du das Makro mehrmals ausführst? Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 24. Jan. 2008 16:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Piet
kann dein bauteil leider nicht öffnen (neue Version). habe es an einem teil von mir getestet, ob das makro unterdrückte features erkennt. also ob "If swFeat.IsSuppressed = False Then " funktioniert und bei mir läuft es einwandfrei. oliver ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de [Diese Nachricht wurde von jens_oliver am 24. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
  
 Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 25. Jan. 2008 11:14 <-- editieren / zitieren --> Unities abgeben:         
|