Autor
|
Thema: Aus Polylinie Koordinaten der Punkte auslesen (7688 mal gelesen)
|
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 13. Sep. 2004 17:07 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin noch relativ unerfahren im Makroprogrammieren und hab da ein kleines Problem. Ich möchte aus einer Polylinie mit 4 Punkten die Koordinaten der Punkte auslesen, die einzelnen Werte verändern und dann wieder zurückschreiben. Am liebsten wäre es mir die Koordinaten in eine Textdatei zu schreiben, damit ich sie auch für andere Sachen (z.B. Koordinatentabelle) noch verwenden kann. Vielen Dank schon mal, Gruß, Marco
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: 14. Sep. 2004 06:39 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 14. Sep. 2004 10:28 <-- editieren / zitieren --> Unities abgeben:
Ja, danke, das hilft mir schon sehr viel weiter. Jetzt würde ich das ganze nur gerne für den Anwender noch komfortabler machen. Das heißt ich möchte nicht die einzelnen Punkte markieren, sondern die Polylinie und mein Makro soll selbst erkennen welche Punkte darin sind. Noch besser wäre es sogar, wenn das Makro automatisch, ohne vorheriges Auswählen, die Polylinie erkennt. Normalerweise ist sichergestellt, dass es in meinem Part nur eine Polylinie gibt. Hat da jemand eine Idee? Vielen Dank, Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 14. Sep. 2004 16:19 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo Marco, ich würde es wie folgt machen: 'Wenn der Name der Polylinie bekannt ist, dann Dim oPart As Part Set oPart = CATIA.ActiveDocument.Part Dim oPolyLine As HybridShapePolyline Set oPolyLine = oPart.FindObjectByName("Name_der_Polylinie") 'oder auswählen lassen Dim oSelection 'As Selection Dim aSel(0) aSel(0) = "HybridShapePolyline" Set oSelection = oDoc.Selection oSelection.SelectElement2 aSel, "Polylinie auswählen", False Set oPolyLine = oSelection.Item(1).Value 'Danach Schleife aufbauen und Punktkoordinaten auslesen Dim i As Long Dim P_X, P_Y, P_Z As Double Dim oPolyLineElement As HybridShapePointCoord 'Objekt auf Punkt der Polylinie Dim oRefPolyLineElement As Reference 'Referenz auf Punkt der Polylinie Dim oElementRadius As Length For i = 1 To oPolyLine.NumberOfElements oPolyLine.GetElement i, oRefPolyLineElement, oElementRadius Set oPolyLineElement = oPart.FindObjectByName(oRefPolyLineElement.DisplayName) P_X = oPolyLineElement.X.Value P_Y = oPolyLineElement.Y.Value P_Z = oPolyLineElement.Z.Value 'Anstelle die Werte auszulesen, kann man diese auch setzen 'oPolyLineElement.X.Value = 100.0 usw. 'Hier noch die Schreiboperation in Datei einfügen Next i Ich hoffe, es ist verständlich, ansonsten nochmal posten.
Gruss Steffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 14. Sep. 2004 17:04 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank erst mal, du hast mir wirklich weitergeholfen. Ich mußte zwar noch ein bisschen was abändern, aber das Makro läuft. Ich bekomme aber leider noch die falschen Werte heraus. Ich lasse mir zur Kontrolle die Koordinaten ausgeben, aber die sind alle falsch. Außerdem möchte ich mir den Radius noch ausgeben lassen, weiß aber nicht genau wie. Hast du eine Idee? Danke, Marco For i = 1 To oPolyLine.NumberOfElements oPolyLine.GetElement i, oRefPolyLineElement, oElementRadius Set oPolyLineElement = oPart.FindObjectByName(oRefPolyLineElement.DisplayName) oPolyLineElement.GetCoordinates Koord P_X = Koord(0) P_Y = Koord(1) P_Z = Koord(2) MsgBox ("x=" & P_X & "y=" & P_Y&"z="&P_Z) Next Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 14. Sep. 2004 17:18 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo, der Radius steckt im Length-Objekt 'oElementRadius'. Den Wert kann man mit .Value abfragen. Die Art der Abfrage der Koordinaten hängt von der Art der Punkte ab, über die die Polylinie erzeugt wurde. In Meinem Fall wurde die Polyline über Koordinatenpunkte erzeugt. Für beliebige Punkte gibt es die GetCoordinates-Methode, die du ja auch verwendet hast. Warum falsche Koordinatenwerte herauskommen, kann ich nicht sagen. Das ganze funktioniert aber nur, wenn keine Scheitelpunkte für die Definition verwendet werden, da dann die Referenz auf ein Vertex-Element verweist, dessen Koordinaten, glaube ich, nicht ermittelbar sind. Gruss Steffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 15. Sep. 2004 10:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, das mit dem Radius hatte ich sogar schon hinbekommen. Ich hatte nur zuerst den Fehler gemacht den Radius ohne weitere Bedingung direkt in der Schleife abzufragen. Einen Radius kann ich aber erst beim zweiten Punkt der Polylinie abfragen. Dieses Problem hab ich also gelöst. Dafür hab ich jetzt ein anderes. Wie schon gesagt bekomme ich nicht die richtigen Koordinaten der Punkte ausgegeben. Das liegt daran, dass z.B. die Punkte "Point.1", "Point.2" usw. gesucht und die Koordingten ausgelesen werden. In meinem Part gibt es aber noch mehr Punkte die den selben Namen besitzen, z.B. in verschiedenen Skizzen. Gibt es eine Möglichkeit anzugeben, dass ich nur die Koordinaten der Punkte der Polylinie will und nicht die mit dem Namen "Point.1" etc? Vielen Dank, Gruß, Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bartleby Mitglied
Beiträge: 102 Registriert: 17.06.2004 Win XP V5R12 SP3, SP5 Win 2000 SP4 V5R12 SP3
|
erstellt am: 15. Sep. 2004 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo alf3k, Wenn die Punkte deiner Polylinie "direkte Kinder" der Polylinie sind dann gehts einfach mit der Suche nach der Polylinie und dann nach den Punkten in der Polylinie aber wenn die Punkte irgendwo anders in einem open Body hängen und der Punkt in der Polylinie nur eine Referenz ist dann wirds schwierig. Dann kommst Du nur noch über Polylinie.value.Parent.item(..)[Point]ran und das ist knifflig sel muss polylinie sein polylinie(n) suchen und item für item oder selektieren lassen mit selectelement2 Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = partDocument1.Selection selection1.Search "((((CATStFreeStyleSearch.Point + CATSketchSearch.2DPoint) + CATDrwSearch.2DPoint) + CATPrtSearch.Point) + CATGmoSearch.Point),sel" End Sub MfG Ronny
[Diese Nachricht wurde von Bartleby am 15. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 16. Sep. 2004 12:41 <-- editieren / zitieren --> Unities abgeben:
|
chris3004 Mitglied Student
Beiträge: 3 Registriert: 01.04.2005
|
erstellt am: 07. Apr. 2005 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo, ist es möglich ein solches Makro analog für Splines zu erstellen? Oder ist dies aufgrund der Definition (erzeugung) von Splines in Catia nicht möglich? Mein Problem ich möchte auch Punkte des Splines auslesen die zwischen den Punkten liegen mit denen ich den Spline definiert habe. Grüße Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ladde2008 Mitglied
Beiträge: 10 Registriert: 21.04.2008
|
erstellt am: 06. Mai. 2008 14:04 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
pgmuer Mitglied
Beiträge: 111 Registriert: 22.01.2002 Catia V5 R18 Sp8 Catia V5 R19 Sp6
|
erstellt am: 18. Feb. 2009 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo zusammen Ich möchte das Thema auch noch einmal aufwärmen.. Ich habe ebenfalls das Problem, dass zur Erzeugung der Polylinie Vertexe verwendet werden. Werte ich die Punkte der Polylinie aus, so erhalte ich für X,Y,Z -> 0,0,0 Gibt es da wirklich keine Möglichkeit die Stützpunkte einer Polylinie (egal welcher Art) auszuwerten? Gruss Philipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRo Mitglied Skript-Student
Beiträge: 26 Registriert: 07.11.2007 V5R17
|
erstellt am: 23. Feb. 2009 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
ich hatte glaub mal ein aehnliches problem. meine loesung war auf die vertexe einen 'einfachen' (HybridShapePointCoord) draufzusetzen (also mit koordinaten 0,0,0 und referenz zu dem vertex), dann die koordinaten des neuen punktes auslesen (geht mit der SPAWorkbench prima) und den punkt wieder zu loeschen. ist nicht die feinste art, aber ich hatte fuer meinen fall keine bessere loesung gefunden. ------------------ no milk today... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Elsass-Franz Mitglied CAD Administrator
Beiträge: 26 Registriert: 16.03.2006 V5R19
|
erstellt am: 07. Mrz. 2009 01:21 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo alf3k. Ich habe in diesem Forum nach einer moeglichkeit gesucht, Geometrie Daten einer Polyline auszulesen, und bin auf deinen Beitrag gestossen. Ich habe unter v4, ein IUA Programm geschrieben, dass solche Daten ausliesst, und in ein Textfile schreibt. Da unsere Firma jetzt (endlich) auf V5 ungestiegen ist, und da Ich keine Ahnung von CATScript, oder VBscript habe, wollte Ich wissen ob Du mir dein Programm zukommen lassen wuerdest ? Im vorraus danke. Elsass-Franz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |