Autor
|
Thema: GetCoordinates (12976 mal gelesen)
|
Felsen Mitglied Formenbau
Beiträge: 239 Registriert: 15.06.2004 HP Workstation Z800 3.7GHz 16GB RAM QuadroFX4600 CATIA V5-6 Release 2016
|
erstellt am: 13. Jul. 2005 16:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich bin auf der Suche nach einem Macro, welches mir eine Punkteliste ausgibt (für die Bohrbearbeitung). Hierbei bin ich schon mehrmals auf "GetCoordinates" gestoßen. Leider existieren hier sehr viele Beiträge, welche auch sehr unterschiedliche Macros aufweisen. Ein paar habe ich schon getestet und funktionierten leider nicht :-(. (Liegt wohl an mir?) Vielleicht wäre jemand so nett und würde mir ein funktionierendes zukommen lassen mit einer kurzen Beschreibung dazu, da Macros für mich ziemlich Neuland sind. DANKE! Gruß Felsen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felsen Mitglied Formenbau
Beiträge: 239 Registriert: 15.06.2004 HP Workstation Z800 3.7GHz 16GB RAM QuadroFX4600 CATIA V5-6 Release 2016
|
erstellt am: 13. Jul. 2005 18:42 <-- editieren / zitieren --> Unities abgeben:
Ich bins nochmal. Mein Ziel wäre, über eine Punktewolke ein Fenster legen um somit alle Punkte auf einmal zu selektieren und anschließend die Koordinatren mittels Macro ausgeben lassen. Gibts sowas? Gruß Felsen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LordFuture Mitglied
Beiträge: 21 Registriert: 16.03.2004 V5 R14 (Unix) (nur auf der Arbeit) (ohne Administrative Rechte) (User...)
|
erstellt am: 13. Jul. 2005 20:42 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Da gibts doch ne Catiaeigene Funktion dafür um Punktetabellen zu erstellen. Oder geht es dir mehr darum dies selbst mittels Makro zu relisieren? ------------------ Software is like sex - its better when ist free! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felsen Mitglied Formenbau
Beiträge: 239 Registriert: 15.06.2004 HP Workstation Z800 3.7GHz 16GB RAM QuadroFX4600 CATIA V5-6 Release 2016
|
erstellt am: 13. Jul. 2005 20:47 <-- editieren / zitieren --> Unities abgeben:
|
Florian.Held Mitglied Konstruktiver Spritzer (Konstruktion Spritzguss)
Beiträge: 35 Registriert: 13.07.2005 CATIA R14 SP5 unter WinXP64 und Unix (vbscript)
|
erstellt am: 16. Jul. 2005 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hi, Sub CATMain() Redim aCoord(2) CATIA.ActiveDocument.Part.HybridBodies.Item("Geometrisches Set.1").HybridShapes.Item("Punkt.1").getcoordinates aCoord msgbox acoord(0) & ", " & acoord(1) & ", " & acoord(2) End Sub Damit bekommst du die Koordinaten eines Punktes in ein Array. Ne Schleife für alle Punkte müsstest du ja hinkriegen,oder? ------------------ Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
prosper Mitglied Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5
Beiträge: 86 Registriert: 05.05.2004
|
erstellt am: 16. Jul. 2005 19:54 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hi, ich mach auch mit... Sub CATMain() 'Ein Part muss offen sein, kein Product 'Alle Punkte in "Geometrisches Set.1" werden ausgelesen 'Nur Punkte muss es im Geo Set geben anstonsten lauft das Makro auf Fehler 'Fall es noch ander Features gibt muss man ein TypeName einbauen 'Alle Coordinates werden in acoordinates geschrieben Redim aCoord(2) dim acoordinates() redim acoordinates(0) set oshapes = CATIA.ActiveDocument.Part.HybridBodies.Item("Geometrisches Set.1").HybridShapes For i=1 to oshapes.count oshapes.Item(i).getcoordinates aCoord acoordinates(i-1) = acoord(0) & ", " & acoord(1) & ", " & acoord(2) redim preserve acoordinates(Ubound(acoordinates)+1) Next redim preserve acoordinates(Ubound(acoordinates)-1) End Sub Nun mussen die Coordinates nach Excel. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
prosper Mitglied Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5
Beiträge: 86 Registriert: 05.05.2004
|
erstellt am: 16. Jul. 2005 20:05 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hi, habe das Makro nicht probiert es cgaut aber ungefär so aus. Sub CATMain()
'Ein Part muss offen sein, kein Product 'Alle Punkte in "Geometrisches Set.1" werden ausgelesen 'Nur Punkte muss es im Geo Set geben anstonsten lauft das Makro auf Fehler 'Fall es noch ander Features gibt muss man ein TypeName einbauen 'In c:\temp\output.csv werden die Coord geschrieben. Dies Datei kannst du unter Excel aufmachen 'Ich finde CSV besser, weil es einfacher ist und, weil es System unabhängig ist Redim aCoord(2)
Set Datei = CATIA.FileSystem.CreateFile (c:\temp\output.csv, True) Dim ostream as TextStream Set ostream = Datei.OpenAsTextStream ("ForAppending") set oshapes = CATIA.ActiveDocument.Part.HybridBodies.Item("Geometrisches Set.1").HybridShapes For i=1 to oshapes.count oshapes.Item(i).getcoordinates aCoord ostream.Write(acoord(0) & ";" & acoord(1) & ";" & acoord(2) & Chr(10)) Next
ostream.close End Sub Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felsen Mitglied Formenbau
Beiträge: 239 Registriert: 15.06.2004 HP Workstation Z800 3.7GHz 16GB RAM QuadroFX4600 CATIA V5-6 Release 2016
|
erstellt am: 19. Jul. 2005 14:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Florian, Hallo Prosper, danke für Eure Hilfe. Ich habe da aber noch ein paar Fragen: 1. In prospers Version 1 läuft das Macro, nur wo schreibt er die Koordinaten hin 2. In prospers Version 2 läuft es leider nicht. Es bleibt bei "Set Datei = CATIA.FileSystem.CreateFile (c:\temp\output.csv, True)" leider stehen. Was kann hier noch fehlen? Wie schon gesagt mit Macroprogrammierung ist es bei mir leider noch nicht weit her. Trotzdem Danke! Gruß Felsen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
prosper Mitglied Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5
Beiträge: 86 Registriert: 05.05.2004
|
erstellt am: 20. Jul. 2005 19:27 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo Felsen, habe das Makro "on the fly" programmiert deswegen. Probiere es doch einfach mal mit: Set Datei = CATIA.FileSystem.CreateFile ("c:\temp\output.csv", True) Ein folder C:\temp muss es aber geben... Viel Spass! Gruss Prosper Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian.Held Mitglied Konstruktiver Spritzer (Konstruktion Spritzguss)
Beiträge: 35 Registriert: 13.07.2005 CATIA R14 SP5 unter WinXP64 und Unix (vbscript)
|
erstellt am: 23. Jul. 2005 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Jo, kanns jetzt auch net testen aber schließe mich Prosper an. Um die Anfürhungszeichen wirst du auf keinen Fall rum kommen! Ich zieh mir trotzdem mal des Script und lass es Montag mal laufen! PS: Nicht vergessen dass es 2 unterschiedliche Scripte sind! Version 1 ermittelt die Coordinates und Version 2 speichert diese in eine csv-Datei, sprich du brauchst beide Scripte von Prosper! ------------------ Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia... [Diese Nachricht wurde von Florian.Held am 23. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian.Held Mitglied Konstruktiver Spritzer (Konstruktion Spritzguss)
Beiträge: 35 Registriert: 13.07.2005 CATIA R14 SP5 unter WinXP64 und Unix (vbscript)
|
erstellt am: 29. Jul. 2005 19:53 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hi, erstmal sorry war ein ziemlich blödes gelaber von mir, natürlich ist dass zweite Script von Prosper ein vollwertiger ersatz fürs erste. Ich habs außerdem mal laufen lassen unter R12 und R14, hat beides mal gefunzt ohne Probleme (Mit dem Pfad zur besthenden csv-*Datei in Anfürhungszeichen). Sprich mit dieser Modifikation müsste es geklappt haben, odeR? Nun aber noch ne Frage von mir: Ich wollte dass Script umbauen damit man den geöffneten Körper mit der Punktewolke im Baum selektieren kann und net an eine feste bezeichnung gebunden ist. Dazu folgendes Makro (Von Prosper Modifiziert): Sub CATMain() 'Ein Part muss offen sein, kein Product 'Alle Punkte in "Geometrisches Set.1" werden ausgelesen 'Nur Punkte muss es im Geo Set geben anstonsten lauft das Makro auf Fehler 'Fall es noch ander Features gibt muss man ein TypeName einbauen 'In c:\temp\output.csv werden die Coord geschrieben. Dies Datei kannst du unter Excel aufmachen 'Ich finde CSV besser, weil es einfacher ist und, weil es System unabhängig ist ' Was soll selektierbar sein Dim EnableSelectionFor(0) EnableSelectionFor(0) = "Bodies" ' Selektion definieren und leeren -------------------------------------------------- Set sSEL = CATIA.ActiveDocument.Selection sSEL.Clear UserSelection = sSEL.SelectElement(EnableSelectionFor, "Bitte geoeffneten Koerper mit Punktewolke selektieren", True) ' Auswertung ob Selektion erfolgreich ----------------------------------------------- If UserSelection <> "Normal" Then MsgBox "Fehler bei der Auswahl des Koerpers der Punktwolke" Exit Sub End If ReDim acoord(2) Set Datei = CATIA.FileSystem.CreateFile("/home/held/getcoord.txt", True) Set ostream = Datei.OpenAsTextStream("ForAppending") Set oshapes = CATIA.ActiveDocument.Part.HybridBodies.Item("OpenBodie1").HybridShapes For i = 1 To oshapes.Count oshapes.Item(i).getcoordinates acoord ostream.Write (acoord(0) & ";" & acoord(1) & ";" & acoord(2) & Chr(10)) Next ostream.Close End Sub OK, soweit funzt alles und ich kann eine Körper auswählen und in CATIA.ActiveDocument.Selection.Item(1).Value speichern, aber wie muss ich die folgende Zeile abändern: CATIA.ActiveDocument.Part.HybridBodies.Item("OpenBodie1").HybridShapes damit nicht mehr OpenBodie1 verwendet wird sondern der eben selektierte? Wenn mir dies jemand verraten kann wäre ich sehr dankbar! ------------------ Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hammax Mitglied Dipl.Ing.TU Masch.Bau
Beiträge: 180 Registriert: 17.01.2002 privat: AutoCAD, Inventor AIS5.3 dienstl.: CATIA V5R12SP5
|
erstellt am: 31. Jul. 2005 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
..prosper schreibt weiter oben, dass er unter .csv abspeichert. Da csv jedoch "comma separated values" bedeutet habe ich im DE -Sprachraum Probleme mit der Formatierung, da Tabellenspalten u.a. auf die Dezimalkommas gelegt werden. So schön CSV wäre, da ich es direkt mit Excel öffnen kann - ich muß leider bei .txt bleiben und mit sendto arbeiten. Gibts da ein Workaround? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
prosper Mitglied Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5
Beiträge: 86 Registriert: 05.05.2004
|
erstellt am: 01. Aug. 2005 20:15 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo Florian, probier es doch einfach so: Sub CATMain() 'Ein Produkt kann offen sein, die LokaleCoordinates im Part werden exportier 'Alle Punkte in "Geometrisches Set.1" werden ausgelesen 'Nur Punkte muss es im Geo Set geben anstonsten lauft das Makro auf Fehler 'Fall es noch ander Features gibt muss man ein TypeName einbauen 'In c:\temp\output.csv werden die Coord geschrieben. Dies Datei kannst du unter Excel aufmachen 'Ich finde CSV besser, weil es einfacher ist und, weil es System unabhängig ist ' Was soll selektierbar sein Dim EnableSelectionFor(0) EnableSelectionFor(0) = "HybridBody" ' Selektion definieren und leeren -------------------------------------------------- Set sSEL = CATIA.ActiveDocument.Selection sSEL.Clear UserSelection = sSEL.SelectElement(EnableSelectionFor, "Bitte geoeffneten Koerper mit Punktewolke selektieren", False) ' Auswertung ob Selektion erfolgreich ----------------------------------------------- If UserSelection <> "Normal" Then MsgBox "Fehler bei der Auswahl des Koerpers der Punktwolke" Exit Sub Else Set ohybridbody = sSEL.Item(1).Value End If ReDim acoord(2) Set Datei = CATIA.FileSystem.CreateFile("/home/held/getcoord.txt", True) Set ostream = Datei.OpenAsTextStream("ForAppending") Set oshapes = ohybridbody.HybridShapes For i = 1 To oshapes.Count oshapes.Item(i).GetCoordinates acoord ostream.Write (acoord(0) & ";" & acoord(1) & ";" & acoord(2) & Chr(10)) Next ostream.Close End Sub Gruss, und viel Spass damit!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian.Held Mitglied Konstruktiver Spritzer (Konstruktion Spritzguss)
Beiträge: 35 Registriert: 13.07.2005 CATIA R14 SP5 unter WinXP64 und Unix (vbscript)
|
erstellt am: 03. Aug. 2005 11:48 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Dabnke Prosper werd ich gleich mal testen.. Bezüglich CSV: Man kann dem Makro auch sagen mach des in eine *.txt. Im Prinzip macht des Makro eh nix anderes wie den "Text" welcher mit den Koordinaten erstellt wird als Text in eine Datei zu schreiben. Ob es eine *.csv oder *.txt datei ist dem Makro egal, bei beiden dateien hast du ausgabetechnisch dass gleiche ergebniss. Befehl: acoord(0) & ";" & acoord(1) & ";" & acoord(2) & Chr(10) Erzeugt folgenden Text der in die Datei geschrieben wird (Die Buchstaben sind selbstversändlich eine Kommazahl nämlich die Koordinate des Punktes von Catia): X.XX; Y.YY; Z.ZZ Wenn der Punkt in den Koordinaten ein Problem darstellt musst du den eben erzeugten Text in eine Variable Packen: textfuerdatei = acoord(0) & ";" & acoord(1) & ";" & acoord(2) & Chr(10) und mit einem String-Befehl alle Punkte in diesem String durch kommas ersetzen weil ja Catia die Zahl mitsammt Dezimalpunkt erzeugt. Folgender Befehl: textfuerdatei = replace(textfuerdatei, "."; ",") müsste aus dem Text: X.XX; Y.YY; Z.ZZ folgenden Text machen: X,XX; Y,YY; Z,ZZ Hoffe des hilft und ihr verteufelt mich nicht weil ichs mal wieder zu ausführlich erklärt hab aber des hab ich mir hier in der Firma angewöhnt alles überausführlich zu erklären ;-) Bis bald dann erstmal! ------------------ Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian.Held Mitglied Konstruktiver Spritzer (Konstruktion Spritzguss)
Beiträge: 35 Registriert: 13.07.2005 CATIA R14 SP5 unter WinXP64 und Unix (vbscript)
|
erstellt am: 05. Aug. 2005 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hi, also des Selektieren des Geöffneten Körpers mit den Punkten funktioniert super! Ich werd zwar aus den Selektionen bzw. Objekten noch net ganz schlauc hab aber jetzt zumindest mal ne funktionierende Variante zum learning by doing. Danke für deine/eure Hilfe! ------------------ Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hammax Mitglied Dipl.Ing.TU Masch.Bau
Beiträge: 180 Registriert: 17.01.2002 privat: AutoCAD, Inventor AIS5.3 dienstl.: CATIA V5R12SP5
|
erstellt am: 10. Aug. 2005 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
...dieser Makro ist ein echter Dauerbrenner und sollte m.E. fortlaufend und nachvollziehbar verbessert werden. Jedesmal, wenn er in Vergessenheit geraten ist, hat man Anfangsschwierigkeiten mit der Punkteauswahl. Entweder er geht in Skizzen nicht (2D) oder die angewählte Punktsorte ist kein verwertbarer Punkt usw. Aber der wird noch - "vieles ein Weniges gibt viel". Ich brauche das Ding z.B. zur Erstellung von Primitiv-NC-Programmen in Excel. Danke allen, die daran schon mitgemacht haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian.Held Mitglied Konstruktiver Spritzer (Konstruktion Spritzguss)
Beiträge: 35 Registriert: 13.07.2005 CATIA R14 SP5 unter WinXP64 und Unix (vbscript)
|
erstellt am: 11. Aug. 2005 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Ist eigentlich ne Gute Idee! Ich baue momentan ein Makro wo den Strukturbaum abbildet (z.B. als Textdatei) wo ich so meine Probleme hab aber wenn ich in Sachen GetCoordinates mal wieder was mache werd ichs in diesen Beitrag mailen! PS: Danke für dass Script hammax ------------------ Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cwillmann Mitglied PLM-Berater
Beiträge: 1487 Registriert: 17.03.2001
|
erstellt am: 04. Jul. 2006 19:46 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo, Frage zur Erweiterung des - wirklich klasse - Makros: Es sollen Messpunkte aus Bauteilen in einer Produktstruktur ausgegeben werden, bezogen auf das Absolute 3D Referenzachsensystem. Die Funktion "Coordinate Dimension Table" im Drafting macht dies im Prinzip, aber nur non-assoziativ. Irgendwelche Chancen diesbezüglich?? ------------------ Grüße, Christian Willmann --- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 05. Jul. 2006 00:54 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo cwillmann, natürlich kann man Punkte aus beliebigen Parts in einer Struktur zum "Struktur-Null" berechnen, die Frage ist allerdings: "Was ist Dein Ziel?" Die reine Berechnung ist kein Hexenwerk, da liefert DS die Ideen schon mit aus, z.B. im Beispiel-Script 'DMUCopyPasteKeepAbsolutePostition.CATScript'. Ein bisschen Nacharbeit, und Du kannst die Messpunkte ausgeben, aber ASSOZIATIV...??? mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cwillmann Mitglied PLM-Berater
Beiträge: 1487 Registriert: 17.03.2001 Job: die 'big three' in CAD & PDM - aber nicht (mehr) täglich!
|
erstellt am: 05. Jul. 2006 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo Lusilnie, besten Dank für den Tipp, das Makro habe ich bislang übersehen. Es reicht mir per Makro die aktuellen Koordinaten der Punkte in ein csv zu schreiben, welches ich dann ich die Zeichnungstabelle einfügen. Finde ich weniger aufwändig, als in regelmäßigen Abständen die Punkte auf der Zeichnung zu selektieren und die Coord. Dim. Table erneut zu generieren, da diese "dumm" ist. ------------------ Grüße, Christian Willmann --- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cwillmann Mitglied PLM-Berater
Beiträge: 1487 Registriert: 17.03.2001
|
erstellt am: 08. Aug. 2006 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo zusammen, ich habe Probleme bei der Erweiterung des Makros (bin auch überhaupt kein Profi in diesem Gebiet). Reicht die Funktion "GetAbsPosition" aus dem Beispielmakro aus? Wie erfolgt das eigentliche Aufsummieren zusammen mit den Punktekoordinaten in den eingebauten Komponenten: Mache ich das am besten schrittweise (direkt nach dem Punktauslesen) oder in einer separaten Funktion? Vielen Dank! ------------------ Grüße, Christian Willmann --- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 09. Aug. 2006 00:04 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo cwillmann, wenn Du vom Root-Product ausgehst, erfolgt das "Aufsummieren" innerhalb des "Durchhangelns" zum Part (rekursive Schleife). Da wird immer die Positionsmatrix des aktuell abzuarbeitenden Products(Parts) mit der bisher erzeugten Matrix "mutlipliziert" (Matrix-Product), wobei dies keine wirkliche Multiplikation ist. Somit ist Deine Positions-Matrix immer die aktuell zum Root-Product. Dann noch die Punkt-Matrix (Punkt-Koordinaten im Part) damit "multiplizieren" und Du hast die absoluten Punkt-Koordinaten im Root-Product. D.H. Du solltest die letzte beschrieben Berechnung auf alle Fälle noch in dem Part machen, wo Du die Punkte ausliest, ob nach jedem Punkt oder nach allen pro Part ist dann Deinem Geschmack überlassen! Soweit zur Theorie! Falls Du noch weitere Detail-Fragen hast, poste einfach noch mal! mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cwillmann Mitglied PLM-Berater
Beiträge: 1487 Registriert: 17.03.2001 Job: die 'big three' in CAD & PDM - aber nicht (mehr) täglich!
|
erstellt am: 09. Aug. 2006 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo Lusilnie, vielen Dank für den Input! Leider verwirrt mich der Tipp mangels Skript-Erfahrung (welche bisher auf Aufzeichnen/Abändern/Verstehen beschränkt ist). Wollte auf Basis eines solchen Problems (Welches nicht direkt mit "CATIA-Klick-Funktionen" zu lösen ist) mir die Makrothematik mal näher anschauen, schätze diese aber nun als "Fortgeschritten" ein. Ich suche mir was leichteres, da mich rekursive Schleifen auf jetzigem Stand überfordern. ------------------ Grüße, Christian Willmann --- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lohri Mitglied BA-Student
Beiträge: 14 Registriert: 06.07.2006 Catia V5 R16
|
erstellt am: 17. Jul. 2007 11:29 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo, kann bitte jemand sagen, wie ich die Punkt-Koordinaten aus einem Skizzierer auslesen kann? Im der Automation.chm fand ich nur Befehle zum Ansteuern von 3D-Punkten bzw. unter Object Sketch sind nur Methoden zum Punkt erzeugen zu finden. Hier mal mein Testprogramm, um zumindest mal die Skizze anzusprechen:
Sub CATMain()Dim D As Document Set D = CATIA.ActiveDocument Dim P As Part Set P = D.Part Dim Skizzen As Sketches Set Skizzen = P.Bodies.Item("Hauptkörper").Sketches MsgBox (Skizzen.Item(1).Name) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lohri Mitglied BA-Student
Beiträge: 14 Registriert: 06.07.2006 Catia V5 R16
|
erstellt am: 18. Jul. 2007 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hallo, manchmal sollte man echt nochmal ne Nacht drüber schlafen. Ich habs jetzt:
Sub CatMain()Dim coord(1) Dim coordBox() Dim GeoElem As GeometricElements Set GeoElem = CATIA.ActiveDocument.Part.Bodies.Item("Hauptkörper").Shapes.Item(1).Sketch.GeometricElements Dim sMsgBox As String ReDim coordBox(1, GeoElem.Count) For i = 1 To GeoElem.Count If GeoElem.Item(i).GeometricType = (2) Then GeoElem.Item(i).GetCoordinates (coord) coordBox(0, i) = coord(0) coordBox(1, i) = coord(1) sMsgBox = sMsgBox & Chr(10) & Chr(13) & "x-Koordinate = " & coord(0) & Chr(10) & Chr(13) & "y-Koordinate = " & coord(1) End If Next MsgBox (sMsgBox) End Sub
Gruß lohri Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felsen Mitglied Formenbau
Beiträge: 239 Registriert: 15.06.2004 HP Workstation Z800 3.7GHz 16GB RAM QuadroFX4600 CATIA V5-6 Release 2016
|
erstellt am: 04. Jul. 2008 14:18 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, als Verursacher dieser Diskussion hätte ich gerne nochmal nachgefragt, was jetzt so der letzte Stand dieses Macros wäre. Es sind so viele Vorschläge und Verbesserungen/Erweiterungen eingegangen. Gibt es so etwas wie einen Endstand? Wenn ja, könnte ich den haben? Gruß Felsen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 57 Registriert: 24.04.2018 Catia V5 R29 SP3 | Windows 10 Pro
|
erstellt am: 18. Jul. 2019 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Sorry dass ich so einen alten Beitrag rauskrame, aber ich häng gerade etwas fest - Makro Anfänger halt Ich will eine Skizze in meinem Part selektieren (egal ob in einem Körper oder in einem GeoSet) und mir alle scharfen Punkte aus dieser Punktskizze in ein Array speichern lassen. Code: '--- Punktskizze auswählen --- Dim Punktskizze As GeometricElementsMsgBox("Bitte die Punktskizze auswählen.") Dim SketchFilter() ReDim SketchFilter(0) UserSelection.Clear SketchFilter(0)="Sketch" selSkizze=UserSelection.SelectElement2(SketchFilter,"Bitte die Punktskizze auswählen.",True) If selSkizze="Normal" Then Set Punktskizze = UserSelection.Item(1).GeometricElements Else MsgBox ("Fehler falsche Auswahl - Bitte Körper wählen") End If Dim Punktewolke() ReDim Punktewolke (Punktskizze.Count) For i = 1 To Punktskizze.Count If Punktskizze.Item(i).GeometricType = (2) Then 'Checkt ob Punktein Skizze sind - Nummer 2 Set Punktewolke(i) = Punktskizze.Item(i).Value End If Next
Leider kommt bei
Code: Set Punktskizze = UserSelection.Item(1).GeometricElements
ein Fehler. Woran liegt das? 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: 18. Jul. 2019 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Servus Wie wäre es mit: Code: Set Punktskizze = UserSelection.Item(1).Value.GeometricElements
Gruß Bernd PS: "Punktskizze" finde ich einen unpassenden Variablennamen (beim späteren ändern/nachvollziehen), da es sich nicht um die Skizze sondern um die geometrischen Elemente der Skizze handelt ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 57 Registriert: 24.04.2018 Catia V5 R29 SP3 | Windows 10 Pro
|
erstellt am: 18. Jul. 2019 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Danke klappt. Bin fast am Ziel...aber gibt noch ein Problem Code: Sub CATMain()Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim GeoSet As HybridBody Dim UserSelection As Object Set UserSelection = partDocument1.Selection UserSelection.clear Dim Origin As Reference Dim GeoContainer As GeometricElements Dim intAxisSystemsObj As AxisSystems Dim RefAchse as AxisSystem Dim X_Achse (2) Dim Y_Achse (2) Dim Z_Achse (2) Dim selAchse As String Dim selSkizze As String
'--- Referenzachse auswählen --- 'MsgBox("Bitte das Achsensystem anklicken, auf welches sich die Koordinaten beziehen sollen!") Dim AXSFilter() ReDim AXSFilter(0) UserSelection.Clear AXSFilter(0)="AxisSystem" selAchse=UserSelection.SelectElement2(AXSFilter,"Bitte das Achsensystem anklicken,auf welches sich die Koordinaten beziehen sollen",True) If selAchse="Normal" Then Set RefAchse=UserSelection.Item2(1).Value Else MsgBox ("Fehler falsche Auswahl - Bitte Körper wählen") End If 'RefAchse.GetOrigin Ursprung RefAchse.GetXAxis X_Achse RefAchse.GetYAxis Y_Achse RefAchse.GetZAxis Z_Achse '--- Punktskizze auswählen --- 'MsgBox("Bitte die Punktskizze auswählen.") Dim SketchFilter() ReDim SketchFilter(0) UserSelection.Clear SketchFilter(0)="Sketch" selSkizze=UserSelection.SelectElement2(SketchFilter,"Bitte die Punktskizze auswählen.",True) If selSkizze="Normal" Then Set GeoContainer = UserSelection.Item(1).Value.GeometricElements Else MsgBox ("Fehler falsche Auswahl - Bitte Skizze wählen") End If Dim Punktewolke() For i = 1 To GeoContainer.Count If GeoContainer.Item(i).GeometricType = (2) Then 'Checkt ob Punkte in Skizze sind - Nummer 2 ReDim Punktewolke (y) Set Punktewolke(y) = GeoContainer.Item(i) y = y+1 End If Next '--- Methode --- For i = 0 to UBound(Punktewolke) Set Origin = CreateReferenceFromObject(Punktewolke(i)) '--- ACHSENSYSTEM ERSTELLEN Set intAxisSystemsObj = part1.AxisSystems Set gen_Axis = intAxisSystemsObj.Add gen_Axis.OriginType = 0 'catAxisSystemOriginByPoint gen_Axis.OriginPoint = Origin gen_Axis.XAxisType = 1 'atAxisSystemAxisByCoordinates gen_Axis.PutXAxis X_Achse gen_Axis.YAxisType = 1 'catAxisSystemAxisByCoordinates gen_Axis.PutYAxis Y_Achse gen_Axis.ZAxisType = 1 'catAxisSystemAxisByCoordinates gen_Axis.PutZAxis Z_Achse gen_Axis.Name = CStr("Achse_" & Punktewolke(i)) Next part1.update end sub
Dieses Makro soll Achsen auf einer Punktskizze erzeugen (mit der gleichen Ausrichtung des RefAchsensystems). Bei Zeile 93 gibt es jedoch einen Typenkonflikt Code: Set Origin = CreateReferenceFromObject(Punktewolke(i))
Ich gehe davon aus, dass in dem Punktewolke Array jetzt die einzelnen Punkte der Skizze drin sind (Point.1 etc) Wo genau liegt hier der Fehler?
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: 18. Jul. 2019 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Servus Folgendes ist mir aufgefallen: - y hat keinen Anfangswert. Was passiert beim ersten Durchlauf? Ist da der Array schon dimensioniert?
- beim ReDim fehlt das Preserve, somit wird der Array immer geleert
- müsste wohl part1.CreateReferenceFromObject heißen
- vermutlich müsstest du per BREP die Reference bilden (oder über die Selektion)
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 57 Registriert: 24.04.2018 Catia V5 R29 SP3 | Windows 10 Pro
|
erstellt am: 19. Jul. 2019 07:32 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Hab jetzt BRep und per Selektion ausprobiert, aber er sagt mir in beiden Fällen, dass die Methode OriginPoint fehlgeschlagen ist... BRep:
Code: Dim Punktewolke() y = 0 For i = 1 To GeoContainer.Count If GeoContainer.Item(i).GeometricType = (2) Then 'Checkt ob Punkte in Skizze sind - Nummer 2 ReDim Preserve Punktewolke (y) Set Punktewolke(y) = GeoContainer.Item(i) y = y + 1 End If Next '--- Methode --- For i = 0 to UBound(Punktewolke) Set Origin = part1.CreateReferenceFromBrepName(Vertex, Punktewolke(i)) '--- ACHSENSYSTEM ERSTELLEN Set intAxisSystemsObj = part1.AxisSystems Set gen_Axis = intAxisSystemsObj.Add gen_Axis.OriginType = 0 'catAxisSystemOriginByPoint gen_Axis.OriginPoint = Origin gen_Axis.XAxisType = 1 'atAxisSystemAxisByCoordinates gen_Axis.PutXAxis X_Achse gen_Axis.YAxisType = 1 'catAxisSystemAxisByCoordinates gen_Axis.PutYAxis Y_Achse gen_Axis.ZAxisType = 1 'catAxisSystemAxisByCoordinates gen_Axis.PutZAxis Z_Achse gen_Axis.Name = CStr("Achse_" & Punktewolke(i)) Next
Selection: Code: '--- Methode ---For i = 0 to UBound(Punktewolke) UserSelection.Clear Userselection.add Punktewolke(i) Set Origin = part1.CreateReferenceFromObject(Userselection.Item(1).Value)
Und dann hab ich es mal genau so deklariert wie in der V5 Hilfe
Code: For i = 0 to UBound(Punktewolke)Set Origin = part1.CreateReferenceFromGeometry(Punktewolke(i))
Klappt aber alles nicht. Im Array 0 befindet sich Point.1, sollte also passen laut meinem Verständis...
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: 19. Jul. 2019 19:02 <-- editieren / zitieren --> Unities abgeben: Nur für Felsen
Servus Ich befürchte du musst dir den BREP-String zusammensetzen. Die Makroaufzeichnung liefert zB folgenden: Code: Set reference1 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;3);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)
Der fett-markierte "Parameter" scheint ein Zähler für die geometrischen Elemente in der Skizze zu sein. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |