| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Moderne CAx Entwicklungsmethoden: Generatives Design, Gitternetzstrukturen & MBD, ein Webinar am 11.10.2024
|
Autor
|
Thema: SolidWorks Makro export 3D-Punkte Excel (7709 mal gelesen)
|
CTJ Mitglied
Beiträge: 7 Registriert: 08.08.2013
|
erstellt am: 09. Aug. 2013 08:40 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammen, ich bin in der Makro-Erstellung ein totaler Anfänger und brauche deswegen Eure Hilfe. Ich benötige ein Makro in SolidWorks was 3D-Punkte mit der Benennung der Punkte und den X,Y,Z Koordinaten der Punkte in eine Excel-Datei exportiert. Die Punkte sind über Referenzgeometrie und nicht über eine 3D-Skizze erstellt bzw. die Referenzgeometrie "Punkt" steht im Focus. Da ich ein Anfänger bin, wäre der VBA-Code für mich sehr wichtig..... Danke im Voraus für Eure Hilfe!! Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sunnyrabbit Mitglied Ingenieur
Beiträge: 10 Registriert: 18.07.2013 SWX 2013 sp5
|
erstellt am: 09. Aug. 2013 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hi CTJ und willkommen im Forum, grundsätzlich wäre es gut wenn man hier im Forum als noch ein paar Hintergrundinformationen hat, aber das kommt mit der Zeit Die API Hilfe kostet zu Anfangs etwas Zeit, um sich als Anfänger zurecht zu finde, aber gib Dir diese und forschte diese mal durch. Da sind viele und gute Beispiele drin. Zusätzlich gibts die "inofizielle deutsche Hilfeseite von S. Berlitz" Da gibt es viele Macros zum Download. Bei deiner Herausforderung kannst Du ein Macro aufzeichnen, z. B.: wie Du die Referenzen erstellst, dieses etwas modifizieren und gut ist.
Wenn Du beispielsweise die Punkte lediglich steuern möchtest kannst du auch die üblichen boardmittel verwenden: 3D-Skizze punkte anlegen Referenzpunkte erstellen Einfügen / Tabelle.... Die zu steuernden Maße in die Tabelle eintragen (Hier kannst du dann auch excel fktionen nutzen und zB ein weiteres Tabellenblatt einfügen, damit du dir die darstellung anderst positionieren kannst. Viel Erfolg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CTJ Mitglied
Beiträge: 7 Registriert: 08.08.2013
|
erstellt am: 09. Aug. 2013 09:31 <-- editieren / zitieren --> Unities abgeben:
Moin sunnyrabbit, danke erstmal für die schnelle Antwort. Also Ziel des Makros => "Bild_Beispiel_05_Ziel". Ich habe ein Modell bzw mehrere mit ca. 92 Referenzpunkten und ich müsste so schnell es geht die X,Y,Z Koordinaten rausfinden und diese in eine Excel-Tabelle exportieren. Mit Einfügen\Tabelle in SolidWorks dauert es bei der Masse einfach zu lange. Die Referenzpunkte sollen auch nicht gesteuert werden. Ich brauche legdiglich die XYZ Koordinaten in eine Excel-Tabelle muss diese auch schnell den Punkten zuordnen können. Ich habe es auch schon mit Makro-Aufzeichen usw. probiert, aber ich scheitere . Im Internet gibt es auch Makros die die Koordinaten X,Y,Z von Punkten aus einer 3D-Skizze lesen und diese in eine Excel-Tabelle speichern. Das geht bei mir leider nicht, ich bräuchte dieses für Referenzpunkte........... Danke im Voraus für Eure Hilfe!! Gruß
CTJ
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CTJ Mitglied
Beiträge: 7 Registriert: 08.08.2013
|
erstellt am: 09. Aug. 2013 10:22 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammen, meine Ansatz wäre über "Sub GetPointCoordinates(X As Double, Y As Double, Z As Double)". Was meint ihr??
Gruß
CTJ Anbei das Makro zum expotieren von Punkten aus einer 3D-Skizze in ein Excel-File:
Sub main() Dim swApp As SldWorks.SldWorks Dim doc As SldWorks.ModelDoc2 Dim part As SldWorks.PartDoc Dim sm As SldWorks.SelectionMgr Dim feat As SldWorks.Feature Dim sketch As SldWorks.sketch Dim v As Variant Dim i As Long Dim sseg As SldWorks.SketchSegment Dim sline As SldWorks.SketchLine Dim sp As SldWorks.SketchPoint Dim ep As SldWorks.SketchPoint Dim s As String
Set exApp = CreateObject("Excel.Application") If Not exApp Is Nothing Then exApp.Visible = True If Not exApp Is Nothing Then exApp.Workbooks.Add Set sheet = exApp.ActiveSheet If Not sheet Is Nothing Then sheet.Cells(1, 2).Value = "X" sheet.Cells(1, 3).Value = "Y" sheet.Cells(1, 4).Value = "Z" End If End If End If Set swApp = GetObject(, "sldworks.application") If Not swApp Is Nothing Then Set doc = swApp.ActiveDoc If Not doc Is Nothing Then If doc.GetType = swDocPART Then Set part = doc Set sm = doc.SelectionManager If Not part Is Nothing And Not sm Is Nothing Then If sm.GetSelectedObjectType2(1) = swSelSKETCHES Then Set feat = sm.GetSelectedObject4(1) Set sketch = feat.GetSpecificFeature If Not sketch Is Nothing Then v = sketch.GetSketchPoints For i = LBound(v) To UBound(v) Set sp = v(i) If Not sp Is Nothing And Not sheet Is Nothing And Not exApp Is Nothing Then sheet.Cells(2 + i, 2).Value = (sp.X) sheet.Cells(2 + i, 3).Value = (sp.Y) sheet.Cells(2 + i, 4).Value = (sp.Z) exApp.Columns.AutoFit End If Next i End If End If End If End If End If End If End Sub
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: 09. Aug. 2013 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hallo CTJ, und herzlich willkommen im SolidWorks auf CAD.de Zitat: Original erstellt von CTJ: Im Internet gibt es auch Makros die die Koordinaten X,Y,Z von Punkten aus einer 3D-Skizze lesen und diese in eine Excel-Tabelle speichern. Das geht bei mir leider nicht, ich bräuchte dieses für Referenzpunkte...........
Vielleicht wäre es ja schon hilfreich, wenn du sagst, wo dieses Makro zu finden ist, was du schon versucht hast daran anzupassen und wo es hakt. Deine Referenzpunkte solltest du mit einer Traverse über den Featuretree bekommen (siehe API Beispiel Traverse Assembly at Component Level Example, ist vom Typ RefPoint), im Beispiel Get Reference Point Data Example (VBA) ist dann Code, mit dem du an die Daten (Koordinaten) der Referenzpunkte kommst. Zitat: Original erstellt von CTJ: Da ich ein Anfänger bin, wäre der VBA-Code für mich sehr wichtig.....
Zitat: Original erstellt von CTJ: Also Ziel des Makros => "Bild_Beispiel_05_Ziel". Ich habe ein Modell bzw mehrere mit ca. 92 Referenzpunkten und ich müsste so schnell es geht
Ohne dir zu nahe treten zu wollen, das hört sich nicht danach an, als würdest du dich in die API Programmierung einarbeiten wollen, sondern lieber ein fertiges Makro haben. Das ist zwar nicht verwerflich, wird aber nur selten zum Erfolg führen. Hier kannst du ein paar Gedanken von mir zu diesem Komplex finden. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de 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: 09. Aug. 2013 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Ich habe es nicht als Makro ausprobiert, aber von Hand geht es, die Referenzgeometriepunkte im FeatureManager auszuwählen und sie in eine geöffnete 3D-Skizze mittels Elemente übernehmen zu bekommen. Danach könntest Du diese Punkte aus der 3D-Skizze auslesen (falls das Makro dafür funktioniert). Wäre das ein Ansatz? ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CTJ Mitglied
Beiträge: 7 Registriert: 08.08.2013
|
erstellt am: 09. Aug. 2013 10:42 <-- editieren / zitieren --> Unities abgeben:
|
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: 09. Aug. 2013 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Mein Ansatz ist, gehe alle Features durch und verarbeite nur die, die den swfeat.GetTypeName="RefPoint" haben (ohne SubFeatures!). Benutze dazu die API-Hilfe und suche nach: "Get Reference Point Data Example (VBA)" und "Traverse All Cosmetic Threads Example (VBA)". Mit diesen zwei Beispielen konnte ich ein einfaches Makro erstellen, welches alle Punkte durchgeht und ausmisst. ------------------
[Diese Nachricht wurde von GDawg am 09. Aug. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CTJ Mitglied
Beiträge: 7 Registriert: 08.08.2013
|
erstellt am: 13. Aug. 2013 12:24 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammmen, vielen Dank Nochmal an Lutz Federbusch, StefanBerlitz sowie GDawg. Mit euren Tipps konnte ich jetzt folgendes Makro erstellen.. Vielleicht braucht ja nochmal einer dieses Makro.......
Option Explicit Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swFeat As SldWorks.Feature Dim swSubFeat As SldWorks.Feature Dim sFeatType As String Dim swRefPt As SldWorks.RefPoint Dim swRefPointFeatData As SldWorks.RefPointFeatureData Dim swMathPt As SldWorks.MathPoint Dim v As Variant Dim i As Integer Dim j As Long Dim bRet As Boolean Dim exApp As Excel.Application Dim sheet As Excel.Worksheet Set exApp = CreateObject("Excel.Application") If Not exApp Is Nothing Then exApp.Visible = True If Not exApp Is Nothing Then exApp.Workbooks.Add Set sheet = exApp.ActiveSheet If Not sheet Is Nothing Then sheet.Cells(1, 1).Value = "Datum:" sheet.Cells(1, 2).Value = "=NOW()" sheet.Cells(2, 1).Value = "Name" sheet.Cells(2, 2).Value = "Type" sheet.Cells(2, 3).Value = "X" sheet.Cells(2, 4).Value = "Y" sheet.Cells(2, 5).Value = "Z" End If End If End If Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swFeat = swModel.FirstFeature i = 1 Do While Not swFeat Is Nothing sFeatType = swFeat.GetTypeName Select Case sFeatType Case "RefPoint" If swFeat.Name Like "*Nm*" Then sheet.Cells(2 + i, 1).Value = swFeat.Name sheet.Cells(2 + i, 2).Value = sFeatType Set swRefPt = swFeat.GetSpecificFeature2 Set swMathPt = swRefPt.GetRefPoint sheet.Cells(2 + i, 3).Value = swMathPt.ArrayData(0) * 1000# sheet.Cells(2 + i, 4).Value = swMathPt.ArrayData(1) * 1000# sheet.Cells(2 + i, 5).Value = swMathPt.ArrayData(2) * 1000# Set swRefPointFeatData = swFeat.GetDefinition i = i + 1 End If End Select Set swFeat = swFeat.GetNextFeature Loop exApp.Columns.AutoFit End Sub Gruß
CTJ
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barim Mitglied
Beiträge: 4 Registriert: 21.04.2015
|
erstellt am: 21. Apr. 2015 13:07 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hallo zusammen, Ich bin in einer ähnlichen Situation wie der damalige Thread-Ersteller. Ich möchte gerne die Punkte eines Splines per Makro auslesen lassen und sie in Excel eintragen lassen. Hier bei handelt es sich um einen Spline auf einer unebenen Oberfläche in einer 3D-Skizze. Ich habe bereits den hier zur Verfügung gestellten Code ausprobiert, jedoch bekomme ich die Fehlerausgabe "Fehler beim Kompilieren: Benutzerdefinierte Typ nicht definiert" an der folgender Stelle: Dim exApp As Excel.Application Dim sheet As Excel.Worksheet Könntet ihr mir hier weiterhelfen? Ich bin leider ein kompletter Novize was VBA-Programmierung angeht und wollte schauen ob es möglich ist, dass ihr dieses Problem evtl. schnell lösen könnt, oder ich mich komplett in VBA einarbeiten muss. Falls meine Fehlerbeschreibung nicht ausreichend ist, sagt mir bitte Bescheid. Ich probiere dann mein bestes es zu verdeutlichen. Hoffnungsvoll und mit freundlichen Grüßen Barim 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: 21. Apr. 2015 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hi, das klingt so, als ob unter Extras-Verweise in der VBA-Entwicklungsumgebung der Verweis auf die Microsoft-Excel-Object Library (je nach Office-Version) nicht angehakt ist. Probier mal, vielleicht geht es dann! ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jörg.jwd Ehrenmitglied V.I.P. h.c. CAD-PDM Administrator
Beiträge: 3109 Registriert: 05.11.2003
|
erstellt am: 21. Apr. 2015 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hallo Barim, schau doch mal in den Verweisen nach ob dein Excel auch gefunden wird.
------------------ Grüße Jörg da ich weiß daß ich nichts weiß weiß ich immer noch mehr als die die nicht wissen daß sie nichts wissen (weiß nicht von wem) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 21. Apr. 2015 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hallo Barim, das hört sich danach an das dir die Verweise auf die Excell Bibliothek in deinem Macro fehlen, schau mal unter Verweisen ob diese angehakt sind. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barim Mitglied
Beiträge: 4 Registriert: 21.04.2015
|
erstellt am: 21. Apr. 2015 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
So, ersteinmal vielen Dank für die schnellen Antworten! Die Ratschläge haben auch tatsächlich die Fehlermeldung behoben. Es wird jetzt eine Exceldatei geöffnet, die zwar die entsprechenden Spalten besitzt, jedoch kein weiteren Einträge. Sprich es befinden sich keine Punktekoordinaten in den Spalten. Irgendwelche Ideen wie es dazu kommt? Hier eine Aufzählung der momentan aktivierten Verweise: Visual Basic for Applications SolidWorks 2013 Extensibility Type Libary OLE Automation SldWorks 2013 Type Libary SolidWorks 2013 Constant type libary SolidWorks 2013 Commands type libary Solidworks Utilities 2013 Type Libary Microsoft Access 15.0 Object Libary Microsoft Smart Tags 2.0 Type Libary Micosoft Excel 15.0 Object Libary Bis demnächst und herzlichen Dank! Barim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 21. Apr. 2015 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hallo nochmal, das Problem ist das du nicht wie das Macro es tut die Koordinaten von Referenzspunkte haben möchtest sondern die von Splinepunkten. Dazu müsstest du das Macro umbauen das eben diese ausgelesen und in Excell überführt weren. In der API-Hilfe gibt es dazu das Beispiel "Get Spline's Parameters Example (VBA)" da könntest du dir den Teil rausholen der dir die Punktinformationen besorgt und mit dem Excellteil des Macros hier im Thread diese dann in Excell übertragen. Gruß Bernd
------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Barim Mitglied
Beiträge: 4 Registriert: 21.04.2015
|
erstellt am: 21. Apr. 2015 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
|
Barim Mitglied
Beiträge: 4 Registriert: 21.04.2015
|
erstellt am: 05. Mai. 2015 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für CTJ
Hier nur kurz ein kleines Update. Habe jetzt endlich mal wieder Zeit gehabt um mich mit den Sachen auseinander zusetzen. Im besonderen versuche ich mir nebenbei etwas VBA über Tutorien beizubringen, bis jetzt aber erst mit mäßigem Erfolg. Erste Versuche meinerseits, den Code für einen Spline anzupassen sind daher auch gescheitert. Falls ich es demnächst mal zum Laufen bekomme, meld ich mich wieder und würde dann auch den Code hier zur Verfügung stellen. Kann mir Jemand in der Zwischenzeit vllt. ein gutes VBA Tutorien empfehlen? MfG Barim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |