| |
| KISTERS 3DViewStation: Mit Modellbasiertem Design zum Modellbasierten Unternehmen , eine Pressemitteilung
|
Autor
|
Thema: indicateorselectelement3d Problem (3438 mal gelesen)
|
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 03. Nov. 2011 09:59 <-- editieren / zitieren --> Unities abgeben:
Hallo bin neu hier im Forum und auch Anfänger in Sachen Makroprogrammierung. Mein Aufgabe. ich muss auf einer ebene eine beliebige Stelle mit der Maus anklicken und die Koordinaten dieses angeklickten Punktes ausgeben. Ich habe mir gedacht die Funktion IndicateorselectElement3D wäre geeignet. An sich funktioniert es auch schon so halb. habe allerdings 2 probleme. Ich kann einen Punkt auswählen und mit die koord zurückgeben. allerdings funktioniert es nicht wenn ich auf eine geometrie (Linie, Punkt) klicke. dann gibt er mir die koordinaten vom letzten punkt aus. meine Funktion funktioniert quasi nur wenn ich eine Stelle im "leeren" Raum auswähl...soll aber auch funktionieren wenn ich einen stelle auf zb einer linie auswähle. das zweite problem. Mein code Funktioniert als *.catscript. ich müsste es aber als VBA zum laufen bringen. Hab schon gegooglet und diverse lösungen mit executescript das script auszuführen. ist aber nciht ganz praktekabel. gibt es ne möglichkeit die Indicateorselectelement3D in VBA zum laufen zu bekommen? Wäre für Vorschläge und hilfen offen und würde mich freuen... vielen dank Hier mein Code
Zitat: Sub CATMain()Dim Ergebnis As String Dim XZ(1), XYZ(2) As Double Dim SelInd As Boolean Dim Filter(0) Dim Selektion As Selection Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1") Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapePlaneOffset1 = hybridShapes1.Item("Plane.1") Filter(0) = "PlanarBiDimInfinite" Set Selektion = CATIA.ActiveDocument.Selection Selektion.Clear Ergebnis = Selektion.IndicateOrSelectElement3D(hybridShapePlaneOffset1 , "Auswahl",Filter, True, False,False, SelInd, XZ, XYZ) MsgBox ("X-eben= " & XZ(1) & ", Z-eben= " & XZ(0) & Space(15) & "X-3D= " & XYZ(0) & ", Y-3D= " & XYZ(1) & ", Z-3D= " & XYZ(2)) MsgBox (Ergebnis) End Sub
[Diese Nachricht wurde von pfannensepp am 03. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Nov. 2011 21:02 <-- editieren / zitieren --> Unities abgeben: Nur für pfannensepp
Servus Willkommen im Form. Bitte Systeminfo ausfüllen. Die Funktion "IndicateorselectElement3D" ist irgendwie zum Projizieren des Punktes auf eine Ebene (ganz blicke ich dies auch nicht). Versuch es mal mit "GetCoordinates" der Selection. Code: Sub CATMAin() Dim oDoc As Document Dim oSel As Selection Dim filter(0) Dim dblLength1(2) Dim Status As StringSet oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection filter(0) = "AnyObject" Status = oSel.SelectElement2(filter, "Bitte 1. Punkt auswählen", False) If Status <> "Normal" Then MsgBox "Es wurde kein Punkt gewählt. Das Makro wir beendet" Exit Sub End If oSel.Item2(1).GetCoordinates dblLength1 MsgBox "X=" & dblLength1(0) & "; Y=" & dblLength1(1) & "; Z=" & dblLength1(2) End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 07. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 21. Nov. 2011 08:52 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Antwort, komme gerade aus dem urlaub, deswegen dei späte Reaktion. Aber ich kann doch die Funktion GetCoordinates der Selektion nicht anwednen, da ich eine Selektion im "leeren" Raum machen müsste. Ich will ja einen beliebige Stelle auf einer Ebene anwählen. Also auch einen Stelle wo sich keine Geometrieelemente befinden. Das funktioniert allerdigs dann mit der Selektion nicht. Verstehst du mein problem? Lg pfannensepp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Nov. 2011 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für pfannensepp
Servus Wenn du einen Punkt im leeren Raum anklickst, kann das aber nur ein Punkt auf der Bildschirmebene sein, oder unendlich viele Punkte auf einer Gerade senkrecht zur Bildschirmebene? Was für einen Punkt willst du? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 21. Nov. 2011 11:07 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Nov. 2011 19:22 <-- editieren / zitieren --> Unities abgeben: Nur für pfannensepp
Servus Setze mal den Filter, im Code aus deinem ersten Beitrag, auf: Filter(0) = "AnyObject"und oObjectSelected in IndicateOrSelectElement3D auf true: Ergebnis = Selektion.IndicateOrSelectElement3D(hybridShapePlaneOffset1, "Auswahl", Filter, True, False, False, True, XZ, XYZ)Dann werden bei plausible Werte ausgespuckt, egal was ich anklicke. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 22. Nov. 2011 08:34 <-- editieren / zitieren --> Unities abgeben:
Hi ich hab jetzt meinen Code so verbessert wie du gesagt hast. leider das gleiche Problem. Ich habe besipielsweise einen punkt bei 500/0/500 (s. Anhang Bild eins) wenn ich knapp neben diesen punkt klicke bekomm ich richtige werte s. MsgBox. wenn ich das skript dann einzweites mal starte und genau auf den punkt klicke (also die koordinaten 500/0/500. bekomm ich die selben werte vom vorherigen durchgang. wenn ich auf den punkt fahre ändert sich der mauszeiger auch von pfeil auf hand. ich denke es hat damit was zu tun. wer will das object irgendwie selektieren und gibt mir daduch nicht die koordinaten aus. oder klappt das nur bei mir nicht? [Diese Nachricht wurde von pfannensepp am 22. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Nov. 2011 19:40 <-- editieren / zitieren --> Unities abgeben: Nur für pfannensepp
Servus Jetzt hab ich dein Problem auch verstanden bzw habe es nachvollziehen können. Du könntest nach dem indicateorselectelement3d abfragen, ob ein Objekt selektiert wurde ( If Selektion.Count <> 0 Then), falls ja, die Koordinaten wie in meinem ersten Post ermitteln (leider nicht projiziert), wenn nein, dann über die oWindowLocation3D der IndicateOrSelectElement. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 24. Nov. 2011 07:45 <-- editieren / zitieren --> Unities abgeben:
hallo vielen dank erstmal! ich hab noch nicht ganz vetrstanden wie du das meinst bgrittmann. Wenn ich mit indicateorselectelement3d was abfrage und dann wird eine geometrie angeklickt. wie soll ich im nachhinein mit windowlocation3D (was ist das für befehl ich habe ihn nicht gefunden?) die stelle nochmal abfragen? dazu müsste4 der anwender ja die stelle nocheinmal anklicken oder?! oder versteh ich das falsch? gruß Sepp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Nov. 2011 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für pfannensepp
Servus Du lässt einfach deine Selektion wie du sie hast, wenn ein Objekt Selektiert wurde (If Selektion.Count <> 0 Then) lässt du dir über .GetCoodrinates die Koordinaten ermitteln, wenn kein Objekt selektiert wurde nimmst du einfach deinen Array XYZ. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 25. Nov. 2011 11:55 <-- editieren / zitieren --> Unities abgeben:
So..bin jetzt endlich dazu gekommen hier weiterzumachen. Vielen Dank bgrittmann! Es funktioniert jetzt soweit. Allerdings nur als CATScript. ich bekomme den code nicht im VBA zum laufen... weiß hier jemand noch einen rat? Es kommt die Fehlermedlung "Type mismatch" bei dem befehl indicateorselect3D. Kann es sein das der Befehl im VBA nicht funktioniert? Wenn ja, gibt es einen Workaround? beispielsweiße das CATScript mit VBA aufrufen und die werte aus dem CATScript übergeben? Mein Aktueller und im CATScript funktioniertender Code Code: Dim Ergebnis As String Dim XZ(1), XYZ(2) As Double Dim SelInd As Boolean Dim Filter(0) Dim Selektion As VariantDim coord(2) As Single Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1") Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapePlaneOffset1 = hybridShapes1.Item("Plane.1") Filter(0) = "AnyObject" Set Selektion = CATIA.ActiveDocument.Selection Selektion.Clear Ergebnis = Selektion.IndicateOrSelectElement3D(hybridShapePlaneOffset1, "Auswahl", Filter, False, False, False, False, XZ, XYZ) If Selektion.Count <> 0 Then Selektion.Item(1).GetCoordinates coord MsgBox (coord(0) & " " & coord(2)) Else MsgBox ("X-eben= " & XZ(1) & ", Z-eben= " & XZ(0) & Space(15) & "X-3D= " & XYZ(0) & ", Y-3D= " & XYZ(1) & ", Z-3D= " & XYZ(2)) End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Nov. 2011 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für pfannensepp
Servus Schau nochmal in die Doku. AFAIR muss XZ und XVZ als Variant dimensioniert sein. ggf bei "Dim Selektion" das "as Variant" entfernen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pfannensepp Mitglied
Beiträge: 74 Registriert: 03.11.2011 HP Z800 12x 2,66Ghz 24GB RAM CATIA V5 R19
|
erstellt am: 25. Nov. 2011 12:21 <-- editieren / zitieren --> Unities abgeben:
|