Pagina 8 di 9 PrimaPrima ... 6789 UltimaUltima
Risultati da 71 a 80 di 87

Discussione: [MACRO] - Apri DFT

  1. #71
    Moderatore L'avatar di Be_on_edge
    Iscritto dal
    2007
    Messaggi
    2760
    Professione
    Progettazione
    Regione
    Emilia Romagna
    Software
    Solid Edge

    Predefinito

    Per chi mi aveva chiesto il sorgente eccolo:

    Codice:
    Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
    
    Private Sub Main()
    Dim objApp As SolidEdgeFramework.Application
    Dim objDoc As SolidEdgeDocument
    Dim objPar As SolidEdgePart.PartDocument
    Dim objPsm As SolidEdgePart.SheetMetalDocument
    Dim objAsm As SolidEdgeAssembly.AssemblyDocument
    Dim objDft As SolidEdgeDraft.DraftDocument
    
    Dim objProps As SolidEdgeFramework.Properties
    
    Dim objSelectSet As SolidEdgeFramework.SelectSet
    
    Dim dftname As String
    Dim stato As Boolean
    
    Dim strActEnv As String
    Dim name As String
    
    On Error Resume Next
    Set objApp = GetObject(, "SolidEdge.Application")
    
    If GetKeyState(vbKeyShift) And &H8000 Then stato = True Else stato = False
    
    If Err Then
        Err.Clear
        End
    Else
        Set objDoc = objApp.ActiveDocument
        Set objAsm = objApp.ActiveDocument
        Set objPar = objApp.ActiveDocument
        Set objPsm = objApp.ActiveDocument
        Set objDft = objApp.ActiveDocument
    End If
    
    strActEnv = objApp.ActiveEnvironment
    
    Set objProps = objDoc.Properties("Custom")
    
    Select Case strActEnv
    
        Case Is = "Assembly"
            Count = objAsm.SelectSet.Count
            If Count = 0 Then
                
                name = objProps.Item("DraftLink").Value
                If Err.Number = 9 Then name = objAsm.FullName: Err.Clear
                
            Else
                For i = 1 To Count
                    Set objProps = objAsm.SelectSet(i).OccurrenceDocument.Properties("Custom")
                    name = objProps.Item("DraftLink").Value
                    
                    name = objAsm.SelectSet(i).OccurrenceFileName
                    If name = "" Then name = objAsm.SelectSet(i).object.OccurrenceDocument.FullName
                    l = Len(name)
                    dftname = Left(name, l - 3) + "dft"
                    If file_exist(dftname) Then
                        objDft = objApp.Documents.Open(dftname)
                        objDft.InactiveDrawingViewMode = stato
                    End If
                    name = ""
                Next
                End
            End If
        
        Case Is = "Part"
                name = objProps.Item("DraftLink").Value
                If Err.Number = 9 Then name = objPar.FullName: Err.Clear
                
        Case Is = "SheetMetal"
            name = objProps.Item("DraftLink").Value
            If Err.Number = 9 Then name = objPsm.FullName: Err.Clear
        
        Case Is = "Detail"
            name = objDft.FullName
            Set objProps = objDft.ModelLinks(1).ModelDocument.Properties("Custom")
            objProps.Item("DraftLink").Value = name
            
            If Err.Number = 9 Then
                objProps.Add "DraftLink", name
                objProps.Save
                Err.Clear
            End If
            
            Set objProps = Nothing
            Set objDft = Nothing
            
    End Select
    
    l = Len(name)
    dftname = Left(name, l - 3) + "dft"
    
    If file_exist(dftname) Then
        Set objDft = objApp.Documents.Open(dftname)
        objDft.InactiveDrawingViewMode = stato
    End If
    
    Set objApp = Nothing
    Set objDoc = Nothing
    
    End Sub
    
    Function file_exist(dft As String) As Boolean
    
        A = Dir$(dft)
        If A <> "" Then file_exist = True Else file_exist = False
        
    End Function
    Francesco
    Cintura nera di solid edge

  2. #72
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Ciao, vorrei utilizzare questa macro adattandola al mio archivio disegni, senza la necessità di utilizzare la proprietà DraftLink (che dovrebbe essere altrimenti generata manon mano in tutti i file).

    Ho provato a fare qualche modifica: incollando il listato in excel e avviandola da lì mi sembra che funzioni tutto (per inciso: è un portento!)

    Ora, non avendo un compilatore VB, ho provato a fare il semplice file WSF come suggerito in qualche post vecchio (mi sembra di ricordare da Vespa), ma non va. Probabilmente non è così semplice!
    Dov'è che sbaglio? Per caso deve cambiare la sintassi?

    Un'altra domanda: non ho capito la questione del tasto shift premuto o meno; non mi sembra che cambi niente. In effetti non credo di sapere neanche cosa significhi avere le viste attive o no in draft.

    Grazie ha chi avrà la pazienza di rispondermi.
    Ape

  3. #73
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    E' possibile non compilare in exe ma cambia leggermente la sintassi.
    Il file WSF richiede anche una parte di inglobazione di tipo XML e quindi ti suggerisco di usare l'estenzione ".vbs" (vb script), come dall'esempio del post #36 (e seguenti)
    http://www.cad3d.it/forum1/threads/3...l=1#post289122

    se invece sei partito dal nuovo sorgente (postato erroneamente qua: http://www.cad3d.it/forum1/threads/2...l=1#post356939)

    dovresti caricare su notepad++ (che colora la sintassi e facilita la lettura) ed effettuare a mano gli eventuali aggiornamenti, ma l'uso del tasto Shift non credo che con .vbs sia intercettabile, ma mi par di capire che nemmeno ti serve.

    Quando uso un file vbs, trasformo in commento la dichiarazione mettendo l'apostrofo prima di "As" in questo modo:
    Dim odjDoc 'As ...
    poi eseguendo il file compare il messaggio di errore con scritto il numero di riga nel file che produce l'errore e ci si va su dietro.
    Gli oggetti vanno inizializzati una sola volta con "Set " , e se un comando non va si antepone (o si toglie) "Call "

  4. Il seguente utente ha ringraziato vespa_83 per questo post

    ApeGana (25-03-2015)

  5. #74
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Dunque... io sono effettivamente partito dal sorgente postato da BoE nella discussione sbagliata.

    Quindi, da quello che ho capito, se volessi mantenere la sintassi così com'è, le uniche 2 strade sono continuare a usare excel come intermediario, oppure dotarmi di un compilatore. Fin qui ci sono?

    Altrimenti potrei seguire le strade wsf o vbs (non mi serve il compilatore), ma in entrambe andrebbe rivista la sintassi (e non so che altro) del codice che gira in excel. Corretto anche questo?

    Le indicazioni che mi dai per trovare i "correttivi" per il formato vbs mi sembrano abbastanza complicate e sicuramente, date le mie conoscenze quasi nulle di questi argomenti, mi farebbero perdere un mucchio di tempo con risultati incerti.
    Forse mi conviene valutare la possibilità di dotarmi di un programma per compilare l'exe. Qualche suggerimento?

  6. #75
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    Quando si può cerco di evitare di compilare perchè in generale richiede molte più conoscenze e vanno gestiti meglio i file, poi può essere una questione di gusti personali.

    Per le prove e il debug excel (se è sufficiente) è comodo e veloce.

    Ho preso il sorgente dal quale sei partito, ho adeguatamente commentato di "As" e corretto i messaggi dell'esecutore (qualche "End" è diventato "Exit Sub" , e "Case Is = " è diventato "Case "), infine ho adattato la verifica del Draft (file_exit) (ps.: io preferivo il messaggio di errore).

    Ho dovuto disabilitare la gestione dello Shift e Disattiva Viste.

    Ecco il ApriDraft.vbs equivalente. Questa non è una versione ufficiale dell'autore
    File Allegati File Allegati

  7. Il seguente utente ha ringraziato vespa_83 per questo post

    ApeGana (27-03-2015)

  8. #76
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Ti ringrazio!
    Appena posso ci do un'occhiata.

  9. #77
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Allora... l'ho provata, dopo aver fatto le mie modifiche.
    Funziona tutto, mi sembra
    Ti ringrazio ancora.

    Mi rimane però un dubbio (forse qualcuno in più... ma adesso pensiamo al primo!): questa volta mi hai aiutato tu a "tradurre" il codice in modo che potesse essere eseguito senza essere compilato come exe.
    D'altra parte scrivere il codice in excel per fare le prove è molto comodo, e per il futuro preferirei non dover essere costretto a "tradurre" un codice che, già testato con excel, funziona.
    Se mi dotassi di VB6 potrei compilare in exe direttamente il codice funzionante in excel? O comunque anche in quel caso sarebbero necessari degli adattamenti?

  10. #78
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    VB6 è fuori commercio quindi bisognerebbe procurarselo per vie traverse. Non l'ho mai provato ma vedendo alcuni sorgenti direi che serve qualche riga di preambolo per le librerie di sistema.
    Oggi si usa VS (visual studio) di microsoft che nella versione Express è gratuita o previa registrazione. Io per quel poco che faccio preferisco invece SharpDevelop (alias #develop) che è free e opensource. L'installazione di VS a mio avviso sporca molto il PC, scrive file ovunque e cambia molte chiavi di registro. SharpDevelop è pressoche 'portabile'.
    Entrambi sfruttano le ultime tecnologie di dei linguaggi .NET (vb 2012(?), c#) ma ad ogni modo devi apporre, se pur minime, piccole modifiche rispetto vba per excel.
    Ovvero: se necessiti di interagire con Excel, ovvio che ti conviene rimanere con vba per excel.
    Se non devi interagire con nulla di più di un confirm o una casella di testo, ti suggerisco vbs (che ora conosci).
    Per ogni altra cosa bisognerebbe passare a VS o Sharpdevelop , ma partire direttamente da qui per ridurre le incompatibilità di sintassi errori e warning.
    Usare VB6 potrebbe essere comunque una buona idea.

    Sharp Develop: http://www.icsharpcode.net/OpenSourc...SharpDevelop4x (ver. stabile al 30/03/2015)
    VS: https://www.visualstudio.com/

  11. Il seguente utente ha ringraziato vespa_83 per questo post

    ApeGana (30-03-2015)

  12. #79
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    Sto pensando di aggiungere la capacità di aprire il Draft anche dall'ambiente Draft, ovvero in una tavola di assieme, selezionando un Pallino (o richiamo) , lanciando la macro verrà aperto il disegno del particolare corrispondente.

    Partendo dal sorgente che postato poco più su ApriDraft_20150325.zip, quando ho un po' di tempo ci proverò!

  13. #80
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Chiedo aiuto ai guru del forum.

    Ho fatto una mia versione della macro in modo che legga una certa proprietà personalizzata (rev) dai file e poi la utilizzi per ricostruire il nome file del draft da aprire.
    Funziona tutto (mi pare) tranne in un caso: quando in un complessivo multilivello si seleziona un pezzo che sta dentro un sottoassieme dell'assieme aperto, la proprietà personalizzata non viene letta dall'oggetto selezionato ma da uno degli assiemi che lo contengono (non ho ancora capito quale).

    In pratica la variabile rev viene letta dall'oggetto sbagliato, d'altra parte la variabile name viene letta correttamente.

    Vi riporto la sezione di codice interessata:

    Codice:
    For i = 1 To Count
    	Set objProps = objAsm.SelectSet(i).OccurrenceDocument.Properties("Custom")
    	name = objAsm.SelectSet(i).OccurrenceFileName
    	rev = objProps.Item("Rev.").Value
    	If name = "" Then name = objAsm.SelectSet(i).object.OccurrenceDocument.FullName
    	l = Len(name)
    	dftname = Mid(name, 1, InStrRev(name, "\") + 6) & " " & rev & ".dft"
    	If file_exist(dftname) Then
    		objDft = objApp.Documents.Open(dftname)
    		objDft.InactiveDrawingViewMode = false ' stato
    	End If
    	name = ""
    Next
    Qualcuno ha qualche idea?
    Grazie.

    Ape


  • Pagina 8 di 9 PrimaPrima ... 6789 UltimaUltima

    Discussioni Simili

    1. Macro x PDF
      Di BOSCO '71 nel forum Solid Edge
      Risposte: 93
      Ultimo Messaggio: 05-09-2017, 16: 07
    2. Macro (VBA) e BOM
      Di Avoplus nel forum Inventor
      Risposte: 0
      Ultimo Messaggio: 08-03-2010, 23: 32
    3. Apri dft "avanzato"
      Di ipotemusa nel forum Solid Edge
      Risposte: 1
      Ultimo Messaggio: 30-11-2009, 19: 33
    4. Macro ???
      Di BOSCO '71 nel forum Solid Edge
      Risposte: 12
      Ultimo Messaggio: 28-08-2009, 23: 42
    5. Apri IME
      Di lostico nel forum NX (Unigraphics)
      Risposte: 0
      Ultimo Messaggio: 28-04-2008, 16: 03

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  





    CAD3D.it - la community dei progettisti