Autor
|
Thema: Zugriff auf Part im Produkt (8242 mal gelesen)
|
hotschen Mitglied
Beiträge: 15 Registriert: 11.09.2008 Catia V5r16
|
erstellt am: 23. Jun. 2009 12:08 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen. Ich versuche mich gerade an der Makroprogrammierung für CATIA. Mit VBA für Excel und VB hatte ich eigentlich nie grosse Probleme. Bei Catia versteh ich ehrlich gesagt die Objekte nich. Mein Anliegen: Ist ein Part geöffnet, soll dieses in ein neues Produkt eingefügt werden, ist ein Produkt offen, will ich Zugriff auf das erste Part im Produkt. Anschlissend will ich auf eine Ebene in einem bestimmten Set zugreifen, aber soweit bin ich noch nicht. Mein bisheriger Code (zusammengefriemelt aus der Hilfe): Code:
Sub CATMain() ' Dim oPartDoc As Document Dim oProductDoc As Document Dim oRoot As Product Dim oRootCol As Products Dim oNewComponent As Product Set oPartDoc = CATIA.ActiveDocument If TypeName(oPartDoc) <> "ProductDocument" Then Set oProductDoc = CATIA.Documents.Add("Product") Set oRoot = oProductDoc.Product Set oRootCol = oRoot.Products Set oNewComponent = oRootCol.AddExternalComponent(oPartDoc) Else Set oProductDoc = oPartDoc Set oRoot = oProductDoc.Product Set oRootCol = oRoot.Products Set oPartDoc = oRootCol.Item(1) End If MsgBox oPartDoc.Name End Sub
Was ich generell nicht verstehe ist der Aufbau oProductDoc-->oRoot-->oRootCol Wenn ich oPartDoc asl Document deklariere, bekomme ich eine Fehler, wenn ich das Part aus dem Produkt auslesen will. Ich vermute, weil ich einmal auf das Dokument und einmal auf die Instanz zugreifen will? Aber wie gesagt, genau dieser Zusammenhang ist mir ein Rätsel. Es wäre schön, wenn mir jemand anhand des Codes kurz den Aufbau von Document, Partdocument, Product, Products etc erklären könnte. Ich weiss, dafür ist das Forum eigentlich nicht da, aber vielleicht hat ja jemand doch Musse dafür. Gruß hotschen Edit: Nochwas...ich kann seit neuestem aus Catia keine VBA Makros mehr starten, nur über den Umweg per Editor. woran kann das liegen? [Diese Nachricht wurde von hotschen am 23. Jun. 2009 editiert.] 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: 23. Jun. 2009 19:33 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
|
hotschen Mitglied
Beiträge: 15 Registriert: 11.09.2008 Catia V5r16
|
erstellt am: 23. Jun. 2009 20:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, vielen Dank für den Link, der bringt so einiges Licht ins Dunkle. Ich hatte zwar das Forum schon durchwälst, der Thread ist mir aber irgendwie durch die Lappen gegangen. Die andere Frage bezüglich der VBA Makros hat sich wie von Geisterhand erledigt. Ich konnte per ALT+F8 nur CATScript und VBScript dateien anwählen. VBA Projekte waren nicht möglich (auch kein Bibliotheken). Wie gesagt, jetzt gehts komischerweise wieder, interessieren würde es mich aber dennoch was das war. Gruß hotschen 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: 23. Jun. 2009 21:32 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Hallo hotschen, wenn du noch konkrete Fragen über die Objekte hast, kannst du stellen. Tatsächlich ist der angegeben Thread ziemlich weit von der Titel gelaufen. Ich weiß nicht, wie man es jetzt berichtigen könnte. Ich nehme an, du kennst den Combobox zur Auswahl von den aufgenommenen VBA-Projekte/Makroverzeichnisse oben im ALT+F8 Dialogbox und auch die Taste rechts oben, womit man die Projekte/Verzeichnisse aufnehmen kann. Wenn ja, dann habe ich auch keine Ideen. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
blackhawk Mitglied Student
Beiträge: 28 Registriert: 05.06.2009
|
erstellt am: 22. Jul. 2009 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Hallo, habe gerade diesen Thread gefunden und habe ein ähnliches Problem. Der Benutzer selektiert aus einem Produkt ein Part, mittels einer Aufforderung. Diese Selektion habe ich in einer Liste gespeichert und habe damit das Part ermittelt. Mit diesem Part will ich weiterarbeiten, die Prozedur die das weiterverarbeitet, will aber kein Part haben sondern das Document. Wie komme ich von diesem Part wieder auf das Document. Ich habe es mit Part.Parent versucht, allerdings scheint das nicht zu funktionieren. Wie könnte man das lösen? mfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
chung Mitglied
Beiträge: 23 Registriert: 25.04.2007 MS Windows XP SP2; x86 3,72 GHz; 4GB RAM; NVIDIA Quadro FX 1400; CATIA V5 R17 SP7
|
erstellt am: 22. Jul. 2009 13:45 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Probiers mal damit: Set oProducts = DeinPart.Parent Set DeinPart = oProducts.Item(DeinPart.Name) Set DeinDocument = DeinPart.ReferenceProduct.Parent Ich hab auch einiges rumprobiert, das hat dann geklappt. Warum ich den Umweg brauche, weiss ich auch nicht. Jürgen [Diese Nachricht wurde von chung am 22. Jul. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
blackhawk Mitglied Student
Beiträge: 28 Registriert: 05.06.2009
|
erstellt am: 22. Jul. 2009 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Ok. Und als was muss ich oProducts definieren? [...] Set p_part = Liste.Item(1).Value 'Die Liste liefert das selektierte Part Liste.Clear Dim oProducts As Products Set oProducts = p_part.Parent Set p_part = oProducts.Item(p_part.Name) Set Rueckgabefunktion = p_part.ReferenceProduct.Parent So kommt bei mir ein Fehler. "Type mismatch" Ich steig da nicht so richtig durch mit den Bezeichnern. p_part ist definiert als MECMOD.Part oProducts muss das als Products, Product, Productdocument definiert werden? Die Rueckgabefunktion muss vom Typ document sein. 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: 22. Jul. 2009 18:56 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Hallo blackhawk, wenn p_part ein MECMOD.Part ist, dann die p_part.paren ein PartDocument. In VB.NET müsste die Funktion TypeName(p_part.parent) dieses auch zurückgeben. Wie oben beschrieben, ist die Struktur logisch, aber man muss sich da etwas reindenken. Ich schlage dir vor, in VBA etwas mit der Struktur außeinanderzusetzen. Das Wissen kannst du dann auch unter .NET verwenden. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
blackhawk Mitglied Student
Beiträge: 28 Registriert: 05.06.2009
|
erstellt am: 23. Jul. 2009 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Hab mit dem Watcher rausgefunden, dass das Parent von meinem Part tatsächlich ein Partdocument ist, also habe ich: Dim oProducts as PartDocument Allerdings in der nächsten Zeile kann dann das PartDocument kein Attribut "Item" haben!? Ich hoffe ihr habt das richtig verstanden. Normalerweise ist das Programm für Parts gedacht, wenn ich es aber jetzt auch anwenden will in Produkten, dann muss ich dem Benutzer erst die Möglichkeit geben das Part auszuwählen. Die Funktion die das ganze dann aber weiterverarbeitet muss vom Typ Document sein. 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: 23. Jul. 2009 18:40 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
|
blackh4wk Mitglied Student
Beiträge: 3 Registriert: 09.10.2008
|
erstellt am: 23. Jul. 2009 20:17 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Private Function Rueckgabe() As Document Set Rueckgabe = Nothing Dim i As Long For i = 1 To CATIA.Documents.Count Dim p_Document As Document Set p_Document = CATIA.Documents.Item(i) Set Rueckgabe=p_Document If (TypeName(p_Document) <> "PartDocument") Then GoTo Continue Dim p_PartDoc As MECMOD.PartDocument Set p_PartDoc = p_Document Dim p_Part As MECMOD.Part Set p_Part = p_PartDoc.Part On Error GoTo Continue Continue: On Error GoTo 0 'Bei diesem Teil komme ich nicht weiter, Hier soll jetzt das Part ausgewählt werden können über die Selektion und genau wie oben als Document zurückgegeben werden 'Wenn ich den Part auswähle und gebe ihn direkt an die Funktion zurück bringt er ja einen Typenfehler, deswegen muss ich irgendwie den 'Umweg übers Dokument schaffen. Set Rueckgabe=p_Document Next i End Function 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: 24. Jul. 2009 19:01 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Hallo, versuche es mal so für den fraglichen Teil:
Code: dim SelElements(0) SelElements(0) = "Part" dim UserSel as string UserSel = ActDoc.Selection.SelectElement2(SelElements, "Bla", True) Dim p_Part As MECMOD.Part If UserSel = "Normal" Then Set p_Part = Selection.Item(1).Value Set Rueckgabe = p_Part.Parent End If
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Techniker*in für Infrastrukturplanung und operatives Vertragsfirmenmanagement | Willst Du gemeinsam mit uns das 36.000 Kilometer lange Berliner Stromnetz fit halten, ausbauen und modernisieren? Willst Du Dich mit voller Kraft für unsere 3,7 Millionen Kund*innen und für eine nachhaltige Stadtgesellschaft engagieren? Dann unterstütze uns zum nächstmöglichen Zeitpunkt als Techniker*in für Infrastrukturplanung und operatives Vertragsfirmenmanagement
| Anzeige ansehen | Projektmanagement |
|
blackhawk Mitglied Student
Beiträge: 28 Registriert: 05.06.2009
|
erstellt am: 27. Jul. 2009 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für hotschen
Herzlichen Dank vor allem dir zoltan. Es hat funktioniert mit einigen kleinen Änderungen bei der Selektion. Habe viel gelernt über die Struktur von CATIA von Part, Document, Partdocument, Productdocument & CO. Hoffe der Beitrag hilft noch vielen anderen. 10 Units für euch. MfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |