Autor
|
Thema: Offset von Punkten automatisieren (1493 mal gelesen)
|
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009
|
erstellt am: 30. Jan. 2012 11:48 <-- editieren / zitieren --> Unities abgeben:
Hallo, Programmierfreunde! Ist es möglich für eine vorhandenes geometrisches Set alle Punkte die darin enthalten sind mit einem vorgegebenen Offset in X und Y zu verrechnen? Oder muss ich dies über eine Schleife über alle Punkte einzeln hinweg tun? ------------------ Arbeit zieht immer Arbeit nach sich! 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: 30. Jan. 2012 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
Servus IMHO kommst du um eine Schleife nicht herum (und wenn es nur dazu ist die Selektion der gesuchten Punkte abzuarbeiten). Du könntest ggf alle Punkte in einem Join (wird auch eine Schleife benötigt) zusammenfassen, und diesen dann verschieben. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009
|
erstellt am: 30. Jan. 2012 12:14 <-- editieren / zitieren --> Unities abgeben:
|
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009 Fujitsu Celsius W570Power (32GB RAM, Quadro P4000) WIN10 1909 CATIA V5 R28 CATIA V5 R29
|
erstellt am: 31. Jan. 2012 14:52 <-- editieren / zitieren --> Unities abgeben:
Hänge immer noch an dem oben beschriebenen Problem herum. Ich möchte erreichen das der User vor Start des Scripts ein GEO-Set auswählt und dann in diesem GEO-Set alle Punkte um den definierten Offset in X, Y, oder Z verschoben werden. Das Makro läuft durch und bringt keine Fehlermeldung aber leider werden die Punkte nicht geschoben. Mein Script sieht jetzt so aus: Sub CATMain() Dim myPart As Part Dim Counter As Integer Counter = 0 Dim oFenster As Windows Dim ObjType As String Set oFenster = CATIA.Windows If oFenster.Count = 0 Then Box = MsgBox("Es ist kein Dokument geladen!" + Chr(10) + "Das Makro kann nicht ausgeführt werden und wird beendet!", vbCritical, "Kein Dokument geladen") Exit Sub End If Set oRoot = CATIA.ActiveDocument ObjType = TypeName(oRoot) If ObjType <> "PartDocument" Then Box = MsgBox("Das aktive Dokument ist kein Part!" + Chr(10) + "Das Makro kann nicht ausgeführt werden!", _ vbCritical + vbOKOnly, "Falscher Dateityp") Exit Sub End If ObjType = "" '*** Abarbeitung startet hier *** SUB_MOVE_POINTS '*** Ausgabe *** Box = MsgBox("Fertig! Es wurden " & Counter & " Punkte verschoben", vbInformation + vbOKOnly, "Makro erfolgreich beendet") End Sub Sub SUB_MOVE_POINTS Dim X_OFFSET As Double Dim Y_OFFSET As Double Dim Z_OFFSET As Double X_OFFSET = InputBox("Versatz in X eingeben:", "X-OFFSET",0) Y_OFFSET = InputBox("Versatz in Y eingeben:", "Y-OFFSET",0) Z_OFFSET = InputBox("Versatz in Z eingeben:", "Z-OFFSET",0)
Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim selection1 As Selection Set selection1 = partDocument1.Selection Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim hybridShapePointCoord1 As HybridShapePointCoord Dim auswahlElement As SelectedElement Selection1.Search "Name=*Point*,all" AnzahlSelekt = Selection1.Count Dim i As Integer Dim acoord(2) For i = 1 To AnzahlSelekt Set auswahlElement = selection1.Item(i) auswahlElement.Value.GetCoordinates (acoord) acoord(0) = acoord(0) + X_OFFSET 'x-Werte acoord(1) = acoord(1) + Y_OFFSET 'y-Werte acoord(2) = acoord(2) + Z_OFFSET 'z-Werte auswahlElement.Value.SetCoordinates (acoord) Counter = Counter +1 Next Part1.Update End Sub
------------------ Arbeit zieht immer Arbeit nach sich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 31. Jan. 2012 16:30 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
4 Sachen fallen mir auf dem ersten Blick auf: 1. Deine Suche ist global und nicht lokal (auf das GeoSet), also alle Punkte. Dann weiß ich nicht, wie ide Selection nach der Zuweisung aussieht (müsstest Du mal debuggen). 2. Ich würde call auswahlElement.Value.SetCoordinates (acoord) machen 3. Ich würde Option Explicit am Anfang setzen 4. Ich würde alle Deklarationen am Anfang einer Funktion machen ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing 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: 31. Jan. 2012 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
Servus Weiter Punkte die mir auffallen: - "InputBox" liefert einen String zurück muss noch in einen Double konvertiert werden - über den Namen nach Punkten zu suchen ist nicht sauber programmiert (sprachabhängig, was ist wenn ein Punkt umbenannt wurde, ...) - "SetCoordinates" geht nur bei Punkten des Typs "HybridShapePointCoord" -> Objekttyp-Abfrage erforderlich Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 31. Jan. 2012 17:28 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
Was mir gerade auffällt, warum machst Du nicht Code:
Dim hybridShapePointCoord1 As HybridShapePointCoord Dim auswahlElement As SelectedElement Selection1.Search "Name=*Point*,all" AnzahlSelekt = Selection1.Count Dim i As Integer Dim acoord(2) For i = 1 To AnzahlSelekt Set hybridShapePointCoord1 = selection1.Item(i).value call hybridShapePointCoord1.GetCoordinates (acoord) acoord(0) = acoord(0) + X_OFFSET 'x-Werte acoord(1) = acoord(1) + Y_OFFSET 'y-Werte acoord(2) = acoord(2) + Z_OFFSET 'z-Werte call hybridShapePointCoord1.SetCoordinates (acoord) Counter = Counter +1 Next Part1.Update
------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009
|
erstellt am: 01. Feb. 2012 13:43 <-- editieren / zitieren --> Unities abgeben:
Hab das ganze nochmal etwas anders aufgebaut. Und siehe da es funktioniert. Einen Schönheitsfehler hat das ganze aber noch. Ich möchte das der Anwender vor dem Start des Makros ein GEO-Set auswählt dessen Punkte verschoben werden sollen.Momentan werden aber alle Punkte in allen GEO-Sets verarbeitet. Irgendwas stimmt da mit der Verarbeitung der Selection noch nicht ganz. Hier das Listing: Sub CATMain() '*** Abfrage Dokumente *** Dim oFenster As Windows Dim ObjType As String Set oFenster = CATIA.Windows If oFenster.Count = 0 Then Box = MsgBox("Es ist kein Dokument geladen!" + Chr(10) + "Das Makro kann nicht ausgeführt werden und wird beendet!", vbCritical, "Kein Dokument geladen") Exit Sub End If Set oRoot = CATIA.ActiveDocument ObjType = TypeName(oRoot) If ObjType <> "PartDocument" Then Box = MsgBox("Das aktive Dokument ist kein Part!" + Chr(10) + "Das Makro kann nicht ausgeführt werden!", _ vbCritical + vbOKOnly, "Falscher Dateityp") Exit Sub End If ObjType = "" '*** Abarbeitung startet hier *** SUB_MOVE_POINTS End Sub Sub SUB_MOVE_POINTS Dim X_OFFSET As Double Dim Y_OFFSET As Double Dim Z_OFFSET As Double X_OFFSET = InputBox("Versatz in X eingeben:", "X-OFFSET",0) Y_OFFSET = InputBox("Versatz in Y eingeben:", "Y-OFFSET",0) Z_OFFSET = InputBox("Versatz in Z eingeben:", "Z-OFFSET",0)
Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim selection1 As Selection Set selection1 = partDocument1.Selection Dim auswahlElement As SelectedElement Selection1.Search "(CATGmoSearch.Point),all" AnzahlSelekt = Selection1.Count Dim i As Integer Dim acoord(2) For i = 1 To AnzahlSelekt Set auswahlElement = selection1.Item(i) auswahlElement.Value.GetCoordinates (acoord) acoord(0) = acoord(0) + X_OFFSET 'x-Werte acoord(1) = acoord(1) + Y_OFFSET 'y-Werte acoord(2) = acoord(2) + Z_OFFSET 'z-Werte auswahlElement.Value.SetCoordinates (acoord) Next Part1.Update End Sub
------------------ Arbeit zieht immer Arbeit nach sich! 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: 01. Feb. 2012 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
Servus Änder mal golgende Zeile: Selection1.Search "(CATGmoSearch.Point), sel" Dann wir nur in der aktiuellen Selektion gesucht (eine GeoSte auswählen musst du noch zusammenbasteln) Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009
|
erstellt am: 01. Feb. 2012 15:39 <-- editieren / zitieren --> Unities abgeben:
Danke das funktioniert! Set soll der anwender ja vor dem Start des Makros auswählen. ------------------ Arbeit zieht immer Arbeit nach sich! [Diese Nachricht wurde von DocMurphy am 01. Feb. 2012 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: 01. Feb. 2012 15:41 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
Servus Du solltest aber auch überprüfen, ob ein Geoset ausgewählt ist bevor du die Punkte suchst.(oder soll ggf auch das ganze Part durchsucht werden) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009
|
erstellt am: 01. Feb. 2012 15:51 <-- editieren / zitieren --> Unities abgeben:
Ich will das ganze noch komfortabler machen. Der Anwender soll per MsgBox aufgefordert werden ein GEO-SET auszuwählen und dann soll die Abarbeitung des Makros starten. Aber das sicherlich nicht so einfach wenn ich hier die Referenz zu SelectElement2 lese. ------------------ Arbeit zieht immer Arbeit nach sich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 01. Feb. 2012 16:49 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
Wo ist das Problem? Messagebox hoch. Anwender Klickt OK SelectElement2 starten. Gibts mindestens tausend Beispiele hier im Forum. :-) ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DocMurphy Mitglied Konstrukteur
Beiträge: 37 Registriert: 22.07.2009
|
erstellt am: 02. Feb. 2012 08:02 <-- editieren / zitieren --> Unities abgeben:
Ja, klar ich weiss. das Problem ist immer die richtigen Beiträge zu finden und dann auf das eigene Problem anzupassen. Werd mich mal am Wochenende dranmachen. ------------------ Arbeit zieht immer Arbeit nach sich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 02. Feb. 2012 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für DocMurphy
|