Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - Radius eines Zylinders

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
  
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



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

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 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 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)



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

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 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 KBN 10 Unities + Antwort hilfreich

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


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 14. Feb. 2006 09:51    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 KBN 10 Unities + Antwort hilfreich

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



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

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 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

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



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

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 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,

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



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

Beiträge: 105
Registriert: 04.03.2005

erstellt am: 14. Feb. 2006 15:45    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 KBN 10 Unities + Antwort hilfreich

Versuch doch mal:

double params[7];
hr = pSurf->get_ICylinderParams(¶ms);
rad=params[6];//64.3471

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 14. Feb. 2006 16:19    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 KBN 10 Unities + Antwort hilfreich

Hallo,

double params[7];
hr = pSurf->get_ICylinderParams(params);
rad=params[6];


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



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

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 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

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


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

Beiträge: 272
Registriert: 07.08.2001

SW 2006 SP4

erstellt am: 14. Feb. 2006 21:42    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 KBN 10 Unities + Antwort hilfreich

Versuchs mal mit new:

double *params=new double[7];
hr = pSurf->get_ICylinderParams(params);
rad=params[6];
delete params;

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

KBN
Mitglied



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

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 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

@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



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

Beiträge: 105
Registriert: 04.03.2005

erstellt am: 15. Feb. 2006 09:02    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 KBN 10 Unities + Antwort hilfreich

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

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)2024 CAD.de | Impressum | Datenschutz