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 : 

Ilogic export en 3D des mises à plat

18 RÉPONSES 18
RÉSOLU
Répondre
Message 1 sur 19
thibault.franchini
327 Visites, 18 Réponses

Ilogic export en 3D des mises à plat

Bonjour à tous,

 

De plus en plus de découpeur laser utilisent les 3D au lieu des DXF, si ça leur fait gagner du temps je vais essayer d'aller dans leur sens.

 

Je souhaite donc faire évoluer la règle d'export DXF ( voir le post : https://forums.autodesk.com/t5/inventor-francais/inventor-regle-ilogic-pour-export-dxf-depuis-un-ass...)

 

Premier point avant d'attaquer la macro, avec mon éternelle Version 2016, je ne peux pas exporter la mise à plat en 3D autre que en .SAT, et certain laseristes n'ouvrent que le step

 

Capture d'écran 2024-05-31 170608.png

 

Est-ce moi qui n'ai pas la bonne méthode ou l'export de la mise à plat ne se fait que en sat, dwg ou dxf ?

18 RÉPONSES 18
Message 2 sur 19
vpeuvion
en réponse à: thibault.franchini

Bonjour,

Est-ce que tu es certain qu'ils veulent le 3D de la mise à plat ?

Généralement, ils demandent le 3D de la pièce pliée et se chargent du traitement pour fabriquer.

L'export que tu montres est prévu pour générer un fichier qui peut être lu directement par la machine, c'est pour ça qu'il est limité à ces 3 formats.

Un step ne sera pas lu directement par la machine, il sera retravaillé avant pour générer le fromat lu par la machine.

S'ils te demandent un Step, ils veulent parler du 3D plié et non la mise la plat je suppose.  A vérifier.

Vincent.

Message 3 sur 19
gmassart
en réponse à: thibault.franchini

Je confirme que nous aussi on exporte tout en STEP, la société remplace les plis en fonction de leurs outillages et des réglages machines. La mise à plat se fait après correction pour avoir la découpe laser associée.

 

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

Message 4 sur 19

Bonjour,

 

Merci pour votre participation.

 

En effet, ils préfèrent le 3D plutôt que la mise à plat. Cependant, je me suis concentré sur la mise plat pour différentes raisons ( peut-être à tort) :

 

- Standardiser la macro pour exporter la mise à plat des pièces pliées ou non.

- Garder la main en interne sur les usinages à faire après découpe et pliage ( lamage, fraisurage, Ø avec ajustement, chanfrein, ...) et éviter les confusions avec la pièce finie

 

Le premier point peut éventuellement se solutionner en se grattant la tête.

Pour le second, un retour d'expérience pour savoir comment vous gérer cette étape serait intéressant. Sachant que l'idée est de simplifier la vie du laseriste sans pour autant remettre du travail en interne.

Message 5 sur 19
gmassart
en réponse à: thibault.franchini

Retour d'expérience : 

  • les perçages dont le diamètre est inférieur à l'épaisseur de tôle ne sont que pointés, le perçage est fait en traditionnel ensuite
  • Attention aux découpe en tolérances négatives, l'export 3D se fait à côte 0 donc si le laseriste découpe à 0, c'est mort pour la tolérance
  • Attention aux découpes proches des plis, le lazériste expérimenté devrait rajouter de la matière ou demander de déplacer les ouvertures pour éviter les déformations (mais c'est pas du à l'export 3D)

Avec les dernières versions d'Inventor tu aurais accès aux états de conception, tu peux avoir une pièce avant usinage et après usinage par exemple.

Dans ton cas, place tes usinages à la fin de l'arbre et remonte l'arbre avant l'export. En faisant un script et en nommant une fonction d'une manière spéciale, peut être que tu peux faire ça en automatique.

 

De notre côté on fait les exports lazer comme ça :

  • Pièce 3D > IGES (ou STEP)
  • Pièce plate 2D > export DXF des faces

Pour ça j'ai un script développé en VBA qui me permet d'automatiser en récupérant l'épaisseur des tôles etc. pour les DXF le script me demande quelle face je veux exporter

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

Message 6 sur 19
vpeuvion
en réponse à: thibault.franchini

Bonjour,

Ils préfèrent le step du 3D pour l'intégrer directement dans leur logiciel de CFAO. Ils peuvent aussi travailler à partir du Step de l'assemblage.

Leur logiciel crée ensuite tous les programmes de pliage et ceux de découpe.

Leur envoyer un step de la mise à plat les oblige à retravailler le fichier pour le programme de pliage.

Pour tes problèmes concernant l'usinage , tu peux peut-être utiliser les états de modèles : Créer un état de modèle "Découpe laser" qui ne contient pas les usinages et garder l'état de modèle principal avec toutes les fonctions.

Tu utilises l'état de modèle "Découpe laser" pour créer ton export 3D de la pièce pliée.

Vincent.

 

 

Message 7 sur 19
thibault.franchini
en réponse à: vpeuvion

Bonjour, merci pour vos retours.

 

Je vais essayer de modifier mon code pour exporter les pièces de tôlerie en step, pour le moment sans parler d'usinage à masquer ou autres. Ça sera un bon point de départ.

 

Les états de modèle ressemblent aux configurations de SW, mais hélas je suis sur une version trop ancienne pour y avoir droit ... Reste la possibilité de passer par une Ipièce, mais ça va alourdir le process pour à peine 10% des pièces concernées.

 

Autre question en parallèle à ce sujet, mettez-vous le nombre de pièce à fabriquer dans le nom de la pièce ?

Message 8 sur 19
gmassart
en réponse à: thibault.franchini

Pour le nommage des pièces je mets le numéro de pièces issu des plans et ensuite l'épaisseur ça donne ça:

1131 - 5mm ou 1235 - 8mm

Concernant les quantités ça a été un vif débat mais j'ai tranché : on n'indique jamais les quantités à la main surtout si on a des multiples niveaux de nomenclature et des ensembles répétés. C'est au fournisseur de se débrouiller avec les plans et les nomenclatures (listes de pièces)

Si vraiment vous avez un système interne pour la fabrication et donc la nécessité de dire combien de pièces il faut dans ce cas rajoutez la quantité à la fin du style

1131 - 5mm - 12× 

mais attention à la gestion.

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

Message 9 sur 19
vpeuvion
en réponse à: thibault.franchini

De notre côté, nous ne mettons pas la quantité dans le nom de la pièce.

Un fichier peut être utilisé pour plusieurs commandes avec des quantités différentes.

 

Message 10 sur 19
ThomasB44
en réponse à: vpeuvion

Je partage l'avis de Guillaume et Vincent quant à la quantité.

Par expérience, il est trop facile de se tromper ou de ne pas corriger une quantité qui figure sur un plan de détail.

 

Dans mon cas, j'utilise le ou les plans d'ensemble pour remonter les quantités nécessaires.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 11 sur 19
thibault.franchini
en réponse à: ThomasB44

Entièrement d'accord avec vous, nous avons également eu cette discussion en interne ( et même dans mon ancienne société).

 

La quantité a sa place sur une nomenclature. C'est une donnée de l'assemblage et non de la pièce. Si une pièce "toto-8mm-S235-qtéx4" est demandée en SAV ou en re-fabrication suite à un rebut, nous n'allons pas créer une "toto-8mm-S235-qtéx1" ! Mais si nous le faisons pas, l'opérateur risque de faire le lancement en x4 (et il aura raison).

 

Merci pour votre participation, on ferme la parenthèse 😀

Message 12 sur 19

Bonjour @thibault.franchini , si certaines réponses vous ont permis de solutionner votre problème ou vous ont mis sur une piste intéressante, merci de bien vouloir les marquer comme solution approuvée.


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
Message 13 sur 19

Bonjour,

 

J'ai légèrement avancé sur le sujet.

 

Mes points de départ sont la règle DXF précédemment cité au début du post  etla règle d'export STEP que j'utilise et fonctionne. Le but est de fusionner les deux

 

La règle STEP :

 

Dim oDoc As Document
oDoc = ThisDoc.Document

Dim oFileName, oStepName As String
oFileName = oDoc.FullDocumentName
If oFileName Is Nothing Then
	MessageBox.Show("Veuillez d'abord sauvegarder votre document", "iLogic")
	Return
End If

oStepName = Left(oFileName, Len(oFileName)-3) 

' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
  	oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism
Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap

If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
        'oOptions.Value("Organization") = ""

Dim oDataMedium As DataMedium
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

'Set the STEP target file name
oDataMedium.FileName = oStepName
'Publish document
Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oDataMedium)
End If

 

Le premier essai de la règle d'export tôlerie en STEP ( qui ne fonctionne pas 😪)

 

Sub Main()

' Déclaration compteur

Dim Compteur As Integer = 0
	
 'controle que le document actif est bien un assemblage

If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
	MessageBox.Show("cette règle fonctionne uniquement avec un ensemble", "iLogic")
	Return
End If

'definition du document actif comme assemblage

Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition

Dim oLeafOccs As ComponentOccurrencesEnumerator = oAsmCompDef.Occurrences.AllLeafOccurrences

Dim oAsmName As String = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
Dim File As String = ThisDoc.FileName(False)
'MessageBox.Show(oDoc, "Title")

oPath = ThisDoc.Path
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism

'verification et/ou création du repertoire STEP Tolerie correspondant à l'assemblage
Dim Ofolder As String
oFolder = oPath & "\" & File & "_STEP Tolerie du " & DateTime.Now.ToString("dd-MM-yy")
'MessageBox.Show(oFolder, "Title")

Process.Start("explorer.exe", oFolder)
If Not System.IO.Directory.Exists(oFolder) Then
	System.IO.Directory.CreateDirectory(oFolder)
End If

'referencement des pieces de tolerie dans l'assemblage et controle de leur sauvegarde

iptPathName = String.Empty
Dim oRefDocs As DocumentsEnumerator = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
For Each oRefDoc In oRefDocs
	If oRefDoc.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
		iptPathName = oRefDoc.FullDocumentName
'MessageBox.Show(iptPathName, "Title")

'End If

		'verification de la sauvegarde des pieces de l'assemblage

If (System.IO.File.Exists(iptPathName)) Then
			Dim oPartDoc As PartDocument = ThisApplication.Documents.Open(iptPathName, True)
			Dim oFileNameWithoutExt As String = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -4)
			Dim oFileName2 As String = Right(iptPathName, Len(iptPathName) - InStrRev(iptPathName, "\"))
			Dim Name As String = oRefDoc.DisplayName
'MessageBox.Show(Name, "Title")

Try
		'controle des mises a plat dans les pieces de l'assemblage

			Dim oCompDef As SheetMetalComponentDefinition = oPartDoc.ComponentDefinition
			Dim oFlatPattern As FlatPattern = oCompDef.FlatPattern

If oCompDef.HasFlatPattern = False Then
	oCompDef.Unfold
	oPartDoc.Save
End If
	oCompDef.FlatPattern.Edit

Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap

Dim strIniFile As String
strIniFile = "\\Nas-tellig\communs\INVENTOR 2016\Config\Styles-TELLIG\Materials\EXPORT DXF EXT-INT-MAR.ini"
' Create the name-value that specifies the ini file to use.
oOptions.Value("Export_Acad_IniFile") = strIniFile

'--

	' Déclaration des variables

'Dim sOut As String
'Dim oPartCompDef As SheetMetalComponentDefinition = oDoc.ComponentDefinition
Dim oMaterial As Material = oCompDef.Material
Dim sMat As String
Dim Epaisseur As String = oCompDef.Thickness.Value*10

    sMAt = oMaterial.Name
    

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
    Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

    If oSTEPTranslator Is Nothing Then
        MsgBox "Could not access STEP translator."
        Exit Sub
    End If

    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap
    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
        'oOptions.Value("Organization") = ""

        oContext.Type = kFileBrowseIOMechanism

Dim oFileName, oStepName As String
'oFileName = oDoc.FullDocumentName
oFileName = Name
If oFileName Is Nothing Then
	MessageBox.Show("Veuillez d'abord sauvegarder votre document", "iLogic")
	Return
End If

oStepName = Left(oFileName, Len(oFileName)-3) & "step"



        'Dim oData As DataMedium
        'Set oData = ThisApplication.TransientObjects.CreateDataMedium
        'oData.FileName = oStepname
	oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.step"

        Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oDataMedium)
    End If



Else
oCompDef.FlatPattern.Edit
End If

	 ' Création nom du fichier

'oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.dxf"
	
	'MessageBox.Show("STEP SAVED TO: " & Ofolder ,"STEP Saved", MessageBoxButtons.OK)

    Dim oSMDef As SheetMetalComponentDefinition

'oCompDef.DataIO.WriteDataToFile(sOut, oDataMedium.FileName)

'Si iptPathName n'est pas vide alors j'exporte

If iptPathName <> String.Empty Then oCompDef.DataIO.WriteDataToFile(sOut, oDataMedium.FileName) 

'L'export est terminé, je vide iptPathName
iptPathName = String.Empty 

Compteur = Compteur +1
oPartDoc.Close(True)
Catch ex As Exception 
 
 MessageBox.Show(ex.Message)
 
End Try

End If
End If

Next

MessageBox.Show("Nombre d'exports : " & Compteur)

End Sub

 Premier point : à la ligne 106 il met une erreur disant " Let ou Set n'est pas pris en charge". Alors que cette instruction est valable dans la règle d'export step basique, qu'est ce qui ne lui plait pas ?

 

J'ai ensuite d'autres erreurs que j'essaye de résoudre, des If sans End If, des variables pas déclarées (alors qu'elles y sont dans la règle export DXF), une erreur "masque variable dans un bloc englobant", ...

 

Il y a encore du boulot 😁

Message 14 sur 19
vpeuvion
en réponse à: thibault.franchini

Bonjour, il ne faut pas mettre les "Set" dans une règle iLogic, c'est pour le vba.

Il faut tout simplement les enlever. 

Vincent.

Message 15 sur 19
ThomasB44
en réponse à: thibault.franchini

Même si ça peut fonctionner, les variables suivantes ne sont pas conformes :

oPath => Non déclaré

oDataMedium => Non déclaré

oContext => Tu affectes une valeur, puis tu déclares...

iptPathName => Non déclaré

oOptions => Déclaré 2 fois

oCompDef => Déclaré à l'intérieur d'une boucle, puis utilisé en dehors de cette boucle

sOut => Non déclaré, non affecté

oPartDoc => Déclaré à l'intérieur d'une boucle, puis utilisé en dehors de cette boucle

 

L'utilisation du Try/Catch est excessive, en fait tu cherches juste à vérifier que la pièce est une tôle et contrôler l'existence de la mise à plat. On a quelques part sur le forum fr un sujet là dessus.

Et effectivement les boucles If/Then sont mélangées avec le Try/Catch et For/Next


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 16 sur 19
thibault.franchini
en réponse à: ThomasB44

Merci pour vos réponses, j'ai dé-verminé légèrement le code

 

Sub Main()

' Déclaration compteur

Dim Compteur As Integer = 0
	
 'controle que le document actif est bien un assemblage

If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
	MessageBox.Show("cette règle fonctionne uniquement avec un ensemble", "iLogic")
	Return
End If

'definition du document actif comme assemblage

Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition

Dim oLeafOccs As ComponentOccurrencesEnumerator = oAsmCompDef.Occurrences.AllLeafOccurrences

Dim oAsmName As String = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
Dim File As String = ThisDoc.FileName(False)
'MessageBox.Show(oDoc, "Title")

oPath = ThisDoc.Path
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism


'verification et/ou création du repertoire STEP Tolerie correspondant à l'assemblage
Dim Ofolder As String
oFolder = oPath & "\" & File & "_STEP Tolerie du " & DateTime.Now.ToString("dd-MM-yy")
'MessageBox.Show(oFolder, "Title")

Process.Start("explorer.exe", oFolder)
If Not System.IO.Directory.Exists(oFolder) Then
	System.IO.Directory.CreateDirectory(oFolder)
End If

'referencement des pieces de tolerie dans l'assemblage et controle de leur sauvegarde

iptPathName = String.Empty
Dim oRefDocs As DocumentsEnumerator = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
For Each oRefDoc In oRefDocs
	If oRefDoc.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
		iptPathName = oRefDoc.FullDocumentName
'MessageBox.Show(iptPathName, "Title")

'End If

		'verification de la sauvegarde des pieces de l'assemblage

If (System.IO.File.Exists(iptPathName)) Then
			Dim oPartDoc As PartDocument = ThisApplication.Documents.Open(iptPathName, True)
			Dim oFileNameWithoutExt As String = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -4)
			Dim oFileName2 As String = Right(iptPathName, Len(iptPathName) - InStrRev(iptPathName, "\"))
			Dim Name As String = oRefDoc.DisplayName
'MessageBox.Show(Name, "Title")

Try
		'controle des mises a plat dans les pieces de l'assemblage

			Dim oCompDef As SheetMetalComponentDefinition = oPartDoc.ComponentDefinition
			Dim oFlatPattern As FlatPattern = oCompDef.FlatPattern

If oCompDef.HasFlatPattern = False Then
	oCompDef.Unfold
	oPartDoc.Save
End If
	oCompDef.FlatPattern.Edit

Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap

Dim strIniFile As String
strIniFile = "\\Nas-tellig\communs\INVENTOR 2016\Config\Styles-TELLIG\Materials\EXPORT DXF EXT-INT-MAR.ini"
' Create the name-value that specifies the ini file to use.
oOptions.Value("Export_Acad_IniFile") = strIniFile

'--

	' Déclaration des variables

'Dim sOut As String
'Dim oPartCompDef As SheetMetalComponentDefinition = oDoc.ComponentDefinition
Dim oMaterial As Material = oCompDef.Material
Dim sMat As String
Dim Epaisseur As String = oCompDef.Thickness.Value*10

    sMAt = oMaterial.Name
    

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
    'Set 
	oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

    If oSTEPTranslator Is Nothing Then
        MsgBox ("Could not access STEP translator.")
        Exit Sub
    End If

    'Dim oContext As TranslationContext
    'Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    'Dim oOptions As NameValueMap
	'oOptions = ThisApplication.TransientObjects.CreateNameValueMap
    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
        'oOptions.Value("Organization") = ""

        oContext.Type = kFileBrowseIOMechanism

Dim oFileName, oStepName As String
'oFileName = oDoc.FullDocumentName
oFileName = Name
If oFileName Is Nothing Then
	MessageBox.Show("Veuillez d'abord sauvegarder votre document", "iLogic")
	Return
End If

oStepName = Left(oFileName, Len(oFileName)-3) & "step"



        'Dim oData As DataMedium
        'Set oData = ThisApplication.TransientObjects.CreateDataMedium
        'oData.FileName = oStepname
	oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.step"

        Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oDataMedium)
    End If


Else
oCompDef.FlatPattern.Edit
End If

	 ' Création nom du fichier

'oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.dxf"
	
	'MessageBox.Show("STEP SAVED TO: " & Ofolder ,"STEP Saved", MessageBoxButtons.OK)

    Dim oSMDef As SheetMetalComponentDefinition

'Si iptPathName n'est pas vide alors j'exporte

If iptPathName <> String.Empty Then oCompDef.DataIO.WriteDataToFile(sOut, oDataMedium.FileName) 

'L'export est terminé, je vide iptPathName
iptPathName = String.Empty 

Compteur = Compteur +1
oPartDoc.Close(True)
Catch ex As Exception 
 
 MessageBox.Show(ex.Message)
 
End Try

End If
End If

Next

MessageBox.Show("Nombre d'exports : " & Compteur)

End Sub

 

Pour les boucles, j'ai comparé avec la règle d'export DXF et je ne trouve pas de différence avec mon œil de débutant en codage. Je ne saisi pas le principe de boucle pour les repérer dans la règle à modifier.

 

Pour les If & co, je vais les lister et tenter le m'y retrouver plus facilement car je suis me suis perdu avec la fusion des 2 codes.

Message 17 sur 19

C'est bon, en imprimant le code et en coloriant les If / End If (à l'ancienne...), j'ai trouvé l'instruction End if qui était en trop.

 

Désormais, la règle s’exécute mais j'ai le message suivant :

 

Capture d'écran 2024-06-07 134326.png

 

Je pense que c'est le message d'erreur qui remonte de la fonction catch, c'est ça ?

 

Ci-dessous le code dans la version actuelle :

 

Sub Main()
' Déclaration compteur

Dim Compteur As Integer = 0
	
 'controle que le document actif est bien un assemblage

If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
	MessageBox.Show("cette règle fonctionne uniquement avec un ensemble", "iLogic")
	Return
End If

'definition du document actif comme assemblage

Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition

Dim oLeafOccs As ComponentOccurrencesEnumerator = oAsmCompDef.Occurrences.AllLeafOccurrences

Dim oAsmName As String = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
Dim File As String = ThisDoc.FileName(False)
'MessageBox.Show(oDoc, "Title")

oPath = ThisDoc.Path
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism


'verification et/ou création du repertoire STEP Tolerie correspondant à l'assemblage
Dim Ofolder As String
oFolder = oPath & "\" & File & "_STEP Tolerie du " & DateTime.Now.ToString("dd-MM-yy")
'MessageBox.Show(oFolder, "Title")

Process.Start("explorer.exe", oFolder)
If Not System.IO.Directory.Exists(oFolder) Then
	System.IO.Directory.CreateDirectory(oFolder)
End If

'referencement des pieces de tolerie dans l'assemblage et controle de leur sauvegarde

iptPathName = String.Empty
Dim oRefDocs As DocumentsEnumerator = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
For Each oRefDoc In oRefDocs
	If oRefDoc.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
		iptPathName = oRefDoc.FullDocumentName
'MessageBox.Show(iptPathName, "Title")

'End If

		'verification de la sauvegarde des pieces de l'assemblage

If (System.IO.File.Exists(iptPathName)) Then
			Dim oPartDoc As PartDocument = ThisApplication.Documents.Open(iptPathName, True)
			Dim oFileNameWithoutExt As String = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -4)
			Dim oFileName2 As String = Right(iptPathName, Len(iptPathName) - InStrRev(iptPathName, "\"))
			Dim Name As String = oRefDoc.DisplayName
'MessageBox.Show(Name, "Title")

Try
		'controle des mises a plat dans les pieces de l'assemblage

			Dim oCompDef As SheetMetalComponentDefinition = oPartDoc.ComponentDefinition
			Dim oFlatPattern As FlatPattern = oCompDef.FlatPattern

If oCompDef.HasFlatPattern = False Then
	oCompDef.Unfold
	oPartDoc.Save
End If
	oCompDef.FlatPattern.Edit

Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap

Dim strIniFile As String
strIniFile = "\\Nas-tellig\communs\INVENTOR 2016\Config\Styles-TELLIG\Materials\EXPORT DXF EXT-INT-MAR.ini"
' Create the name-value that specifies the ini file to use.
oOptions.Value("Export_Acad_IniFile") = strIniFile

'--

	' Déclaration des variables

Dim oMaterial As Material = oCompDef.Material
Dim sMat As String
Dim Epaisseur As String = oCompDef.Thickness.Value*10

    sMAt = oMaterial.Name
    

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
 	oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

    If oSTEPTranslator Is Nothing Then
        MsgBox ("Could not access STEP translator.")
        Exit Sub
    End If

    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
        'oOptions.Value("Organization") = ""

        oContext.Type = kFileBrowseIOMechanism

Dim oFileName, oStepName As String
'oFileName = oDoc.FullDocumentName
oFileName = Name
If oFileName Is Nothing Then
	MessageBox.Show("Veuillez d'abord sauvegarder votre document", "iLogic")
	Return

oStepName = Left(oFileName, Len(oFileName)-3) & "step"



        'Dim oData As DataMedium
        'Set oData = ThisApplication.TransientObjects.CreateDataMedium
        'oData.FileName = oStepname
	oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.step"

        Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oDataMedium)
    'End If


Else
oCompDef.FlatPattern.Edit
End If
End If

	 ' Création nom du fichier

'oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.dxf"
	
	'MessageBox.Show("STEP SAVED TO: " & Ofolder ,"STEP Saved", MessageBoxButtons.OK)

    Dim oSMDef As SheetMetalComponentDefinition

'Si iptPathName n'est pas vide alors j'exporte

If iptPathName <> String.Empty Then oCompDef.DataIO.WriteDataToFile(sOut, oDataMedium.FileName) 

'L'export est terminé, je vide iptPathName
iptPathName = String.Empty 

Compteur = Compteur +1
oPartDoc.Close(True)
Catch ex As Exception 
 
 MessageBox.Show(ex.Message)
 
End Try

End If
End If

Next

MessageBox.Show("Nombre d'exports : " & Compteur)

End Sub

 

 

 

Message 18 sur 19

Bonjour @thibault.franchini 

Parmi les réponses qui vous ont été données, si une (ou plusieurs) d'entre elles apporte une solution à votre problème ou vous a permis de mieux l'analyser et 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
Message 19 sur 19

Le  "Else" n'était pas à la bonne place. Ça fonctionne mieux désormais. Cependant :

 

- J'ai toujours le message " exception de hresult", qui ne semble pas lié au "Catch"

- Les fichiers s'enregistre bien en step mais la message box de la fin indique " nombre d'export : 0"

- Pour que les fichiers sont reconnus comme Step, je noté ".step" dans le nom.

 

Le code actuel :

 

Sub Main()

' Affichage avertissements

Dim Text_1 as String

Text_1 = "D'abord créer les mises à plats"

question=MessageBox.Show(Text_1 & vbLf & vbLf &  "Voulez-vous continuer ?","ATTENTION", MessageBoxButtons.YesNo,MessageBoxIcon.Question)
	
	'Si non, arrêt de la macro
If question = vbNo Then 

	Return
	
End If
	
' Déclaration compteur

Dim Compteur As Integer = 0
	
 'controle que le document actif est bien un assemblage

If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
	MessageBox.Show("cette règle fonctionne uniquement avec un ensemble", "iLogic")
	Return
End If

'definition du document actif comme assemblage

Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition

Dim oLeafOccs As ComponentOccurrencesEnumerator = oAsmCompDef.Occurrences.AllLeafOccurrences

Dim oAsmName As String = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
Dim File As String = ThisDoc.FileName(False)
'MessageBox.Show(oDoc, "Title")

oPath = ThisDoc.Path
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism


'verification et/ou création du repertoire STEP Tolerie correspondant à l'assemblage
Dim Ofolder As String
oFolder = oPath & "\" & File & "_STEP Tolerie du " & DateTime.Now.ToString("dd-MM-yy")
'MessageBox.Show(oFolder, "Title")

Process.Start("explorer.exe", oFolder)
If Not System.IO.Directory.Exists(oFolder) Then
	System.IO.Directory.CreateDirectory(oFolder)
End If

'referencement des pieces de tolerie dans l'assemblage et controle de leur sauvegarde

iptPathName = String.Empty
Dim oRefDocs As DocumentsEnumerator = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
For Each oRefDoc In oRefDocs
	If oRefDoc.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
		iptPathName = oRefDoc.FullDocumentName
'MessageBox.Show(iptPathName, "Title")

'End If

		'verification de la sauvegarde des pieces de l'assemblage

If (System.IO.File.Exists(iptPathName)) Then
			Dim oPartDoc As PartDocument = ThisApplication.Documents.Open(iptPathName, True)
			Dim oFileNameWithoutExt As String = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -4)
			Dim oFileName2 As String = Right(iptPathName, Len(iptPathName) - InStrRev(iptPathName, "\"))
			Dim Name As String = oRefDoc.DisplayName
'MessageBox.Show(Name, "Title")

Try
		'controle des mises a plat dans les pieces de l'assemblage

			Dim oCompDef As SheetMetalComponentDefinition = oPartDoc.ComponentDefinition
			Dim oFlatPattern As FlatPattern = oCompDef.FlatPattern

If oCompDef.HasFlatPattern = False Then
	oCompDef.Unfold
	oPartDoc.Save
End If
	oCompDef.FlatPattern.Edit

Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap

	' Déclaration des variables

Dim oMaterial As Material = oCompDef.Material
Dim sMat As String
Dim Epaisseur As String = oCompDef.Thickness.Value*10

    sMAt = oMaterial.Name
    

    ' Get the STEP translator Add-In.
    Dim oSTEPTranslator As TranslatorAddIn
 	oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")

    If oSTEPTranslator Is Nothing Then
        MsgBox ("Could not access STEP translator.")
        Exit Sub
    End If
	

    If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
        ' Set application protocol.
        ' 2 = AP 203 - Configuration Controlled Design
        ' 3 = AP 214 - Automotive Design
        oOptions.Value("ApplicationProtocolType") = 3

        ' Other options...
        'oOptions.Value("Author") = ""
        'oOptions.Value("Authorization") = ""
        'oOptions.Value("Description") = ""
        'oOptions.Value("Organization") = ""

        oContext.Type = kFileBrowseIOMechanism

Dim oFileName, oStepName As String
oFileName = Name
If oFileName Is Nothing Then
	MessageBox.Show("Veuillez d'abord sauvegarder votre document", "iLogic")
	Return

oStepName = Left(oFileName, Len(oFileName)-3) '& "step"

Else 

	oDataMedium.FileName = Ofolder & "\" & oFileName & "-" & sMat & "-" & Epaisseur & "mm.step"
	
        Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oDataMedium)
    
End If
End If

	 ' Création nom du fichier
	
	'MessageBox.Show("STEP SAVED TO: " & Ofolder ,"STEP Saved", MessageBoxButtons.OK)

    Dim oSMDef As SheetMetalComponentDefinition

'Si iptPathName n'est pas vide alors j'exporte

If iptPathName <> String.Empty Then oCompDef.DataIO.WriteDataToFile(sOut, oDataMedium.FileName) 

'L'export est terminé, je vide iptPathName
iptPathName = String.Empty 

Compteur = Compteur +1
oPartDoc.Close(True)
Catch ex As Exception 
 
MessageBox.Show(ex.Message)
 
End Try

End If
End If

Next

MessageBox.Show("Nombre d'exports : " & Compteur)

End Sub

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