| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | |  | CATIA Cloud: Vorteile für KMU im Überblick, ein Fachartikel
|
|
Autor
|
Thema: Geometrieerzeugung in VBA (3366 mal gelesen)
|
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 09:12 <-- editieren / zitieren --> Unities abgeben:         
Guten Morgen zusammen, ich habe eine Frage und hoffe, dass ihr mir helfen könnt. Ein Mitstreiter und ich sollen in unserer Studiums-Abschlussarbeit grob gesagt das Modell eines Autos in SolidWorks erzeugen. Dieses Modell soll jedoch variabel gestaltbar sein sodass man über die VBA-Benutzermaske die Möglichkeit hat, dieses Modell über die Steuerung mehrerer Parameter z.B. breiter, höher, länger, eckiger usw. erscheinen zu lassen. Soweit eigentlich kein Problem, aber jetzt gibt es noch diesen kleinen Zusatz: Es soll keine Punktewolke aus z.B. Excel eingelesen werden oder auf ein bestehendes SW-Modell zurückgegriffen werden, sondern die Berechnung des Modells samt Linien soll komplett in VBA geschehen. Heißt also: So wie uns die Aufgabe gestellt wurde, sollen nur ein paar Parameter vom User abgefragt werden, die jedoch nur das Aussehen des Modells beeinträchtigen und über diese Parameter soll sich VBA anhand von Funktionen x-ten Grades die einzelnen Punkte selber generieren. Dies soll in Schleifen geschehen um das Programm möglichst übersichtlich zu gestalten. Wo wir uns am meisten wundern ist, dass man doch zum Erzeugen von Linien zumindest einen Anfangs- und einen Endpunkt benötigt – aber wie soll denn VBA oder SW wissen, wo diese Linie hinsoll, geschweige denn wo die Punkte liegen, wenn die nicht fest definiert sind? Wir haben uns zwar schon ein wenig in die Materie reingefuchst, aber aus unserer Sicht ist die Aufgabenstellung so wie gewünscht nicht lösbar – allerdings sind wir auch „nur“ Maschinenbauer und haben im Studium VBA nur minimal angekratzt, daher jetzt der Hilferuf an euch. Ich hoffe der lange Text schreckt nicht ab und ihr könnt uns eure Meinung dazu sagen. Vielen Dank schon mal.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 07. Nov. 2011 10:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
Wow, das klingt nicht gerade einfach! Was ich tun/versuchen würde, ist, ist das ganze Modell einmal zusammen mit dem Macro-Recorder auf ON aufzeichnen. Das gibt zwar ein unendlich langer Code aber dieser lässt sich dann auch parametrisieren. Und wenn die Anzahl der Linien, Punkte etc. nicht variiert, ist das sicher der "einfachste" Weg. Der Macro-Recorder zeichnet leider nicht immer alles .. also gut aufpassen! EDIT: Wie muss denn das Auto aussehen? Würde ein Box-Model reichen? ------------------ [Diese Nachricht wurde von GDawg am 07. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 11:17 <-- editieren / zitieren --> Unities abgeben:         
Dann geht es ja nicht nur uns so ... Mit dem Macro-Recorder haben wir auch schon gearbeitet, ich denke anfänglich ist es auch kein Problem, aber wenn ein komplexeres Modell kommt denke ich, dass es ein riesiges Programm wird - auch wenn man den Code nach der Aufzeichnung bereinigt... Zumal man ja trotzdem die einzelnen Punkte generiert bzw. von SW generieren lässt, das ist doch dann wieder von hinten durch die Brust, oder sehe ich das falsch? (Bitte nicht falsch verstehen, ich frage mich nur, wie man ein Modell OHNE Punktdefinition erstellen soll ... woher weiss denn VBA oder SW, welcher Punkt wo liegt und welche Linie wo hin gehört?) Anzahl der Linien und Punkte variiert nicht, Punktlage kann je nach Eingabe variieren (Änderung von Breite, Höhe und Länge soll möglich sein) Das Modell soll später zur CFD-Simulation in Dolfyn geladen werden, also muss ein vernünftiges Volumenmodell rauskommen - im besten Falle!  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 07. Nov. 2011 11:41 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
Zitat: Original erstellt von Arne T.: woher weiss denn VBA oder SW, welcher Punkt wo liegt und welche Linie wo hin gehört?
Mit dem Makrorecorder kannst Du das etwas nachvollziehen. Wenn Du immer die gleichen Punkte mit der gleichen Linie verbindest, sollte das kein Problem sein. Z.B.: Punkte erstellen:
Code: Set skPoint = Part.SketchManager.CreatePoint(-0.059563, 0.000051, 0#) Set skPoint = Part.SketchManager.CreatePoint(0.069988, -0.002217, 0#)
Und dann die Linie dazu: Code: Set skSegment = Part.SketchManager.CreateLine(-0.059563, 0.000051, 0#, 0.069988, -0.002217, 0#)
Also, alle Punkte ausrechnen und dann mit Linien verbinden. Oder gleich die Linien zeichnen. Damit sparst Du Dir das Punkteerstellen. Oder, wenn Du weisst welche Features erstellt werden müssen, gleich diese Features (auch per Makrorecorder aufzeichenen) erstellen. Jede Linie und Kante, Fläche und Volumenkörper erhalten eine eindeutige ID von SolidWorks und somit ist klar welche Skizze gemeint ist wenn Du diese extrudieren möchtest. Tipp: Du kannst die Skizzen nach dem Erstellen umbenennen, damit es für Dich einfacher wird. ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 13:08 <-- editieren / zitieren --> Unities abgeben:         
So wäre es natürlich eine Möglichkeit, aber entweder stelle ich mich gerade total doof an oder habe ein Verständnis-Problem: Es hapert ein wenig an unserem Verständnis, wie man nur anhand einiger Parameter grob geschätzt 50 Punkte erstellen lassen kann (am besten in Schleifen um das Programm schlank zu halten) ohne diese vorher zu definieren, sondern die sich selber über eine Rechnung in VBA aufgrund weniger Parameter (Beispiel: Gesamthöhe, Gesamtlänge, Gesamtbreite, Wölbung der Motorhaube, Neigungswinkel der Windschutzscheibe, "Rundheit" des Modells [Beispiel: Audi TT oder alter Jetta] ) definieren lassen. Denn wenn ich in SW reingehe und diese Modell zeichne, gebe ich ja auch entweder den Punkten oder den Linien bestimme Eigenschaften um sie voll zu definieren. Wir hatten überlegt, entweder ein schon vorhandenes "Standard-Referenzmodell" zu laden und sich die Werte daraus auszulesen und zu verändern, oder eine "externe" Punktewolke (z.B. Excel-Tabelle) einzulesen und die Koordinaten dann über die Benutzereingabe zu verändern - die Linien daraus bekommt man ja, wie du schon sagtest über "CreateLine" erstellt. So wollten wir das eigentlich auch machen, nur wurde uns gesagt, dass es so nicht klappt (es wurde schon mal eine unserer Meinung nach mehr oder weniger zufriedenstellende Arbeit darüber gemacht, allerdings nicht sehr umfangreich) und wir rein VBA-seitig "konstruieren" sollen. Wie gesagt, tut mir leid, wenn ich mich gerade etwas dümmlich anstelle, aber es hängt einfach daran, wie eine VBA Berechnung wissen kann, wo irgendwelche Punkte im Raum liegen (ohne diese vom Anwender eingegeben zu bekommen, sonst wärs ja wieder einfach!) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 07. Nov. 2011 14:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
Nun auch das sollte sich relativ einfach erledigen lassen. Alles was ihr braucht ist ein Referenzmodell! Anhand den Eingaben kannst Du dann das Referenzmodell zum richtigen Model verändern .. per VBA. Z.B.: Ein standard Rechteck: L*B*H => 1*1*1 <= Dein Referenzmodell. Dann, die Eingabe => L=2, B=3.5 und H=7 ==> umgerechnet zum erstellen des richtigen Modells => L=1*2, B=1*3.5 und H=1*7 ... fertig! Natürlich ist der Würfel ganz einfach. Aber das Prinzip ist genau das Gleiche. Dein Array mit all den vordefinierten(!) Punkte im VBA wird etwas grösser als die 8x3 für den Würfel. Zur Info: ein Würfel besteht aus 8 Ecken, mal 3 Koordinaten = ein Array von 8 x 3 Punkten. Achja: Denke an mögliche Symmetrieen, besonders auch für die Simulation!!! ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 14:29 <-- editieren / zitieren --> Unities abgeben:         
 Hehe, ich sehe, wir kommen um eine Referenz, sei es eine Punktewolke oder ein komplettes Modell, nicht herum ... Das reicht ja insofern schon einmal als Info, als dass ich jetzt unserem Betreuer sagen kann, dass es so wie er es denkt (siehe oben) nicht machbar ist. War uns eigentlich schon klar, aber es noch einmal von einer fachkundigen Person zu hören ist wie Weihnachten! Mal schauen ob er auf uns hört...!  Ich bin gespannt was sich als Aufgabe aus dieser Erkenntnis entwickelt, ich bin mir sicher, dass wir in den nächsten Wochen noch häufiger hier vorbeischauen werden! Vielen Dank schonmal GDawg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 07. Nov. 2011 14:52 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
1. Gern geschehen! 2. "Nicht machbar", ich weiss nicht, vielleicht geht es schon! Aber ich sage, dass es einfacher ist ein Modell zu skalieren als eines neu zu zeichnen (per VBA!). Die Geometrie musst Du sowieso zuerst im SolidWorks erstellen, dann in Code umwandeln, dann anpassen. Also, ein Referenzmodell. Schlussendlich egal. 3. "fachkundigen Person", was, wer wo??? ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 15:26 <-- editieren / zitieren --> Unities abgeben:         
Fachkundiger als ich auf jeden Fall!! ok, nicht machbar ist vielleicht der falsche Ausdruck ... für uns nicht realisierbar hört sich zwar etwas unvorteilhaft aber richtiger an! Es ging hauptsächlich darum, dass man zuerst immer eine Referenz haben muss (ohne es kompliziert zu machen), was uns der Betreuer nicht glauben wollte. Zusammenfassend: Es hilft ungemein, noch einmal von einer anderen Person zu hören, was man selber vermutet hat. Abschliessende Frage (in diesem Thema): Würdest du eher ein bestehendes Referenzmodell oder eine Punktewolke in VBA laden lassen? Kommt warscheinlich aufs Gleiche drauf hinaus, nehme ich an - wobei man sich durch die Anpassung des bestehenden SW-Modells die Linienerstellung sparen könnte... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 07. Nov. 2011 15:37 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
" Würdest du eher ein bestehendes Referenzmodell oder eine Punktewolke in VBA laden lassen?" Ok, Du gehts immernoch von einem richtigen Referenzmodell aus  Was ich meine ist, ich habe das Referenzmodell schon im Code definiert! Code: Dim RefModel() as Long RefModel = Array ( _ Array (X1, Y1, Z1), _ Array (X2, Y2, Z2))
Und so weiter.... Somit kannst Du gleich mit dem Erstellen beginnen. Aber eigentlich egal wie Du es machst."Kommt warscheinlich aufs Gleiche drauf hinaus, nehme ich an - wobei man sich durch die Anpassung des bestehenden SW-Modells die Linienerstellung sparen könnte..." Vermutlich geht das Verändern eines bestehenden SolidWorks-Modells viiiiel einfacher! Du hast die Namen der zu änderden Masse bereits im Modell und somit im Code. Dann musst Du nur noch die ändern und einmal neu aufbauen, fertig! Vermutlich der allereinfachste Weg ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 15:41 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Was ich meine ist, ich habe das Referenzmodell schon im Code definiert!
So, jetzt hab ichs auch begriffen! Danke, ich seh mal zu, was der Betreuer dazu sagt! Aber das hat schonmal meinen Tag gerettet!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 07. Nov. 2011 15:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
Zitat: Original erstellt von Arne T.: So, jetzt hab ichs auch begriffen!
Es ist schliesslich auch Montag!  Vielleicht habe ich mich auch nicht klar genug ausgedrückt. Hochdeutsch ist nach wie vor eine Fremdsprache für uns Schweizer! ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 07. Nov. 2011 15:56 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Vielleicht habe ich mich auch nicht klar genug ausgedrückt. Hochdeutsch ist nach wie vor eine Fremdsprache für uns Schweizer!
Je peux parle en francais ... aber das willst du beim besten Willen nicht, glaub mir!! Vor allem dann noch an Montagen, das ginge garnicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lutz Federbusch Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau

 Beiträge: 3094 Registriert: 03.12.2001 alle SW seit 97+ AutoCAD2016-2022 ERP ProAlpha + CA-Link Intel Core i7-7820K 32GB Win10x64 Quadro K5000 SpacePilot
|
erstellt am: 08. Nov. 2011 17:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Arne T.
Du kannst mal auf die Festo-Seite gehen und Dir dort aus dem Katalog ein Teil generieren lassen - die werden oft als Makro geliefert (ich glaub, man muß sich registrieren). Da hättest Du ein komplettes Beispiel. Alles ist dort im Code drin. Sobald Du es bei Dir laufen läßt (meist muß noch ein Ordner angegeben werden, wohin es gleich gespeichert wird), wird Dir das Teil generiert. Auch Baugruppen gibt es da zu holen. Und wenn im Makrorekorder-Code nicht alles drin ist, dann suche mal, ob Du Deine swxJRNL.swj-JournalDatei findest - da zeichnet SolidWorks oft mehr drin auf... ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? [Diese Nachricht wurde von Lutz Federbusch am 08. Nov. 2011 editiert.] [Diese Nachricht wurde von Lutz Federbusch am 08. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne T. Mitglied

 Beiträge: 23 Registriert: 07.11.2011 SW2010 SP0.0
|
erstellt am: 09. Nov. 2011 09:08 <-- editieren / zitieren --> Unities abgeben:         
Oha, die Seite ist ja was richtig Feines! Das Makro habe ich mir mal runtergeladen, leider funktioniert es nur nicht ... vllt habe ich auch einfach nur ein schlechtes Beispiel gewählt und ich muss mal n anderes Teil probieren! Vielen Dank für den Tipp, da kann man auf jeden Fall mal ansetzen!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |