Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Objekt finden mittels FindObject...

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:  Objekt finden mittels FindObject... (2551 mal gelesen)
Pausenbrot
Mitglied



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

Beiträge: 20
Registriert: 24.10.2007

erstellt am: 17. Dez. 2007 11: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

Hallo,

hier meine erste Frage in diesem Forum...

Werden Elemente im "Space" selektiert, so kann mann mittels FindObject dazugehörige Objekte finden. Bsp.:FindObject("CATIABody") für den dazugehörigen Body. Das ist alles klar.

Aber:
Ist dieses selektierte Bauteil mehrmals im Catia-Baum verbaut, so ermittelt mir die FindObject-Funktion ein Body von irgendein verbautes Part, aber nicht das selektierte.
Wie kann man den Body greifen, zu dem die Selektion passt und das bei mehreren Bauteilen (Instancen)?

Anbei mal den von mir verwendeten Code zur Body-Ermittlung...

----------------------------------------------------- 
  Dim objsel As Selection
  Set objsel = CATIA.ActiveDocument.Selection
 
  Dim objSelArray() As Body
  Dim iCounter As Integer
  Dim iArTuner As Integer
  iArTuner = 0
  ReDim Preserve objSelArray(iArTuner)
 
  On Error Resume Next
  If objsel.Count2 > 0 Then
    For iCounter = 1 To objsel.Count2
      Set objSelArray(iArTuner) = objsel.FindObject("CATIABody")
      If (objSelArray(iArTuner) Is Nothing) Then
        'alles okay, keine Aktion
      Else
        iArTuner = iArTuner + 1
        ReDim Preserve objSelArray(iArTuner)
      End If
    Next
    ReDim Preserve objSelArray(iArTuner - 1)
  Else
    Exit Sub
  End If
  On Error GoTo 0
  ...
-----------------------------------------------------

Grüße vom Pausenbrot

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 17. Dez. 2007 13:32    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 Pausenbrot 10 Unities + Antwort hilfreich

Hallo Pausenbrot,

mit .FindObject findet man die zu einer Selektion zugehörigen Objekte, die sich im Tree oberhalb des selektierten Elementes befinden. Und diese Angabe bezieht sich dabei auf die Instanz (!!) eines verbauten (z.B.) .CATParts. Das kannst du testen mit:
.FindObject("CATIAProduct). Das gibt dir nämlich genau die Instanz zurück.

TomTom

------------------
tomtom1972

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Pausenbrot
Mitglied



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

Beiträge: 20
Registriert: 24.10.2007

erstellt am: 18. Dez. 2007 17:04    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 TomTom,

die Idee, die Insatnce auszulesen ist schon einleuchtent, führt bei meiner Anwendung aber zu folgenden Problem:

Lese ich mit FindObject("CATIAProduct") die Instance aus, wird diese aus der Selction gelöscht. Nun ist mir nicht mehr möglich den selektierten Body zu ermitteln (wenn mehrere im Part vorhanden).
Gibt es eine Möglichkeit aus einer Selection die Instance [FindObject("CATIAProduct")] und den selektierten Bodyname (FindObject("CATIABody").Name] auszulesen?
Oder kann man die Selection speichern, in einer Variablen und dann wieder verwenden...?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 19. Dez. 2007 06:41    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 Pausenbrot 10 Unities + Antwort hilfreich

Moin Pausenbrot,

Jedes mit .FindObject ermittelte Element wird nachher aus der Selektion gelöscht. Das hat die Methode selbst so an sich. Also auch dein Body.
Dein Problem liegt aber woanders. Zum Verständnis.
Die Bodies gehören zum Dokument eines Parts und nicht zur Instanz.
Bsp.:
'--- eine Instanz
Set oProd = CATIA.ActiveDocument.Product.Products.Item(n)
'--- das zugehörige Dokument
Set oDoc = oProd.ReferenceProduct.Parent
'--- die Bodies
Set oBodies = oDoc.Part.Bodies

Wenn du also in den Bodies (und damit im PartDocument) "angelangt" bist, ist die Info, in welcher Instanz des Parts der Body selektiert wurde, nicht mehr verfügbar.

Es geht nur über .FindObject("CATIAProduct").

Das löschen stellt an sich kein problem dar.
Du musst einfach die Selektion auslesen und den selektierten Body wieder der Selektion zufügen. Also so:

Language="VBSCRIPT"

Sub CATMain()

Set oSel = CATIA.ActiveDocument.Selection
'--- irgendein Body ist hier selektiert
Set oSelectedElement =  oSel.Item(1).Value
Set oProdBelongToSel = oSel.FindObject("CATIAProduct")
oSel.Clear
MsgBox oProdBelongToSel.Name
oSel.Add (oSelectedElement)
MsgBox oSel.Item(1).Value.Name

End Sub

Hilft dir das?

Gruß TomTom


------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 19. Dez. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Pausenbrot
Mitglied



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

Beiträge: 20
Registriert: 24.10.2007

erstellt am: 19. Dez. 2007 10:43    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 TomTom

ich habe mein Problem mit deiner Antwort aus einem anderen Beitrag lösen können.
s. Anwort... "wie speichert man eine Selection": http://ww3.cad.de/foren/ubb/Forum137/HTML/002152.shtml#000003

Schnappe mir also die Instance in ein Array und den Body in ein zweites Array.
Und mittels folgenden Code bekomme ich immer den richtigen Body zur richtigen Instance:
  Call objSel.Add(objInstancen(iCounter).ReferenceProduct.Parent.Part.Bodies.Item(objBody(iCounter).Name))

Ja, und das ganze funktionierte auf den einen Rechner wunderbar und auf den nächsten gab es nur noch folgendes Problem:
Eine Selektion wurde schön ausgelesen und das Objekt gespeichert, entsprechend Beitrag s. oben. Beim wiederholen mittels
  Dim objSel As Selection
  Set objSel = CATIA.ActiveDocument.Selection

  objSel.Add ...
wurde diese zwar der Selektion hinzugefügt, aber im Space nicht "geHighlighted".
Beim Instancensuchen mittels objSel.FindObject("CATIAProduct") stürtzte Catia mit Lieblingsmeldung "Click Okay to.." ab.

Auf den ersten Rechner funktionierte das "Hightlighten" durch das Programm und es stürtzte nicht ab. Kennt jemannd das Prob? Muss man ne Einstellung setzten?

Gruß das Pausenbrot

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Pausenbrot
Mitglied



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

Beiträge: 20
Registriert: 24.10.2007

erstellt am: 19. Dez. 2007 10:58    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 TomTom,

ich war schneller...
die Einstellung die ich gesucht hatte war:
  CATIA.RefreshDisplay = True

Nun keine Abstürze mehr und Makro läuft. Hab Dank für die Aufschlautipps...

Gruß das Pausenbrot

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