Export fichiers Ilogic

Export fichiers Ilogic

Anonymous
Non applicable
633 Visites
4 Réponses
Message 1 sur 5

Export fichiers Ilogic

Anonymous
Non applicable

Bonjour,

 

Je cherche à exporter les éléments contenus dans un assemblage, mais uniquement dans le 1er niveau. Je ne veux pas exporter l'ensemble des parts. J'ai trouvé plusieurs topic qui traitent du sujet, mais à chaque fois cela exporte l'ensemble de l'arbre.

 

Avec un bout de code trouvé réalisé par @ThomasB44 j'ai réussi à faire ce que je veux sauf que le premier fichier n'a pas de nom et les suivants sont décallé...

 

Une idée de ce que j'ai mal fait ?

 

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 oFile As String
	'Library
	Dim oAsset As Asset

	'- - - - - - - - - - - - -STEP setup - - - - - - - - - - - -
	oPath = ThisDoc.Path
	'get STEP target folder path
	oFolder = oPath & "\" & oAsmName & " STEP Files"
	'Check for the step folder and create it if it does not exist
	If Not System.IO.Directory.Exists(oFolder) Then
	System.IO.Directory.CreateDirectory(oFolder)
	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
		Dim oCurFile As Document
		oCurFile = ThisApplication.Documents.Open(oFile, True)
		oCurFile.SaveAs(oFolder & "\" & ShortName & (".stl"), True)
		oCurFileName = oCurFile.FullFileName
		
		'defines backslash As the subdirectory separator
	    Dim strCharSep As String = System.IO.Path.DirectorySeparatorChar
	   
	    'find the postion of the last backslash in the path
	    FNamePos = InStrRev(oCurFileName, "\", -1)  
	    'get the file name with the file extension
	    Name = Right(oCurFileName, Len(oCurFileName) - FNamePos)
	    'get the file name (without extension)
	    ShortName = Left(Name, Len(Name) - 4)
		
	If ThisDoc.Document.ComponentDefinition.BOMStructure  <>  BOMStructureEnum.kPurchasedBOMStructure Then	
	    Try		
	        oCurFile.SaveAs(oFolder & "\" & ShortName & (".stl") , True)		
	    Catch
	        MessageBox.Show("Error processing " & oCurFileName, "ilogic")
	    End Try
				
	    oCurFile.Close
		Else
		oCurFile.Close
		End If
		
	Next
End Sub

 

0 J'aime
Solutions acceptées (1)
634 Visites
4 Réponses
Replies (4)
Message 2 sur 5

ThomasB44
Mentor
Mentor

Bonjour @Anonymous 

Et merci d'avoir cité un de mes codes 😃

Il y a plusieurs choses que je ne comprends pas dans ton code.

Dans ta boucle, à partir de :

'Loop through collection
	For Each oOcc In oSelSet

 Tu commences par exporter en STL, jusque là ok

Mais ensuite, tu exportes à nouveau avec un code différent :

If ThisDoc.Document.ComponentDefinition.BOMStructure  <>  BOMStructureEnum.kPurchasedBOMStructure Then	
	    Try		
	        oCurFile.SaveAs(oFolder & "\" & ShortName & (".stl") , True)	

Tu souhaites exporter seulement s'il s'agit  d'un composant acheté ?

Quelle est la règle que tu souhaites appliquer dans le nommage de tes fichiers ?


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 3 sur 5

Anonymous
Non applicable

@ThomasB44  a écrit :

Tu souhaites exporter seulement s'il s'agit  d'un composant acheté ?


 Non aucune considération de la sorte. Je pense que cette partie du code est inutile dans mon cas, mais je n'avais pas compris à quoi elle servait... J'avoue ne pas comprendre grand chose au objet que je manipule en VBA.

 

Je veux "juste" exporter les composant que je sélectionne dans mon arbre et éventuellement exporter chaque assemblage comme un assemblage et non pièce par pièce.

 


@ThomasB44  a écrit :

Quelle est la règle que tu souhaites appliquer dans le nommage de tes fichiers ?


Actuellement la macro sort nom du fichier .ipt ce que me va bien

 

0 J'aime
Message 4 sur 5

ThomasB44
Mentor
Mentor
Solution acceptée

Cette règle va ouvrir et exporter l'assemblage que tu vas sélectionner.

L'emplacement de l'export est réglé comme ceci :

Emplacement de ton ensemble de plus haut niveau + le nom de l'ensemble exporté

Dim oDoc As Inventor.AssemblyDocument
oDoc = ThisDoc.Document
Dim oOcc As ComponentOccurrence

'Ask user for an assembly
oOcc = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select a component :")
'get STL target folder path
Dim oPath As String
oPath = ThisDoc.Path
Dim oOccName As String
oOccName = oOcc.ReferencedDocumentDescriptor.DisplayName
oOccName = Left(oOccName, Len(oOccName) -4) 'without ".iam"
Dim oFolder As String
oFolder = oPath & "\" & oOccName & " STL"

'Check for the step folder and create it if it does not exist
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If

Dim oFile As String
oFile = oOcc.ReferencedDocumentDescriptor.FullDocumentName
Dim oFileToSTL As Document
'Open assembly and save to STL
oFileToSTL = ThisApplication.Documents.Open(oFile, True)
oFileToSTL.SaveAs(oFolder & "\" & oOccName & (".stl"), True)	
oFileToSTL.Close
MessageBox.Show("L'assemblage " & oOccName & " est exporté à l'emplacement : " _
& vbNewLine & oFolder, "iLogic")

Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 5 sur 5

patrick.emin
Alumni
Alumni

Bonjour @Anonymous 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton "Approuver la solution" en bas de la réponse qui apporte une solution?

Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime