Autor
|
Thema: Objekt finden mittels FindObject... (2551 mal gelesen)
|
Pausenbrot Mitglied
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 17. Dez. 2007 11:46 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für Pausenbrot
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
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 18. Dez. 2007 17:04 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für Pausenbrot
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
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 19. Dez. 2007 10:43 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 20 Registriert: 24.10.2007
|
erstellt am: 19. Dez. 2007 10:58 <-- editieren / zitieren --> Unities abgeben:
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 |