| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | FMB, eine Veranstaltung am 05.11.2024
|
Autor
|
Thema: Punkte in 3D-Skizze automatisch verbinden (2439 / mal gelesen)
|
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 21. Aug. 2018 17:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin neu im Forum, habe aber in den letzten Monaten schon viel im Forum gelesen und gelernt. Im Studium (Flugzeugbau) hab ich CATIA gelernt, aber ich versuche momentan auch mit SolidWorks klar zu kommen. Ich hatte in den letzten Wochen viele Fragen und immer wieder schon was formuliert, um es hier abzusenden, aber doch noch irgendwie eine Lösung im Forum oder ein Work-around gefunden. Jetzt komm ich aber an einer Stelle nicht weiter, weil meine Programmierkenntnisse praktisch nicht existent sind. Das tolle Makro zum Umwandeln von Punkten in eine 3D-Skizze vom Herrn Berlitz hab ich (natürlich dank dem Forum) schon gefunden. Das ist soweit schon sehr hilfreich, aber da die Punkte ja keine Nummerierung haben, wüsste ich jetzt nicht, in welcher Reihenfolge ich die Punkte verbinden muss. Also müsste ich die Punkte immer ausmessen und mit meiner ursprünglichen Liste vergleichen. Da ich sie aber sowieso nur in der Reihenfolge mit geraden Linien verbinden möchte, wie ich sie einlese und da es sich um hunderte Punkte handelt, stellt sich mir die Frage, ob es da da eine Möglichkeit gibt, das Makro so zu erweitern, dass es automatisch die eingelesenen Punkte in der Reihenfolge durch Geraden verbindet? ____ Das tolle Makro von dem ich Rede: http://solidworks.cad.de/mm_24.htm ____
Vielen Dank schon einmal und viele Grüße, Max 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: 21. Aug. 2018 19:04 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Hallo Max, willkommen im Forum. Zitat: Original erstellt von Maxi-Air: ...ob es da da eine Möglichkeit gibt, das Makro so zu erweitern, dass es automatisch die eingelesenen Punkte in der Reihenfolge durch Geraden verbindet?
Ja, das geht. Das von Dir genannte Makro enthält die Zeile Code: Set point = ModelDoc2.CreatePoint2(x, y, z)
Um nun eine Linie statt eines Punktes zu erstellen musst Du z.B. Code: Set skSegment = Part.SketchManager.CreateLine(x1, y1, z1, x2, y2, z2)
verwenden (mit Makro-Rekorder aufgezeichnet). Die API-Hilfe hierzu: http://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModeler~CreateLine.htmlWie Du leicht siehst, werden hier schon gleich Anfangs und Endpunkt durch (zweimal) drei Werte x, y und z bestimmt. Das musst Du dann in Deiner Schleife berücksichtigen (das Makro von Stefan liest ja nur einmal drei Werte, setzt den Punkt und liest die nächsten drei für den nächsten Punkt...). HTH Ralf ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 21. Aug. 2018 19:40 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Ralf Tide: Hallo Max,willkommen im Forum.Ja, das geht. Das von Dir genannte Makro enthält die Zeile
Code: Set point = ModelDoc2.CreatePoint2(x, y, z)
Um nun eine Linie statt eines Punktes zu erstellen musst Du z.B.Code: Set skSegment = Part.SketchManager.CreateLine(x1, y1, z1, x2, y2, z2)
verwenden (mit Makro-Rekorder aufgezeichnet). Die API-Hilfe hierzu: http://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModeler~CreateLine.htmlWie Du leicht siehst, werden hier schon gleich Anfangs und Endpunkt durch (zweimal) drei Werte x, y und z bestimmt. Das musst Du dann in Deiner Schleife berücksichtigen (das Makro von Stefan liest ja nur einmal drei Werte, setzt den Punkt und liest die nächsten drei für den nächsten Punkt...). HTH Ralf
Hallo Ralf, erstmal vielen Dank! Jetzt muss ich aber nochmal genauer fragen, bei deiner vorgeschlagenen Variante muss ich ja auch vorher den Quellcode so abändern, dass er alle 6 Variablen "erkennt", oder sehe ich das Falsch? Grüße, Max
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: 21. Aug. 2018 22:36 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Zitat: Original erstellt von Maxi-Air: ...den Quellcode so abändern, dass er alle 6 Variablen "erkennt", oder sehe ich das Falsch?
Genau so ist es. Z.B. vor der Schleife Code: While Not (EOF(1)) Line Input #1, zeile anzahl = anzahl + 1 ... Wend
schon die erste Zeile lesen und x1, y1 und z1 zuweisen. In der Schleife nach dem lesen der zweiten Zeile die Werte in x2, y2 und z2 schreiben. Wenn Du die Linie erzeugt ist, den Inhalt von x2 in x1 (y2->y1, z2->z1) schreiben und die Werte der nächste Zeile in x2, y2 und z2 schreiben... wiederholen bis EOF erreicht ist... HTH Ralf ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 22. Aug. 2018 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
|
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 22. Aug. 2018 15:48 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von HenryV: Hallo MaxIch hab das schon mal gemacht, siehe Anhang. Alternativ kannst du ja mal den Befehl Erstellen von Kurven durch XYZ-Punkte versuchen. Gruss Andreas
Danke Ralf und Andreas, ich schau mir das mal an. Die Funktion "Kurve durch XYZ-Punkte" ist nicht das, was ich brauche, die erzeugt nämlich irgendwelche nicht steuerbaren Bögen/Kurven, ich brauche nur gerade Linien zum Verbinden. Was die Funktion da macht sind auch keine Bézierkurven, und nicht andersweitig steuerbar. Vielen Dank nochmal. Ich melde mich die Tage nochmal. 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: 23. Aug. 2018 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Hallo Max, die Erweiterung, die du machen möchtest, ist eigentlich recht einfach umzusetzen: du merkst dir jeweils den vorigen Punkt undziehst dann ab der zweiten Zeile der eingelesenen Daten jeweils zwischen dem aktuellen und dem vorherigen Punkt eine Linie. Fertig Im Code also: * zusätzliche Variablen für den zweiten Punkt deklarieren
Code: Dim PreX, PreY, PreZ As Double
* auskommentieren des Punkt erzeugen (wenn du die nicht auch noch haben willst * Linie zeichnen, wenn mindestens in der zweiten Zeile des Inputs Code: ' Erweiterung: Linien zwischen den Punkten statt Punkte ' wenn wir mindestens zwei Punkte eingelesen haben If anzahl > 1 Then ' dann steht in PreX, PreY, PreZ die Koordinaten des vorigen Punktes, ' also Linie zwischen dem aktuellen und dem vorherigen Punkt ziehen Set point = ModelDoc2.CreateLine2(x, y, z, PreX, PreY, PreZ) End If
* Koordinaten merken für den nächsten Durchlauf Code:
' und die aktuellen Koordinaten für den nächsten durchlauf merken PreX = x PreY = y PreZ = z
Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 29. Aug. 2018 16:59 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von StefanBerlitz: Hallo Max,... Ciao, Stefan
Entschuldige bitte die späte Antwort. Vielen Dank Stefan, das funktioniert jetzt so einwandfrei. Als totaler Anfänger in VBA hab ich so etwas gebraucht, aber wenn man rückblickend schaut, wär es doch eigentlich ganz einfach gewesen mit deinem Code! Vielen Dank nochmal! Grüße, Max [Diese Nachricht wurde von Maxi-Air am 29. Aug. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|