Macro per salvare in step da dft

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#1
Buongiorno a tutti,

Scrivo perchè avrei bisogno di aiuto con una macro che sto scrivendo per Solid Edge.
La macro attualmente funziona in questo modo:
1. Bisogna avere aperto un file draft (es. "pippo.dft")
2. La macro fa in modo di creare in automatico il file dxf e il pdf con lo stesso nome (es. "pippo.dxf" e "pippo.pdf") e li salva in due percorsi prestabiliti
3. Chiude il file dft aperto inizialmente

Adesso sto cercando di ampliare questa macro e fare in modo che:
1. Apra il rispettivo file par (es. "pippo.par")
2. Crei il file step relativo (es. "pippo.stp") e lo salvi un percorso prestabilito (S:\ug\step\)
3. Chiuda il file par appena aperto

Potreste darmi alcuni consigli su come scrivere questa parte di codice?
Di seguito vi allego la macro che ho scritto:
Codice:
Imports System.Runtime.InteropServices
Imports System
Imports System.Drawing

Module Module1

    Dim objApp As SolidEdgeFramework.Application
    Dim objDft As SolidEdgeDraft.DraftDocument
    Dim ObjPrt As SolidEdgePart.PartDocument
    Dim filename As String
    Dim filename_PRT As String
    Dim pathname_1 As String
    Dim pathname_2 As String

    Sub Main()
        On Error Resume Next

        objApp = GetObject(, "SolidEdge.Application")       'Crea un'applicazione Soli Edge con determinate caratteristiche

        If objApp Is Nothing Then
            MsgBox("Solid Edge non è aperto! Aprire Solid Edge.", vbCritical, "Attenzione")
            Exit Sub

        ElseIf objApp.ActiveDocument Is Nothing Then
            MsgBox("Nessun documento aperto!", vbInformation, "Attenzione")
            Exit Sub

        ElseIf objApp.Document.Type <> SolidEdgeFramework.DocumentTypeConstants.igDraftDocument Then
            MsgBox("Nessun documento DRAFT aperto! Aprire un DRAFT.", vbInformation, "Attenzione")
            Exit Sub
        End If

        For Each Document In objApp.Documents     'Esegue il ciclo fintanto che ci sono DRAFT aperti

            If Document.Type = SolidEdgeFramework.DocumentTypeConstants.igDraftDocument Then
                objDft = Document
                Call objDft.Save()      'Messo prima del nome, per i file nuovi viene correttamente chiesto di dare il nome

                filename = Left(objDft.Name, Len(objDft.Name) - 4)      'Ricava solo il nome file

                pathname_1 = "S:\ug\dxf\"       'percorso file dxf
                pathname_2 = "S:\ug\dati\"      'percorso file pdf

                objApp.DisplayAlerts = False    'Sovrascrive in automatico i file con lo stesso nome senza chiedere

                Call objDft.SaveAs(pathname_1 + filename + "." + "dxf")     'salva con nome dxf
                Call objDft.SaveAs(pathname_2 + filename + "." + "pdf")     'salva con nome pdf

                objApp.DisplayAlerts = True     'Riattiva i messaggi di allerta di Windows
                Call objDft.Close()    'Chiude il file DRAFT di cui ha appena creato pdf e dxf
            End If

        Next Document

        objDft = Nothing
        objApp = Nothing
    End Sub
End Module
Vi ringrazio tutti in anticipo per la collaborazione.
 

delki

Utente Standard
Professione: Tecnical Support e Formazione su Solid Edge e SolidRules
Software: Solid Edge, Visual Basic .NET, SolidRules: InCentro, Desk, Configurator Manufactoring, Studio
Regione: Veneto
#2
Potresti farlo più o meno così:

Codice:
Imports System.Runtime.InteropServices
Imports System
Imports System.Drawing

Module Module1

    Dim objApp As SolidEdgeFramework.Application
    Dim objDft As SolidEdgeDraft.DraftDocument
    Dim ObjDoc As SolidEdgeFramework.SolidEdgeDocument
    Dim filename As String
    Dim filename_PRT As String
    Dim pathname_1 As String
    Dim pathname_2 As String
    Dim pathname_3 As String

    Sub Main()
        On Error Resume Next

        objApp = GetObject(, "SolidEdge.Application")       'Crea un'applicazione Soli Edge con determinate caratteristiche

        If objApp Is Nothing Then
            MsgBox("Solid Edge non è aperto! Aprire Solid Edge.", vbCritical, "Attenzione")
            Exit Sub

        ElseIf objApp.ActiveDocument Is Nothing Then
            MsgBox("Nessun documento aperto!", vbInformation, "Attenzione")
            Exit Sub

        ElseIf objApp.ActiveDocument.Type <> SolidEdgeFramework.DocumentTypeConstants.igDraftDocument Then
            MsgBox("Nessun documento DRAFT aperto! Aprire un DRAFT.", vbInformation, "Attenzione")
            Exit Sub
        End If

        For Each Document In objApp.Documents     'Esegue il ciclo fintanto che ci sono DRAFT aperti

            If Document.Type = SolidEdgeFramework.DocumentTypeConstants.igDraftDocument Then
                objDft = Document
                Call objDft.Save()      'Messo prima del nome, per i file nuovi viene correttamente chiesto di dare il nome

                filename = Left(objDft.Name, Len(objDft.Name) - 4)      'Ricava solo il nome file

                pathname_1 = "C:\TEMP\"       'percorso file dxf
                pathname_2 = "C:\TEMP\"      'percorso file pdf
                pathname_3 = "C:\TEMP\"      'percorso file step

                objApp.DisplayAlerts = False    'Sovrascrive in automatico i file con lo stesso nome senza chiedere

                objDft.SaveAs(pathname_1 + filename + "." + "dxf")     'salva con nome dxf
                objDft.SaveAs(pathname_2 + filename + "." + "pdf")     'salva con nome pdf

                For J As Integer = 1 To objDft.ModelLinks.Count
                    ObjDoc = objApp.Documents.Open(objDft.ModelLinks.Item(J).FileName)
                    ObjDoc.SaveAs(pathname_2 + filename + ".stp")
                    ObjDoc.Close()
                Next J

                objApp.DisplayAlerts = True     'Riattiva i messaggi di allerta di Windows
                    Call objDft.Close()    'Chiude il file DRAFT di cui ha appena creato pdf e dxf
            End If

        Next Document

        objDft = Nothing
        objApp = Nothing
    End Sub
End Module