Il Bar dell'Ingegneria

Excel --> DXF

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Mi chiederete, e se non lo fate non fatelo più: "E tutto questo come giustificherebbe la "grande scemata" del mettere la parola FINE?".
    La risposta è: siccome nel sagomario ho già delle tabelle che prevedono il disegno del profilo secondo una ben fissata orientazione e posizionamento (per esempio i profili ad L hannoo l'origine nello spigolo in basso a sinistra, il lato minore orientato verso x e quello maggiore verso y), volendo sfruttare questi dati per disegnare un profilo che invece è orientato diversamente o posizionato altrove, posso pensare di inserire i dati in tabella nella parte finale ed inserire le operazioni da fare nella parte iniziale
    Per esempio una cosa cosi:

    iVkAMUd

    In questo modo alla lettura della parola Simmetrico, il codice disegnerebbe il profilo i cui dati li trova a partire dal quarto rigo ma operando l'operazione della simmetria rispetto ad un asse parallelo a y passante per x=b/2

    Poi incontrerebbe la parola chiave FINE e non disegnerebbe l'originale.

    Se invece li volessi disegnare tutti e due, basta non inserire la parola FINE: il primo rigo fa disegnare il profilo simmetrico e le righe successive disegnano il profilo nella sua posizione ed orientamento originali.
     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Senza le operazione di mirror o di rotazione, per disegnare ad esempio un accoppiamento a stella di quattro angolari a lati disuguali 70x50x6, occorre formare una tabella con le coordinate di tutti e quattro i profili, nella loro corretta posizione ed orientamento.

    ecco la tabella per il disegno dell'accoppiamento:

    65Ge7GP

    Le coordinate dei profili simmetrici devono essere ricavate nel foglio con la scrittura di apposite formule che operano per ciascuno l'operazione di mirroring. Non che la cosa sia poi la fine del mondo ma è senza dubbio fonte di errori specie quando i profili iniziano a complicarsi.

    L'implementazione delle operazioni di mirror renderebbe il processo più semplice. Lo stesso accoppiamento di cui sopra si otterrebbe attraverso la tabella che segue:

    NHKD1kM
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Farneticazioni.

    Avendo visto che nel formato dxf R12 non esiste l'entità ELLIPSE e che dalle prove fatte di salvataggio di un disegno con un ellisse in dxf, l'ellisse viene scritto come una serie di vertici di una polilinea, mi chiedevo come fare a far disegnare una ellisse dando il centro, i suoi due assi e l'inclinazione. Semplice, basta costruirsi la tabella dei punti della polilinea che la rappresenta.

    Ma questo potrebbe avvenire in automatico mediante il codice legato alla creazione del dxf anziche comporre una tabella con un mare di numeri.

    Altre farneticazioni: e se voglio l'ellisse centrale di una polilinea chiusa i cui dati sono già in tabella? E se voglio disegnare il suo nocciolo centrale d'inerzia?

    Sarebbe davvero interessante poter avere un rigo con scritto EllisseCentrale 25 in cui il 25 sarebbe il rigo dove leggere i dati della polilinea chiusa. Stessa cosa per il nocciolo.

    Non dovrebbe essere complicato considerando che ho gia scritto le funzioni dedicate al nocciolo e quelle dedicate al calcolo dei giratori d'inerzia di una sezione poligonale.

    In fin dei conti questa revisione radicale del codice dedicato alla creazione di un dxf nasce proprio per scopi "sezionali" collegati al Sagomario e quindi aggiungere queste possibilità non sarebbe poi male.
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    3,345
    Reputation
    +213

    Status
    Offline
    CITAZIONE (afazio @ 24/8/2014, 18:41) 
    iVkAMUd

    nell'immagine postata da afazio leggo "simetrico" con una sola emme. non vorrei che poi qualcosa non funzionasse...
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (reversi @ 24/8/2014, 21:43) 
    CITAZIONE (afazio @ 24/8/2014, 18:41) 

    nell'immagine postata da afazio leggo "simetrico" con una sola emme. non vorrei che poi qualcosa non funzionasse...

    No. Tranquillo, ancora non ho scritto proprio nulla riguardo queste estensioni. Per adesso sono solo farneticanti idee e le immagini presentate sono costruite allo scopo di meglio illustrarle.
    Domani vedrò di impostare uno schema con un po' di codice e se intravedo che la cosa può funzionare la porto avanti per poi trasferire il tutto nel sagomario.
    Il trasferimento del codice nel sagomario comporterà una nuova revisione delle tabelle dxf li presenti, ma se funziona avrò uno strumento utilissimo da poter usare ovunque.
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    L'idea della tabella che funga da consolle per la creazione di un file dxf sembra funzionare.

    Ho aggiunto per adesso
    - la possibilità di disegnare un ellisse dando come input le coordinate del centro, i due semiassi e l'inclinazione del maggiore rispetto all'asse x
    - la possibilità di poter disegnare una coppia di assi (per esempio gli assi del profilo o gli assi principali)
    - la possibilità di creare il simmetrico rispetto ad un asse parallelo a y.

    Ho quindi inserito un profilo noto coi suoi dati e riempito la tabella.
    alla pressione del tasto crea dxf si apre autocad con l'accoppiamento dei due profili ed il tutto senza dover dare le coordinate di entrambi i profili.

    CJptWNM

    Mi ero impallato con l'ellisse, avendo visto che nella successiva versione r14 del formato, Autodesk ha inserito anche l'entita "ELLIPSE", mi ero messo in testa di voler cambiare la versione ma m'imbattevo sempre in un errore che non sono riuscito a comprendere ed a risolvere. Da una ricerca in rete ho potuto riscontrare che il problema non è solo mio ma anche di molti utenti che lamentano la stessa cosa. Da nessuna parte ho trovato una valida risposta al quesito che hanno posto gli altri utenti.
    Ho deciso quindi di mantenere il formato R12 che comporta il disegno della ellisse come polilinea. Il numero dei punti della polilinea-ellisse lo do in input ella seconda colonne.

    A breve metto a disposizione il file per quanti volessero smanettarci sopra.

    DImenticavo di segnalare che ho aggiunto una nona colonna dedicata al colore dell'elemento

    Edited by afazio - 26/8/2014, 23:33
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    E' possibile scaricare il file excel con aggiunte anche le simmetrie rispetto ad un asse parallelo a y e rispetto ad un punto dal seguente link

    Progetto DXF V_02
    Edit 11.01.2016: purtroppo non è più possibile scaricare il file dal mio vecchio box.

    Potete comunque scaricare l'ultima versione del progetto dal link che segue:
    Progetto Consolle DXF v 0.52.n

    La tabella riportata a mò di esempio è relativa ad un accoppiamento di quattro profili UPE80 distanziati di 8 mm.
    Notare che nel caso di simmetria il colore che comanda è quello impostato nella nona colonna del relativo rigo. Questo significa che posso avere l'originale di un colore ed il simmetrico di colore diverso.

    Ritengo che le restanti operazioni tipo traslazione, rotazione, rototraslazione e scala non mi daranno grandi problemi e quindi li tralascio per vedere se posso inserire i comandi per il disegno automatico dell'ellisse centrale d'inerzia e del nocciolo di una polilinea chiusa da inserire direttamente in un rigo della tabella dati dxf.

    Edited by afazio - 11/1/2016, 13:34
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    Relativamente all'inserimento di quote "vere" all'interno di file dxf "autoprodotti".

    Per Autocad, almeno guardando la rappresentazione 'lato' dxf "AutoCadprodotti", in definitiva le quote altro non sono che dei blocchi. Magari blocchi di tipo particolare, ma pur sempre dei blocchi.
    Esse, come blocco, sono costituite da 8 'oggetti' elementari.

    1-2) Le linee di estensione (le barrette ortogonali alla linea di quota vera e propria posizionate alle sue estremità)
    3-4) I punti 'caldi' selezionando i quali si ottiene lo 'stiramento' delle quote (e che tanto ci hanno fatto gridare al 'miracolo!' la prima volta che abbiamo visto AutoCad in azione)
    5) La linea di quota vera e propria
    6-7) Gli eventuali blocchi da posizionare agli estremi delle linee di quota (le frecce, il pallino, oppure un blocco personalizzato)
    8) Il testo che indica la quota vera e propria.

    Insomma, nulla di più o di meno, di quanto non sappiamo ormai da tempo e di quanto non siamo impazziti a modificare nella miriade di variabili settabili dalla apposita finestra di dialogo.

    Pertanto essendo blocchi, ogni singola quota deve essere 'dichiarata' come tale, prima della sezione ENTITIES (la sezione in cui sono presenti gli oggetti di disegno visibili a video).

    Esse vanno dichiarate preliminarmente nella sezione BLOCKS battezzandole con un nome particolare: *Dxxx
    dove per xxx si intende un numero. Generalmente AutoCad parte da *D0, e va avanti a numerare in modo progressivo tutte le quote (chi adopera il comando _purge - file->utilità->elimina per i più giovani - si sarà accorto di una serie, spesso infinita di oggetti *Dxxx che Autocad elimina. Si tratta di quote inizialmente create e magari poi cancellate, modificate, ecc.)

    Successivamente esse andranno inserite nella sezione ENTITIES come riferimento di blocco.

    Qui un esempio, nella sezione BLOCKS, di una quota che dal punto 10,110 arriva fino al punto 990,110:

    CODICE
    BLOCK
    8
    0
    2
    *D10
    70
    65
    10
    0.0
    20
    0.0
    0
    LINE
    8
    0
    6
    BYBLOCK
    62
    0
    10
    10.000000
    20
    125.000000
    11
    10.000000
    21
    100.000000
    0
    LINE
    8
    0
    6
    BYBLOCK
    62
    0
    10
    990.000000
    20
    125.000000
    11
    990.000000
    21
    100.000000
    0
    LINE
    8
    0
    6
    BYBLOCK
    62
    0
    10
    25.000000
    20
    110.000000
    11
    975.000000
    21
    110.000000
    0
    INSERT
    8
    0
    6
    BYBLOCK
    62
    0
    2
    Ext
    10
    10.000000
    20
    110.000000
    41
    15
    42
    15
    50
    180
    43
    15
    0
    INSERT
    8
    0
    6
    BYBLOCK
    62
    0
    2
    Ext
    10
    990.000000
    20
    110.000000
    41
    15
    42
    15
    43
    15
    0
    TEXT
    8
    0
    6
    BYBLOCK
    62
    0
    10
    490.000000
    20
    117.500000
    40
    15.000000
    1
    980
    0
    POINT
    8
    DEFPOINTS
    6
    BYBLOCK
    62
    0
    10
    10.000000
    20
    130.000000
    0
    POINT
    8
    DEFPOINTS
    6
    BYBLOCK
    62
    0
    10
    990.000000
    20
    130.000000
    0
    POINT
    8
    DEFPOINTS
    6
    BYBLOCK
    62
    0
    10
    990.000000
    20
    110.000000
    0
    ENDBLK


    E' lunghetto, lo so.
    Tutte le entità appartengono al layer 0 (codice 8) ed hanno, almeno le linee, tipo di linea ByBlock (codice 6).
    Esistono anche le 'chiamate' a dei blocchi 'annidati' (quelli denominati Ext) che sono le mie usuali linee diagonali alla fine della quota, e che è blocco che deve per forza essere dichiarato prima di qualsiasi quota.
    Ritengo che i codici 10 e 20 posti proprio all'inizio siano le coordinate del "punto base" del blocco.

    Infine, ecco come appare il 'richiamo' della quota *D10 creata nella sezione BLOCKS, all'interno della sezione ENTITIES, affinchè essa venga visualizzata a video.

    CODICE
    DIMENSION
    8
    Quote
    2
    *D10
    10
    980.000000
    20
    40.000000
    11
    500.000000
    21
    40.000000
    13
    10.000000
    23
    40.000000
    14
    990.000000
    24
    40.000000
    0


    Come vedete stavolta viene richiamato il blocco, ma ad esso si assegna un ben preciso layer (differente per le linee dal layer 0 con cui sono state create le linee nel blocco).
    Attenzionate il fatto come servano ben 4 punti per 'ubicare' la quota nel disegno.
    I codici 11 e 21 indicano le coordinate del centro quota. i codici 13, 23, e 14, 24 rispettivamente il punto finale ed iniziale della quota.
    Invece i codici 10,20 indicano l'effettiva lunghezza della quota.

    E questo è il caso relativamente semplice di una quota orizzontale........

    Attenzione che se nel 'richiamo' nella sezione ENTITIES le coordinate inserite con 'copiano' fedelmente quanto riportato nella definizione del 'blocco', la quota non viene affatto visualizzata.
    Ovviamente sono sempre possibili, come è il caso che ho mostrato traslazioni 'rigide' tra quanto dichiarato nella sezione BLOCKS e quanto riportato in ENTITIES.

    @Afazio: il mio file Header di partenza ha come seconda riga il codice AC1006.
    Ho fatto un dxf con Autocad2013, formato dxf2013, ottenendo un AC1027.
    Solamente 21 'versioni' di differenza.......
     
    Top
    .
  9.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (zax2013 @ 27/8/2014, 23:34) 
    Qui un esempio, nella sezione BLOCKS, di una quota che dal punto 10,110 arriva fino al punto 990,110:

    CODICE
    BLOCK
    8
    0
    2
    *D10
    70
    65
    10
    0.0
    ...




    CODICE
    DIMENSION
    8
    Quote
    2
    *D10
    10
    980.000000
    ....



    Attenzione che se nel 'richiamo' nella sezione ENTITIES le coordinate inserite non 'copiano' fedelmente quanto riportato nella definizione del 'blocco', la quota non viene affatto visualizzata.
    Ovviamente sono sempre possibili, come è il caso che ho mostrato traslazioni 'rigide' tra quanto dichiarato nella sezione BLOCKS e quanto riportato in ENTITIES.

    Per caso manca il codice di gruppo all'inizio?

    Cosa intendi per "non copiano" fedelmente ... ?

    CITAZIONE
    @Afazio: il mio file Header di partenza ha come seconda riga il codice AC1006.
    Ho fatto un dxf con Autocad2013, formato dxf2013, ottenendo un AC1027.
    Solamente 21 'versioni' di differenza.......

    E se ti chiedessi il tuo header?
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    2,939
    Reputation
    +187

    Status
    Offline
    E' possibile. Ho copiato quanto visualizzato con il NotePad, senza stare a 'sottilizzare' su effettiva sequenza di inizio-fine delle istruzioni.

    In effetti tra la fine di un blocco ed il successivo trovo sempre queste righe:

    CODICE
    ENDBLK
     8
    0
     0
    BLOCK


    Di cui capisco poco il senso. Sembrerebbe che venga 'resettato' il layer al valore di default (layer 0), e quindi venga poi anteposto lo 0 al codice BLOCK.

    In allegato ti metto il m'mio' file di header.
    Ti comunico che la cosa che certamente è maggiormente differente rispetto a quanto tu hai già fatto è l'assenza, in questa versione AC1006 di dxf, del campo ID per ogni singola entità (sarebbe il codice esadecimale che al suo interno Autocad assegnerebbe ad ogni singola entità e che costituisce il suo "database interno di disegno" - per capirci quello che viene 'ridisegnato', 'rigenerato', ecc.)

    Evidentemente in questa versione 'primitiva' di dxf man mano che Autocad legge il file, assegna automaticamente un ID univoco ad ogni nuova entità incontrata (che tra l'altro mi pare il modo intelligente di gestire la cosa, piuttosto che costringere me ad assegnare un ID......a casaccio).
    File Allegato
    Header_dxf.zip
    (Number of downloads: 96)

     
    Top
    .
  11.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (zax2013 @ 28/8/2014, 09:28) 
    E' possibile. Ho copiato quanto visualizzato con il NotePad, senza stare a 'sottilizzare' su effettiva sequenza di inizio-fine delle istruzioni.

    In effetti tra la fine di un blocco ed il successivo trovo sempre queste righe:

    CODICE
    ENDBLK
     8
    0
     0
    BLOCK


    Di cui capisco poco il senso. Sembrerebbe che venga 'resettato' il layer al valore di default (layer 0), e quindi venga poi anteposto lo 0 al codice BLOCK.

    Il senso corretto è quello dato dalla sequenza di GropuCode seguito dal valore.

    Nello stralcio che hai allegato in quest'ultimo post ti mancherebbe il GroupCode del valore ENDBLK. Trattandosi di una stringa il suo Group code dove essere compreso tra 0 e 9.

    La corretta lettura di quello che hai postato sarebbe:

    CODICE
    ...


     0
    ENDBLK
     8
    0
     0
    BLOCK
     8
    0
     2
    Trefolo
    ....


    0, codice di gruppo che indica che il valore che segue deve essere interpretato come una stringa
    ENDBLK, è la stringa a cui si riferisce il group code sovrastante

    8, codice di gruppo; essendo un codice inferiore a 10 indica che il valore che segue deve essere interpretato come una stringa. In questo caso al codice di gruppo 8 è stato eternamente assegnato il nome del layer, Lo zero che segue è la stringa a cui si riferisce il codice 8 e rappresenta il nome del layer.

    La commistione in successione straripante di zeri che sono codici, zeri che sono stringhe, zeri che sono valori numerici, crea la più incredibile confusione che poi si propaga riempendo migliaia e migliaia di righe per un disegno senza disegno.
     
    Top
    .
  12.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Pubblico la prima versione funzionante della "consolle DXF in excel".

    COnsolle DXF [impossiile scaricare]

    Nuovo link con l'ultima versione del progetto:
    Progetto Consolle DXF v 0.52.n

    Trattasi di un insieme di funzioni e procedure che leggono una tabella di dati contenuta in un foglio excel e producono il file dxf dei dati geometrici in tabella.

    La tabella deve essere organizzata secondo le specifiche contenute nel file pubblicato e nella tabella che ho denominato "Struttura tabella dati dxf"

    XHfBA9N

    Nei prossimi post illustrerò il formato della tabella ed il significato che assumono i dati delle varie righe e colonne e quindi darò degli esempi di utilizzazione.

    Con questa consolle chiunque potrà creare file dxf.
    Per esempio:
    - abbiamo un foglio di calcolo di un muro di sostegno e da qualche parte sono riportate le dimensioni del muro.
    Dopo aver importato i moduli della consolle ed il foglio principale del file che pubblico, ci basta riempire la tabella coi dati relativi al muro. Se vogliamo il disegno del muro mediante una successione di segmenti, basterà dedicare un rigo per ogni segmento e fornire le coordinate degli estremi di ciascun segmento, se invece vogliamo sia disegnato come polilinea, dedicheremo un rigo atto a contenere i dati generali (numero di vertici, colore e flag di chiusura ) e a seguire dedicheremo un rigo per ogni vertice.
    Completata la tabella basta far clik sul bottone "crea dxf" per vedersi aprire Autocad col muro disegnato.

    Ma le applicazioni possono essere davvero tante come per esempio la generazione dei tondini di armatura o il disegno di sezioni. Il limite delle applicazioni possibili è dato dal limite della nostra fantasia.

    Edited by afazio - 11/1/2016, 13:38
     
    Top
    .
  13.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Nel frattempo la consolle si è estesa prevedendo adesso anche le operazioni della duplicazione in serie lineare, rettangolare e circolare.
    Appena termino di implementarle ne parlerò.
     
    Top
    .
  14.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Ecco la "consolle" con aggiunti i comandi per la dulicazione in serie lineare, rettangolare e circolare ciascuna in versione semplice e riempitiva. Questi comanda sono molto utili (ve lo mostrerò) quando vogliamo creare dei dxf di elementi che si ripetono secondo una prefissata logica. pensate per esempio ad una piastra circolare con fori disposti su un cerchio; basteranno tre righe della tabella per comporre il dxf.

    https://app.box.com/s/oaxsh3nj1rk5ozu4e5em

    Ecco l'immagine della tabella con riassunti tutti i comandi e i parametri per ciascuno.

    tZlyigM

    La tabella, che ho chiamato "consolle in excel per la crea ione di file dxf", è composta da 16 colonne ed un numero illimitato di righe (l'unica limitazione è legata al numero di righe in excel ed alla memoria).

    Ogni rigo contiene i dati per il disegno di un qualcosa.

    Il primo rigo è dedicato al nome del file che si vuole sia proposto nel dialogo di salvataggio del file mentre le righe successive sono dedicate ai dati degli elementi che si vogliono riportare nel file dxf. Un rigo per ogni dato.

    la prima colonna è dedicata a contenere uno dei comandi della seguente lista:

    a) lista delle primitive grafiche
    Polilinea
    Punto
    Linea
    Cerchio
    Arco
    Superficie3D
    Testo

    b) lista delle entità costruite
    Ellisse
    Assi
    PoliRegRaggio
    PoliRegLato
    Rettangolo

    c) lista delle operazioni su una delle entità (primitive o costruite) presenti in tabella
    SimmetricoX
    SimmetricoY
    SimmetricoP
    SimmetricoXY
    Trasla
    Ruota
    RuotaTrasla
    TraslaRuota
    Scala
    SerieLin
    SerieLinFill
    SerieRett
    SerieRettFill
    SerieCirc
    SerieCircFill

    d) lista dei comandi speciali
    GoTo
    FINE

    Questi termini/comandi possono essere scritti indipendentemente in maiuscolo o minuscolo o qualsiasi composizione.

    Le righe che nella loro prima colonna non presentano uno dei termini della lista sopra riportata, sono ignorate, cioè saltate dalle sub che procedono alla lettura della tabella e trasformazione in dxf. Fanno eccezione le sole righe che riportano le coordinate del vertici della polilinea.
     
    Top
    .
  15.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    La 15-esima colonna è dedicata a contenere il nome del layer dove deve essere disegnata l'entità grafica relativa alla prima colonna dello stesso rigo. Se la cella viene lasciata vuota allora viene assunto il layer "0". La cella non può contenere spazi.

    La 16-esima colonna riporta il colore con cui si vuole disegnare l'entità grafica. Deve essere un intero compreso tra 0 e 255. Se si lascia vuota viene assunto il colore "by layer". Allo 0 corrisponde il "by block". Per conoscere la corrispondenza numero-colore occorre vedere nel vostro cad la posizione assunta dal colore nella palette basilare a 256 colori.

    Illustrerò le varie possibilità e quindi la struttura dei dati con degli esempi pratici.
     
    Top
    .
153 replies since 23/8/2014, 14:58   15954 views
  Share  
.