Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - Fehler bei Create3PointArc

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
  
Tierisch mobil: Der autonome Inspektionsroboter ANYmal | SOLIDWORKS
Autor Thema:  API - Fehler bei Create3PointArc (277 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: 16. Feb. 2006 11:18    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 Leute,

so langsam bringt mich diese SWX-API zu verzweifeln. Nix funktioniert so wie ich will.

Ich hab's mittlerweile soweit geschafft, dass ich das problem aus http://ww3.cad.de/foren/ubb/Forum2/HTML/009648.shtml gelöst hab.

Wenn ich nun aber in meinem Code die Zeilen

Code:
hr = pModel->Create3PointArc(dRefParams[0][0]+vCylinder[6], dRefParams[0][1], dRefParams[0][2],
dRefParams[0][0]+vCylinder[6], dRefParams[0][1], dRefParams[0][2]+0.05,
dRefParams[0][0]+vCylinder[6], dRefParams[0][1]+0.1, dRefParams[0][2]+0.025, &boolstatus2);

oder

Code:
pModel->ClearSelection2(True);

einfüge, erhalte ich immer einen Fehler, der folgendermaßen lautet:

"SolidWorks wurde aufgrund eines Fehlers beendet. Bitte wenden Sie sich ..."

Was is da falsch an meinem Code? Die beiden Linien vorher zeichnet SWX ja noch. Beim Kreisbogen sieht man zwar die Eigenschaftsleiste am linken Rand, aber SWX hängt sich dann auf und bringt dann den oben beschriebenen Fehler.

Weiß jemand von euch, was da falsch gelaufen sein könnte?

Danke für eure Hilfe schon mal im Voraus.

MfG Harry

Code:

...

CComPtr <IFace> pFace;
CComPtr <ISurface> pSurf;
CComPtr <ISketchPoint> pP1,pP2,pP3;
CComPtr <ISketch> pSketch;
CComPtr <ISketchSegment> pSketchSeg;
CComBSTR                    FeatType ;
VARIANT_BOOL boolstatus2;
long type;
double vCylinder[7],dP1[3],dP2[3],dP3[3],dRefParams[3][3];


iSwApp->get_IActiveDoc2(&pModel);
    hr = pModel->get_ISelectionManager(&pSelMgr);
hr = pSelMgr->GetSelectedObjectType2(1,&type);

if (type == swSelFACES) //Wenn Fläche
{
hr = pSelMgr->IGetSelectedObject4(1,&pUn);
hr = pUn->QueryInterface(IID_IFace,(LPVOID *)&pFace);
hr = pFace->IGetSurface(&pSurf);
hr = pSurf->IsCylinder(&boolstatus2);
if (boolstatus2 == TRUE) //Wenn Zylinder
{
hr = pSurf->get_ICylinderParams(vCylinder);

dP1[0]=vCylinder[0];
dP1[1]=vCylinder[1];
dP1[2]=vCylinder[2];
dP2[0]=vCylinder[0];
dP2[1]=vCylinder[1]+vCylinder[6];
dP2[2]=vCylinder[2];
dP3[0]=vCylinder[0];
dP3[1]=vCylinder[1]+vCylinder[6];
dP3[2]=vCylinder[2]+vCylinder[6];

hr = pModel->ICreatePlaneFixed2(dP1,dP2,dP3,TRUE,&pPlane);
hr = pModel->SetUserPreferenceToggle(swDisplayPlanes,TRUE,&boolstatus2);
hr = pModel->ICreatePlaneAtOffset3(vCylinder[6],FALSE,FALSE,&pPlane2);
hr = pModel->SetUserPreferenceToggle(swDisplayPlanes,TRUE,&boolstatus2);

hr = pModel->IGetActiveSketch2(&pSketch);
hr = pPlane2->IGetRefPlaneParams((double *)dRefParams);
hr = pModel->SelectByID(_T(""),_T("PLANE"),dRefParams[0][0]+vCylinder[6],dRefParams[0][1],dRefParams[0][2],&boolstatus2);
hr = pModel->Insert3DSketch();

hr = pModel->ICreateLine2(dRefParams[0][0]+vCylinder[6],dRefParams[0][1],dRefParams[0][2],dRefParams[0][0]+vCylinder[6],0.1,dRefParams[0][2],&pSketchSeg);
pSketchSeg=NULL;
hr = pModel->ICreateLine2(dRefParams[0][0]+vCylinder[6],dRefParams[0][1],dRefParams[0][2]+0.05,dRefParams[0][0]+vCylinder[6],0.1,dRefParams[0][2]+0.05,&pSketchSeg);
pSketchSeg=NULL;
hr = pModel->Create3PointArc(dRefParams[0][0]+vCylinder[6], dRefParams[0][1], dRefParams[0][2],
dRefParams[0][0]+vCylinder[6], dRefParams[0][1], dRefParams[0][2]+0.05,
dRefParams[0][0]+vCylinder[6], dRefParams[0][1]+0.1, dRefParams[0][2]+0.025, &boolstatus2);
//pModel->ClearSelection2(True);

pModel->UnBlankRefGeom();

}
}


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: 16. Feb. 2006 13:33    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

Hi KBN,

zunächst würde ich Dir empfehlen Dein Kernprogramm als SW-VBA-Makro zu schreiben und die grundsätzlichen Machbarkeit mal eben schnell zu überprüfen. Das ist viel einfacher.
Die Portierung nach C++ ist dann das kleinere Übel.

Ich weiß zwar nicht direkt, warum SW bei Dir nicht so will, aber zwei Fehler habe ich schon gefunden:

ICreateLine2() kommt mit einem Sketch-Objekt zurück.
Dieser Objekt-Zeiger darf nicht im nächsten Schritt einfach mit NULL initialisiert werden.
Du mußt es unbedingt vorher wieder freigeben, sonst Datenmüll oder auch andere Effekte.
Also:
if (pSketchSeg) {
  pSketchSeg->Release();
  pSketchSeg=NULL;
}

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: 16. Feb. 2006 14:48    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,

hast du die Fangfunktion ausgestellt?

ModelDoc2::SetAddToDB(TRUE)

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: 16. Feb. 2006 16:18    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,

ich hab versucht auf die Release-Funktion von SketchSeg zuzugreifen, aber da erahlte ich die Meldung, dass auf eine private Elemente der Klasse keinen Zugriff hab. ATL::_NoAddRefReleaseOnCComPtr<SldWorks::ISketchSegment>::Release

Den Tipp mit VBA hab ich probiert, da funktioniert alles einwandfrei. Das is ja das komische.

SetAddToDB is auf True. Eine Umstellung auf FALSE bringt aber keinen Unterschied 

Trotzdem danke für die tips

MfG Harry

[Diese Nachricht wurde von KBN am 16. Feb. 2006 editiert.]

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

PASCAM
Mitglied
Diplom Informatiker


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

Beiträge: 67
Registriert: 25.11.2002

erstellt am: 16. Feb. 2006 18: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 Nur für KBN 10 Unities + Antwort hilfreich

Hallo KBN,

Welchen Compiler verwendest Du denn? Schalte mal Deinen Compiler so um, dass alle Exception nicht an das Programm weitergeleitet werden, sondern der Compiler anhält. Dann bekommst Du evtl. einen tieferen Einblick, wo sich SWXSolidWorks verabschiedet.
Das mit dem Release brauchst Du nicht, da Du mit ATL arbeitest, der die COM-Pointer wie VB/VBA automatisch freigibt.
Ich wuerde tippen, dass SWXSolidWorks ein Event in Deinem Programm aufruft, das den Fehler verursacht.
Welche AddIns hast Du noch am laufen. Wenn es geht, alles abschalten.
Kannst Du ein Beispielprojekt Online stellen?

Gruss,
Ralph

------------------
PASCAM Ralph Müller
Softwareentwicklung

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: 16. Feb. 2006 19:33    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


Addin.zip

 
Hallo Ralph,

als Compiler nehm ich VC .NET 2003. Meinst du mit "an den Compiler weiterleiten", ne normale try-catch-Anweisung, oder kann man da im Compiler selbst was umstellen?

Sonstige Add-Ins hab ich keine laufen.

Mein Projekt kommt als Anhang mit. Ich bis jetzt noch nichts großes. Bisher is eigentlich nur die PMPageHandler.cpp verändert.

Wär echt super, wenn du mir weiterhelfen könntest 

Gruß Harry

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

naimo
Mitglied
Informatik-Student


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

Beiträge: 24
Registriert: 26.12.2002

M2004PP
1,2 GHZ AMD
640 MB RAM
ATI Radeon 9200

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

Hallo Harry,

genau das selbe Problem hab ich auch. Bei mir hängt sich SolidWorks auch immer auf, wenn ich einen Bogen durch drei Punkte machen will, oder wenn ich ClearSelection mach. k.A. warum. 

Gruß Benjamin

------------------
There are only 10 types of people in the world: Those who understand BINARY und those who don't.

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

PASCAM
Mitglied
Diplom Informatiker


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

Beiträge: 67
Registriert: 25.11.2002

erstellt am: 17. Feb. 2006 08:01    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,

Also, Dein Problem ist, dass Du Deine Passfeder zum falschen Zeitpunkt erzeugen willst. Wenn Du denn PM benutzt, ist das OnClose-Ereignis dazu da, Dir zu sagen, dass jetzt der PM geschlossen wird und Du Dir Deine Daten sichern musst, z.B. die selektierten Elemente. Du darfst aber keine neue Elemente erzeugen. Hierfuer ist dann das AfterClose-Ereignis da. Da darfst Du dann anfangen und Deine Skizze erzeugen.
Hintergrund: Bei OnClose ist der PM noch offen. Erzeugst Du nun etwas, wird ein PM benoetigt, was aber nicht geht, da ja Deiner noch offen ist. Deadlock! Daher auch der Crash.

Ralph

------------------
PASCAM Ralph Müller
Softwareentwicklung

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: 17. Feb. 2006 08: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

Hallo Ralph,

genau das ist die Lösung für das Problem. Auf den Ansatz wär ich nie im Leben gekommen. Ein fettes Dankeschön von mir für deine Mühe. Jetzt dürften auch meine anderen Probleme gelöst sein.   

Danke.

Gruß Harry

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