| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | AMB |
Autor
|
Thema: API - Fehler bei Model.GetConfigurationNames (1069 / mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 29. Sep. 2016 19:53 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe einen seltenen Fehler festgestellt, den ich mir nicht erklären kann. Selten deshalb, weil er nur unter einer bestimmten Konstellation stattfindet. Ich habe eine Unterbaugruppe mit 4 Konfigurationen. Diese habe ich mit 2 verschiedenen Konfigs in eine Baugruppe eingefügt. Beide Unterbaugruppen sind hier auf flexibel gestellt. In verschiedenen Makros lese ich die Namen der Konfigurationen mit folgendem Befehl aus. Code: Namen = Model.GetConfigurationNames
In dem angehängten Bild könnt ihr die unterschiedlichen Anzeigen der Konfigurationen anschauen. Das Ergebnis von Model.GetConfigurationNames seht ihr am Beispiel von Stefans Schriftfeldmakro (mittlere Anzeige). Auffälig ist hier, das die Konfig 0212 fehlt, dafür aber eine Konfig 0260-_flexible1 hinzugefügt ist. Wenn man also mit diesem Ergebnis in seinem Makro weiterarbeitet, bekommt man heftige Probleme. Läd man nur diese Unterbaugruppe ohne die Oberbaugruppe, ist alles in Ordnung. Das Auslesen der Konfigs wird korrekt wiedergegeben. Ist nur eine Unterbaugruppe flexibel, ist auch alles ok. Was haltet ihr davon? Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 30. Sep. 2016 08:31 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, interessantes Phänomen, über das du da gestolpert bist. Ich hab's mir jetzt nicht nachgestellt, da ich davon ausgehe, dass du die Konfigurationsnamen der Komponente ausliest (und in dem Schriftfeldmakro, dass du angesprochen hast, wird glaube ich nur das aktive Dokument ausgelesen). Wahrscheinlich holst du dir das ModelDoc der Komponente und lässt dir dann mit GetConfigurationNames die Namen geben. Ich vermute jetzt folgendes: damit die Komponente überhaupt flexibel dargestellt werden kann muss ja irgendwo der Zustand für diese Baugruppe initialisiert und gespeichert werden. Und das sieht so aus, als macht SolidWorks das in temporären (?) und/oder nur in dem speziellen Baugruppenzusammenhang sichtbaren abgeleiteten Konfigurationen. Meine Theorie: wenn die dazu gehörende Hauptbaugruppe nicht offen ist, bleiben die Flex-Konfigurationen "versteckt", die "Anzahl" liefert das richtige Ergebnis und das Namesarray ist okay. Nun ist ModelDoc::GetConfigurationCount und ModelDoc::GetConfigurationNames ja auch schon seit den ersten Versionen von SolidWorks in der API und damals gab es so etwas wie flexible Komponenten noch gar nicht, es kann also durchaus sein, dass du ein komplettes Array mit allen Namen zurückbekommst, aber mit GetConfigurationCount eben die flexiblen nicht gezählt werden oder so. Dann könnten dir in deinem Beispiel zwei Konfignamen fehlen. Aber das ist alles nur Kaffeesatzleserei von meiner Seite. Ich würde versuchen das mit einem einfachen Beispiel mitsamt Makro nachstellen zu können und das dann mit dem API Support zu klären. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 30. Sep. 2016 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 30. Sep. 2016 15:04 <-- editieren / zitieren --> Unities abgeben:
Hallo ihr beiden, danke für eure Antworten. Werde das noch weiter Beobachten. @Andreas Mit dem SPR meinst du doch sicherlich 2017 Beta3 und nicht 2007, oder? Die hohe SPR Nr. lässt das zumindest vermuten. Ich bekomme kein Ergebnis bei der Suche nach dem SPR, evtl. liegt es an dem Beta-Status oder ich mach was falsch. SW2017 ist ja demnächst da, und dann schau ich mir das nochmal an. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 02. Okt. 2016 00:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, ich habe noch ein bisschen rumgestochert und glaube auch, das deine Vermutungen richtig sind. Momentan sollte man sich die Anzahl der Konfigs nicht über ModelDoc::GetConfigurationCount holen, sondern über UBound(swModel.GetConfigurationNames) und anschließend die flexiblen Konfigs rausfiltern, je nach Bedarf. Hier mal ein Beispielcode: Code: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim Namen As Variant Dim SB As String Dim i As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Namen = swModel.GetConfigurationNames SB = "flexible" For i = 0 To UBound(Namen) Debug.Print "Konfigname: "; Namen(i) Debug.Print InStr(Namen(i), SB) > 0 Next i End Sub
Wenn es tatsächlich in SW2017 gefixt ist, dann sehen wir weiter. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) [Diese Nachricht wurde von Andi Beck am 02. Okt. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
S777 Mitglied
Beiträge: 234 Registriert: 07.09.2016 Solidworks 2016
|
erstellt am: 05. Okt. 2016 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|