Autor
|
Thema: Rootknoten aktivieren (2554 mal gelesen)
|
Lambo5 Mitglied Consulting
Beiträge: 4 Registriert: 16.02.2007
|
erstellt am: 16. Feb. 2007 20:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte mit einem Skript den Rootknoten einer Baugruppe aktivieren (blau hinterlegt). Beim Start des Skripts ist ein beliebiges Part in der Baugruppe aktiv. Aus diesem heraus wird das Skript gestartet, welches u.a. an jedem Knoten in der Baugruppe einen Parameter erzeugt. Diese Parameter sollen aber nur temporär sein, und ich möchte diese am Ende des Skriptlaufs wieder aus der Baugruppe löschen. Dies funktioniert aber nur, wenn der Rootknoten in der Baugruppe aktiv ist. Ansonsten kommt beim Löschen in immer die Meldung "Selected elements not allowed for this operation". Weiss da vielleicht jemand Rat. Alle meine Versuche mit .Product / .ReferenceProduct /. ActivateDefaultShape usw. sind bisher fehlgeschlagen. Danke für die Hilfe..... 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. Feb. 2007 07:14 <-- editieren / zitieren --> Unities abgeben: Nur für Lambo5
Hallo Lambo5, was du schreibst ist nicht richtig. Es kann in einer verschachtelten Produktstruktur in der tiefsten Ebene ein Part aktiviert sein (in dem du dich befindest, welches also "blau hinterlegt" ist), und du kannst in der kompletten restlichen Struktur Objekte löschen/anlegen/editieren. Das ein Part/Product "blau hinterlegt" (= aktiviert) sein muss, um mittels Script etwas damit zu machen ist ein Irrtum, den ich im Forum öfter lese. Das ist nur für bestimmte mittels CATIA.StartCommand ausgeführte Befehle der Fall. Beschreib mal ein bischen genauer, was du vor hast. Gruss TomTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lambo5 Mitglied Consulting
Beiträge: 4 Registriert: 16.02.2007
|
erstellt am: 19. Feb. 2007 11:22 <-- editieren / zitieren --> Unities abgeben:
Hallo TomTom, ich durchsuche mit meinem Skript die Produkstruktur nach bestimmten Strings in der Partnumber. Die gefundenen Teile sollen im Anschluss aus der Produktstruktur entfernt werden. Um diese Teile später aber evt. wieder an der richtigen Stelle einzufügen, hinterlege ich im Adapterteil die Information in welcher Subbaugruppe sich das Einzelteil vor dem Löschen befand. Um diese Info in den Adapter zu übertragen, erstelle ich für jedes Product/Part auf Assemblyebene einen Parameter in dem drinsteht, welchem übergeordneten Productknoten dieses Teil / Baugruppe zugeordnet ist. Diese Infoparameter brauche ich aber nur temporär, und möchte sie am Ende des Skriptlaufes wieder löschen... und genau da liegt mein Problem - ich krieg die Dinger nur raus, wenn ich von Hand den Rootknoten der Baugruppe aktiviere. Ist ein Teil aktiv, so kann Catia die Parameter nicht löschen. Gruss Lambo 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. Feb. 2007 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für Lambo5
Hallo, erzeuge mal eine verschachtelte Product-Struktur (CATProducts, CATParts). Bitte abspeichern. Wechsle in ein Part ganz unten im Tree (dieses ist jetzt "blau hinterlegt"). Jetzt starte mal u.s. Script und klicke auf "Yes". In jedem CATProduct & CATPart werden 5 Parameter erzeugt. Jetzt starte das Script noch mal und klicke auf "No". In jedem CATProduct & CATPart werden die Parameter gelöscht. Obwohl ein Part ganz unten im Tree "aktiv" ist. Wo liegt das Problem? Oder ich habs immer noch nicht verstanden. Bei mir gehts auf jeden Fall. Gruss TomTom Code: Language="VBSCRIPT" Sub CATMain() Set oRoot = Catia.ActiveDocument Set oProduct = oRoot.Product Set oProducts = oProduct.Products iDelOrCreate = MsgBox("Yes = Create Parameters No = Delete Parameters ", 3, "What do you want to do?") If iDelOrCreate = 6 Then MsgBox "Now we create some Parameters ", 64, "Info" For i = 1 to 5 SUB_ProdScan oProducts, iDelOrCreate, i oProduct.Update Next ElseIf iDelOrCreate = 7 Then MsgBox "Now we delete the Parameters ", 64, "Info" SUB_ProdScan oProducts, iDelOrCreate, 0 oProduct.Update Else Exit Sub End if End Sub Sub SUB_ProdScan(oProducts, iDelOrCreate, i) For iProdScan = 1 To oProducts.Count Set oProduct = oProducts.Item(iProdScan) If TypeName(oProduct.ReferenceProduct.Parent) = "PartDocument" Then Set oDoc = oProduct.ReferenceProduct.Parent.Part ElseIf TypeName(oProduct.ReferenceProduct.Parent) = "ProductDocument" Then Set oDoc = oProduct.ReferenceProduct.Parent.Product If oProduct.Products.Count > 0 Then Set oProductsUebergabe = oProduct.Products SUB_ProdScan oProductsUebergabe, iDelOrCreate, i End If End If Set oParams = oDoc.Parameters If iDelOrCreate = 6 Then Set strParam1 = oParams.CreateString("Test." & i, "Hallo Welt") ElseIf iDelOrCreate = 7 Then For Each oParameter in oParams If Instr(1, oParameter.Name, "Test") Then oParams.Remove(oParameter.Name) End if Next End if Next End Sub ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
prosper Mitglied Dipl.-Ing. -- Methoden und Prozessentwicklung Catia V5
Beiträge: 86 Registriert: 05.05.2004
|
erstellt am: 20. Feb. 2007 19:54 <-- editieren / zitieren --> Unities abgeben: Nur für Lambo5
Servus zusammen, Tomtom hat im Bereich Parameters schon recht, weil er die Parameters nicht über die Selektion löscht sondern über Parameters.Remove (oParam.Name). Wenn es sich aber um Copy/Paste Operationen handelt (die über die Selection laufen) sollte schon mindestens das gemeinsame Produkt zwischen den beide Parts blau hinterlegt sein. Optimal, um sicher zu sein, wäre schon schön das RootProdukt blau zu hinterlegen. Ich habe es persönnlich noch nicht geschaft. Eines habe ich sogar schon mal probiert. Jetzt können sie lachen. Das RootProdukt in die Selection addieren (Root wird rot markiert), ein ScreenShot erzeugen, und die Pixels nach RGB Farbe zu analysieren. Wenn ein Roter Bereich gefunden ist, die Maus auf die Koordinaten positionieren und ein Doppel Klick simulieren.... Das habe ich natürlich nur zum Spass gemacht, die Performance ist echt beschissen. Hat jemanden vielleicht eine schnellere und stabilere Lösung? Ich muss nur noch über die Vorgehensweise lachen. Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lambo5 Mitglied Consulting
Beiträge: 4 Registriert: 16.02.2007
|
erstellt am: 22. Feb. 2007 12:18 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für deinen Lösungsvorschlag TomTom. Mein Fehler war, dass ich die Parameter über die Selection löschen wollte. Mit Remove funktioniert das ganze. Habe nun auch noch den Fall, dass ich Parts aus der Produktstruktur löschen will. Da gibts ja eigentlich auch die Remove-Methode. Aber die klappt bei mir nicht - bzw. nur wenn beim Skriptstart der Rootknoten aktiviert ist. Mir ist aufgefallen dass du TypeName verwendet hast - war mir bisher unbekannt. Hab so etwas immer über .FullName gelöst. Scheint genauso zu funktionieren - auf die Performance hats jedenfalls keinen Einfluss. Vielen Dank nochmal für die schnelle Hilfe Lambo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goosnargh Mitglied
Beiträge: 80 Registriert: 30.11.2004
|
erstellt am: 27. Feb. 2007 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Lambo5
Ich hab mir mal ne Lösung gebastelt, aber auch nicht gerade stabil: Sub NeuesProdukt() Dim ToBeClosed As String CATIA.ActiveDocument.Selection.Add CATIA.ActiveDocument.Product CATIA.ActiveDocument.Selection.Copy CATIA.ActiveDocument.Selection.Clear
Dim documents1 As Documents Set documents1 = CATIA.Documents Dim productDocument1 As ProductDocument Set productDocument1 = documents1.Add("Product") CATIA.ActiveDocument.Selection.Add CATIA.ActiveDocument.Product ToBeClosed = CATIA.ActiveDocument.Product.PartNumber CATIA.ActiveDocument.Selection.PasteSpecial "CATProdCont" CATIA.DisplayFileAlerts = False CATIA.StartCommand ("Open In New Window")
CATIA.Windows.Item(ToBeClosed).Close End Sub Ich kopiere mein Aktives Dokument in ein neues Produkt, und offne es wieder in einem neuen fenster. Endet leider öfter mal im Command Interrupt. Ausserdem funktioniert das Windows.Close nicht. Gar nicht, egal wo ich es anwende, er aktiviert das Fenser und schließt es nicht. Hat da jemand ne lösung?
[Diese Nachricht wurde von Goosnargh am 27. Feb. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Ingenieur Maschinenbau (m/w/d) | Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Du weißt genau, was du technologisch auf dem Kasten hast? Du suchst einen ... | Anzeige ansehen | Maschinenbau |
|
Lambo5 Mitglied Consulting
Beiträge: 4 Registriert: 16.02.2007
|
erstellt am: 28. Feb. 2007 20:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, statt dem Öffnen, könntest du ja auch die .Read Methode verwenden. Funktioniert bei mir ganz gut. Hat aber leider Mängel, wenn du innerhalb einer Baugruppe alle Subprodukte bearbeiten willst. Für die erste Ebene der Subprodukte ist es aber nicht schlecht. Gruss Lambo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|