• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Esportazione "automatica" idw to pdf-dxf

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#1
Buongiorno a tutti,
avrei la necessità di utilizzare una macro (o qualcosa di simile) che, una volta lanciata mi converta il file .IDW in PDF e DXF e che i file creati me li salvi in una cartella PDF-DXF presente sul Desktop.
Evitando quindi tutte le volte di fare il SALVA COPIA CON NOME per ciascuna delle due estensioni...
Qualcuno utilizza qualcosa di simile?
Grazie
 

aiq

Utente Junior
Professione: Progettista Meccanico Macchine Speciali
Software: La Mia Testa
Regione: CN Piemonte
#4
Sarebbe utile anche a me!
Menù Start di Windows
nella cartella autodesk\Inventor****\Strumenti
c'è il programma
Programmazione Operazioni

Non è molto userfriendly, è migliorabile, ma mi toglie le castagne dal fuoco tante volte...
 

erreerre

Guest
#5
Buongiorno a tutti,
avrei la necessità di utilizzare una macro (o qualcosa di simile) che, una volta lanciata mi converta il file .IDW in PDF e DXF e che i file creati me li salvi in una cartella PDF-DXF presente sul Desktop.
Evitando quindi tutte le volte di fare il SALVA COPIA CON NOME per ciascuna delle due estensioni...
Qualcuno utilizza qualcosa di simile?
Grazie
crea una nuova regola con Inventor iLogic per salvare in diversi formati
http://autodeskmfg.typepad.com/blog/2012/01/using-inventor-ilogic-to-save-multipl-formats.html
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#6
La regola iLogic sopra postata è sicuramente più compatta :wink:

Devi fare un "Salva copia con nome" > dwg e un "Salva copia con nome" > dxf per creare i file di inizializzazione.
Ho provato e a me va tutto bene: fammi sapere se non funziona.

Codice:
Public Sub PubblicaDXFDWG()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    
    ' DESTINATION FOLDER
    ' ---------------------------------------------------
    Dim sExportPath As String
    sExportPath = "C:\Users\Utente\Desktop\DWG-DXF\"
    ' ---------------------------------------------------
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    ' Get the filename with no path
    Dim sFileName As String
    sFileName = sExportPath & IsolaNome(oDoc.FullFileName, True)
    
    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")

    ' Get the DXF translator Add-In.
    Dim DXFAddIn As TranslatorAddIn
    Set DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
    
    Dim strIniFile As String
    
    
    ' Common init
    ' Create a Context object
    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = kFileBrowseIOMechanism
      
    ' Create a NameValueMap object
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

    ' Create a DataMedium object
    Dim oDataMedium As DataMedium
    Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

    ' -------------------------------
    ' DWG
    ' -------------------------------
    
    ' Check whether the translator has 'SaveCopyAs' options
    If DWGAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then
        ' File with exportation options
        strIniFile = "C:\tempDWGOut.ini"
        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    oDataMedium.filename = sFileName & ".dwg"


    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium)
    
    ' -------------------------------
    ' DXF
    ' -------------------------------
    
    ' Check whether the translator has 'SaveCopyAs' options
    If DXFAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then
    
        ' File with exportation options
        strIniFile = "C:\tempDXFOut.ini"

        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    oDataMedium.filename = sFileName & ".dxf"

    'Publish document.
    Call DXFAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium)
    
End Sub

'Funzione che restituisce il nome del file togliendo il path ed il suffisso
Public Function IsolaNome(ByVal NomeFile As String, Optional Trunc As Boolean) As String
    
    'toglie il .ipt
    If Trunc = True Then
        NomeFile = Strings.Left(NomeFile, Len(NomeFile) - 4)
    End If
    
    Dim pos As Integer
    'Ciclo che rimuove il path: trova "\" e tiene tutto a dx
    Do
        pos = InStr(NomeFile, "\")
        NomeFile = Strings.Right(NomeFile, Len(NomeFile) - pos)
    Loop Until pos = 0
    IsolaNome = NomeFile
End Function
 

Allegati

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#7
Buongiorno,
@aiq e erreerre : la mia operazione non può essere pianificata in automatico secondo qualche evento.
@Catafratto: Grazie per la macro ma non mi funziona. Inoltre dovrei fare PDF e DXF (non DWG)
Immagine.jpg
Purtroppo di VBA non capisco una pizza... :(

- - - Aggiornato - - -

Comunque grazie a tutti.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#8
Sì, ho letto fischi per fiaschi... ma la correzione è un attimo.

Cosa non ti funziona comunque? Una volta copiata la macro mica bisogna capire come lavora...
 

aiq

Utente Junior
Professione: Progettista Meccanico Macchine Speciali
Software: La Mia Testa
Regione: CN Piemonte
#10
La pianificazione può essere impostata con "Subito", e lui parte subito. Si chiamano operazioni pianificate, ma non ho mai pianificato oltre l'immediato.
Sicuramente con la macro, si possono personalizzare le funzioni...



Buongiorno,
@aiq e erreerre : la mia operazione non può essere pianificata in automatico secondo qualche evento.
@Catafratto: Grazie per la macro ma non mi funziona. Inoltre dovrei fare PDF e DXF (non DWG)
View attachment 38543
Purtroppo di VBA non capisco una pizza... :(

- - - Aggiornato - - -

Comunque grazie a tutti.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#11
Prima di far partire la macro hai fatto il "salva copia con nome" nei vari formati dxf e dwg (ok, quest'ultimo a te inutile) manualmente come ti avevo indicato? L'operazione crea dei file di inizializzazione necessari per le esportazioni successive alla prima.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#12
Ecco la versione aggiornata, si può eliminare quello che non serve: è racchiuso tra i commenti (Es. DWG ... FINE DWG)

La macro è "garantita" in quanto poco più di un copia incolla di quanto contenuto nell'help di Inventor stesso: se non funziona dev'essere per un particolare da poco, forse qualcun altro può fare un test (confermo che a me va tutto)

P.S.
La cartella di destinazione deve esistere già, ed il nome può cambiare da computer a computer: nella variabile sExportPath mettete quella che preferite.

Codice:
Public Sub PubblicaDXFDWGPDF()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    
    ' DESTINATION FOLDER
    ' ---------------------------------------------------
    Dim sExportPath As String
    sExportPath = "C:\Users\Utente\Desktop\DWG-DXF-PDF\"
    ' ---------------------------------------------------
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    ' Get the filename with no path
    Dim sFileName As String
    sFileName = sExportPath & IsolaNome(oDoc.FullFileName, True)
    
    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")

    ' Get the DXF translator Add-In.
    Dim DXFAddIn As TranslatorAddIn
    Set DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
    
    ' Get the PDF translator Add-In.
    Dim PDFAddIn As TranslatorAddIn
    Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
    
    Dim strIniFile As String
    
    
    ' Common init
    ' Create a Context object
    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = kFileBrowseIOMechanism
      
    ' Create a NameValueMap object
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

    ' Create a DataMedium object
    Dim oDataMedium As DataMedium
    Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

    ' ---------------------------------------------------------------------------
    ' DWG
    ' -------------------------------
    
    ' Check whether the translator has 'SaveCopyAs' options
    If DWGAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then
        ' File with exportation options
        strIniFile = "C:\tempDWGOut.ini"
        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    oDataMedium.filename = sFileName & ".dwg"


    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium)
    
    ' -------------------------------
    ' FINE DWG
    ' ---------------------------------------------------------------------------
    
    
    ' ---------------------------------------------------------------------------
    ' DXF
    ' -------------------------------
    
    ' Check whether the translator has 'SaveCopyAs' options
    If DXFAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then
    
        ' File with exportation options
        strIniFile = "C:\tempDXFOut.ini"

        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    oDataMedium.filename = sFileName & ".dxf"

    'Publish document.
    Call DXFAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium)
    ' -------------------------------
    ' FINE DXF
    ' ---------------------------------------------------------------------------
    
    
    ' ---------------------------------------------------------------------------
    ' PDF
    ' -------------------------------

    ' Check whether the translator has 'SaveCopyAs' options
    If PDFAddIn.HasSaveCopyAsOptions(oDoc, oContext, oOptions) Then

        ' Options for drawings...

        oOptions.Value("All_Color_AS_Black") = 0

        'oOptions.Value("Remove_Line_Weights") = 0
        'oOptions.Value("Vector_Resolution") = 400
        'oOptions.Value("Sheet_Range") = kPrintAllSheets
        'oOptions.Value("Custom_Begin_Sheet") = 2
        'oOptions.Value("Custom_End_Sheet") = 4
    End If

    'Set the destination file name
    oDataMedium.filename = sFileName & ".pdf"


    'Publish document.
    Call PDFAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium)
    ' -------------------------------
    ' FINE PDF
    ' ---------------------------------------------------------------------------
End Sub
 

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#13
Boooh...
Dunque apro un .idw
vado in strumenti ->Editor di Visual Basic e seguo tutte le istruzioni che hai messo nel file "come copiare le macro.txt"
Eseguo il salvataggio ed esco da VB
Faccio una Salva copia con nome in DXF
Faccio una Salva copia con nome in PDF

Poi avvio la macro.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#15
In fondo alla macro "seconda versione" aggiungi questo, non l'avevo ricopiato:
Fatto una volta il salva con nome non dovrebbe servire più.
Codice:
'Funzione che restituisce il nome del file togliendo il path ed il suffisso
Public Function IsolaNome(ByVal NomeFile As String, Optional Trunc As Boolean) As String
    
    'toglie il .ipt
    If Trunc = True Then
        NomeFile = Strings.Left(NomeFile, Len(NomeFile) - 4)
    End If
    
    Dim pos As Integer
    'Ciclo che rimuove il path: trova "\" e tiene tutto a dx
    Do
        pos = InStr(NomeFile, "\")
        NomeFile = Strings.Right(NomeFile, Len(NomeFile) - pos)
    Loop Until pos = 0
    IsolaNome = NomeFile
End Function
 
Professione: Progettista
Software: Inventor / AutoCad
Regione: Lombardia
#16
Ciao, la discussione interessa mooolto anche a me. ( ho 50.000 articoli da sincronizzare )

Dunque, i punti sono questi: la macro VBA per l'esportazione in .pdf funziona , ma solo a livello di documento, cioè col codice iniettato nel documento, o nel template, siccome la mia necessità è quella di avere sincronizzato il .idw col .pdf ( per i fornitori), questa macro dovrebbe girare a livello di applicazione, globalmente, eseguendo il suo lavoro su tutti gli idw ( anche quelli vecchi ); per fare questo, bisognava dichiarare le variabili globali all'interno del file "devault.ivb" , eseguito a livello applicazione, purtroppo dico "bisognava" perchè dalla release 2013 autodesk ha deciso di non far girare macro a livello applicazione. ( il mio intento è quello di salvare in .pdf una copia, ogni volta che salvo in .idw)
Ho provato ad associare ad un pulsante specifico la marco, e funziona, ma mi devo ricordare di schiacciare quel pulsante!! :) mentre se potessi modificare l'azione del pulsante "salva" tutto si risolverebbe, ma non ho trovato come fare.

@aiq, per le operazioni pianificate, funzionano bene sui cambi di release (migra file), su tutte le stampe possibili, ma purtroppo non in pdf ! :(

La mia domanda, è come andare a modificare l'azione globale intrapresa quando viene richiesto un salvataggio.

Buon lavoro a tutti.

Mario
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#17
purtroppo dico "bisognava" perchè dalla release 2013 autodesk ha deciso di non far girare macro a livello applicazione.
???
A livello di applicazione tutto funziona benissimo (io faccio solo così e uso la 2014): quello che hanno fatto è stato togliere l'esecuzione automatica legata agli eventi (es. all'apertura, alla chiusura, ecc.)

Puoi sempre collegare la macro ad un tasto e aggiungere la riga:

oDoc.save()

in modo che prima di fare le esportazioni ti salva il documento...
 

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#18
A me da sempre problemi questa macro... boh.
Anche aggiungendo in fondo l'ultima parte non mi funziona.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#19
A me da sempre problemi questa macro... boh.
Anche aggiungendo in fondo l'ultima parte non mi funziona.
Con "non mi funziona" non posso aiutare oltre...
Com "mi da' questo errore: [descrizione del problema]" darò molto volentieri ulteriori indicazioni.
 

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#20
Con "non mi funziona" non posso aiutare oltre...
Com "mi da' questo errore: [descrizione del problema]" darò molto volentieri ulteriori indicazioni.

Già hai ragione. Comunque copio la macro, salvo. Chiudo e apro un .idw. Lancio la macro e mi esce questo:
Immagine.jpg

Grazie