Autor
|
Thema: Findobject mit bestimmten String-Teil (4213 mal gelesen)
|
sigma12 Mitglied
Beiträge: 7 Registriert: 09.08.2013 Win7 64bit version SP1 Catia V5 R21 Sp1 i7 1,73 Ghz, 4GB
|
erstellt am: 26. Aug. 2013 13:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich möchte in Catia mit vbs im Strukturbaum alle Objekte mit einem bestimmten String-Anteil z.B. xxx finden. Also wenn meine 3D-Parts in einem Dokument folgende Namen haben part1 xxxpart1 xxxpart2 part3 sollte er mir xxxpart1 und xxxpart2 zurückgeben Soweit zum Gesamt-Ziel ^^ zunächst habe ich versucht überhaupt ein Object mit einem bestimmten String zu finden und zwar hierüber Code: Dim Name As String Dim String1 As String String1 = "part1" Set obj = part1.FindObjectByName(String1) If TypeName(obj) = "Nothing" Then MsgBox "Object not found" Else MsgBox (obj.Name) End If
Er gibt mir logischerweise part1 zurück. Wenn ich aber String1= "par" macht. Findet er kein Object und gibt "Object not found zurück". Ich habe es mit Set obj = part1.FindObjectByName(String1 + "") oder Set obj = part1.FindObjectByName(String1 + *) etc. probiert hat aber nicht funktioniert. Bin noch neu im Geschäft also seid bitte gnädig ^^ 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: 26. Aug. 2013 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für sigma12
Servus Willkommen im Forum. Bitte Systeminfo ausfüllen. Ich würde das eher über "Bearbeiten -> Suchen" angehen. Stell dir eine passende Suche zusammen und nehme diese mit dem Makrorekorder auf. zB alles was mit "xxx" im Namen beginnt: Code: Sub CATMain()Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection ' in VBA as Object Set selection1 = partDocument1.Selection selection1.Search "Name=xxx*,all" End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 26. Aug. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sigma12 Mitglied
Beiträge: 7 Registriert: 09.08.2013 Win7 64bit version SP1 Catia V5 R21 Sp1 i7 1,73 Ghz, 4GB
|
erstellt am: 26. Aug. 2013 16:25 <-- editieren / zitieren --> Unities abgeben:
Super Idee danke Habs über Instr probiert etc. nichts hat funktioniert. Auf den Strg-F-Befehl muss man kommen ! Problem ist jetzt nur noch wie ich das gefundene Object ( also die Selection) inBearbeitung setzte. Inwork und activate funktioniert ja mit selections nicht. Der Aufzeichnungsassistent versagt auch ^^ Ich möchte eigentlich nur den normalen Doppelclick "nach programmieren" Die V5-Automation war auch keine richtige Hilfe, da mir die Suchbegriffe fehlen (abgesehen von den genannten, Inwork, activate etc...) P.S. Systeminfos habe ich nachgetragen 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: 26. Aug. 2013 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für sigma12
Servus In welcher Workbench/Struktur befindest du dich? Was soll der "Doppelklick" machen? Skizze öffnen, in Bearbeitung setzen, Definitionsfenster des Features öffnen? Was soll das Makro im gesamten machen? Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sigma12 Mitglied
Beiträge: 7 Registriert: 09.08.2013 Win7 64bit version SP1 Catia V5 R21 Sp1 i7 1,73 Ghz, 4GB
|
erstellt am: 26. Aug. 2013 17:40 <-- editieren / zitieren --> Unities abgeben:
bin in product workbench Ziel ist es: Hauptkörper von Product1 zu kopieren. dafür einen bestimmten String-Anteil suchen um richtigen Körper zu identifizieren selection.copy anschließend will ich das ganze in Product2 einfügen dafür wieder search eines Strings um das richtige Part zu finden selection.paste Allerdings funktioniert das ganze nur wenn Product2 vor dem Ausführen des Makros bearbeitet wird (Also rechte Maustaste auf das Product2 -> Objekt Product2 -> bearbeiten oder Alternativ Doppelklick auf Product2) und genau diesen Befehl (Also rechte Maustaste auf das Product2 -> Objekt Product2 -> bearbeiten) möchte ich quasi programmieren. Damit aus allen Situationen das Makro gestartet werden kann und ich ein über selection angewähltes Objekt bearbeiten kann.
Folglich möchte ich wissen wie ich eine Selection bearbeiten/doppelklicken kann mit Hilfe von VBA. Ich hoffe das Ganze ist soweit verständlich ^^ Schon mal vielen Dank für deine/eure Bemühungen 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: 26. Aug. 2013 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für sigma12
Servus Etwas verwirrend. Du bist in einem Product und willst einen Körper von einem Part ins andere kopieren? Oder ein Part von einem Product ins andere? Poste mal bitte den aufgezeichneten Code (wenn du das kopieren manuell machst) Gruß Bernd EDIT: Hier ist ein Beispiel. ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 26. Aug. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sigma12 Mitglied
Beiträge: 7 Registriert: 09.08.2013 Win7 64bit version SP1 Catia V5 R21 Sp1 i7 1,73 Ghz, 4GB
|
erstellt am: 26. Aug. 2013 18:31 <-- editieren / zitieren --> Unities abgeben:
Ausgangssituation: Aufgabe: Suche ###Hauptkörper über den String-Anteil ### Kopieren Suche xxxPart über String-Anteil xxx Einfügen Soweit ist das alles. Zum Problem: Das erfolgreiche Durchführen des Makros ist abhängig davon welches Part (ob Part3 oder xxxPart4) vor Ausführung des Makros in Bearbeitung (also Doppelklick oder siehe Bilder unten) gesetzt ist. Fallunterscheidung: Fall 1 Ist Part3 mit rechte Maustaste -> Object part3 -> Bearbeiten Kommt nach Ausführung des Makros eine Fehlermeldung: Fehler beim Kopieren von Dateien Fall 2 Ist xxxPart4 aktiviert/in Bearbeitung oder wie man das auch nennt (Funktion vom Doppelklick oder siehe Bild)
Funktioniert das Ganze. Meine Vorstellung zur Lösung: Über selection im Strukturbaum xxxPart4 erreichen. xxxPart 4 (wie in Bild) in bearbeitung setzten und dann das Makro wie gewohnt ausführen. Code: Dim selection As selection Set selection = CATIA.ActiveDocument.selection selection.Search ("Name=*###*,all") selection.Copy
selection.Search ("Name=*xxx*,all") selection.Paste
Vielen Dank schoneinmal und viele Grüße sigma P.S. Hoffe der Sachverhalt wird nun deutlich Habe versucht das Ganze so einfach wie möglich zu halten und es auf das kleinst Mögliche Problem herrunter zubrechen, so dass nur das Grundproblem betrachtet wird.
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: 26. Aug. 2013 19:17 <-- editieren / zitieren --> Unities abgeben: Nur für sigma12
Servus AFAIK lässt ich über ein Makro im Prodct nicht "in Bearbeitung setzen". Anbei ein Beispiel-Code, auch ohne Aktivieren der Unterbaugruppe. Das Ganze musst du "nur noch" mit der Suche nach dem Element/Namen ausbauen (Forensuche, Doku, Watch-Fenster im VBA-Editor): Zitat: Sub CatMain() Dim oActiveDoc As ProductDocument Set oActiveDoc = CATIA.ActiveDocument 'Quellpart/Zielpart Dim oPart1Doc As partDocument Dim oPart2Doc As partDocument Set oPart1Doc = oActiveDoc.Product.Products.Item("Part3.1").ReferenceProduct.Parent Set oPart2Doc = oActiveDoc.Product.Products.Item("Product3.1").Products.Item("Part4.1").ReferenceProduct.Parent 'Quell/Zielelement Dim oCopyObject As Body Dim oPasteObject As part Set oCopyObject = oPart1Doc.part.MainBody Set oPasteObject = oPart2Doc.part 'kopieren/einfügen oActiveDoc.Selection.Clear oActiveDoc.Selection.add oCopyObject oActiveDoc.Selection.Copy oActiveDoc.Selection.Clear oActiveDoc.Selection.add oPasteObject oActiveDoc.Selection.PasteSpecial "CATPrtResultWithOutLink" oPart2Doc.part.Update End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sigma12 Mitglied
Beiträge: 7 Registriert: 09.08.2013 Win7 64bit version SP1 Catia V5 R21 Sp1 i7 1,73 Ghz, 4GB
|
erstellt am: 27. Aug. 2013 11:29 <-- editieren / zitieren --> Unities abgeben:
Ersteinmal vielen Dank für deine Hilfe Prinzipiell funktioniert dein Code Allerdings nicht sofern das Teil Part3, wie in Bild vom ersten Fall, aktiviert ist. Dann kommt die gleiche Fehlermeldung. Ich denke ich lass das Makro einfach nur ausführen, wenn man auf dem Elternteil ist, dann funktioniert ja alles soweit. ^^ Es sei den es gibt die Möglichkeit einzelne Selections in einem neuen Fenster zu öffnen und dort zu bearbeiten. (Siehe Bild Fall 1, nicht bearbeiten sondern in neuem Fenster öffnen) Aber ich denke das funktioniert genausowenig wie das bearbeiten?? Eine Frage fürs Verständnis hätte ihc noch: Warum gehst du in der ersten Zeile nur bis Produkt mit dem Namen "Part3.1" und nicht wie in der zweiten Zeile bis zum eigentlichen Bauteil?
Code: Set oPart1Doc = oActiveDoc.Product.Products.Item("Part3.1").ReferenceProduct.Parent Set oPart2Doc = oActiveDoc.Product.Products.Item("Product3.1").Products.Item("Part4.1").ReferenceProduct.Parent
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: 27. Aug. 2013 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für sigma12
Servus Klar geht das Öffnen eines CATParts/CATProducts: Code:
Set oPart1Doc = oActiveDoc.Product.Products.Item(1).ReferenceProduct.Parent Dim oDocument As Document Set oDocument = CATIA.Documents.Open(oPart1Doc.FullName)
Warum gehst du in der ersten Zeile nur bis Produkt mit dem Namen "Part3.1" und nicht wie in der zweiten Zeile bis zum eigentlichen Bauteil?Weil das eine Bauteil direkt im Root-CATProduct verbaut ist, und das andere in einer Unterbaugruppe (siehe deine Bilder). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Projektleiter*in (m/w/i) Architektur Sonderbauten | Als führender Anbieter für Wohnraum und Stadtentwicklung in Potsdam übernimmt die ProPotsdam GmbH vielfältige Bauvorhaben von besonderer Bedeutung für die Landeshauptstadt. Zur Umsetzung anspruchsvoller Projekte suchen wir eine*n erfahrene*n und engagierte*n Projektleiter*in Architektur Sonderbauten (m/w/i), der unsere Vision einer lebenswerten und zukunftsorientierten Stadt mitgestaltet.... | Anzeige ansehen | Architektur |
|
sigma12 Mitglied
Beiträge: 7 Registriert: 09.08.2013 Win7 64bit version SP1 Catia V5 R21 Sp1 i7 1,73 Ghz, 4GB
|
erstellt am: 27. Aug. 2013 12:19 <-- editieren / zitieren --> Unities abgeben:
Servus, schade ich habe gedacht, durch das Öffnen umgehe ich den Befehl: Objekt_xy -> bearbeiten. Allerdings kommt der gewohnte Fehler. Seltsam ist, wenn ich genau vor dem Einfüge-Vorgang eine Haltemarke setzte und einach nur auf Bearbeiten -> Einfügen Spezial gehe, und As Result auswähle funktionierts. Sofern ich das mit diesem Code mache nicht: Code: Sub CATMain() Dim oActiveDoc1 As ProductDocument Set oActiveDoc1 = CATIA.ActiveDocument Dim oPart1Doc As PartDocument Dim oPart2Doc As PartDocument Set oPart1Doc = oActiveDoc1.Product.Products.Item("Part3.1").ReferenceProduct.Parent Set oPart2Doc = oActiveDoc1.Product.Products.Item("Product3.1").Products.Item("Part4.1").ReferenceProduct.Parent Dim oCopyObject As Body Dim oPasteObject As Part Set oCopyObject = oPart1Doc.Part.MainBody Set oPasteObject = oPart2Doc.Part oActiveDoc1.Selection.Clear oActiveDoc1.Selection.Add oCopyObject oActiveDoc1.Selection.Copy oActiveDoc1.Selection.Clear Dim oDocument As Document Set oDocument = CATIA.Documents.Open(oPart1Doc.FullName) Set oDocument = CATIA.ActiveDocument oDocument.Selection.Add oPasteObject 'Haltemarke oDocument.Selection.PasteSpecial "CATPrtResultWithOutLink" oDocument.Close End Sub
Zu den zwei Zeilen: Ahh ich sehs ^^. Dachte zunächst das Part3.1 unter Produkt2 angegliedert wird, aber es steht ja quasi alleine da ^^ Habe das Beispiel auf die schnelle sehr vereinfacht um den Sachverhalt zu vereinfachen und da wohl einen Flüchtigkeitsfehler begannen bzw. nicht genau aufgepasst, und somit entstand die Verwirrung
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |