Communauté
Inventor - Français
Bienvenue sur les forums Inventor d’Autodesk. Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets Inventor populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Mise à jour de la librairie d'apparence

12 RÉPONSES 12
RÉSOLU
Répondre
Message 1 sur 13
Skarab22
540 Visites, 12 Réponses

Mise à jour de la librairie d'apparence

Bonjour à tous,

 

J'ai fait pas mal de recherche mais je ne trouve pas l'info.

 

J'ai remarqué que quand j'applique une apparence à un assemblage, il arrive régulièrement cette apparence soit perdu lors des exports (step, navisworks,...).

 

Seule solutions que j'ai trouvé pour palier est d'appliquer l'apparence à l'intérieur même de la pièce. Le gros Inconvenient est que si jamais je dois modifier une apparence appliquée sur 100 pièces, il faut que j'ouvre les 100 pièces pour modifier leur apparence.


Existe t'il un moyen de mettre à jour l'apparence du document en fonction de l'apparence de la librairie avec une macro ou Ilogic par exemple (je précise que je suis nul en VBA). 

 

Merci d'avance 

12 RÉPONSES 12
Message 2 sur 13
ThomasB44
en réponse à: Skarab22

Salut @Skarab22 

D'abord tous les formats d'export ne gèrent pas les apparences. Pour le STEP par exemple, seule la représentation de vue principale est exportée. Donc si tu as réglé des apparences dans l'assemblage, il est normal qu'elles ne soient pas exportées.

Évidemment, comme tu l'as remarqué, la solution est de régler l'apparence dans la pièce.

Ceci est également possible avec iLogic, ou en VBA

En voici un exemple, qui va régler chaque pièce de l'assemblage en "Jaune" suivant la "Bibliothèque d'apparences d'Autodesk" :

Dim oAssy As Inventor.AssemblyDocument
Dim oCompOc As Inventor.ComponentOccurrence
Dim oCompDef As ComponentDefinition
Dim oPart As Inventor.PartDocument

Dim oAsset As Asset
Dim oLib As AssetLibrary

oLib = ThisApplication.AssetLibraries("Bibliothèque d'apparences d'Autodesk")
oDoc = ThisDoc.Document

If oDoc.DocumentType = Inventor.DocumentTypeEnum.kAssemblyDocumentObject Then
	For Each oCompOc In oDoc.ComponentDefinition.Occurrences
		oCompDef = oCompOc.Definition
		oPart = oCompDef.Document
		oAsset = oLib.AppearanceAssets("Jaune")
		oPart.ActiveAppearance = oAsset
	Next 
End If

Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 3 sur 13
Skarab22
en réponse à: ThomasB44

Au top, ça semble faire le boulot. Il faudra surement que j'affine au cas où je voudrais avoir plusieurs couleurs par assemblage.

 

Par contre, si la définition de l'apparence dans la pièce n'est pas la bonne, on se retrouve avec une couleur fausse.

Ex : 

J'ai une tuyau d'eau qui est avec une apparence eau dont la couleur est verte. Demain mon client me dit, je veux que l'eau soit en bleue. Il faut soit que je crée une nouvelle apparence eau. Soit que je supprime toute les apparences de la pièce puis que je réaffecte en fonction de ma lib.

Message 4 sur 13
ThomasB44
en réponse à: Skarab22

  1. Oui il faut que tu choisisses une méthode pour appliquer cette règle, il y a pleins de possibilités, et je ne peux pas choisir à ta place le moyen le plus adapté. On peut créer une liste de couleurs dans la règle, ou hors de la règle, on peut créer un formulaire...
  2. Oui également Smiley très heureux Par contre on peut ajouter une commande de mise à jour des apparences de la pièce par rapport à la bibliothèque et une purge avant de changer l'apparence pour éviter cela
Function UpdateStyle(oFile As String)
	oDoc = ThisApplication.Documents.Open(oFile)
	For i = 1 To oDoc.RenderStyles.Count
		If oDoc.RenderStyles.Item(i).UpToDate = False Then
			oDoc.RenderStyles.Item(i).UpdateFromGlobal
		End If
	Next
End Function

 

Function PurgeStyle(oFile As String)
	oDoc = ThisApplication.Documents.Open(oFile)
	Dim FoundUnused As Boolean
	Do
		FoundUnused = False
		Dim a As Asset
		For Each a In oDoc.Assets
			If Not a.IsUsed Then
			a.Delete
			FoundUnused = True
			End If
		Next
	Loop While FoundUnused
End Function 

 


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 5 sur 13
Skarab22
en réponse à: ThomasB44

J'ai trouvé comment le faire manuellement mais pas Ilogic :

Manage > Styles and Updates > Update.

@ThomasB44  Est ce que tu sais comment le faire en ligne de commande ?

Message 6 sur 13
ThomasB44
en réponse à: Skarab22

Oui la commande update s'active avec le code fourni dans la fonction ci-dessus.

 

Ah, et peut être intégrer une sélection par l'utilisateur pour changer les couleurs.

Pour l'instant le code change absolument TOUTES les pièces !


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 7 sur 13
Skarab22
en réponse à: ThomasB44

C'est bien le oPart qu'il faut passer comme argument à UpdateStyle ? 

UpdateStyle (oPart)

Comme je t'ai dit je suis vraiment une bille en VBA.

Message 8 sur 13
ThomasB44
en réponse à: Skarab22

En fait c'est une fonction que j'utilise dans une de mes règles. Ici oFile représente l'adresse complète du fichier.

Précise moi comment tu veux changer la ou les couleurs, et je te modifierai la règle avec la mise à jour et la purge des apparences.

 

PS : iLogic utilise du VB.NET, qui est une sorte de VBA simplifié Smiley clignant de l'œil


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 9 sur 13
Skarab22
en réponse à: ThomasB44


@ThomasB44  a écrit :

Ici oFile représente l'adresse complète du fichier.


C'est ce que j'avais vu en regardant un peu en regardant mais du coup je n'arrive pas à l'adapter au code que tu as fait précédemment.


@ThomasB44  a écrit :

PS : iLogic utilise du VB.NET, qui est une sorte de VBA simplifié Smiley clignant de l'œil


Effectivement, j'arrive à faire certains truc simple, mais je galère encore avec la nature des objets que je manipule donc souvent ca ne s'execute pas.

 

En gros, j'aimerai qu'avant d'appliquer une appearance :

- soit on vire toutes les apparence qui existe déjà

- soit on update puis on applique

 

Il faut que je vois à l'usage ce qui est le plus pratique (j'aurais tendance à dire la 2e solution).

 

En tout cas un gros merci pour les infos

Message 10 sur 13
ThomasB44
en réponse à: Skarab22

Je ne crois pas que la mise à jour et la purge soient faisables dans le contexte de l'assemblage.

Pour être sûr que ça soit bien fait, je préfère ouvrir la pièce, mettre à jour, purger et fermer, au moins on est sûr que c'est bien fait.

Je t'ai ajouté un de mes codes pour la sélection des pièces. Soit tu sélectionnes d'abord, puis lance le code, soit le code va te proposer de sélectionner une ou plusieurs pièces, il faut appuyer sur Echap pour arrêter d'en ajouter. Smiley clignant de l'œil

Il manque le processus de choix des couleurs.

Sub Main
'Variables
Dim oDoc As Inventor.AssemblyDocument
oDoc = ThisDoc.Document
Dim oOcc As ComponentOccurrence
Dim oOccCol As Inventor.ObjectCollection
oOccCol = ThisApplication.TransientObjects.CreateObjectCollection
Dim oCompOcc As Inventor.ComponentOccurrence
Dim oCompDef As ComponentDefinition
Dim oPart As Inventor.PartDocument
Dim oFile As String
'Library
Dim oAsset As Asset
Dim oLib As AssetLibrary
oLib = ThisApplication.AssetLibraries("Bibliothèque d'apparences d'Autodesk")

If oDoc.DocumentType <> kAssemblyDocumentObject Then
	MessageBox.Show("Ceci n'est pas un assemblage", "iLogic")
	Return
End If

'check for selection
Dim oSelSet As SelectSet
oSelSet = oDoc.SelectSet
If oSelSet.Count = 0 Then
	While True
		'Ask user for a selection
		oOcc = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select a component :")
		If IsNothing(oOcc) Then Exit While
		'Add component to collection
		oOccCol.Add(oOcc)
	End While
	'Add collection to selection
	oDoc.SelectSet.SelectMultiple(oOccCol)
	oSelSet = oDoc.SelectSet	
End If

'Loop through collection
For Each oOcc In oSelSet
	oFile = oOcc.ReferencedDocumentDescriptor.FullDocumentName
	UpdateStyle(oFile)
	PurgeStyle(oFile)
	oCompDef = oOcc.Definition
	oPart = oCompDef.Document
	oAsset = oLib.AppearanceAssets("Jaune")
	oPart.ActiveAppearance = oAsset
Next
End Sub

Function UpdateStyle(oFile As String)
	oDoc = ThisApplication.Documents.Open(oFile)
	For i = 1 To oDoc.RenderStyles.Count
		If oDoc.RenderStyles.Item(i).UpToDate = False Then
			oDoc.RenderStyles.Item(i).UpdateFromGlobal
		End If
	Next
	oDoc.Close
End Function

Function PurgeStyle(oFile As String)
	oDoc = ThisApplication.Documents.Open(oFile)
	Dim FoundUnused As Boolean
	Do
		FoundUnused = False
		Dim a As Asset
		For Each a In oDoc.Assets
			If Not a.IsUsed Then
			a.Delete
			FoundUnused = True
			End If
		Next
	Loop While FoundUnused
	oDoc.Close
End Function   

 


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 11 sur 13
Skarab22
en réponse à: ThomasB44

Trop bien !!!!

 

Ca marche nickel. J'ai juste un petit bug lorsque ce n'est pas la librairie Inventor par défaut mais je pense savoir pourquoi et au pire je peux m'adapter.

 

Un gros merci ! 

Message 12 sur 13
ThomasB44
en réponse à: Skarab22

Salut @Skarab22 

Est ce que tu as résolu ton "petit bug" ? Smiley clignant de l'œil


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 13 sur 13
Skarab22
en réponse à: ThomasB44

Non désolé, je n'ai pas eu le temps de me remettre dessus. J'étais sur un autre sujet (les tubes tordus sur lesquels tu m'as aussi aider...).

 

J'essaie de boucler ça dans la semaine et je te fais un retour.

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report