| | |
 | 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: API-Simulation (1578 mal gelesen)
|
stucki Mitglied Ingenieur

 Beiträge: 73 Registriert: 30.04.2004
|
erstellt am: 06. Jul. 2004 11:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich schlag mich mit einem Problem herum, dessen Lösung einige von Euch vielleicht nur so aus dem Ärmel schütteln. In meiner Applikation habe ich eine mehrachsige Maschine, dessen Achsen ich simultan bewegen will. Das ganze sollte dabei auch noch ruckfrei ablaufen (Simulation). Ich schaffe dies, solange ich die drei linearen Achsen X,Y,Z habe, welche normal zueinander stehen. Das Problem fängt da an wo ich gleichzeitig eine Rotationsachse und eine Linearachse bewegen will. Ich versuche das Problem mit DragOperator: rag zu lösen. Das funktioniert gut für die linearen Achsen. Ich habe ein Assembly beigelegt. Dieses beinhaltet eine C_Axis und ein X_Axis_Sledge. Wenn ich in diesem Beispiel die C_Axis über DragOperator: rag bewege, dann bewegt sich ebenfalls der X_Axis_Sledge in X-Richtung. Das darf nicht sein!! Das erste Problem ist also die C_Axis zu bewegen ohne dass sich der X_Axis_Sledge bewegt und zwar ohne dass ich den X_Axis_Sledge über ein mate(Verknüpfung) fixiere. Das eigentliche Ziel ist es dann die C_Axis beispielsweise um 90° zu drehen und gleichzeitig die X_Axis_Sledge um 100mm in X-Richtung zu verschieben das ganze so dass es ruckfrei abläuft. (Simulation) Wer mir dieses Problem lösen kann (Beispielprogramm in beliebiger Sprache), den werde ich in mein Herz schliessen. viel Spass Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JR Mitglied Konstrukteur
 
 Beiträge: 106 Registriert: 21.10.2003 Alibre Design Expert V26 Keyshot 11.2
|
erstellt am: 07. Jul. 2004 06:50 <-- editieren / zitieren --> Unities abgeben:          Nur für stucki
Hallo stucki, ich hätte da eine Idee, ob's aber die einfachste Lösung ist, kann ich nicht beurteilen. Um ein richtiges Makro auszuarbeiten fehlt mir im Moment ein wenig Zeit, daher nur Pseudo-Code. Meine Idee die X-Achse um 100mm zu bewegen und gleichzeitig die C-Achse um 90° zu drehen ist folgende: Code:
Dim XAxis_XForm As SldWorks.MathTransform Dim CAxis_XForm As SldWorks.MathTransform Dim iSteps As Integer ' Transformationsmatrix von X_AxisSledge holen XAxis_XForm = Component2.Transform2 ' Transformationsmatrix von C_Axis holen CAxis_XForm = Component2.Transform2 ' Schleife mit 100 Schritten (1mm / Schritt) For iSteps = 1 To 100 ' Translation von 1mm für X_AxisSledge addieren XAxis_XForm += 1 ' Rotation von 0,9° für C_Axis addieren CAxis_XForm += 0.9 ' Transformationsmatrix der X_AxisSledge setzen (verändert die Geometrie !) Component2.Transform2 = XAxis_XForm ODER ' Darstellungsmatrix der X_AxisSledge setzen (verändert nur die Darstellungsmatrix) Component2.PresentationTransform = XAxis_XForm ' Transformationsmatrix der C_Axis setzen (verändert die Geometrie !) Component2.Transform2 = CAxis_XForm ODER ' Darstellungsmatrix der C_Axis setzen (verändert nur die Darstellungsmatrix) Component2.PresentationTransform = CAxis_XForm ' Das ganze neuzeichnen ' (dadurch entsteht der Eindruck, dass sich beide Bauteile gleichzeitig bewegen) ModelDoc2.Rebuild swUpdateMates Next iSteps
Wie gesagt, es ist nur eine Idee. Die API ist so umfangreich und bietet so viele Möglichkeiten, dass es wahrschleinlich noch einfachere Lösungen gibt. Gruß Jörn
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stucki Mitglied Ingenieur

 Beiträge: 73 Registriert: 30.04.2004
|
erstellt am: 07. Jul. 2004 12:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo Jörn, Dein Vorghehen sieht interessant aus und ich versuche es nachzubilden. Bloss, kannst Du mir noch verraten, wie ich am elegantesten ' Rotation von 0,9° für C_Axis addieren CAxis_XForm += 0.9 im Code umsetze ? gruss tom
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JR Mitglied Konstrukteur
 
 Beiträge: 106 Registriert: 21.10.2003 Alibre Design Expert V26 Keyshot 11.2
