| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Auf dem Weg zur digitalen Auftragsmappe. , ein Anwenderbericht
|
Autor
|
Thema: per iLogic die Farbe von Referenz Modellen ändern (3899 / mal gelesen)
|
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 08. Jul. 2017 12:23 <-- editieren / zitieren --> Unities abgeben:
Hi, bin neu hier und brauche Hilfe bei meinem vorhaben. Da die Erkenntlichkeit von Referenzbauteilen in Baugruppen optisch gar nicht gegeben ist dachte ich mir wäre es sinnvoll diese per iLogic zu verändern. Jedoch bin ich was die iLogic "Programmierung" angeht ein Neuling. Kann mir hier einer helfen? Umgesetzt werden soll das ich per iLogic Regel eine Baugruppe durchsuche nach Referenzmodellen und diese dann z.B. Rot färbe. Freundliche Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nightsta1k3r Ehrenmitglied V.I.P. h.c. plaudern
Beiträge: 11279 Registriert: 25.02.2004 Hier könnte ihre Werbung stehen!
|
erstellt am: 08. Jul. 2017 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für mfleon
nicht direkt die Lösung, aber nimm als Referenzfarbe etwas Transparentes, grün klar o.ä. (die transparenten Farben sind inzwischen gut versteckt ) , rot ist die Pechvogellösung. ------------------
------------------ Der Clown ist die wichtigste Mahlzeit am Tag. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 08. Jul. 2017 15:59 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Info Ich hab herausgefunden das BOMStructureEnum.kReferenceBOMStructure meine gesuchtes Problem ist. wie mann man das in einer Baugruppe suchen lassen und dem eine Farbe verpassen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 10. Jul. 2017 12:04 <-- editieren / zitieren --> Unities abgeben:
hier mal eine iLogic das alles in der Baugruppe wieder sichtbar macht vll. hilft das irgendwie? //codeon Dim oDoc As Document oDoc = ThisDoc.Document Dim comp As ComponentOccurrencesEnumerator comp =oDoc.ComponentDefinition.Occurrences.AllLeafOccurrences Dim Occ As ComponentOccurrence For Each Occ In comp Occ.Visible = True Next //codeoff Quelle: Autodeskforum Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 12. Jul. 2017 07:17 <-- editieren / zitieren --> Unities abgeben:
|
GeorgK Mitglied
Beiträge: 619 Registriert: 06.06.2001 Inventor 2020 Siemens NX 8.5 - 12.0 Autocad Mechanical 2020 Catia V5R19 3,4 GHz; 64 GB RAM Windows 10 openSUSE Leap 42.3 Visual Studio 2010 - 2017 Windows 2012 R2 Vault 2017
|
erstellt am: 12. Jul. 2017 15:06 <-- editieren / zitieren --> Unities abgeben: Nur für mfleon
|
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 12. Jul. 2017 20:34 <-- editieren / zitieren --> Unities abgeben:
Ich hab die iLogic von deinem Link schon ausprobiert genial! Code: Sub Main()oCompDef = ThisDoc.Document.ComponentDefinition oAssyOccurrences = oCompDef.Occurrences oViewRepsCollection = oCompDef.RepresentationsManager.DesignViewRepresentations Dim oOccurrence As ComponentOccurrence Dim oViewRep As DesignViewRepresentation Dim oSubOccurrence1 As ComponentOccurrence 'For first level of sub-occurrences Dim oSubOccurrence2 As ComponentOccurrence 'For second level of sub-occurrences For Each oViewRep In oViewRepsCollection oViewRep.Activate 'Activate each view rep one at a time If oViewRep.Name = "Master" Then 'Do nothing. This makes the code ignore the Master view rep Else If oViewRep.Locked Then 'If the view rep is locked, unlock it, make the changes, then lock it again oViewRep.Locked = False For Each oOccurrence In oAssyOccurrences 'Run the code for top-level occurrences If oOccurrence.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then 'If the occurrence is an assembly, run the code for each of its sub-occurrences If oOccurrence.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Then 'If the whole sub-assembly is set to reference, just turn the whole thing off. 'No need to control the visibility of sub-components. oOccurrence.Visible = False Else 'Run the code for all sub-components For Each oSubOccurrence1 In oOccurrence.SubOccurrences 'Run the code for the first level of sub-components If oSubOccurrence1.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then 'If the occurrence is an assembly, run the code for each of its sub-occurrences If oSubOccurrence1.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Then 'If the whole sub-assembly is set to reference, just turn the whole thing off. 'No need to control the visibility of sub-components. oSubOccurrence1.Visible = False Else 'Run the code for all sub-components For Each oSubOccurrence2 In oSubOccurrence1.SubOccurrences 'Run the code for the second level of sub-components fVisibilitySwitch(oSubOccurrence2) Next End If Else 'Run the code if the sub-component is a part document fVisibilitySwitch(oSubOccurrence1) End If Next End If Else 'Run the code if the component is a part document fVisibilitySwitch(oOccurrence) End If Next oViewRep.Locked = True Else 'Runs the code on the unlocked view reps For Each oOccurrence In oAssyOccurrences 'Run the code for top-level occurrences If oOccurrence.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then 'If the occurrence is an assembly, run the code for each of its sub-occurrences If oOccurrence.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Then 'If the whole sub-assembly is set to reference, just turn the whole thing off. 'No need to control the visibility of sub-components. oOccurrence.Visible = False Else 'Run the code for all sub-components For Each oSubOccurrence1 In oOccurrence.SubOccurrences 'Run the code for the first level of sub-components If oSubOccurrence1.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then 'If the occurrence is an assembly, run the code for each of its sub-occurrences If oSubOccurrence1.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Then 'If the whole sub-assembly is set to reference, just turn the whole thing off. 'No need to control the visibility of sub-components. oSubOccurrence1.Visible = False Else 'Run the code for all sub-components For Each oSubOccurrence2 In oSubOccurrence1.SubOccurrences 'Run the code for the second level of sub-components fVisibilitySwitch(oSubOccurrence2) Next End If Else 'Run the code if the sub-component is a part document fVisibilitySwitch(oSubOccurrence1) End If Next End If Else 'Run the code if the component is a part document fVisibilitySwitch(oOccurrence) End If Next End If End If Next oViewRepsCollection.Item("Default").Activate 'Sets the view rep back to the one called "Default" End Sub Sub fVisibilitySwitch(oOccurrence As ComponentOccurrence) 'This sub toggles the component visibility based on if its BOM structure ' is set to reference (visibility = off) or other (visibility = on). If (oOccurrence.BOMStructure = BOMStructureEnum.kReferenceBOMStructure) Then oOccurrence.Visible = False Else If oOccurrence.Visible = False Then 'Do nothing. This makes sure that if the visiblity is already off, ' it will stay off. This prevents the code from undoing any visibility ' changes that have been made to set up custom view representations. 'This method will not automatically turn the visiblity on if the item's ' BOM structure is changed from reference to something else. 'This will have to be done manually. Else oOccurrence.Visible = True End If
End Sub
hier mal der Code davon. Wenn ich jetzt ein iLogic Gott wär könnt ich sicherlich dahintersteigen wo ich was ändern muss. Jedoch steh ich aufm Schlauch. Aber ich werds mir morgen mal auf der arbeit anschauen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 18. Jul. 2017 18:06 <-- editieren / zitieren --> Unities abgeben:
|
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 20. Jul. 2017 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für mfleon
Hier nur ein Denkanstoß. Hatte leider keine Zeit, das fertig anzupassen. Evtl. hilft es trotzdem... Der Code unten färbt eine Komponente ein (auf Bgr.Ebene, ipt bleibt unverändert/ungefärbt). Ich habe mal willkürlich "Glas" gewählt. Erst wird geprüft, ob die Farbe schon im Dokument vorhanden ist und falls nötig aus der Bibliothek geholt. Name der Bibliothek im Code unbedingt anpassen! Im Grunde musst Du alle Stellen in Deinem Code, wo die Sichtbarkeit ausgeschaltet wird ( .Visible = False) durch den Aufruf des Subs unten ersetzen. Außerdem fehlt dann noch die umgekehrte Richtung (also das Gegenstück zu .Visible = True) bei dem die Farbüberschreibung deaktiviert wird. Mein Code ist VBA. Nicht getestet in iLogic! Code: Sub SetOccurrenceAppearance(occ As ComponentOccurrence) 'aus Hilfe kopiert und angepasst ' Set the appearance of an occurrence. API Sample ' und angepasst, so dass eine bestimmte Darstellung einer Komponente zugewiesen wird ' Dim asmDoc As AssemblyDocument Set asmDoc = ThisApplication.ActiveDocument ' Get an appearance from the document. To assign an appearance is must ' exist in the document. This looks for a local appearance and if that ' fails it copies the appearance from a library to the document. Dim localAsset As Asset On Error Resume Next Set localAsset = asmDoc.Assets.Item("Glas") If Err Then On Error GoTo 0 ' Failed to get the appearance in the document, so import it. ' Get an asset library by name. Either the displayed name (which ' can changed based on the current language) or the internal name ' (which is always the same) can be used. Dim assetLib As AssetLibrary Set assetLib = ThisApplication.AssetLibraries.Item("Firma_COLORS") 'hier den zutreffenden Namen der Bibliothek angeben!! ' Get an asset in the library. Again, either the displayed name or the internal ' name can be used. Dim libAsset As Asset Set libAsset = assetLib.AppearanceAssets.Item("Glas") ' Copy the asset locally. Set localAsset = libAsset.CopyTo(asmDoc) End If On Error GoTo 0 ' Assign the asset to the occurrence. occ.Appearance = localAsset End Sub
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 25. Jul. 2017 08:28 <-- editieren / zitieren --> Unities abgeben:
|
W. Holzwarth Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau
Beiträge: 9335 Registriert: 13.10.2000 Inventor bis 2025, Rhino 8, Mainboard ASUS ROG STRIX X570F-Gaming, CPU Ryzen 9 5900X, 64 GB RAM, 4 TB SSD, Radeon RX 6900 XT, Dual Monitor 24", Spacemouse Enterprise, Win 10 22H2
|
erstellt am: 25. Jul. 2017 18:43 <-- editieren / zitieren --> Unities abgeben: Nur für mfleon
|
mfleon Mitglied Maler
Beiträge: 8 Registriert: 08.07.2017
|
erstellt am: 06. Aug. 2017 11:15 <-- editieren / zitieren --> Unities abgeben:
|