| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
 | SPS in Nürnberg, eine Veranstaltung am 25.11.2025
|
Autor
|
Thema: API - Radius eines Zylinders (802 mal gelesen)
|
KBN Mitglied

 Beiträge: 11 Registriert: 13.02.2006 SolidWorks 2004 Visual C++ .NET Athlon X2 3800+ 1024 MB RAM Geforce 6600
|
erstellt am: 13. Feb. 2006 18:47 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich hab nun das ("fast das ganze" ) ganze Forum durchsucht, nach einer Lösung für mein Problem. Ich bin noch neu in der API-Programmierung. Wie kann ich am einfachsten den Radius eines Zylinders per API auslesen? Ich arbeite mit VC. Danke schon mal im Voraus. MfG Harry 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: 14. Feb. 2006 09:02 <-- editieren / zitieren --> Unities abgeben:          Nur für KBN
Hallo Harry, und willkommen im SolidWorks-Brett auf CAD.de  Die Frage ist so nicht ganz einfach zu beantworten, zumal ich von C oder C++ keine Ahnung habe  Um an einen Parameter ranzukommen musst du dich praktisch in der Objekthierarchie durchhangeln, bis du bei dem Systemvalue des gewünschten Parameters bist. Dabei die Besonderheiten von SolidWorks bzw. den Werten beachten, wie z.B. die Konfiguration, in der du das haben willst. Ein Beispiel (in VB) steht in der API Hilfe ("Get Dimension Values in All Configurations Example"). Das Hauptptoblem bei diesen ganzen Abfragereien ist eigentlich immer die korrekte Auswahl des Parameters, den du eigentlich haben willst. Am einfachsten ist es mit Vorselektierten Objekten, da kann der Benutzer raussuchen, was er haben will. Wenn du es vom Programm aus selbst machen musst ist es manchmal seeeeeehr schwierig zu finden. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Member of CAD.de BOINC Team - | Seti@Home | CPDN | Einstein@Home 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: 14. Feb. 2006 09:51 <-- editieren / zitieren --> Unities abgeben:          Nur für KBN
Hallo, in der API Hilfe gibt es noch ein anderes Beispiel (Get Parameters of Cylindrical Surface Example (VB)). Set swFace = swSelMgr.GetSelectedObject5(1) Set swSurf = swFace.GetSurface If swSurf.IsCylinder Then vCylinder = swSurf.CylinderParams radius=vCylinder(6) * 1000# End If Gruß Oliver Knepper
------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KBN Mitglied

 Beiträge: 11 Registriert: 13.02.2006 SolidWorks 2004 Visual C++ .NET Athlon X2 3800+ 1024 MB RAM Geforce 6600
