Ottenere velocemente DXF dalle parti in lamiera

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#61
Veramente una grande macro... non smetto di essere felice ogni volta che la uso!
Ultimamente avrei voluto che ci fosse la possibilità di esportare in DXF secondo una particolare file di mapping DXF che ho salvato tra le mie cartelle. Ho cercato di modificare il file macro, ma non ho le competenze necessarie. Ho letto che per implementare l'esportazione in dxf secondo mapping specifico si possono aggiungere i seguenti:

Once a mapping file has been used, SolidWorks will continue to use it for each subsequent save to dxf.
You can enable that option in the API by swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swDxfMapping, True)
And you can define the path to the mapping file by swApp.SetUserPreferenceStringListValue(swUserPreferenceStringListValue_e.swDxfMappingFiles, "<path to your mapping file>")

Ho capito quello che si vuole fare, ma non so come inserire le due righe di comando ed in quale punto. Credo, inoltre, che si debbano dichiarare delle variabili nuove con la tipologia...
Jenuary, puoi darmi una mano, per cortesia?
Con la speranza di fare cosa gradita, qui sotto riporto la "Sub Main" modificata da sovrascrivere nella macro,
in verde trovi i commenti e le spiegazioni per le righe aggiunte, se non è chiaro fammi sapere:

Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swConf As SldWorks.Configuration
Dim swRootComp As SldWorks.Component2
Dim nStart As Single
Dim bRet As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swConf = swModel.GetActiveConfiguration
Set swRootComp = swConf.GetRootComponent3(True)
Debug.Print "File = " & swModel.GetPathName

'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''
'ZONA SETTAGGI PER ESPORTAZIONE DXF-DWG
'
'In questa parte di codice imposto i settaggi perchè Solidworks non mi mostri
'ad ogni salvataggio Dwg\Dxf la maschera del settaggio della mappatura

Dim bShowMap As Boolean
'Imposto che utilizzi il file di mappatura
bShowMap = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swDXFDontShowMap)
If bShowMap = False Then bShowMap = True Else bShowMap = True
swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swDXFDontShowMap, False
'Questa parte è facoltativa, prima di cambiare il file di mappatura se già impostato,
'salvo in una varibile il la stringa del file di mappatura così da porlo reimpostare dopo la fine della macro

Dim Old_Mapping_File As String
Old_Mapping_File = swApp.GetUserPreferenceStringListValue(swDxfMappingFiles) ' Mi ritorna ad esempio "c:\...\mio_file.dat"
'
'Ora passo alla stringa di puntamento del file di mappatura
'Da prima lo sbianco, cioè lo cancello

swApp.SetUserPreferenceStringListValue swUserPreferenceStringListValue_e.swDxfMappingFiles, "" 'SBIANCO LE STRINGHE DELLA MAPPATURA
'Ora imposto il file di mappatura a cui SolidWorks deve fare riferimento per i salvataggi successivi
swApp.SetUserPreferenceStringListValue swUserPreferenceStringListValue_e.swDxfMappingFiles, "C:\...\Mia_Mappatura.dat" 'IMPOSTO IL FILE DI MAPPATURA
'Avendo con la stringa compilato la tendina che troviamo sotto le Opzioni in fase di salvataggio Dxf\Dwg gli devo passare l'index della riga della tendina
swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfMappingFileIndex, 0 'SETTO IL PRIMO DELLA LISTA QUINDI 0
'Questo comando è facoltativo, vado ad impostare la versione di salvataggio
swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfVersion, 3 ' IMPOSTO LA RELEASE DI ESPORTAZIONE "es.R2000-2002"
'
'FINE ZONA DI SETTAGGIO PER ESPORTAZIONE DXF-DWG



TraverseComponent swRootComp, 1


'Avendo terminato il ciclo, inserendo queste due righe viene ripristinato il file di mappatura iniziale
swApp.SetUserPreferenceStringListValue swUserPreferenceStringListValue_e.swDxfMappingFiles, ""
swApp.SetUserPreferenceStringListValue swUserPreferenceStringListValue_e.swDxfMappingFiles, Old_Mapping_File 'IMPOSTO IL FILE DI MAPPATURA

'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''


MsgBox ("Esportazione completata!")

End Sub
 

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#62
Grazie Jenuary... la cosa era ben più complicata di quanto sembrasse!

Ho provato varie volte, purtroppo non funziona, probabilmente per mia incompentenza nel completare la macro.

il file di mapping non è .dat, semplicemente non ha estensione... può essere questa la causa del problema?

allego la macro completata con la tua sub.
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#63
Grazie Jenuary... la cosa era ben più complicata di quanto sembrasse!

il file di mapping non è .dat, semplicemente non ha estensione... può essere questa la causa del problema?
Sicuramente il file deve avere stensione".dat" e nel codice della macro gli devi passare
il nome file completo di estensione, altrimenti gli passi un percorso di una cartella non un nome file.

  1. Scrivi il percorso completo nella riga della macro dove gli passi il file di mappatura
  2. Verifica di non avere impostato sulle "Opzioni cartella" di Windows di non mostrare le estensioni dei file, al limite togli la spunta e verifica che abbia l'estensione.
 

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#64
ho sempre l'estensione dei file visibile. sembra strano, ma il file è senza estensione... ho creato sotto un file di testo al quale ho cambiato l'estensione in dat, per far vedere come l'altro non ne abbia. Per questo, alla fine, ho provato a richiamarlo da codice senza l'estensione.
2017-11-16_172212.jpg

Ho provato ad aggirare così. ho assegnato al file di mapping l'estensione. dat. In manuale solidworks lo prende ed esporta correttamente. La macro no.
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#65
Vedo che il file Prova.dat ha peso zero.
Allega il file di mappatura che provo io, al limite allego anche la macro modificata, perché a me funziona e sono anch'io in 2017.
 

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#66
Prova non è il file di mapping, l'altro è quello creato da SW. Ma il tuo SW crea un file .dat? nel mio caso, come dicevo, l'estensione l'ho aggiunta io.
Questo è il file.
L'altra possibilità è che abbia sbagliato a creare il file della macro.
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#67
L'altra possibilità è che abbia sbagliato a creare il file della macro.
Se mi allegavi anche la macro potevo vedere se c'era qualcosa di sbagliato.
Ho provato il file di mappatura che hai allegato salvando a mano e funziona,
funziona anche con la macro che ora allego, verifica tu a questo punto se avevi sbagliato qualcosa.
 

Allegati

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#68
mi hai mandato nuovamente il mio file di mappatura. :smile:
La macro che avevo creato era due post più sopra

copiando il tuo codice, trovo degli spazi che non capisco. In realtà li ho eliminati... forse è quello che non fa andare la mia macro?!

bShowMap = swApp.GetUserPreferenceToggle(swUserPreferenceTogg le_e.swDXFDontShowMap) es. tra Togg e le c'è uno spazio che mi da errore. Comunque l'ho tolto, ma poi mi è rimasto il dubbio
 

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#70
bah... non riesco a farlo funzionare. Ho cambiato le impostazioni di SW, pensando che i precedenti file di mapping impostati potessero influenzare, ho cambiato la posizione del file di mapping (c:\gialle.dat)... non so. le linee di piegatura vengono sempre tratto e punto come da mapping di default (e non gialle e continue come da file di mapping impostato) Può essere causato dalla versione di SW 2017?! mi arrendo?
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#71
Ho provato ad aggirare così. ho assegnato al file di mapping l'estensione. dat. In manuale solidworks lo prende ed esporta correttamente. La macro no.
Avevi scritto che il file di mappatura funzionava manualmente, ora non funziona più?
Utilizza lo stesso file di mappatura che funzionava e imposta il puntamento a quel file nella macro.
Una volta lanciata la macro verifica nelle Opzioni di salvataggio mentre stai salvando il Dxf\Dwg se la macro ha fatto puntare al file .dat corretto.
Se si vuol dire che dipende dal file di mappatura che non è impostato correttamente.
 

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#72
Grazie al tuo consiglio ho capito questo:
- la macro punta correttamente al file di mappatura
- il file di mappatura, richiamato dalla macro, lavora correttamente cambiando colore ed ogni caratteristica alle linee di geometria
- il file di mappatura non riesce a cambiare le linee di piegatura. Sembra che la macro sovrascriva le caratteristiche impostate dal file dat per le linee di piega.
- il medesimo file di mappatura, usato manualmente, agisce sulle linee di piega correttamente.

(Prima avevo file dat che impostavano solo le caratteristiche per le linee di piega, ecco perchè credevo che la macro non li facesse lavorare)
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#73
Grazie al tuo consiglio ho capito questo:
- il file di mappatura non riesce a cambiare le linee di piegatura. Sembra che la macro sovrascriva le caratteristiche impostate dal file dat per le linee di piega.
La macro non tocca nulla a livello di linee di piega.
Prova a postare modelli 3D e file .dat per prove, non saprei altrimenti come approfondire.
 

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#74
Ho inserito nel file compresso il modello, i file macro e di mapping ed i file DXF risultanti dall'esportazione manuale e da quella con macro.
 

Allegati

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#75
Ho notato che facendo il salvataggio in manuale di un modello di lamiera in dxf appare un menu dove ti viene chiesto cosa vuoi esportare, da me la spunta Linee di Piega erano spente.
Una volta attivate e salvato ho lanciato la macro dal file di assieme e mi sono trovato le linee di piega.
Prova a fare la stesa cosa per vedere se il problema sta li, la macro non centra nulla, l'ho testato
 

Allegati

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#76
il problema non è avere o meno le linee di piega, ma averle secondo le caratteristiche del file di mapping.
Per avere le linee di piega esportate dalla macro basta mettere zero al posto di uno nella riga
swChildModel.ExportFlatPatternView exFileName & ".dxf", 1
L'hai scritto tu qualche pagina prima. http://help.solidworks.com/2015/eng...swconst.swExportFlatPatternViewOptions_e.html
Io esporto sempre con le linee di piega, metto quella spunta ad ogni esportazione manuale.
Se vedi i DXF, in quello manuale le linee di piega sono gialle continue (come da file di mapping), in quello esportato con la macro sono grigie e tratto e punto. La cosa strana è che in entrambi, invece, le linee di bordo seguono il file di mapping, ovvero sono verdi.
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#77
Allora...
ho fatto parecchie prove modificando prima di tutto il file di mappatura che rinomino in "giallo.dat" dove ho inserito i colori per la gestione delle linee di piegatura in giallo fatte da me.
Noto purtroppo che come diceva malf le linee di piegatura vengono ignorate durante il salvataggio con la macro, mentre manualmente il salvataggio colora le linee in giallo e le rende tratteggiate.
Sinceramente non saprei che fare.
 

Allegati

malf

Utente Junior
Professione: designer
Software: SolidWorks 2017, Sketchup, Keyshot, Draftsight
Regione: Lazio
#78
Allora, dopo una mattinata di prove credo di esserne venuto a capo. E' come se SW avesse 2 sintassi differenti per il file di mapping: una per le esportazioni lamiera (richiamabile da opzioni quando si salva la ripetizione piatta di un file lamiera in dxf) ed una per le esportazioni file Draw. Nella prima le linee di piega sono distinte in verso l'alto e verso il basso ed hanno identificativo [31] e [32] tra parentesi quadre, mentre nella seconda le linee di piega sono riportate semplicemente come linee di mezzeria, identificativo [14], mentre 31 e 32 sono assegnati a tutt'altro (rettangolo di contorno e fumetto di revisione).
Nell'esportazione con macro viene utilizzata la seconda sintassi. Dando in pasto alla macro il file mapping scritto con la prima sintassi le indicazioni per 31 e 32, intese per le linee di piega, venivano applicate al rettangolo di contorno e fumetto di revisione.

Magari sintassi non è la parola giusta, sono solo convenzioni differenti.

Questo è l'elenco completo dei codici di assegnazione nella sintassi per l'esportazione dei file Draw ed usata anche dalle macro di esportazione.

[Version]
SW990001

[Layers]
0 = -2, 1

[Entities]
Geometria [0] = 3, BYLAYER, 0
Quote [1] = 2, BYLAYER, 0
Note [2] = 2, BYLAYER, 0
Tolleranza di forma [3] = 2, BYLAYER, 0
Tacche di centratura [4] = 2, BYLAYER, 0
Linee di sezione [5] = 2, BYLAYER, 0
Cerchi di dettaglio [6] = 2, BYLAYER, 0
Simboli [7] = 2, BYLAYER, 0
Etichette di riferimento [8] = 2, BYLAYER, 0
Punti di riferimento [9] = 2, BYLAYER, 0
Simboli di saldatura [10] = 2, BYLAYER, 0
Filettature cosmetiche [11] = 2, BYLAYER, 0
Distinta materiali [12] = 2, BYLAYER, 0
Blocchi [13] = 2, BYLAYER, 0
Linee di mezzeria [14] = 4, BYLAYER, 0
Linee nascoste [15] = 2, BYLAYER, 0
Linee di schizzo [16] = 2, BYLAYER, 0
Campitura [17] = 2, BYLAYER, 0
Margine dettagliato [18] = 2, BYLAYER, 0
Linee tangenti [19] = 2, BYLAYER, 0
Utente - Tratteggiato [20] = 2, BYLAYER, 0
Utente - Differenziato [21] = 2, BYLAYER, 0
Utente - Centro [22] = 2, BYLAYER, 0
Linee di associazione a più scatti [23] = 2, BYLAYER, 0
Simboli della spina di centraggio [24] = 2, BYLAYER, 0
Linee di interruzione [25] = 2, BYLAYER, 0
Istanza di blocco [26] = 2, BYLAYER, 0
Linea di mezzeria [27] = 2, BYLAYER, 0
Annotazione della tabella [28] = 2, BYLAYER, 0
Origine della tabella di foratura [29] = 2, BYLAYER, 0
Cordoni di saldatura [30] = 2, BYLAYER, 0
Rettangolo di contorno [31] = 2, BYLAYER, 0
Fumetto revisione [32] = 2, BYLAYER, 0

[Colors]

Per modificare le linee di piega nei file esportati con la macro, quindi, bisogna scrivere nel file di mapping la riga:
Linee di mezzeria [14] = 2, BYLAYER, 0

Aggiungo in allegato il file di jenuary ed un file di mapping che esporta le linee di contorno nere e le linee di piega gialle, per evitare confusioni con tutti i file allegati in precedenza.
 

Allegati

Turambar

Utente poco attivo
Professione: disegnatore CAD/CAM
Software: Solidworks Ideas bysoft lantek autocad
Regione: Puglia
#80
Salve sto provando la Macro gentilmente messa a disposizione da jenuary, ma a volte la scala del dxf esportato è diversa la maggior parte delle volte è aumentata di dieci volte. Se qualcuno può aiutarmi a capire l'arcano grazie