|
erstellt am: 07. Jul. 2004 13:00 <-- editieren / zitieren --> Unities abgeben:          Nur für stucki
Hallo Tom, addieren war in diesem Fall auch nicht so richtig. Eigentlich muß man eine Translationsmatrix (mit 1mm) und eine Rotationsmatrix (mit 0.9°) erstellen. Die Translationsmatrix muß dann mit der XAxis_XForm und die Rotationsmatrix mit der CAxis_XForm multipliziert werden. Unter http://www.coin3d.org/ gibt es eine schöne C++ 3D Grafik-Bibliothek in der auch eine Klasse SbMatrix enthalten ist. Ich selbst habe aber auch noch nicht mit Matrizen unter SWX programmiert, aber in der API-Hilfe gibt es unter MathUtility ein paar interessante Methoden wie ComposeTransform(), CreateTransform() und CreateTransformRotateAxis() Ich hoffe das hilft Dir schon mal ein bißchen weiter. Gruß Jörn
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JR Mitglied Konstrukteur
 
 Beiträge: 106 Registriert: 21.10.2003
|
erstellt am: 07. Jul. 2004 13:26 <-- editieren / zitieren --> Unities abgeben:          Nur für stucki
|
stucki Mitglied Ingenieur

 Beiträge: 73 Registriert: 30.04.2004
|
erstellt am: 07. Jul. 2004 13:36 <-- editieren / zitieren --> Unities abgeben:         
|
stucki Mitglied Ingenieur

 Beiträge: 73 Registriert: 30.04.2004
|
erstellt am: 07. Jul. 2004 17:13 <-- editieren / zitieren --> Unities abgeben:         
Hallo Jörn, das überlagern der Bewegungen kriege ich nun sauber hin. (Dank deinen Hinweisen) Was mich noch stört ist die Sache mit dem Rebuilden nach jedem Step. Das einzige was bei mir zuverlässig etwas nützt ist ModelDoc2::ForceRebuild3. Das sieht leider nicht sehr schön aus. Ich habs auch noch mit PresentationTransform versucht. Da passiert bei mir aber gar nichts. Muss ich da vielleicht noch was dazuschalten? Ich starte meine Applikation nicht als AddIn sondern als externen Prozess. Weiss jemand, ob das Nachteile bringt? gruss tom
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
       

 Beiträge: 4999 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 07. Jul. 2004 19:18 <-- editieren / zitieren --> Unities abgeben:          Nur für stucki
Hallo tom, ein Trick der Trickfilmer: immer zwei (gleiche) Bilder machen, dann sieht die Bewegung flüssiger, weicher, harmonischer aus (wenn es das ist was Du meinst ) HTH , beste Grüße & bis demnäx Ralf ------------------  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JR Mitglied Konstrukteur
 
 Beiträge: 106 Registriert: 21.10.2003
|
erstellt am: 08. Jul. 2004 06:42 <-- editieren / zitieren --> Unities abgeben:          Nur für stucki
Hallo tom, das mit dem Rebuild hatte ich aus der API  -Hilfe (Stichwort Transform2). Da steht das unter Remarks. Hast Du es schon mal mit der Option swRebuildAll bzw. swForceRebuildAll statt swUpdateMates versucht ? Die PresentationTransform muß laut Hilfe mit ModelDoc2::GraphicsRedraw2 aktualisiert werden. Gruß Jörn
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stucki Mitglied Ingenieur

 Beiträge: 73 Registriert: 30.04.2004
|
erstellt am: 08. Jul. 2004 08:36 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, habe rausgefunden dass ich noch ein ModelDoc2::WindowsRedraw machen muss. Mit ModelDoc2::Rebuild alleine tut sich visuell noch gar nichts. (Dafür kann ich ModelDoc2::ForceRebuild3 streichen) m_swModel.Rebuild(swRebuildOptions_e.swUpdateMates); m_swModel.WindowRedraw(); Bemerkung: Ich programmier noch nicht lange mit dieser API und grundsätzlich macht es mir spass mit SolidWorks und der API zu programmieren. Ich finde jedoch die Beschreibung der Methoden in der API sehr knapp so dass das Programmieren eher zu einem Experimentieren verkommt. Mann muss die einzelnen Methoden erstmals in verschiedensten Kombinationen einsetzten um herauszufinden was sich nun wirklich tut. Ich weiss aber auch aus eigener erfahrung dass es schwierig ist Methoden so zu beschreiben, dass andere Leute etwas damit korrekt(im Sinne des Erfinders), anfangen können. Was ich an SolidWorks und der API toll finde ist die Hilfsbereitschaft der Forummitglieder. Ich hoffe dass mein Wissensstand mal so angewachsen ist, dass ich mich da auch mal revanchieren kann. @Jörn: ModelDoc2::GraphicsRedraw2 in Zusammenhang mit PresentationTransform probier ich noch aus. gruss tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stucki Mitglied Ingenieur

 Beiträge: 73 Registriert: 30.04.2004
|
erstellt am: 08. Jul. 2004 09:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo, Hab was rausgefunden: Damit ich Component2::PresentationTransform benutzen kann muss ich vorher AssemblyDoc::EnablePresentation auf true setzten. (danach wieder auf false) Ob ich dann ModelDoc2::GraphicsRedraw2 benutze oder ModelDoc2::WindowRedraw, da kann ich keinen unterschied feststellen. gruss tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |