Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Findobject mit bestimmten String-Teil

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:  Findobject mit bestimmten String-Teil (4213 mal gelesen)
sigma12
Mitglied


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

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 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

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


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: 26. Aug. 2013 14:10    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 sigma12 10 Unities + Antwort hilfreich

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


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

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 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

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


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: 26. Aug. 2013 16:56    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 sigma12 10 Unities + Antwort hilfreich

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


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

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 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

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


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: 26. Aug. 2013 18:08    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 sigma12 10 Unities + Antwort hilfreich

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


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

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 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

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


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: 26. Aug. 2013 19:17    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 sigma12 10 Unities + Antwort hilfreich

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


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

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 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

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


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: 27. Aug. 2013 11:38    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 sigma12 10 Unities + Antwort hilfreich

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 ansehenArchitektur
sigma12
Mitglied


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

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 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,

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

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