|
erstellt am: 14. Feb. 2006 10:14 <-- editieren / zitieren --> Unities abgeben:         
Hi Stefan, danke für die schnelle Antwort. Um an den Radius des Zylinders ranzukommen lass ich den Benutzer eine Auswahl treffen, in der er den Zylinder auswählen soll. An die Fläche des Zylinders komm ich schon ran, aber eben nicht an den Radius bzw. den Durchmesser. Code:
...iSwApp->get_IActiveDoc(&pModel); hr = pModel->get_ISelectionManager(&pSelMgr); hr = pSelMgr->GetSelectedObjectType2(1,&type); if (type == swSelFACES) { hr = pSelMgr->IGetSelectedObject4(1,&pUn); hr = pUn->QueryInterface(IID_IFace,(LPVOID *)&pFace); hr = pFace->GetArea(&fläche);//20215.2272 } ...
Oder bin ich da auf dem völlig falschen Weg? Das Beispiel in der API-Help dreht sich mehr um die Abmaße einzelner Konfigurationen, oder? Was ich bräuchte wär nur der Radius des Zylinders, den ich auswähl. So wie bei der Funktion "Messen" im Menü "Extras". Weißt du dafür vielleicht eine Lösung? Wär echt super. [EDIT um 10:16 Uhr] @Oliver: sorry, hab deinen Beitrag vorher nicht gelesen. Das ist genau das, was ich gesucht habe. Vielen Dank. Gruß Harry [Diese Nachricht wurde von KBN am 14. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KBN Mitglied

 Beiträge: 11 Registriert: 13.02.2006 SolidWorks 2004 Visual C++ .NET Athlon X2 3800+ 1024 MB RAM Geforce 6600
|
erstellt am: 14. Feb. 2006 14:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo, soweit hat eigentlich alles funktioniert. Nur hab ich nun das Problem, dass ich keine Werte ins Array bekomm. Ich hab's auch schon mit folgendem Tip probiert, aber funktioniert auch nicht. http://ww3.cad.de/foren/ubb/Forum2/HTML/004400.shtml#000000 Vielleicht steh ich auch nur auf der Leitung Wenn ich es mit dem Tip von AndreasK versuch, erhalt ich auch immer den Error C2664. Und wenn ich ein normales Array von 7 double nehm, erhalt ich 7-mal den Initialiesierungswert 0. Wär super, wenn mir jemand auf die Sprünge hlefen könnt Gruß Harry Code: iSwApp->get_IActiveDoc(&pModel); hr = pModel->get_ISelectionManager(&pSelMgr); hr = pSelMgr->GetSelectedObjectType2(1,&type); if (type == swSelFACES) { hr = pSelMgr->IGetSelectedObject4(1,&pUn); hr = pUn->QueryInterface(IID_IFace,(LPVOID *)&pFace); hr = pFace->GetArea(&fläche);//20215.2272 hr = pFace->IGetSurface(&pSurf); hr = pSurf->IsCylinder(&boolstatus2); if (boolstatus2 == VARIANT_TRUE) { hr = pSurf->get_ICylinderParams(&vCylinder); //rad=vCylinder[6];//64.3471 } }
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkkk Mitglied
 
 Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 14. Feb. 2006 15:45 <-- editieren / zitieren --> Unities abgeben:          Nur für KBN
|
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 14. Feb. 2006 16:19 <-- editieren / zitieren --> Unities abgeben:          Nur für KBN
|
KBN Mitglied

 Beiträge: 11 Registriert: 13.02.2006 SolidWorks 2004 Visual C++ .NET Athlon X2 3800+ 1024 MB RAM Geforce 6600
|
erstellt am: 14. Feb. 2006 16:34 <-- editieren / zitieren --> Unities abgeben:         
Sorry, ich hätte vielleicht meine Parameter-Deklaration mitposten sollen Ich hab meinen Parameter vCylinder als Array deklariert --> double vCylinder[7] Wenn ich den nun mit dem &-Operator übergeb, erhalt ich folgenden Fehler: "error C2664: 'SldWorks::ISurface::get_ICylinderParams': Konvertierung des Parameters 1 von 'double (*__w64 )[7]' in 'double *' nicht möglich" Wenn ich ihn ohne übergeb, hab ich nur lauter gleiche Zahlen im Array stehen. Das is ja das komische. Also wenn ich vCylinder mit 0 initialisiere stehen lauter Nullen drin. Danke schon mal für eure Hilfe MfG Harry
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
waldi Mitglied Softwerker
 
 Beiträge: 272 Registriert: 07.08.2001 SW 2006 SP4
|
erstellt am: 14. Feb. 2006 21:42 <-- editieren / zitieren --> Unities abgeben:          Nur für KBN
|
KBN Mitglied

 Beiträge: 11 Registriert: 13.02.2006 SolidWorks 2004 Visual C++ .NET Athlon X2 3800+ 1024 MB RAM Geforce 6600
|
erstellt am: 15. Feb. 2006 08:44 <-- editieren / zitieren --> Unities abgeben:         
@all: Natürlich haben eure Lösungsvorschläge alle funktioniert  Der Fehler lag bei mir!!! Ich hab den Code aus einem Beispiel rauskopiert und da stand noch boolstatus == VARIANT_TRUE drin und nicht das "normale" TRUE. Nun hab ich es ausgetauscht und siehe da, es geht  Ich sollte doch mal meine Augen aufmachen bzw. meine Brille aufsetzen *grins*. Sorry für die Umstände, aber trotzdem nochmal ein herzliches Danke. Gruß Harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkkk Mitglied
 
 Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 15. Feb. 2006 09:02 <-- editieren / zitieren --> Unities abgeben:          Nur für KBN
Zitat: Original erstellt von waldi: Versuchs mal mit new:double *params=new double[7]; hr = pSurf->get_ICylinderParams(params); rad=params[6]; delete params;
Der Vollständigkeit halber muß es heißen: delete [] params; params ist ein Array und kein Objekt! Ansonsten würde nicht der gesammte Speicher freigegeben werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |