| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | Smart Engineering Session: CAD-Automation in SOLIDWORKS in Nürnberg, eine Veranstaltung am 15.09.2026
|
|
Autor
|
Thema: GetComponents (1922 mal gelesen)
|
anki Mitglied

 Beiträge: 25 Registriert: 26.01.2007
|
erstellt am: 01. Mrz. 2007 15:39 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Ich versuche in einer dll die Namen alle Components auszulesen. Ich wollte das mit der Funktion GetComponents machen. Aber leider funktioniert das nicht. Hier ein Stück von meinem Code:
Code:
CComPtr<IModelDoc2> swModel; iSwApp->get_IActiveDoc2(&swModel); CComPtr<IAssemblyDoc> swAssy; swAssy=swModel;long CompCount; // Anzahl der Bauteile ermitteln hres = swAssy->GetComponentCount(TRUE, &CompCount); if (hres==ERROR) ::MessageBox(NULL,_T("Error"), _T("Could not count Components!"), MB_OK); else { // Dynamisches Array für Bauteile anlegen IComponent2** Comp = new IComponent2*[CompCount]; BSTR CompName; // Bauteile ermitteln hres = swAssy->IGetComponents(TRUE, CompCount, Comp); if (hres==ERROR) ::MessageBox(NULL,_T("Error"), _T("GetComponents failed!"), MB_OK); else { // Für jedes Bauteil den Namen auslesen for (long i = 1; i<=CompCount; ++i) { hres = Comp[i]->get_Name2(&CompName ); } } }
Leider liefert GetComponentCount schon kein Ergebnis und die Error-MessageBox wird aufgerufen. Wenn ich die Anzahl der Components per Hand eintrage und GetComponentCount auskommentiere liefert auch GetComponents kein Ergebnis (also hres =Error). Kann mir da einer von euch weiter helfen?Viele Grüße Anne Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 01. Mrz. 2007 16:49 <-- editieren / zitieren --> Unities abgeben:          Nur für anki
Hallo Anne ich bin leider kein C Programmierer aber schau doch mal in der API-Online-Hilfe nach unter SolidWorks API Help->Examples and Projects->C++ Examples->A - D->Traverse Assembly
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Müller Mitglied Masch. Ing. HTL / Betriebsing. STV
   
 Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 01. Mrz. 2007 16:51 <-- editieren / zitieren --> Unities abgeben:          Nur für anki
Hi Anne. Ich hab echt keine Ahnung von C++++++++, daher kann ich Deinen Code nicht richtig lesen und nachfolgendes mehr eine Vermutung. Was ich aber vermisse, ist die Konfiguration als Objekt. Komponenten sind Bestandteile von Konfigurationen und können nicht direkt aus der Baugruppe gelesen werden! Dito mit GetComponentCount und allen anderen Component-Funktionen. Baugruppe -> Konfiguration -> Komponente Hoffentlich habe ich Dir helfen können. ------------------ Gruss Andreas bachmann engineering ag Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
anki Mitglied

 Beiträge: 25 Registriert: 26.01.2007
|
erstellt am: 01. Mrz. 2007 17:31 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank für Eure Hilfe, aber leider hat sie mich noch nicht sehr viel weiter gebracht. @Heinz: Ich kenne das Beispiel, aber ich würde es lieber mit GetComponents versuchen @Andreas: Ich habe das GetComponentCount auch mal in einem VB-Makro aufgerufen, da hat es auch ohne Konfiguration funktioniert. Außerdem sind GetComponents und GetComponentCount ja auch keine Funktionen von Component, sondern von Assembly. Ich kenne mich in der API-Programmierung aber auch noch nicht so gut aus, vielleicht habe ich auch was falsch interpretiert. Viele Grüße anne Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 02. Mrz. 2007 06:30 <-- editieren / zitieren --> Unities abgeben:          Nur für anki
Hallo Anne was mir an dem Code aufgefallen ist ------------------------------------------ CComPtr<IModelDoc2> swModel; iSwApp->get_IActiveDoc2(&swModel); CComPtr<IAssemblyDoc> swAssy; swAssy=swModel; ------------------------------------------ wo wird "iSwApp" zugewiesen? Kann es sein, dass auch "swModel" schon keinen Wert hat? ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
anki Mitglied

 Beiträge: 25 Registriert: 26.01.2007
|
erstellt am: 02. Mrz. 2007 10:19 <-- editieren / zitieren --> Unities abgeben:         
Hallo Heinz, ich habe das Add-In mit dem Wizard erstellt. In der Klassendeklaration wurde iSwApp als private Variable festgelegt, so dass ich darauf Zugriff habe. Dass swModel funktioniert sieht man auch an folgendem Code in meiner Datei, der ohne Probleme läuft:
Code: hres = swModel->get_Extension(&swExtension); hres = swExtension->SelectByID2(_T("Sonnenrad-1@Planetengetriebe"), _T("COMPONENT"), 0.005339457775965, -0.003051118729123, 0, False, 0, 0, 0, &selOK); if (selOK == TRUE) { hres = swModel->get_ISelectionManager(&SelectionManager); hres = SelectionManager->GetSelectedObject6 ( 1, 0, &CurComponent); hres = swAssy->TranslateComponent( ); }
Gerade deswegen finde ich es ja auch so merkwürdig, dass GetComponentCount nicht funktioniert. Viele Grüße Anne Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |