• 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

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#21
Secondo me hai copiato la funzione IsolaNome prima della riga contenete "End Sub": la funzione deve essere copiata alla fine di tutto, fuori dal blocco "sub - end sub". Comunque ti riposto tutto:

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

'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
Fammi sapere!
 
Professione: Progettista
Software: Inventor / AutoCad
Regione: Lombardia
#22
... quello che hanno fatto è stato togliere l'esecuzione automatica legata agli eventi (es. all'apertura, alla chiusura, ecc.)...
Ciao, era proprio questo che volevo dire...

Far girare la macro a livello applicazione, per me, significa non immettere il codice in un .idw, ma caricarlo in memoria all'apertura di inventor,
(usando il default.ivb per intenderci) e far eseguire la macro VBA all'evento di chiusura/salvataggio del documento, dichiarando le variabili globali.
Ho provato anche con regole e trigger esterni, ma niente da fare, le mie risorse intellettive non me lo hanno permesso :)

Ho provato a fare il tasto, con il codice associato e funziona, ma è praticamente la stessa cosa che si ottiene con l'esporta pdf del menu,
a me servirebbe una soluzione "silente", dove se uno non si ricorda di esportare il .pdf, lo fa' in automatico, per evitare discrepanze idw-pdf.

Grazie comunque e buon lavoro.
 

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#24
...Altra richiesta... Ne approfitto ma non so se è un operazione troppo onerosa in termini di tempo. La propongo:
I miei file hanno nomenclatura nome.idw e i file esportati devono avere questa: nome (Rev.01) PN123456.pdf dove 01 identifica la revisione e 123456 il codice di ricambio che inserisco manualmente.
Richiedo se sarebbe possibile inserire nel codice sopra un comando con il quale, una volta lanciata la macro, esca una finestra con il campo Rev.? e il campo PN? nei quali inserirò 01 e 123456 in modo tale che poi i file creati abbiano la nomenclatura automatizzata nome (Rev.01) PN123456.pdf/dxf

Chiedo troppo? :)
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#25
No, è roba da poco: al primo momento di fiacca nella giornata te lo faccio. Sono forse dati che hai nelle iProperties del modello?
 

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#26
Si solo il codice PN come proprietà personalizzata P/N che compilo manualmente sia nell'IPT che nell'IDW.
 

lollo76

Utente Junior
Professione: Progettista
Software: Inventor 2013
Regione: Lombardia
#27
...Altra richiesta... Ne approfitto ma non so se è un operazione troppo onerosa in termini di tempo. La propongo:
I miei file hanno nomenclatura nome.idw e i file esportati devono avere questa: nome (Rev.01) PN123456.pdf dove 01 identifica la revisione e 123456 il codice di ricambio che inserisco manualmente.
Richiedo se sarebbe possibile inserire nel codice sopra un comando con il quale, una volta lanciata la macro, esca una finestra con il campo Rev.? e il campo PN? nei quali inserirò 01 e 123456 in modo tale che poi i file creati abbiano la nomenclatura automatizzata nome (Rev.01) PN123456.pdf/dxf

Chiedo troppo? :)
OPS mi sono accorto di un errore. La nomenclatura corretta è nome Rev.01 (PN123456).pdf/dxf
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#28
Prova questo (sovrascrivi tutta la roba "vecchia"):
Prima di chederti il codice la macro cerca di leggere la iPropertiy nella tavola. Se non c'è ti chiede il codice.
Dorai aggiornare la macro con il nome della tua iProperty


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)
    
    ' Numero di revisione
    Dim sRev As String
    sRev = InputBox("Revisione:? ", "Inserimento numero di revisione", "00")
    
    'Legge le iProperties personalizzate:
    '-------------------------------------------------------------------------------------------------------
    Dim oPropSets As PropertySets
    Set oPropSets = oDoc.PropertySets
    
    'Custom
    '-------------------------------------------------------------------------------------------------------
    Dim oCustomPropSet As PropertySet
    Set oCustomPropSet = oPropSets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}")

    On Error Resume Next
    Dim sCod As String

    ' SOSTITUIRE "CODICE" CON IL NOME CHE SI USA PER L'IPROPERTY CHE INTERESSA
    sCod = oCustomPropSet.Item("Codice").Value
    
    If sCod = "" Then
        sCod = InputBox("Codice ricambio (Inserimento manuale):? ", "Inserimento manuale Codice ricambio")
    End If
    
    sFileName = sFileName & " Rev." & sRev & " (" & sCod & ")"
    
    ' 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

'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
 

Esselle

Utente Standard
Professione: Tiro linee
Software: Inventor, Autocad e occasionalmente Solidworks 2016
Regione: Italia
#30
Mi intrufolo per una richiesta : se volessi salvare solo in dwg e pdf e nella stessa cartella dove sta il file idw che modifiche devo apportare alla macro? Ho provato, ma non capendoci nulla ho fatto dei tentativi infruttuosi :frown:. Premetto che già adesso uso una macro (trovata sempre tra queste pagine) per salvare nei due formati, ma attivata da pulsante personalizzato sulla barra strumenti.

Grazie in anticipo!
 

MauroM

Utente Standard
Professione: mah!
Software: Inv + SW(purtroppo)
Regione: .
#31
Secondo me hai copiato la funzione IsolaNome prima della riga contenete "End Sub": la funzione deve essere copiata alla fine di tutto, fuori dal blocco "sub - end sub". Comunque ti riposto tutto:

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

'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
Fammi sapere!
funziona benissimo anche a me, grazie mille Catafratto.
Ne approfitto per chiederti una cosa : si potrebbe fare in modo che faccia il salvataggio non solo del singolo file visualizzato ma di tutti i file aperti in quel momento ? oppure di una cartella intera ?
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#32
Sì, certo, si può fare tutto.
Ci vuole più tempo, però :tongue:

Appena posso guardo come fare.

Buon Lunedì a tutti!
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#34
Mi intrufolo per una richiesta : se volessi salvare solo in dwg e pdf e nella stessa cartella dove sta il file idw che modifiche devo apportare alla macro? Ho provato, ma non capendoci nulla ho fatto dei tentativi infruttuosi :frown:. Premetto che già adesso uso una macro (trovata sempre tra queste pagine) per salvare nei due formati, ma attivata da pulsante personalizzato sulla barra strumenti.

Grazie in anticipo!
Anche questa la attiveresti così, quindi forse non ho ben capito la richiesta...
 

Esselle

Utente Standard
Professione: Tiro linee
Software: Inventor, Autocad e occasionalmente Solidworks 2016
Regione: Italia
#35
Sono io che spiego da bestia...vorrei che al salvataggio dell'IDW si creino in automatico nella stessa cartella dove sta l'IDW il pdf e il dwg!
 

Esselle

Utente Standard
Professione: Tiro linee
Software: Inventor, Autocad e occasionalmente Solidworks 2016
Regione: Italia
#37
Questa è la discussione da cui ho preso la macro che uso attualmente pigiando i due pulsanti, ho letto e riletto non mi sembra che si possa fare in automatico al salvataggio, o mi è sfuggito qualcosa?
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#38
Questa è la discussione da cui ho preso la macro che uso attualmente pigiando i due pulsanti, ho letto e riletto non mi sembra che si possa fare in automatico al salvataggio, o mi è sfuggito qualcosa?
No, non ti sfugge nulla: le macro non si attivano più automaticamente.
Si può:
1) premere un tasto che ti salva nel formato Inventor e poi ti fa l'esportazione, ma non funziona nel caso di salvataggi in altro modo, come chiudendo il file;

2) usare (l'ottimo) consiglio di erreerre a inizio discussione creando una regola ilogic (riallego il link) http://autodeskmfg.typepad.com/blog/2012/01/using-inventor-ilogic-to-save-multipl-formats.html, che però puoi praticamente fare solo con i file nuovi mettendolo dentro al template. iLogic gestisce bene le attivazioni mediante trigger di evento (apri, chiudi, salva, modifica ecc. ecc.)

Se vuoi la prima soluzione è un attimo, fammi sapere. Per la seconda vedi un po' se con il link riesci a fare, le righe di codice sono chiare...

- - - Aggiornato - - -

funziona benissimo anche a me, grazie mille Catafratto.
Ne approfitto per chiederti una cosa : si potrebbe fare in modo che faccia il salvataggio non solo del singolo file visualizzato ma di tutti i file aperti in quel momento ? oppure di una cartella intera ?
Non ho ancora avuto tempo, sorry
 

Esselle

Utente Standard
Professione: Tiro linee
Software: Inventor, Autocad e occasionalmente Solidworks 2016
Regione: Italia
#39
No, non ti sfugge nulla: le macro non si attivano più automaticamente.
Si può:
1) premere un tasto che ti salva nel formato Inventor e poi ti fa l'esportazione, ma non funziona nel caso di salvataggi in altro modo, come chiudendo il file;

2) usare (l'ottimo) consiglio di erreerre a inizio discussione creando una regola ilogic (riallego il link) http://autodeskmfg.typepad.com/blog/2012/01/using-inventor-ilogic-to-save-multipl-formats.html, che però puoi praticamente fare solo con i file nuovi mettendolo dentro al template. iLogic gestisce bene le attivazioni mediante trigger di evento (apri, chiudi, salva, modifica ecc. ecc.)

Se vuoi la prima soluzione è un attimo, fammi sapere. Per la seconda vedi un po' se con il link riesci a fare, le righe di codice sono chiare...
Grazie mille Catafratto, opterei per la prima soluzione, dato che rispetto ad ora mi risparmia comunque "click" e vale per i file esistenti.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#40
Grazie mille Catafratto, opterei per la prima soluzione, dato che rispetto ad ora mi risparmia comunque "click" e vale per i file esistenti.
Mi pare funzioni

Codice:
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    ' Save the file with dependants
    oDoc.Save2
    
    Dim fn As String
    Dim DWGfn As String
    Dim PDFfn As String
    
    ' Generate the file names
    fn = oDoc.FullFileName
    DWGfn = Strings.Left(fn, Len(fn) - 4) & ".dwg"
    PDFfn = Strings.Left(fn, Len(fn) - 4) & ".pdf"
    
    
    ' 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 = DWGfn


    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDoc, oContext, oOptions, oDataMedium)
    
    ' -------------------------------
    ' FINE DWG
    ' ---------------------------------------------------------------------------
  
    
    ' ---------------------------------------------------------------------------
    ' 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 = PDFfn


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