Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Array Operationen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Array Operationen (2709 mal gelesen)
GrafKoks
Mitglied



Sehen Sie sich das Profil von GrafKoks an!   Senden Sie eine Private Message an GrafKoks  Schreiben Sie einen Gästebucheintrag für GrafKoks

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von GrafKoks an!   Senden Sie eine Private Message an GrafKoks  Schreiben Sie einen Gästebucheintrag für GrafKoks

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 14. Jun. 2012 12:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von GrafKoks an!   Senden Sie eine Private Message an GrafKoks  Schreiben Sie einen Gästebucheintrag für GrafKoks

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von GrafKoks an!   Senden Sie eine Private Message an GrafKoks  Schreiben Sie einen Gästebucheintrag für GrafKoks

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 14. Jun. 2012 16:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 14. Jun. 2012 22:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von GrafKoks an!   Senden Sie eine Private Message an GrafKoks  Schreiben Sie einen Gästebucheintrag für GrafKoks

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 15. Jun. 2012 10:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GrafKoks 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz