Autor
|
Thema: Viewpoint aus VB2008 heraus erstellen bzw. ändern (1605 mal gelesen)
|
magicneo Mitglied
Beiträge: 12 Registriert: 08.06.2007 CATIA V5 R17
|
erstellt am: 08. Nov. 2010 23:20 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich arbeite mit VB 2008 und möchte den aktuellen Viewpoint verändern. Hab schon alles möglich probiert - auch die Script Beispiele aus der Doku Automation... - nix funzt. Hab es z.B. mit diesen Funktionen probiert: CATIA.ActiveWindow.ActiveViewer.Viewpoint3D.GetOrigin() - zum Auslesen des aktuellen Viewpoints funktioniert nicht CATIA.ActiveWindow.ActiveViewer.Viewpoint3D.PutOrigin() - zum Setzen des aktuellen Viewpoints funktioniert nicht Vielleicht kann mir jemand von Euch weiterhelfen. Vielen Dank schon mal im Voraus ... Martin 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: 08. Nov. 2010 23:59 <-- editieren / zitieren --> Unities abgeben: Nur für magicneo
Servus Hast du beim GetOrgin einen entsprechenden Array dimensioniert? Übergibst du beim PutOrign die Koordinaten (als Array oder Aufzähun)? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magicneo Mitglied
Beiträge: 12 Registriert: 08.06.2007 CATIA V5 R17
|
erstellt am: 09. Nov. 2010 09:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, könntest Du mir bitte mal ein Beispiel dafür schreiben - ich habe so meine Probleme mit den Array's bzw wie und in welcher Form ich die Koordinaten übergeben oder bekommen. Da ich schon viel probiert habe und nix funktioniert hat, weiss ich auch nicht, ob es richtig gewesen wäre. Im Moment hab ich den Eindruck, dass ich über VB2008 nicht auf die Koordinaten eines Viewpoint zugreifen kann. Viele Grüße Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 09. Nov. 2010 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für magicneo
Hallo Martin, es ist relativ einfach. Was du an CATIA übergibst, muss aoObjektArray as Object() deklariert sein. CATIA gibt dir die Ergebnisse ebenfalls als Objektarray zurück, die dann auf Double/String oder sonst was konvertiert werden müssen. Anbei zwei .NET Hilfsfunktionen und ein Beispiel dazu: Code: Public Function ConvertObjArr2DblArr(ByVal aobjInput As Object()) As Double() Dim adblWork As Double() adblWork = New Double(aobjInput.Length - 1) {} For i As Integer = 0 To aobjInput.Length - 1 adblWork(i) = CDbl(aobjInput(i)) Next Return adblWork End Function Public Function ConvertDblArr2ObjArr(ByVal adblInput As Double()) As Object() Dim aobjWork As Object() aobjWork = New Object(adblInput.Length - 1) {} For i As Integer = 0 To adblInput.Length - 1 aobjWork(i) = adblInput(i) Next Return aobjWork End Function 'Beispielaufruf: Dim adblOrigin(2) As Double oViewPoint3D.PutOrigin(ConvertDblArr2ObjArr(adblOrigin)) Dim aoSavedSightDirection(2) As Object oViewPoint3D.GetSightDirection(aoSavedSightDirection)
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magicneo Mitglied
Beiträge: 12 Registriert: 08.06.2007 CATIA V5 R17
|
erstellt am: 09. Nov. 2010 20:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, das mag für Dich relativ einfach sein ... ich kapier es nicht und es funktioniert bei mir auch nicht. Ich hab zuerst mal versucht, den aktuellen Viewpoint mit diesen Zeilen auszulesen: Dim aoSavedSightDirection(2) As Object oViewPoint3D.GetSightDirection(aoSavedSightDirection) Bei einer Überwachung von aoSavedSightDirection war der Inhalt 3x Noting. Macht nix, dachte ich und hab dann die Funktion zum Konvertieren aufgerufen: ConvertObjArr2DblArr(aoSavedSightDirection) Das Ergebnis war eine Variable mit 3 Werten - alle Werte waren 0.0. Also irgendwie funzt das nich ... oder ich bin zu blöd dazu. Und wie konvertiere ich einen gewünschten viewpoint origin 0,0,0 und übergebe das dann an den aktuellen CATIA V5 viewpoint. Stehe auf dem Schlauch bzw. auf der Leitung. Bin kein eingefleischter Programmierer - bitte für nen Halb-Dummie ;-) erklären. Viele Grüße Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magicneo Mitglied
Beiträge: 12 Registriert: 08.06.2007 CATIA V5 R17
|
erstellt am: 09. Nov. 2010 21:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, Kommando zurück - meistens sitzt der Fehler halt doch vor der Kiste - fett sorry - passt alles perfekt - es funzt!!! Mein Fehler war die Konvertierung eines Array in ein Objekt Array. Ich steige zwar noch nicht ganz durch Deinen Code durch - aber das krieg ich schon hin. Hauptsache es funzt! Vielen Dank und viele Grüße Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 10. Nov. 2010 18:29 <-- editieren / zitieren --> Unities abgeben: Nur für magicneo
Hallo Martin, prinzipiell musst du wissen, dass CATIA alle Arrays als Objekt, den Grundlegenden Typ von VB.NET (in VBA hieß es noch Variant) liefert und auch erwartet. Mit diesen Typ kannst du aber nicht rechnen (kein Double oder Integer) oder es auch nur schwer als Zeichen/String verwenden. In den Funktionen ist nur eine Deklaration vorhanden und eine Schleife. Dieser geht durch den Input Array durch und konvertiert die Werte. In unseren Fall einmal Double->Objekt (hier braucht man keine Sonderfunktion zur Konvertierung), und einmal Objekt->Double (hier wird als Funktion CDbl() verwendet). Ähnliche Funktionen kann man sich auch selber basteln und die können auch etwas anders aussehen, da man mit mehreren Befehlen auf den gleichen Ergebnis kommen kann. Hier wäre z.B. auch der Weg über Redim und die Schleife über LBound(Array) UBound(Array) als "VBA alte Schule" gegangen. Ich hoffe, somit ist es auch besser nachvollziehbar, was die beiden Funktionen bewirken. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |