[IV 2014] - Export IGS depuis vue de dessin

[IV 2014] - Export IGS depuis vue de dessin

gmassart
Advisor Advisor
1 535 Visites
10 Réponses
Message 1 sur 11

[IV 2014] - Export IGS depuis vue de dessin

gmassart
Advisor
Advisor

Bonjour

J'aimerai avoir un script VBA pour exporter un IGS à partir d'une vue sélectionnée.

Quelqu'un aurait un bout de code sous la main ? Je dois le personnalisé pour le nom du fichier exporté et aussi récupérer une ipropriété du fichier (son épaisseur)

D'avance merci pour votre aide (ThomasB44 tu es en premier ligne pour répondre 🐵 )

 

 

 

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

0 J'aime
Solutions acceptées (1)
1 536 Visites
10 Réponses
Replies (10)
Message 2 sur 11

ThomasB44
Mentor
Mentor

Haha @gmassart Smiley clignant de l'œil

 

Donc si je résume le workflow :

  1. Il faut récupérer la référence du modèle de la vue sélectionnée
  2. Ouvrir cette référence
  3. Construire le nom : Nom pièce + ipropriété ?
  4. Enregistrer sous *.iges avec le bon nom
  5. A l'emplacement du fichier modèle?
  6. Fermer le modèle et revenir au dessin

Est ce que c'est bien ça que tu veux ?


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 3 sur 11

gmassart
Advisor
Advisor

Oui c'est ça

A chaque fois qu'on fait une machine, on parcourt les plans pour exporter les tôles pliées en IGES (le fournisseur déplie lui même en fonction de sa machine)

Ca nous ferait gagner pas mal de temps, mais je dois récupérer le nom de la vue et l'épaisseur de la tôle pour le nom pour faire l'export.

Pour le chemin on a un chemin spécifique pour les exports relatif au projet donc ça je vais le gérer facilement.

 

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

0 J'aime
Message 4 sur 11

ThomasB44
Mentor
Mentor
Solution acceptée

Salut @gmassart

Voici un premier essai rapide, il me manque des info pour ton épaisseur, mais tu verras déjà la base pour ton export Smiley clignant de l'œil

Pour l'export IGES, j'ai trouvé l'extrait de code sur le forum customisation, j'avais jamais utilisé avant...mais je pense que toutes les options de configuration sont là !

Le petit bonus, soit tu sélectionnes la vue et tu lances le code, soit tu sélectionnes pendant le code...j'adore Smiley très heureux

 

Ou est renseigné ton épaisseur ? Paramètre ? iPropriété ? iPropriété personnalisée ?

Si il s'agit uniquement de pièces de tolerie, c'est un paramètre, mais il faudra gérer les exceptions ?

 

If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
    MessageBox.Show("This is not a drawing" & vbNewLine & "End of rule...", "iLogic",MessageBoxButtons.OK,MessageBoxIcon.Error)
    Return
End If

If ThisApplication.ActiveDocument.SelectSet.Count = 0 Then
oView = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kDrawingViewFilter,"Select a view:")
Else
oView = ThisApplication.ActiveDocument.SelectSet(1)
End If

'Full path of referenced model
oModelFullFileName = oView.ReferencedDocumentDescriptor.ReferencedDocument.FullFileName
'Referenced model name
oModelName = oView.ReferencedDocumentDescriptor.ReferencedDocument.DisplayName
'Referenced model name without extension
oModelNameWE = Left(oModelName, Len(oModelName) - 4)

Dim Epaisseur As String
Epaisseur = iProperties.Value(oModelName, "Summary", "Title")

'Define document to open
oModelDoc = ThisApplication.Documents.Open(oModelFullFileName, True)
'set translator options
Dim oIGESTranslator As TranslatorAddIn
oIGESTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F44-0C01-11D5-8E83-0010B541CD80}")
Dim oContext As TranslationContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism
Dim oOptions As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
Dim oDataMedium As DataMedium = ThisApplication.TransientObjects.CreateDataMedium
'Set export path
Dim IGESDir = "C:\Temp\"
oDataMedium.MediumType = kFileNameMedium
'Set export file name
oDataMedium.FileName = IGESDir & oModelNameWE & " " & oView.Name & " " & Epaisseur & ".igs"
If oIGESTranslator.HasSaveCopyAsOptions(oModelDoc, oContext, oOptions) Then
' Set geometry type for wireframe.
' 0 = Surfaces, 1 = Solids, 2 = Wireframe
oOptions.Value("GeometryType") = 1
' To set other translator values:
' oOptions.Value("SolidFaceType") = n
' 0 = NURBS, 1 = Analytic
' oOptions.Value("SurfaceType") = n
' 0 = 143(Bounded), 1 = 144(Trimmed)
'Use Export To IGES to save drawing configuration and set here
'Dim strIniFile As String = "C:\IGES\ConfigurationFile.ini"
' Create the name-value that specifies the ini file to use.
'oOptions.Value("Export_Acad_IniFile") = strIniFile
'Save File
Call oIGESTranslator.SaveCopyAs(oModelDoc, oContext, oOptions, oDataMedium)
End If
'Close referenced model
oModelDoc.Close

 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 5 sur 11

gmassart
Advisor
Advisor

Super merci je vais tester ça

L'épaisseur c'est celle des pièces de tôlerie, faut que je teste l'existence de la propriété avant de lancer l'export

Je vais rajouter dans mon "form" l'export automatique vers le répertoire par défaut ou par choix.

Je reviendrais avec le code complet

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

Message 6 sur 11

ThomasB44
Mentor
Mentor

Oui dans ce cas faut aller chercher le paramètre avec un try catch et un message et arret du code si le paramètre n'existe pas. Smiley clignant de l'œil


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 7 sur 11

gmassart
Advisor
Advisor

Je travaille pas en ilogic, mais en VBA

J'ai du modifier le code pour être compatible avec le VBA (Je peux pas faire de Dim MaVariable = "toto", je suis obligé de Dim avant puis faire un Set)

 

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

0 J'aime
Message 8 sur 11

ThomasB44
Mentor
Mentor

Oups, j'avais oublié que tu avais demandé en VBA...Smiley gêné

Perso depuis qu'il y a iLogic, j'ai quasiment tout transféré la dessus...

Que donne ton code ? Ça fonctionne ?


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 9 sur 11

gmassart
Advisor
Advisor

J'ai une partie du code qui fonctionne basé sur le tien pour la partie IGES.

Je récupère bien le nom de ma vue et l'épaisseur.

Je vais juste regarder maintenant pour les vues où j'ai un assemblage qui contient une tôle, pour forcer la sélection en pièce et donc demander à l'utilisateur de sélectionner la pièce

Dans le workflow ça sera > sélectionner la vue, contrôler si c'est une pièce seul ou pas, sinon passer en sélection pièce, sélectionner la pièce et continuer.

 

Ensuite j'attaque les DXF

Sélectionner la vue, ouvrir la pièce, forcez la sélection d'une face, demander l'épaisseur (idéalement faudrait que je trouve un truc du genre, sélectionnez une arrête qui représente l'épaisseur et prendre sa longueur) et ensuite export de la face en DXF

 

Je vais essayer de faire ça cette semaine, je reviendrais mettre le code complet ici.

 

 

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

0 J'aime
Message 10 sur 11

gmassart
Advisor
Advisor

Juste pour ça j'ai créé cette fonction pour la gestion de l'épaisseur

Function GetThickness()
    Dim oPartDoc As PartDocument
    Set oPartDoc = ThisApplication.ActiveDocument
    ' Make sure the document is a sheet metal document.
    If oPartDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
        Dim oSheetMetalCompDef As SheetMetalComponentDefinition
        Set oSheetMetalCompDef = oPartDoc.ComponentDefinition
        GetThickness = oSheetMetalCompDef.Thickness.ModelValue * 10 & "mm" 'L'unité de base est le cm... Logique Autodesk...
    Else
        Dim sThickness As String
        sThickness = InputBox("Veuillez entrer l'épaisseur de la tôle sans unité", "Epaisseur de la tôle")
        If sThickness <> "" Then
            GetThickness = sThickness
        Else
            MsgBox "Vous n'avez pas précisé d'épaisseur, la valeur est forcée à Xmm"
            GetThickness = "X"
        End If
    End If
End Function

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature

Message 11 sur 11

gmassart
Advisor
Advisor

La fonction qui va bien pour exporter une face au format dxf avec sélection de face obligatoire

Function Export2DXF(sFileFullPath As String)
    Dim oFace As Face
    Set oFace = ThisApplication.CommandManager.Pick(kPartFaceFilter, "Sélectionnez une face :")
    If Not oFace Is Nothing Then
        ThisApplication.ActiveDocument.SelectSet.Select oFace
    Else
        MsgBox "Vous n'avez pas sélectionné de face. L'export est annulé", vbCritical, "Mauvaise sélection"
        Exit Function
    End If
    Dim Cm As CommandManager
    Set Cm = ThisApplication.CommandManager
    Call Cm.PostPrivateEvent(PrivateEventTypeEnum.kFileNameEvent, sFileFullPath)
    Dim oCtrlDef As ButtonDefinition
    Set oCtrlDef = ThisApplication.CommandManager.ControlDefinitions.Item("GeomToDXFCommand")
    Call oCtrlDef.Execute
End Function

Guillaume MASSART
AFFIVAL SAS
Inventor Pro 2022
EESignature