Autor
|
Thema: Points coordinaten und GeoSet Name (1805 mal gelesen)
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 06. Feb. 2015 16:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Ich habe ein makro geschrieben, welsches alle Punkte aus das Part liest, und die folgende Infos unter Excel schreibst: - Point Name - X-Coor - X-Coor - X-Coor - Parent Name (SetName) Ich weisst aber nicht wie kann ich der ParentName fuer das einzelnes Punkt kriegen? Ich meine der name des GeoSet unter welches das Punkt liegt. Kann mich jemand helfen? Das Code: Code: Sub CATMain() '_________________________________________ ' Separating char trz = ";" crlf = chr(10) '----------------------------------------- On Error Resume Next Set document = CATIA.ActiveDocument Set filesys = CATIA.FileSystem '__________________________________________________________________________ ' Filename and path filename = "D:\Punkt_exp.csv" '-------------------------------------------------------------------------- if filesys.FileExists(filename) Then filesys.DeleteFile(filename) End IfSet file = filesys.CreateFile(filename,True) Set stream = file.OpenAsTextStream("ForWriting") err=0 Dim selection1 As Selection Set selection1 = document.Selection selection1.Search "((((CATStFreeStyleSearch.Point + CATSketchSearch.2DPoint) + CATDrwSearch.2DPoint) + CATPrtSearch.Point) + CATGmoSearch.Point),selection1"
if err <> 0 Then msgbox("Didn't find any points!") End If
stream.write("Point Name"&trz&"X-Coor"&trz&"Y-Coor"&trz&"Z-Coor"&trz&"Parent Name (Set Name)") stream.write(crlf) Dim coords(3) As Integer for i = 1 To selection1.Count Set element = selection1.Item(i) Set point = element.Value point.GetCoordinates(coords) stream.write(point.Name&trz&coords(0)&trz&coords(1)&trz&coords(2)&trz&???????????) if i <> selection1.Count Then stream.write(crlf) End If Next stream.close msgbox ("Ready: "&filename&" ") End Sub
MfG Lukas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Feb. 2015 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 06. Feb. 2015 16:49 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusIMHO geht das am einfachsten über GetNameToUseInRelation (siehe auch hier) Gruß Bernd
Ich habe Mal so probiert: Code:
for i = 1 To selection1.Count 'selection1.Search "((((CATStFreeStyleSearch.Point + CATSketchSearch.2DPoint) + CATDrwSearch.2DPoint) + CATPrtSearch.Point) + CATGmoSearch.Point),all" Set element = selection1.Item(i) Set point = element.Value point.GetCoordinates(coords) 'name = objAssemblyParams.GetNameToUseInRelation(point) stream.write(point.Name&trz&coords(0)&trz&coords(1)&trz&coords(2)&trz&objAssemblyParams.GetNameToUseInRelation(point)) if i <> selection1.Count Then stream.write(crlf) End If Next
aber das funktioniert nicht. Was habe ich falsch gemacht? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Feb. 2015 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Kommt eine Fehlermeldung? Von aus startest du das Makro? Was ist "objAssemblyParams"? Wie ist dies definiert? Edit: ggf mal das "On Error resume Next" rauswerfen, sonst suchst du dir bei der Fehlersuche einen Wolf. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 06. Feb. 2015 17:38 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Kommt eine Fehlermeldung? Von aus startest du das Makro? Was ist "objAssemblyParams"? Wie ist dies definiert? Edit: ggf mal das "On Error resume Next" rauswerfen, sonst suchst du dir bei der Fehlersuche einen Wolf.Gruß Bernd
Ich habe nur mein Part geöffnet. Ich starte das Makro an. Ich kriege kein Fehlermeldung, und das Excel Spalte für Geoset Name ist leer. Mein Part hat mehrere Geosets mit Punkte, aber ich suche fuer alle Punkte in das Part durch, und für jedes Punkt wollte ich das Parent GeoSet Name kennen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Feb. 2015 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Und hast du das "On error resume next" mal rausgeschmissen? Bei mir läuft der (vereinfachte) Code (noch coords richtig dimensionieren ( dim coords(2) as variant)) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 09. Feb. 2015 07:45 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Und hast du das "On error resume next" mal rausgeschmissen? Bei mir läuft der (vereinfachte) Code (noch coords richtig dimensionieren ([i]dim coords(2) as variant))Gruß Bernd [/i]
Halo Bernd Ich habe mein Makro ein bisschen weiter aufgebaut. Ich habe Punkten-liste mit Koordinaten und String. Innerhalb dieses String habe ich Namen von Blechen wo diese Punkt kommt durch (Schweisspunkten fuer die Bleche).Jetzt wollte ich der Namen aus der String schneiden und separat in Excel-spalte einfuegen. Das problem ist dass zeitweise es gibt nur zwei Bleche, zeitweser funf. Wie kann ich das: Code:
stream.write(point.Name&trz&coords(0)&trz&coords(1)&trz&coords(2)&trz&name&trz&Splitname(1)&Splitname(2))
flexibel machen? Ich hoffe, ich erklärte es gut. Mein Deutsch ist nicht perfekt :) Guck mal an Kode an: Code:
Sub CATMain() '_________________________________________ ' Separating char trz = ";" crlf = chr(10) '----------------------------------------- Set document = CATIA.ActiveDocument Set filesys = CATIA.FileSystem '__________________________________________________________________________ ' Filename and path filename = "D:\Punkt_exp.csv" '-------------------------------------------------------------------------- if filesys.FileExists(filename) Then filesys.DeleteFile(filename) End IfSet file = filesys.CreateFile(filename,True) Set stream = file.OpenAsTextStream("ForWriting") err=0 Dim selection1 As Selection Set selection1 = document.Selection selection1.Search "((((CATStFreeStyleSearch.Point + CATSketchSearch.2DPoint) + CATDrwSearch.2DPoint) + CATPrtSearch.Point) + CATGmoSearch.Point),selection1"
if err <> 0 Then msgbox("Didn't find any points!") End If
stream.write("Point Name"&trz&"X-Coor"&trz&"Y-Coor"&trz&"Z-Coor"&trz&"Parent Name (Set Name)"&trz&"Numer blachy 1"&trz&"Nazwa blachy 1"&trz&"Numer blachy 2"&trz&"Nazwa blachy 2"&trz&"Numer blachy 3"&trz&"Nazwa blachy 3") stream.write(crlf) Dim coords(2) As Integer for i = 1 To selection1.Count Set element = selection1.Item(i) Dim Params Set Params = document.Part.Parameters Set point = element.Value point.GetCoordinates(coords) Dim name name = Params.GetNameToUseInRelation(point) Dim Splitnametemp Splitnametemp = split(name,"\") Splitname = split(Splitnametemp(3)," an ") 'Msgbox(ubound(Splitname)) stream.write(point.Name&trz&coords(0)&trz&coords(1)&trz&coords(2)&trz&name&trz&Splitname(1)&Splitname(2)) if i <> selection1.Count Then stream.write(crlf) End If
Next stream.close msgbox ("Ready: "&filename&" ") End Sub
Die Spaltenamen sind fix: Code:
stream.write("Point Name"&trz&"X-Coor"&trz&"Y-Coor"&trz&"Z-Coor"&trz&"Parent Name (Set Name)"&trz&"Numer blachy 1"&trz&"Nazwa blachy 1"&trz&"Numer blachy 2"&trz&"Nazwa blachy 2"&trz&"Numer blachy 3"&trz&"Nazwa blachy 3")
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Feb. 2015 07:53 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Wie unterschieden sich die Namen falls es mehrere Bleche gibt?(ggf Beispiele posten) Was willst du davon in die Excel-Tabelle schreiben? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 09. Feb. 2015 08:14 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Wie unterschieden sich die Namen falls es mehrere Bleche gibt?(ggf Beispiele posten) Was willst du davon in die Excel-Tabelle schreiben?Gruß Bernd
Das Beispiel: [i][/`Fuegeinformationen\123.456.789 PartName\SWP\111_222_333 (BLECH 1) an 222_222_222 (BLECH 2) an 333_333_333 (BLECH 3)\Point.4980`i] mein Excel soll so entscheiden, wie im Anhang. Dort ist nur Beispiel fuer "3 Bleche" Fall. Ich muss das flexibel machen. Kann sein dass ubound(Splitname) wird von 2 bis 5 sein. Was denn?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Feb. 2015 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 09. Feb. 2015 08:27 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Und was willst du nun aus dem String extrahieren? Nur "Point.4980"?Gruß Bernd
Nein Jedes Blech-Nummer und jede Blech-Name aus dem GeoName in separat Spalten - wie im Excel Beispiel. Das Problem ist dass ubound(Splitname) kann 2 sein, aber kann auch 5 sein. Und dann
Code:
stream.write(point.Name&trz&coords(0)&trz&coords(1)&trz&coords(2)&trz&name&trz&Splitname(1)&Splitname(2)........&Splitname(ubound(Splitname)))
das soll flexibel sein Oder - zweite Loesung - wenn fuer das Punkt gibt es nur 2 Bleche, dann Splitname(3), Splitname(4), Splitname(ubound(Splitname)) soll null (oder "") geben. [Diese Nachricht wurde von Sylas am 09. Feb. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Feb. 2015 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Sorry, ich hatte deine Tabelle nicht gesehen. Du könntest über eine Schleife (Grenzen "LBound" und "UBound") deinen String zum exportieren ergänzen. Beispiel: Code: Sub Test()Dim InputString As String Dim TempString1 Dim Tempstring2 Dim ExportString As String Dim trz As String Dim coords(2) Dim Pointname As String Pointname = "Bla" coords(0) = 5 coords(1) = 10 coords(2) = 15 trz = ";" InputString = "Fuegeinformationen\123.456.789 PartName\SWP\111_222_333 (BLECH 1) an 222_222_222 (BLECH 2) an 333_333_333 (BLECH 3)\Point.4980" TempString1 = Split(InputString, "\") Tempstring2 = Split(TempString1(3), " an ") ExportString = Pointname & trz & coords(0) & trz & coords(1) & trz & coords(2) For i = LBound(Tempstring2) To UBound(Tempstring2) ExportString = ExportString & trz & Tempstring2(i) Next MsgBox ExportString End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 11. Feb. 2015 11:02 <-- editieren / zitieren --> Unities abgeben:
Halo Bernd Danke fuer deine Tips. Alles funktioniert jetzt super! Edit: Bei ein Part kriege ich eine Meldung, dass Objekt unterstützt diese Eigenschaft oder Methode nicht. Das ist seltsam, weil ich suche nur fuer die Points... Hast du eine Idee wo das Problem liegt? Leider kann ich nicht dieses Datei hier hochladen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Feb. 2015 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 11. Feb. 2015 11:40 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Und wo kommt der Fehler? Bei welchem Objekt? Wie sieht der Code aus?Gruß Bernd
Der Fehler kommt nach Punkte Selektion. Ich habe keine Achnung wie kann ich finden bei welsches selection1.Item(i).Value der Fehler kommt aus. Ich habe bemmerkt, dass wenn ich mit Code: on error resume next
weiter gehe, Punktenanzahl stimmt mit Excel-reiheanzahl Der Code steht unten: Code: Sub CATMain() '_________________________________________ ' Separating char trz = ";" crlf = chr(10) '----------------------------------------- Set document = CATIA.ActiveDocument Set filesys = CATIA.FileSystem '__________________________________________________________________________ ' Filename and path 'on error resume next Dim filefile = Document.Name Dim path Dim Nazwa path = left(Document.FullName,InStrRev(Document.FullName,"\")) pathdummy = left(path,len(path)-1) Nazwa = right(pathdummy,len(pathdummy)-InStrRev(pathdummy,"\")) filename = "Z:\PB_0006-Chropynska_Crafter\11\01\BOMs_and_PointExp\"&Nazwa&"_point_exp.csv" '-------------------------------------------------------------------------- if filesys.FileExists(filename) Then filesys.DeleteFile(filename) End If Set file = filesys.CreateFile(filename,True) Set stream = file.OpenAsTextStream("ForWriting") err=0 Dim selection1 As Selection Set selection1 = document.Selection selection1.clear selection1.Search "((((CATStFreeStyleSearch.Point + CATSketchSearch.2DPoint) + CATDrwSearch.2DPoint) + CATPrtSearch.Point) + CATGmoSearch.Point),all"
if err <> 0 Then msgbox("Didn't find any points!") End If
stream.write("Point Name"&trz&"X-Coor"&trz&"Y-Coor"&trz&"Z-Coor"&trz&"Blachy") stream.write(crlf) Dim coords(2) As Integer msgbox(selection1.count) for i = 1 To selection1.Count Set element = selection1.Item(i) Dim Params Set Params = document.Part.Parameters Set point = element.Value point.GetCoordinates(coords) Dim name name = Params.GetNameToUseInRelation(point) Dim Splitnametemp Splitnametemp = split(name,"\") Splitname = split(Splitnametemp(3)," an ") stream.write(point.Name&trz&coords(0)&trz&coords(1)&trz&coords(2)&trz&Splitnametemp(3)) if i <> selection1.Count Then stream.write(crlf) End If Next stream.close msgbox ("Ready: "&filename&" ") End Sub
Gruß Lukas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.geiger Mitglied Staatl. gepr. Techniker FR. KFZ-Technik
Beiträge: 4 Registriert: 17.02.2015 Catia V5.19 Win7 Prof.
|
erstellt am: 02. Mrz. 2015 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Hallo an alle. Bin neu hier und suche nun schon seit einigen Tagen nach einem passenden Makro für eine Anwendung. Das Skript hier ist soweit ganz gut funktioniert allerdings nur mit Punkten und leider nicht mit Translate oder Intersect... besteht die Möglichkeit das Skript so zu ändern das es egal welche Art ich auswähle mir die Cords in Excel rauschreibt? Benötige die Koordinaten von sich ändernden Punkten um später im MATLAB damit weiter zu arbeiten ohne die Punkte rausmessen und abtippen zu müssen. Würde mich freuen wenn jemand was weiß... Danke
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 02. Mrz. 2015 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Du könntest über die Suche alle Punkte selektieren lassen (siehe hier). Dann die Koordinaten auslesen (ggf über die Measure) und exportieren. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.geiger Mitglied Staatl. gepr. Techniker FR. KFZ-Technik
Beiträge: 4 Registriert: 17.02.2015 Catia V5.19 Win7 Prof.
|
erstellt am: 02. Mrz. 2015 19:32 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Hallo Bernd erstmal danke. Habe das Problem jetzt erstmal anders gelöst. Habe mir auf meine Kopierten Punkte bzw. auf meine Schnittpunkte ein Measure gemacht welches sich automatisch updatet und davon abhängig einen neuen Punkt der sich mit updatet. Nun habe ich aber für das MATLAB ein neues Problem... Ich hätte nun gerne die ausgegebenen Daten so: %%Name %%X Y Z %%Point1 123 456 789 %%Point2 456 789 123 %%Point3 789 123 456 usw... und das ganze am besten gelich in Excel sollte doch eigentlich einfach um zusetzen sein oder? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 02. Mrz. 2015 23:28 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Zitat: Original erstellt von s.geiger: usw... und das ganze am besten gelich in Excel sollte doch eigentlich einfach um zusetzen sein oder?
Klar, aber irgendjemand muss es machen... Also - ist einfach umzusetzen. Wie wäre es, du versuchst dich daran? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.geiger Mitglied Staatl. gepr. Techniker FR. KFZ-Technik
Beiträge: 4 Registriert: 17.02.2015 Catia V5.19 Win7 Prof.
|
erstellt am: 03. Mrz. 2015 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
: ) Ja das würde ich wenn ich nen Plan von VBA hätte bzw. von den ganzen Catia befehlen. Habe weder Bücher noch sonst was. Danke trotzdem muss ich versuchen mir die Befehle zusammen zu googeln... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Entwicklungsingenieur für elektrische Komponenten in der Vorentwicklung (m/w/d) | Wir sind Kromberg & Schubert ? ein international aufgestellter Technologiekonzern mit mittelständischem Hintergrund und über 120-jähriger Firmengeschichte. Engagement, Flexibilität und ständige Innovationen machen uns in der Automobilindustrie zum Bordnetzspezialisten. Unser Erfolgsrezept? Mehr als 50.000 Mitarbeiter an über 40 Standorten weltweit verbinden Optimismus, Spaß an der Arbeit und das Streben nach kontinuierlicher Verbesserung.... | Anzeige ansehen | Entwicklung |
|
s.geiger Mitglied Staatl. gepr. Techniker FR. KFZ-Technik
Beiträge: 4 Registriert: 17.02.2015 Catia V5.19 Win7 Prof.
|
erstellt am: 10. Mrz. 2015 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Hallo nochmal... besteht die Möglichkeit in einem Produkt die Measure anstatt der Punkte im Part auszulesen? Das Problem ist, dass ich ein Achsenkonzept habe, welches in einem Produkt aus mehreren Parts besteht. in dem Produkt ändern sich nun durch verändern der Parameter (Ein / Ausfedern) die losen Punkte der Querlenker in ihrer Position. Diese Positionen sollen ausgelesen werden, ist im Produkt aber leider soweit ich weiß nicht so einfach möglich. Daher meine Idee die Measure auszulesen und als Cords in eine TxT zu schreiben. Meine Ursprüngliche Idee Punkte zu setzen die sich in der Formel auf die Measures beziehen funktioniert im Part aber leider nicht im Produkt. Wäre euch mega dankbar wenn mir jemand ne Lösung hat ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |