Aiuto nel creare una macro per Solid Edge

Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#21
Grazie mille per il suggerimento, ma giusto per capire di cosa si tratta? Ho visto che quel sito comunque mi è già stato suggerito più volte quindi lo terrò in considerazione. Grazie ancora.
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#22
Seguendo il consiglio di Be_On_Edge, ma era una cosa che avevo già pensato di fare per semplificare il lavoro, ho scritto un elenco di operazioni che la mia macro dovrebbe svolgere (vedi allegato); vorrei sottoporvela in modo che chiunque possa avere un'idea più chiara di ciò che devo fare ed eventualmente consigliarmi dove pensa che possa aver sbagliato.
Penso di aver ridotto all'osso ogni singola operazione, proprio per semplificare la programmazione, ma se qualcuno crede che si possa ulteriormente suddividere in operazioni più semplici lo dica pure.
Ora comincerò a scrivere qualcosa almeno per quanto riguarda le operazioni più semplici.
Grazie per i consigli che mi state dando.
 

Allegati

Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#23
Dunque, ho iniziato a muovere i primi passi, ma sorgono i primi dubbi... Ho cominciato con l'aprire il file Assieme.asm semplicemente con un codice di questo tipo:
Codice:
Imports System.Runtime.InteropServices
Imports System.Diagnostics.Process
Module Module1
    Sub Main()
        Try
            Start("C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm")
        Catch
        End Try
    End Sub
End Module
Il tutto funziona correttamente, ora ho 2 domande:
- E' possibile aprire il file in una determinata variante semplicemente dandogli l'indirizzo del file e a questo "aggiungere" in qualche modo il nome della variante? Ho provato con qualcosa del tipo "C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm!3R80FLEX03" dove 3R80FLEX03 è il nome di una della verianti, am senza successo; ho pensato a questa modo di scrivere il nome della variante perchè è come si presenta in solid edge ma visual basic nel debug mi da errore.
- Se è possibile fare come ho chiesto al punto precedente, come posso "aggiungere" alla parte fissa dell'indirizzo ("C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm") la parte variabile (!3R80FLEX03)? Io pensavo di utilizzare una variabile a cui associare l'indirizzo e poi aggiungergli, tramite una seconda variabile, la parte di indirizzo che varia appunto, ma non trovo trovo come scriverglielo. Qualcuno saprebbe come fare?
Grazie!!!
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#24
- E' possibile aprire il file in una determinata variante semplicemente dandogli l'indirizzo del file e a questo "aggiungere" in qualche modo il nome della variante? Ho provato con qualcosa del tipo "C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm!3R80FLEX03" dove 3R80FLEX03 è il nome di una della verianti, am senza successo; ho pensato a questa modo di scrivere il nome della variante perchè è come si presenta in solid edge ma visual basic nel debug mi da errore.
- Se è possibile fare come ho chiesto al punto precedente, come posso "aggiungere" alla parte fissa dell'indirizzo ("C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm") la parte variabile (!3R80FLEX03)? Io pensavo di utilizzare una variabile a cui associare l'indirizzo e poi aggiungergli, tramite una seconda variabile, la parte di indirizzo che varia appunto, ma non trovo trovo come scriverglielo. Qualcuno saprebbe come fare?
Grazie!!!
Con questo codice apri semplicemente un file come se facessi doppio click, e poi da programmazione non puoi fare più niente.
In più non puoi aprire la variante passando nel nome del file il nome variante in quanto perdi l'estensione e il doppio click di conseguenza non funziona.


Per aprire un file come oggetto devi fare qualcosa del tipo.

Codice:
Dim objApp As SolidEdgeFramework.Application
Dim objAsm As SolidEdgeAssembly.AssemblyDocument

Set objApp = CreateObject("SolidEdge.Application")
Set objAsm = objApp.Documents.Open("nome_assieme_da_aprire.asm!nome_variante")
StrAsm = "C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm"
StrVar = "3R80FLEX03"

Nome = StrAsm + "!"+ StrVar

Ciao
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#25
Ho provato con qualcosa di simile:
Codice:
Imports System.Runtime.InteropServices
Module Module1
    Dim objApp As SolidEdgeFramework.Application
    Dim objAsm As SolidEdgeAssembly.AssemblyDocument
    Dim StrAsm As String = "C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm"
    Dim StrVar As String = "3R80FLEX03"
    Dim Nome As String = StrAsm + "!" + StrVar
    Sub Main()
        objApp = CreateObject("SolidEdge.Application")
        objApp.Visible = True
        objApp.DisplayAlerts = False
        objAsm = objApp.Documents.Open(Nome)
        objApp.DisplayAlerts = True
    End Sub
End Module
Effettivamente funziona, apre il file nella variante corretta; il problema è che lo apre in sola lettura, il che genera un errore in solid edge il quale non riesce ad importare tutti i file necessari. Inoltre non posso aprirlo in sola lettura perchè poi dovrò eseguire delle modifiche ai vari file.
Da cosa può dipendere il problema?
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#26
Ho provato con qualcosa di simile:
Codice:
Imports System.Runtime.InteropServices
Module Module1
    Dim objApp As SolidEdgeFramework.Application
    Dim objAsm As SolidEdgeAssembly.AssemblyDocument
    Dim StrAsm As String = "C:\Users\Guido\Desktop\Tirocinio\Assiemi\Assieme.asm"
    Dim StrVar As String = "3R80FLEX03"
    Dim Nome As String = StrAsm + "!" + StrVar
    Sub Main()
        objApp = CreateObject("SolidEdge.Application")
        objApp.Visible = True
        objApp.DisplayAlerts = False
        objAsm = objApp.Documents.Open(Nome)
        objApp.DisplayAlerts = True
    End Sub
End Module
Effettivamente funziona, apre il file nella variante corretta; il problema è che lo apre in sola lettura, il che genera un errore in solid edge il quale non riesce ad importare tutti i file necessari. Inoltre non posso aprirlo in sola lettura perchè poi dovrò eseguire delle modifiche ai vari file.
Da cosa può dipendere il problema?
Secondo me hai un bel pò di SolidEdge aperti.
Controlla con il Task Manager.

Prima di interrompere il programma dovresti per lo meno fare un:

Codice:
objAsm.close (false)
set objApp = Nothing

Ciao
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#27
X Be_On_Edge:
Effettivamente hai ragione, nonostante la finestra fosse chiusa l'applicazione edge.exe rimaneva aperta, non so come mai. Ora funziona!
Ma la parte di codice che mi hai suggerito a cosa serve? Cosa fa esattamente?
Mi riferisco a:
Codice:
objAsm.close (false)
set objApp = Nothing
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#28
Con un pò di fatica sto riuscendo a scrivere qualcosa! Ora però ho bisogno di sapere una cosa un pò tecnica...
Come ho già detto tra i file che sto utilizzando ci sono dei .par che contengono una o più curve per tabella e queste, benchè siano state create a partire da un foglio excel esterno, non salvano le coordinate su questo foglio, ma ne hanno uno proprio (normalmente chiamato Foglio di lavoro in nomedelfilepar.xls); poichè la modifica della curva passa per la modifica del foglio, excel mi chiedevo se fosse possibile, senza dover aprire il file .par in solid edge, "estrarre" il file excel in questione, aprendo solo questo in excel senza passare prima per il .par, modificarlo, salvarlo e poi aprire il .par solo per confermare le modifiche effettuate e salvarlo a sua volta.
Tutto ciò sarebbe molto comodo perchè mi permetterebbe di evitare di dover scrivere una macro con molti comandi specifici di solid edge, poichè se non fosse possibile fare come chiedo dovrei passare per tutta una serie di operazioni che al momento non saprei proprio come eseguire tramite linea di codice.
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#29
X Be_On_Edge:
Effettivamente hai ragione, nonostante la finestra fosse chiusa l'applicazione edge.exe rimaneva aperta, non so come mai. Ora funziona!
Ma la parte di codice che mi hai suggerito a cosa serve? Cosa fa esattamente?
Mi riferisco a:
Codice:
objAsm.close (false)
set objApp = Nothing
objAsm è l'oggetto che colleghi ad un file assieme di Solid Edge.
objApp è l'oggetto che colleghi all'applicazione Solid Edge.

Se interrompi l'esecuzione del tuo programma senza chiudere questi oggetti va da se che rimangono aperti. Di fatto tu crei un'istanza di Solid Edge ed apri un file. Se non gli dici che si devono chiudere questi rimangono aperti.

I due comandi servono per chiudere l'assieme e poi chiudere solid edge.

Ciao
 

morgan65

Utente Standard
Professione: Progettista Cad
Software: Solid Edge
Regione: Piacenza
#30
Io sto ancora programmando in VB6 e fino ad oggi non ho trovato limiti se non per le cose che le API di solid edge non ti permettono di fare.

Quindi inizia con qualcosa di semplice per imparare come funziona il tutto e poi se hai problemi fai domande specifiche.

Ciao
Ben volendo programmare con VB6 da dove consigli
iniziare?
Manuale o libro hai qualche consiglio?
grazie
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#31
Be_On_Edge grazie per la spiegazione... diciamo che nel frattempo avevo intuito che si trattava di qualcosa di simile.

Per quanto riguarda la questione inerente la struttura di un file .par e della possibilità di estrarvi o meno un file excel nessuna idea?
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#32
Ben volendo programmare con VB6 da dove consigli
iniziare?
Manuale o libro hai qualche consiglio?
grazie
Io mi sono scaricato una guida in italiano davvero ben fatta, ma ora non ricordo il nome. Imparati i rudimenti poi google è stata la mia fonte principale.

Ciao
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#33
Be_On_Edge grazie per la spiegazione... diciamo che nel frattempo avevo intuito che si trattava di qualcosa di simile.

Per quanto riguarda la questione inerente la struttura di un file .par e della possibilità di estrarvi o meno un file excel nessuna idea?
Dall'SDK di Solid Edge non credo sia possibile accedere a tale file per modificarlo. Forse è possibile facendo un "parsing" degli oggetti contenuti nel file di solid edge, estrarre\aprire il file excel e modificarlo.

Non sono così esperto in tali manovre però, da poterti aiutare.

Nel frattempo ho chiesto sul forum di programmazione americano per vedere se qualcuno l'ha già fatto.

Ciao
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#34
Grazie mille... avevo intenzione di consultare anche loro ma prima volevo vedere se qui qualcuno mi sapeva rispondere... intanto attendo tue notizie.
Puoi darmi il link del post che hai messo così almeno controllo anche quello e in caso intervengo direttamente li!? Grazie ancora!
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#35
Grazie mille... avevo intenzione di consultare anche loro ma prima volevo vedere se qui qualcuno mi sapeva rispondere... intanto attendo tue notizie.
Puoi darmi il link del post che hai messo così almeno controllo anche quello e in caso intervengo direttamente li!? Grazie ancora!
E' l'unico post di oggi in solid_edge.programming

ciao
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#36
Scusa ma ti riferisci al forum di JasonNewel.net!? Per li nella sezione solid_edge.programming l'ultimo post risale a ieri (http://www.jasonnewell.net/Forums/tabid/55/aff/1/Default.aspx).
Intanto ho un'altra richiesta: vorrei scrivere una funzione che mi scriva un file .txt con un elenco dei file contenuti in un assieme, ma non ho idea di come interrogare il file assieme per ottenere i file che contiene. Come potrei fare?
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#37
Scusa ma ti riferisci al forum di JasonNewel.net!? Per li nella sezione solid_edge.programming l'ultimo post risale a ieri (http://www.jasonnewell.net/Forums/tabid/55/aff/1/Default.aspx).
Intanto ho un'altra richiesta: vorrei scrivere una funzione che mi scriva un file .txt con un elenco dei file contenuti in un assieme, ma non ho idea di come interrogare il file assieme per ottenere i file che contiene. Come potrei fare?
Parlo del forum ufficiale di siemens.
http://bbs.industrysoftware.automation.siemens.com/vbulletin/


Dal codice di cui abbiamo parlato in precedenza, metti un breakpoint di debug dopo aver istanziato objAsm, apri il visualizzatore di oggetti e cerca:

objAsm.Occurrences

vedrai che dentro hai l'elenco dei componenti di primo livello.

Codice:
For Each Item in objAsm.Occurrences

    Debug.Print Item.OccurrenceFileName

Next Item

Altro metodo è quello di utilizzare le funzioni di report o anche del revision manager per farti dare l'elenco.

Ciao
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#38
Purtroppo non posso accedere al forum perchè non sono registrato e se non sbaglio per potersi registrare occorre comprare una licenza di cui fornire i dati.
Intanto grazie pe ril suggerimento su come creare una lista!
 
Professione: Studente
Software: Solid Edge ST
Regione: Lombardia
#39
Scusa ho fatto come dici e funziona, nel senso che non da errori, ma non capisco dove dovrei trovare la lista dei componenti; nel visualizzatore di oggetti non trovo objAssembly.Occurrences (ho utilizzato objAssembly al posto di objAsm ma non credo sia questo il problema) eppure ho fatto come dici.
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#40
Scusa ho fatto come dici e funziona, nel senso che non da errori, ma non capisco dove dovrei trovare la lista dei componenti; nel visualizzatore di oggetti non trovo objAssembly.Occurrences (ho utilizzato objAssembly al posto di objAsm ma non credo sia questo il problema) eppure ho fatto come dici.
Hai messo un breakpoint nell'esecuzione del programma prima di uscire dalla Sub ? Altrimenti con il visualizzatore oggetti non vedi nulla.

Con il comando da me suggerito ti stampa l'elenco delle occorrenze nella finestra immediata. Se le vuoi in un file di testo devi prima aprire il file di testo, poi scrivere le varie righe ed infine chiudere il file di testo.

Ciao