Autor
|
Thema: Array Operationen (2709 mal gelesen)
|
GrafKoks Mitglied
Beiträge: 22 Registriert: 10.05.2012 Catia V5 R19 Microsoft Visual Basic 6.0<P>Windows XP Professional x64 Edition
|
erstellt am: 14. Jun. 2012 11:14 <-- editieren / zitieren --> Unities abgeben:
Servus, ich schon wieder. Eine etwas generellere Frage: Welche Möglichkeiten gibt es beim Umgang mit Arrays? Also im Sinne von Array(1).Name Was kann alles hinter dem Punkt stehen? Gibt es dazu eine Dokumentation? In der V5automation finde ich dazu nichts. Was ich konkret machen möchte ist: Der User wählt über SelectElement3 Achsensysteme aus und diese Selection wandert in ein Array als selection1.Item(i).Value. Kann ich damit nun über Array(i).irgendwas mehrere Sachen ansprechen? Beispielsweise das übergeordnete Part in dem das Achsensystem liegt. Ich brauche das Achsensystem selber und das Part in dem es liegt. Geht das mit einem Array oder muss ich dafür jeweils einzelne Arrays befüllen? Besten Dank. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafKoks Mitglied
Beiträge: 22 Registriert: 10.05.2012 Catia V5 R19 Microsoft Visual Basic 6.0<P>Windows XP Professional x64 Edition
|
erstellt am: 14. Jun. 2012 11:24 <-- editieren / zitieren --> Unities abgeben:
Servus, der konkrete Teil hat sich erledigt! Ich habe es mit zwei Arrays gemacht. Ins eine kommen die selektierten Achsensysteme, dann schreibe ich die einträge in eine Variable und dann mittels Variable.Parent.Parent das übergeordnete Part in das andere Array. Bei der Frage, ob das auch mit einem Array geht und ob es eine Auflistung aller Properties für Arrays gibt, bin ich weiterhin auf Hilfe angewiesen. Beste Grüße 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: 14. Jun. 2012 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Servus Dabei handelt es sich nicht um einen Array sondern um die Selectrion-Collection. Siehe "SelectedElement" in der Doku. AFAIR gibt es folgende Properties: Document, LeafProduct , Reference, Value , Name, ... Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafKoks Mitglied
Beiträge: 22 Registriert: 10.05.2012 Catia V5 R19 Microsoft Visual Basic 6.0<P>Windows XP Professional x64 Edition
|
erstellt am: 14. Jun. 2012 13:49 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort. das mit Leafproduct funktioniert, allerdings meine ich schon, dass ich da ein Array habe. Im Code befülle ich nur mit hilfe von selection.item(i).value Code: Sub AS_select()'----------Start im Werkzeug---------- Dim Was(0) Dim arrAS() Dim arrLocAS() Was(0) = "AxisSystem" Set selection1 = CATIA.ActiveDocument.Selection selection1.Clear Auswahl = selection1.SelectElement3(Was, "Bitte Achsensystem(e) auswählen. Auswahl bestätigen über Toolbox. Abbruch mit ESC!", False, CATMultiSelTriggWhenUserValidatesSelection, True) ReDim arrAS(selection1.Count2) ReDim arrLocAS(selection1.Count2) If Auswahl = "Normal" Then For i = 1 To selection1.Count Set arrAS(i) = selection1.Item(i).Value '<--1 Set arrLocAS(i) = selection1.Item(i).LeafProduct '<--2 Next Else Exit Sub End If selection1.Clear Anzahl = UBound(arrAS) '------------------Testausgabe----------------------------------- For i = 1 To Anzahl MsgBox arrAS(i).Name MsgBox arrLocAS(i).Name Next '---------------------------------------------------------------- Set partDocument1 = arrLocAS(1) '<--3 Set product1 = partDocument1.Parent Set publications1 = product1.Publications '<--4 Set objRef1 = arrAS(1) Set reference1 = product1.CreateReferenceFromObject(objRef1) Set publication1 = publications1.Add(arrAS(1).Name & ".1") '<--5 publications1.SetDirect arrAS(1), reference1 End Sub
zu 1.: Hier befülle ich ein Array mit den selektierten Achsensystemen zu 2.: Hier befülle ich (meiner Meinung nach) ein Array mit dem Part(Product?) in dem die AS sind zu 3.: Hier möchte ich ein Element aus dem Array nutzen. Geht das so? Das Part(Product?) in dem das AS ist soll einer Variable zugewiesen werden, so dass ich später damit wat machen kann. In diesem Fall publizieren zu 4.: Hier bekomme ich nen Fehler: "Object doesnt support property or method" scheinbar klappt das bei 3. wohl nicht so wie ich es vorhabe. zu 5.: bis hier läuft der Code zwar noch nicht, doch möchte ich hier eine Publication hinzufügen mit dem Namen des selektierten AS und einer Zahl. Geht das so? Besten Dank und bitte achtet nicht auf die Namen der Variablen. Das ist momentan ein Mischmasch aus Recorderzeug und Codeschnipseln und selbstgemachtem. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafKoks Mitglied
Beiträge: 22 Registriert: 10.05.2012 Catia V5 R19 Microsoft Visual Basic 6.0<P>Windows XP Professional x64 Edition
|
erstellt am: 14. Jun. 2012 14:11 <-- editieren / zitieren --> Unities abgeben:
Jetzt kommt nur noch am Ende (letzte Zeile) ein Fehler: "The method SetDirect failed!" Code: Set partDocument1 = arrLocAS(1) Set product1 = partDocument1 Set publications1 = product1.Publications Set objRef1 = arrAS(1) Set reference1 = product1.CreateReferenceFromName(objRef1.Name) Set publication1 = publications1.Add("Achsensystem_Normteil" & ".1") publications1.SetDirect publication1.Name, reference1
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 14. Jun. 2012 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Habe deinen Code teilweise korrigiert, allerdings nur bis zur Testausgabe: Code:
Sub CATMain() '----------Start im Werkzeug---------- Dim Was(0) Dim arrAS() Dim arrLocAS() Dim partdocument1 As PartDocument Dim product1 As Product Dim publications1 As Publications Was(0) = "AxisSystem" Set selection1 = CATIA.ActiveDocument.Selection selection1.Clear Auswahl = selection1.SelectElement3(Was, "Bitte Achsensystem(e) auswählen. Auswahl bestätigen über Toolbox. Abbruch mit ESC!", False, CATMultiSelTriggWhenUserValidatesSelection, True) ReDim arrAS(selection1.Count2) ReDim arrLocAS(selection1.Count2) If Auswahl = "Normal" Then For i = 1 To selection1.Count Set arrAS(i) = selection1.Item(i).Value '<--1 Set arrLocAS(i) = selection1.Item(i).Value.parent.parent.parent '<--2 Next Else Exit Sub End If selection1.Clear Anzahl = UBound(arrAS) '------------------Testausgabe----------------------------------- For i = 1 To Anzahl MsgBox arrAS(i).Name MsgBox arrLocAS(i).Name Next '---------------------------------------------------------------- Set partdocument1 = arrLocAS(1) Set part1 = partdocument1.Part Set product1 = partdocument1.Product Set publications1 = product1.Publications Set objref1 = arrAS(1) Set reference1 = product1.CreateReferenceFromName(part1.Name + "/!" + objref1.Name) Set publication1 = publications1.Add(objref1.Name) publications1.SetDirect publication1.Name, reference1 End Sub
Referenzen habe ich bis jetzt immer über den Namen erstellt, daher ist mir gerade nicht klar, warum er in der "Set reference1 = product1.CreateReferenceFromObject(objref1)" - Zeile einen Fehler bringt.. Edit: War wohl etwas langsam Edit2: Code nochmal editiert, bekomme jetzt auch den Fehler in der letzten Zeile.. Wäre dann auch an einer Lösung interessiert Edit3: Jetzt funktioniert's komplett! [Diese Nachricht wurde von geekv5 am 14. Jun. 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: 14. Jun. 2012 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Servus Muss bei einer Publication (SetDirect) nicht einfach der Name der Publication übergaben werden? publications1.SetDirect (publication1.Name, reference1) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 14. Jun. 2012 16:46 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Stimmt, leider bekomme ich in der letzten Zeile trotzdem folgende Meldung: Code:
Run-time error '430':Class does not support Automation or does not support expected interface
Habe bis jetzt auch nur Beispiele gefunden, wo die Referenz über den Namen erstellt wird, aber über ein Objekt bekomme ich es nicht hin.. Edit: @GrafKoks Der Code den ich oben gepostet habe funktioniert jetzt, bin allerdings trotzdem noch an einer Lösung interessiert, um die Referenz über ein Objekt zu erstellen.. [Diese Nachricht wurde von geekv5 am 14. Jun. 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: 14. Jun. 2012 22:03 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Servus Ich hab eine Vermutung warum die über CreatReferenceFromObjekt erzeugte Referenz hier nicht funktioniert. Die Methode CreatReferenceFromObjekt ist nur vom Part aus nutzbar. Die Publications sind "eine Stufe höher" in der Struktur, im Product, angesiedelt. Deshalb muss auch von dort die Referenz gebildet werden. Im Product steht dann nur die Methode CreatReferenceFromName zur Verfügung. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GrafKoks Mitglied
Beiträge: 22 Registriert: 10.05.2012 Catia V5 R19 Microsoft Visual Basic 6.0<P>Windows XP Professional x64 Edition
|
erstellt am: 15. Jun. 2012 09:12 <-- editieren / zitieren --> Unities abgeben:
Die Publications liegen bei mir aber ganz klar im Part. Struktur: Product +Product +Part +Part -Part <---1. +Part <---2. +Publications <---3. +Part +Product ... zu 1.: Icon(blaues und gelbes Zahnrad, grüner Pfeil, rotes Kettensymbol). zu 2.: eigentliches Part, wo alles drin ist (inkl. mein AS) Icon(gelbes Zahnradl) zu 3.: Da sind die Publications und ich meine ich habe das richtige Part ausgewählt. Reference muss doch das Part (2.) sein, oder? Ich bin ein wenig verwirrt mit den Icons, obwohl 1. ein Icon wie ein Product hat ist es scheinbar ein Part. Liegt an der Assembly? ich habe aber das Gefühl beim Ansprechen verhält es sich wie ein Product. Ich checks nicht. 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: 15. Jun. 2012 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Servus Auch in einem PartDocument gibt es ein Product (damit ist nicht ein Assembyl gemeint) und gemäß Doku gibt es eine Publication nur im Product. Siehe auch in der Docu das PartDocument-Objekt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 15. Jun. 2012 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für GrafKoks
Zitat: Original erstellt von bgrittmann: Servus Ich hab eine Vermutung warum die über CreatReferenceFromObjekt erzeugte Referenz hier nicht funktioniert. Die Methode CreatReferenceFromObjekt ist nur vom Part aus nutzbar. Die Publications sind "eine Stufe höher" in der Struktur, im Product, angesiedelt. Deshalb muss auch von dort die Referenz gebildet werden. Im Product steht dann nur die Methode CreatReferenceFromName zur Verfügung.Gruß Bernd
Das klingt logisch, danke für die Erklärung! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |