Générer massivement des DXF

Générer massivement des DXF

Anonymous
Non applicable
5 941 Visites
34 Réponses
Message 1 sur 35

Générer massivement des DXF

Anonymous
Non applicable

Bonjour a tous,

 

Je souhaite générer massivement des fichiers .dxf a l’échelle 1 pour envoyer au machine de découpe laser.

 

Je connais l'outils "clic droit/exporter la face comme..." puis enregistrer le .dxf . Ca fonctionne très bien.

 

Je souhaiterai savoir si il existe un moyen simple de créer une automatisation, qui ferai cette action sur une liste de plusieurs dizaines d'.ipt ? 

 

Merci

 

Ben

0 J'aime
Solutions acceptées (4)
5 942 Visites
34 Réponses
Replies (34)
Message 21 sur 35

Anonymous
Non applicable

Oui, j'ai utilisé ton fichier config et je l'ai mis exactement comme tu la décris : C:\Temp\Config Vue base echelle 1-1.ini

 

Est-ce Normal qu"il check si c'est un assemblage ? Je pensai devoir l’exécuter sur la première page d'un .idw  Smiley surpris

 

'check that the active document is an assembly file
If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
MessageBox.Show("Please run this rule from the assembly file.", "iLogic")
Exit Sub
End If 

 

0 J'aime
Message 22 sur 35

ThomasB44
Mentor
Mentor

Le code a été conçu pour être exécuté depuis un assemblage !

Ensuite il ouvre un à un les plans, si ils existent avec le même nom Smiley clignant de l'œil


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

Message 23 sur 35

ThomasB44
Mentor
Mentor

L'extrait de code que tu viens de copier était sensé indiquer cela à l'utilisateur, mais le code renvoie une erreur à cause de cette ligne :

Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument = Booom erreur

 

 

Il faut donc modifier le début du code...en inversant les 2 premiers paragraphes, comme ceci :

 

'check that the active document is an assembly file
If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
MessageBox.Show("Please run this rule from the assembly file.", "iLogic")
Return
End If

'define the active document as an assembly file
Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument
oAsmName = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)

Petite erreur de copier/coller par le créateur original je pense Smiley clignant de l'œil


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

Message 24 sur 35

Anonymous
Non applicable

Okay ! Désolé... j'avais pas saisi. 

 

Donc le code fonctionne parfaitement: Dans mon dossier de travail, il a été crée un dossier DWG avec des vues "nues" (sans cotes, cadre, etc..)

 

Par contre, je pense que j'ai été un peu trop rapide dans mes explications, car je pensai que il y aurait deux codes différents;

- Un pour générer des fichiers DWG a l’identique de mes fichiers .idw. ( Cadre, cotes, vues, etc..)

- Un pour générer, a partir de la première page de mon .idw, une seconde page avec une vue a l’échelle 1 de la vue principale, puis un export en DXF vers un dossier.

 

Je suis désolé de la confusion, et je te remercie vraiment pour tout ton super code fourni !

 

0 J'aime
Message 25 sur 35

ThomasB44
Mentor
Mentor

Pas de soucis Smiley clignant de l'œil

 

A toi de voir, on peut faire un code pour les DWG et un autre pour les DXF, ou les 2 dans le même code. Ou encore les 2 dans le même code et on demande à l'utilisateur de choisir, l'un ou l'autre ou les 2. Les 2 options fonctionneront grâce à 2 fichiers de configuration (*.ini) que tu devras préalablement configurer selon tes souhaits.


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 26 sur 35

Anonymous
Non applicable

j'avoue que la perspective d'avoir une seul règle qui demande ensuite, si l'un ou l'autre, ou les deux fait assez rêver Smiley très heureux

 

es-tu en mesure de faire çà ?

0 J'aime
Message 27 sur 35

ThomasB44
Mentor
Mentor
Solution acceptée

Oui, voici ce que ça donne Smiley clignant de l'œil

Une petite InputListBox pour le choix, et un If Then pour l'export et hop le tour est joué Smiley très heureux

Je te laisse compléter les messages box en français Smiley heureux

 

Attention aux chemins complets des fichiers de configuration, je les ai mis en gras plus bas.

 

'check that the active document is an assembly file
If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
MessageBox.Show("Please run this rule from the assembly file.", "iLogic")
Return
End If

'define the active document as an assembly file
Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument
oAsmName = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)

Dim TaskList As New List(Of String)
TaskList.add("DWG")
TaskList.add("DXF")
TaskList.add("DWG & DXF")
TaskList.add("Do nothing")

ToDo = InputListBox("Please choose an action above...", TaskList, TaskList, Title := "iLogic", ListName := "Choices :")

If ToDo = "Do nothing" Then
Return
Else
End If

oPath = ThisDoc.Path
'get DWG target folder path
oFolder = oPath & "\" & oAsmName & " DWG & DXF"
'Check for the DWG folder and create it if it does not exist
If Not System.IO.Directory.Exists(oFolder) Then
    System.IO.Directory.CreateDirectory(oFolder)
End If

'[ Documents setup
'Get the DWG translator Add-In.
Dim DWGAddIn As TranslatorAddIn
DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")
'Get the DXF translator Add-In.
Dim DXFAddIn As TranslatorAddIn
DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
'Set a reference to the active document (the document to be published).
Dim oDocument As Document
oDocument = ThisApplication.ActiveEditDocument
Dim oContext As TranslationContext
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism
' Create a NameValueMap object
Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
' Create a DataMedium object
Dim oDataMedium As DataMedium
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
'DWG : Check whether the translator has 'SaveCopyAs' options
If DWGAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
    Dim strIniFile As String
    strIniFile = "C:\temp\Config DWG.ini"
    ' Create the name-value that specifies the ini file to use.
    oOptions.Value("Export_Acad_IniFile") = strIniFile
End If
'DXF : Check whether the translator has 'SaveCopyAs' options    
If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
    Dim strIniFile As String
    strIniFile = "C:\temp\Config DXF.ini"
    ' Create the name-value that specifies the ini file to use.
    oOptions.Value("Export_Acad_IniFile") = strIniFile
End If
'] end of setup

'[ ComponentDrawings
    'look at the files referenced by the assembly
    Dim oRefDocs As DocumentsEnumerator
    oRefDocs = oAsmDoc.AllReferencedDocuments
    Dim oRefDoc As Document
    'this expects that the model has a drawing of the same path and name
For Each oRefDoc In oRefDocs
    idwPathName = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & "idw"
    'check to see that the model has a drawing of the same path and name
    If(System.IO.File.Exists(idwPathName)) Then
        Dim oDrawDoc As DrawingDocument
        oDrawDoc = ThisApplication.Documents.Open(idwPathName, True)
        oFileName = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -3)
        On Error Resume Next ' if DWG exists and is open or read only, resume next

        'Write out the documents following choices
        If ToDo = "DWG" Or ToDo = "DWG & DXF" Then
            'Set the DWG target file name
            oDataMedium.FileName = oFolder & "\" & oFileName & "dwg"            
            Call DWGAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
        End If
        If ToDo = "DXF" Or Todo = "DWG & DXF" Then
            'Set the DXF target file name
            oDataMedium.FileName = oFolder & "\" & oFileName & "dxf"
            Call DXFAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
        End If
        'close the file
        oDrawDoc.Close
    Else
    'If the model has no drawing of the same path and name - do nothing
    End If
Next
'] End of ComponentDrawings

'[ Top Level Drawing
    oAsmDrawing = ThisDoc.ChangeExtension(".idw")
    oAsmDrawingDoc = ThisApplication.Documents.Open(oAsmDrawing, True)
    oAsmDrawingName = Left(oAsmDrawingDoc.DisplayName, Len(oAsmDrawingDoc.DisplayName) -3)
    'write out the DWG for the Top Level Assembly Drawing file
    On Error Resume Next ' if DWG exists and is open or read only, resume next
    
    'Write out the documents following choices
    If ToDo = "DWG" Or ToDo = "DWG & DXF" Then
        'Set the DWG target file name
        oDataMedium.FileName = oFolder & "\" & oAsmDrawingName & "dwg"
        Call DWGAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)
    End If
    If ToDo = "DXF" Or Todo = "DWG & DXF" Then
        'Set the DXF target file name
        oDataMedium.FileName = oFolder & "\" & oAsmDrawingName & "dxf"
        Call DXFAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)
    End If
    'Close the top level drawing
    oAsmDrawingDoc.Close
'] Top Level Drawing

MessageBox.Show("New Files Created in: " & vbLf & oFolder, "iLogic")
'Optionnal : open the folder where the new files are saved
'Shell("explorer.exe " & oFolder,vbNormalFocus)

Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

Message 28 sur 35

Anonymous
Non applicable

Salut !

 

La règle fonctionne très bien ! Merci beaucoup.

 

Apres plusieurs tests et utilisation je me rend compte, que je suis pas loin du set-up optimal.

 

Oserais-je te demander une modif ? 

 

 

Au lieu de générer le DXF a partir de l'assemblage (comme c'est le cas avec la règle ci-dessus), pourrais-ton générer le DXF a partir du dessin .idw ?

Mais pas seulement, je m'explique.

 

J'aimerais que la règle s’exécute a partir de la 1er page du .idw, puis la règle exécuterai les actions suivantes :

- Création d'une deuxième page.

- Ouvre ensuite la boite de dialogue " Vue de dessin" 

 

image.png

 

- Partie Manuelle = l'utilisateur sélectionne la bonne face pour la découpe laser (Étape qui permet au concepteur de vérifier si c'est le bon profil, l'échelle, etc..)

 Puis la règle reprend;

- Exportation de la feuille 2 (uniquement) en .DXF. 

- Retour sur la page 1

 

Est-ce envisageable ?

 

Merci !

 

0 J'aime
Message 29 sur 35

ThomasB44
Mentor
Mentor

Salut @Anonymous Smiley clignant de l'œil



Au lieu de générer le DXF a partir de l'assemblage (comme c'est le cas avec la règle ci-dessus), pourrais-ton générer le DXF a partir du dessin .idw ?

Oui, c'est possible, on peut retrouver la référence du modèle, et les sous plans de la même manière ou presque.

 

J'aimerais que la règle s’exécute a partir de la 1er page du .idw, puis la règle exécuterai les actions suivantes :

- Création d'une deuxième page. Oui c'est possible

- Ouvre ensuite la boite de dialogue " Vue de dessin"Non, ce n'est pas possible...L'API permet de créer des vues avec ce type de commande :

oBaseView = oSheet.DrawingViews.AddBaseView(oPartDoc, oPoint1, DrawingViewScale, kFrontViewOrientation, kHiddenLineDrawingViewStyle, "Default")

Mais comme tu le vois, l'orientation de la vue est prédéfinie, le code ne peut pas deviner la bonne orientation, en tout cas, pas avec mes connaissances actuelles.

 

- Partie Manuelle = l'utilisateur sélectionne la bonne face pour la découpe laser (Étape qui permet au concepteur de vérifier si c'est le bon profil, l'échelle, etc..) Comme évoqué précédemment, je sais que l'API peut interagir avec une sélection de l'utilisateur, mais à ce jour, je ne sais faire que si l'utilisateur sélectionne d'abord, puis lance le code.

 Puis la règle reprend;

- Exportation de la feuille 2 (uniquement) en .DXF. Oui possible

- Retour sur la page 1 Oui possible

 


 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 30 sur 35

Anonymous
Non applicable

Hey ! Merci de tes réponses Smiley heureux

 

Okay je comprends, et en même temps c'est pas gênant du tout, puisque ça rejoint ce que je voulais:

- Que le concepteur créer toujours, son esquisse de base sur le plan X,Y, donc vue "Avant" 

 

Donc ça donnerai ça ? 

 

- Création d'une deuxième page. 

- Dépose la vue "Avant" a l'échelle 1

 

- Exportation de la feuille 2 (uniquement) en .DXF. 

- Retour sur la page 1 

 

 

 

 

0 J'aime
Message 31 sur 35

ThomasB44
Mentor
Mentor


- Création d'une deuxième page. Si une 2ème page existe déjà, on est d'accord qu'il ne faut pas en créer ? Il s'agit forcément de la page pour l'export DXF/DWG ?

- Dépose la vue "Avant" a l'échelle 1 Idem... ?

 

- Exportation de la feuille 2 (uniquement) en .DXF. OK, c'est géré par le fichier de configuration *.ini

- Retour sur la page 1 OK

 



Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 32 sur 35

Anonymous
Non applicable

ThomasB44 a écrit :


- Création d'une deuxième page. Si une 2ème page existe déjà, on est d'accord qu'il ne faut pas en créer ? Il s'agit forcément de la page pour l'export DXF/DWG ? Oui

- Dépose la vue "Avant" a l'échelle 1 Idem... ? Oui

 

- Exportation de la feuille 2 (uniquement) en .DXF. OK, c'est géré par le fichier de configuration *.ini

- Retour sur la page 1 OK

 



 

0 J'aime
Message 33 sur 35

ThomasB44
Mentor
Mentor
Solution acceptée

Salut @Anonymous

Voici ton code, comme promis. Smiley clignant de l'œil

J'ai remis en forme et ajouté quelques bonus.

Tu remarqueras les lignes entre "ALL CODE SETUP HERE" et "END CODE SETUP HERE"

Il s'agit de toutes les variables que tu peux configurer pour adapter le fonctionnement Smiley heureux

 

 

'check that the active document is a drawing file
If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
MessageBox.Show("Please run this rule from the drawing file.", "iLogic")
Return
End If

'Define task list
Dim TaskList As New List(Of String)
TaskList.add("DWG")
TaskList.add("DXF")
TaskList.add("DWG & DXF")
TaskList.add("Do nothing")
'Ask task to user
ToDo = InputListBox("Please choose an action above...", TaskList, TaskList, Title := "iLogic", ListName := "Choices :")
If ToDo = "Do nothing" Then
Return
Else
End If

'[ Define the needed variables
Dim oAsmDoc As AssemblyDocument
Dim oDwgDoc As DrawingDocument
Dim oAsmName, DXFIniFile, DWGIniFile, oSheetName, oViewName As String
oAsmDoc = ThisDrawing.ModelDocument
oDwgDoc = ThisApplication.ActiveDocument
oAsmName = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
oPath = ThisDoc.Path
Dim oPoint1 As Point2d
oTG = ThisApplication.TransientGeometry
Dim oScale As Double
Dim oView As DrawingView
']

'[ ------- ALL CODE SETUP HERE -------
'Get target folder path for export
oDWGFolder = oPath & "\" & oAsmName & " DWG"
oDXFFolder = oPath & "\" & oAsmName & " DXF"
'Get target configuration files for export
DWGIniFile = "C:\temp\Config DWG.ini"
DXFIniFile = "C:\temp\Config DXF.ini"
'Set sheet parameters
oScale = 1/1
oSheetName = "Export DWG & DXF"
oSheetSize = DrawingSheetSizeEnum.kA3DrawingSheetSize
oSheetOrientation = PageOrientationTypeEnum.kLandscapePageOrientation
'oPageOrientation = PageOrientationTypeEnum.kPortraitPageOrientation
'Set view parameters
oViewName = "VIEW TO EXPORT"
oViewOrientation = ViewOrientationTypeEnum.kFrontViewOrientation
oViewStyle = DrawingViewStyleEnum.kHiddenLineDrawingViewStyle
'] ------- END CODE SETUP HERE -------

'[ Check the folders and create them if necessary
If Not System.IO.Directory.Exists(oDWGFolder) Then
    System.IO.Directory.CreateDirectory(oDWGFolder)
End If
If Not System.IO.Directory.Exists(oDXFFolder) Then
    System.IO.Directory.CreateDirectory(oDXFFolder)
End If
']

'[ DWG setup
'Get the DWG translator Add-In.
Dim DWGAddIn As TranslatorAddIn
DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")
'Get the DXF translator Add-In.
Dim DXFAddIn As TranslatorAddIn
DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
'Set a reference to the active document (the document to be published).
Dim oDocument As Document
oDocument = ThisApplication.ActiveEditDocument
Dim oContext As TranslationContext
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism
' Create a NameValueMap object
Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
' Create a DataMedium object
Dim oDataMedium As DataMedium
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
'DWG : Check whether the translator has 'SaveCopyAs' options
If DWGAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
	' Create the name-value that specifies the ini file to use.
	oOptions.Value("Export_Acad_IniFile") = DWGIniFile
End If
'DXF : Check whether the translator has 'SaveCopyAs' options	
If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
	' Create the name-value that specifies the ini file to use.
	oOptions.Value("Export_Acad_IniFile") = DXFIniFile
End If
'] end of DWG setup

'[ ComponentDrawings 
'look at the files referenced by the assembly
Dim oRefDocs As DocumentsEnumerator
oRefDocs = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
'this expects that the model has a drawing of the same path and name 
For Each oRefDoc In oRefDocs
	idwPathName = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & "idw"
	'check to see that the model has a drawing of the same path and name 
	If(System.IO.File.Exists(idwPathName)) Then
		Dim oDrawDoc As DrawingDocument
		oDrawDoc = ThisApplication.Documents.Open(idwPathName, True)
		'If Sheet 2 doesn't exist then create it
		If oDrawDoc.Sheets.Count = 1 Then oDrawDoc.Sheets.Add()
		oDrawDoc.Sheets(2).Name = oSheetName
		oDrawDoc.Sheets(2).Size = oSheetSize
		oDrawDoc.Sheets(2).Orientation = oSheetOrientation
		oPoint1 = oTG.CreatePoint2d(oDrawDoc.Sheets(2).Width / 2, oDrawDoc.Sheets(2).Height / 2)
		'If 1 view doesn't exist then create it
		If oDrawDoc.Sheets(2).DrawingViews.Count = 0 Then
			oView = oDrawDoc.Sheets(2).DrawingViews.AddBaseView(oRefDoc, oPoint1, oScale, oViewOrientation, oViewStyle, "Master")
		End If
		
		'Set view parameters, if view already exists
		oDrawDoc.Sheets(2).DrawingViews(1).Name = oViewName
		oDrawDoc.Sheets(2).DrawingViews(1).Scale = oScale
		oDrawDoc.Sheets(2).DrawingViews(1).Position = oPoint1
				
		oFileName = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -3)
		On Error Resume Next ' if DWG exists and is open or read only, resume next
		'Write out the documents following choices
		If ToDo = "DWG" Or ToDo = "DWG & DXF" Then
			'Set the DWG target file name
			oDataMedium.FileName = oDWGFolder & "\" & oFileName & "dwg"			
			Call DWGAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
		End If
		If ToDo = "DXF" Or Todo = "DWG & DXF" Then
			'Set the DXF target file name
			oDataMedium.FileName = oDXFFolder & "\" & oFileName & "dxf"
			Call DXFAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
		End If
		'close the file
		oDrawDoc.Sheets(1).Activate
		oDrawDoc.Save
		oDrawDoc.Close
	Else
	'If the model has no drawing of the same path and name - do nothing
	End If
Next
'] End of ComponentDrawings 

'[ Top Level Drawing 
'If Sheet 2 doesn't exist then create it
If oDwgDoc.Sheets.Count = 1 Then oDwgDoc.Sheets.Add()
'Set sheet parameters
oDwgDoc.Sheets(2).Name = oSheetName
oDwgDoc.Sheets(2).Size = oSheetSize
oDwgDoc.Sheets(2).Orientation = oSheetOrientation
oPoint1 = oTG.CreatePoint2d(oDwgDoc.Sheets(2).Width / 2, oDwgDoc.Sheets(2).Height / 2)
'If 1 view doesn't exist then create it
If oDwgDoc.Sheets(2).DrawingViews.Count = 0 Then
	oView = oDwgDoc.Sheets(2).DrawingViews.AddBaseView(oAsmDoc, oPoint1, oScale, oViewOrientation, oViewStyle, "Master")
End If
'Set view parameters
oDwgDoc.Sheets(2).DrawingViews(1).Name = oViewName
oDwgDoc.Sheets(2).DrawingViews(1).Scale = oScale
oDwgDoc.Sheets(2).DrawingViews(1).Position = oPoint1
On Error Resume Next ' if DWG exists and is open or read only, resume next
'Write out the documents following choices
If ToDo = "DWG" Or ToDo = "DWG & DXF" Then
	'Set the DWG target file name
	oDataMedium.FileName = oDWGFolder & "\" & oAsmName & ".dwg"
	Call DWGAddIn.SaveCopyAs(oDwgDoc, oContext, oOptions, oDataMedium)
End If
If ToDo = "DXF" Or Todo = "DWG & DXF" Then
	'Set the DXF target file name
	oDataMedium.FileName = oDXFFolder & "\" & oAsmName & ".dxf"
	Call DXFAddIn.SaveCopyAs(oDwgDoc, oContext, oOptions, oDataMedium)
End If
oDwgDoc.Sheets(1).Activate
oDwgDoc.Save	
'] Top Level Drawing 

MessageBox.Show("New Files Created... :-)", "iLogic")

 

Bon tests Smiley très heureux

 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 34 sur 35

ThomasB44
Mentor
Mentor

Et au fait, j'ai trouvé par hasard comment demander à l'utilisateur de sélectionner une face PENDANT l'exécution du code. Smiley heureux

 

'Ask user for axis
oSel = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kWorkAxisFilter,"Select a axis:")
MessageBox.Show(oSel.Name, "iLogic")

Je pense que ça va me servir pour mes développements Smiley clignant de l'œil


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

Message 35 sur 35

ThomasB44
Mentor
Mentor
Solution acceptée

Comme vu ensemble, le fichier de configuration ne permet pas d'exporter une feuille seulement, mais n'exporte que la feuille active, comme lors de l'export en manuel en fait.

 

Ci-dessous le dernier code pour activer la feuille, exporter, et revenir à la 1ère feuille.

 

'check that the active document is a drawing file
If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
MessageBox.Show("Please run this rule from the drawing file.", "iLogic")
Return
End If

'Define task list
Dim TaskList As New List(Of String)
TaskList.add("DWG")
TaskList.add("DXF")
TaskList.add("DWG & DXF")
TaskList.add("Do nothing")
'Ask task to user
ToDo = InputListBox("Please choose an action above...", TaskList, TaskList(3), Title := "iLogic", ListName := "Choices :")
If ToDo = "Do nothing" Then
Return
Else
End If

'[ Define the needed variables
Dim oPartDoc As PartDocument
Dim oDwgDoc As DrawingDocument
Dim oPartName, DXFIniFile, DWGIniFile, oSheetName, oViewName As String
oPartDoc = ThisDrawing.ModelDocument
oDwgDoc = ThisApplication.ActiveDocument
MessageBox.Show(ThisDoc.FileName, "Title")

oPartName = Left(oPartDoc.DisplayName, Len(oPartDoc.DisplayName) -4)
oPath = ThisDoc.Path
Dim oPoint1 As Point2d
oTG = ThisApplication.TransientGeometry
Dim oScale As Double
Dim oView As DrawingView
']

'[ ------- ALL CODE SETUP HERE -------
'Get target folder path for export
oDWGFolder = oPath & "\" & oPartName & " DWG"
oDXFFolder = oPath & "\" & oPartName & " DXF"
'Get target configuration file for export
DWGIniFile = "C:\temp\Config DWG.ini"
DXFIniFile = "C:\temp\Config DXF.ini"
'Set sheet parameters
oScale = 1/1
oSheetName = "Export DWG & DXF"
oSheetSize = DrawingSheetSizeEnum.kA3DrawingSheetSize
oSheetOrientation = PageOrientationTypeEnum.kLandscapePageOrientation
'oPageOrientation = PageOrientationTypeEnum.kPortraitPageOrientation
'Set view parameters
oViewName = "VIEW TO EXPORT"
oViewOrientation = ViewOrientationTypeEnum.kFrontViewOrientation
oViewStyle = DrawingViewStyleEnum.kHiddenLineDrawingViewStyle
'] ------- END CODE SETUP HERE -------

'[ Check the folders and create them if necessary
If Not System.IO.Directory.Exists(oDWGFolder) Then
    System.IO.Directory.CreateDirectory(oDWGFolder)
End If
If Not System.IO.Directory.Exists(oDXFFolder) Then
    System.IO.Directory.CreateDirectory(oDXFFolder)
End If
']

'[ DWG setup
'Get the DWG translator Add-In.
Dim DWGAddIn As TranslatorAddIn
DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")
'Get the DXF translator Add-In.
Dim DXFAddIn As TranslatorAddIn
DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
'Set a reference to the active document (the document to be published).
Dim oDocument As Document
oDocument = ThisApplication.ActiveEditDocument
Dim oContext As TranslationContext
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism
' Create a NameValueMap object
Dim oOptions As NameValueMap
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
' Create a DataMedium object
Dim oDataMedium As DataMedium
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
'DWG : Check whether the translator has 'SaveCopyAs' options
If DWGAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
	' Create the name-value that specifies the ini file to use.
	oOptions.Value("Export_Acad_IniFile") = DWGIniFile
End If
'DXF : Check whether the translator has 'SaveCopyAs' options	
If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
	' Create the name-value that specifies the ini file to use.
	oOptions.Value("Export_Acad_IniFile") = DXFIniFile
End If
'] end of DWG setup

'[ Top Level Drawing 

'If Sheet 2 doesn't exist then create it
If oDwgDoc.Sheets.Count = 1 Then oDwgDoc.Sheets.Add()
'Set sheet parameters
oDwgDoc.Sheets(2).Name = oSheetName
oDwgDoc.Sheets(2).Size = oSheetSize
oDwgDoc.Sheets(2).Orientation = oSheetOrientation
oPoint1 = oTG.CreatePoint2d(oDwgDoc.Sheets(2).Width / 2, oDwgDoc.Sheets(2).Height / 2)
'If 1 view doesn't exist then create it
If oDwgDoc.Sheets(2).DrawingViews.Count = 0 Then
	oView = oDwgDoc.Sheets(2).DrawingViews.AddBaseView(oPartDoc, oPoint1, oScale, oViewOrientation, oViewStyle, "Master")
End If
'Set view parameters
oDwgDoc.Sheets(2).DrawingViews(1).Name = oViewName
oDwgDoc.Sheets(2).DrawingViews(1).Scale = oScale
oDwgDoc.Sheets(2).DrawingViews(1).Position = oPoint1
On Error Resume Next ' if DWG exists and is open or read only, resume next
oDwgDoc.Sheets(2).Activate 'Necessary to export only the second sheet
'Write out the documents following choices
If ToDo = "DWG" Or ToDo = "DWG & DXF" Then
	'Set the DWG target file name
	oDataMedium.FileName = oDWGFolder & "\" & oPartName & ".dwg"
	Call DWGAddIn.SaveCopyAs(oDwgDoc, oContext, oOptions, oDataMedium)
End If
If ToDo = "DXF" Or Todo = "DWG & DXF" Then
	'Set the DXF target file name
	oDataMedium.FileName = oDXFFolder & "\" & oPartName & ".dxf"
	Call DXFAddIn.SaveCopyAs(oDwgDoc, oContext, oOptions, oDataMedium)
End If
oDwgDoc.Sheets(1).Activate
oDwgDoc.Save	
'] Top Level Drawing 

MessageBox.Show("New Files Created... :-)", "iLogic")

Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature