Author Topic: Una funzione per la stabilità dei pendii  (Read 44608 times)

0 Members and 2 Guests are viewing this topic.

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #105 on: 22 December , 2009, 09:44:19 AM »
trovate il file a cui faccio riferimento nel precedente messaggio qui:
http://ingegneriaforum.it/index.php?action=downloads;sa=view;down=212

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #106 on: 22 December , 2009, 13:49:20 PM »
che ne dici di prevedere una macro che legga un file dxf con la stratigrfia del pendio ed importarla direttamente nelle celle apposite? fattibile con vba?
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #107 on: 22 December , 2009, 14:16:49 PM »
che ne dici di prevedere una macro che legga un file dxf con la stratigrfia del pendio ed importarla direttamente nelle celle apposite? fattibile con vba?

la cosa e' fattibile ma da file dxf abbastanza laborioso poichè occorrerebbe conoscere perfettamente il formato del file .dxf per andare a reperire la sezione dove iniziare ad estrarre i dati. Sarebbe invece cosa quasi immediata se il file fosse un formato testo. Quindi se riesci ad estrarre le coordinate dei vertici della polilinea e salvarli in un file txt dimmelo e passami il formato del file o in alternativa un file di esempio

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #108 on: 22 December , 2009, 14:21:00 PM »
e' possibile farlo con una macro scritta in vba per autocad, vedi TinPoly della sezione download. Vedrò se riesco ad effettuare questa operazione anche da excel.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #109 on: 22 December , 2009, 14:56:31 PM »
e' possibile farlo con una macro scritta in vba per autocad, vedi TinPoly della sezione download. Vedrò se riesco ad effettuare questa operazione anche da excel.

IL VBA per autocad agendo dall'interno dell'ambiente opera direttamente sul database degli oggetti presenti nel disegno. Altra cosa e' gestire un file dxf. Per estrarre i dati che ti servono devi conoscere il formato dati del file e attraverso programma scartare tutte le linee del file che riguardano altre sezioni per pervenire alla sezione che ti interessa.

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #110 on: 22 December , 2009, 14:59:34 PM »
difatti l'idea base sarebbe avere un dxf con la sola sezione interessata suddivisa in polilinee, e poi aprire il file dxf da excel ed importare tali punti. Il problema e' se esistono o meno librerie che abbiano le funzioni per gestire l'import dei punti direttamente da excel.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #111 on: 22 December , 2009, 15:07:33 PM »
difatti l'idea base sarebbe avere un dxf con la sola sezione interessata suddivisa in polilinee, e poi aprire il file dxf da excel ed importare tali punti. Il problema e' se esistono o meno librerie che abbiano le funzioni per gestire l'import dei punti direttamente da excel.

quando apri un file da excel puoi anche scegliere di aprire un file di formato .txt
prima di aprire il file ti appare una finestrella che ti inviat a specificare come vuoi importarli, stabilendo il carattere di separazione dei dati, se il tab o una virgola o altro ecc ecc.
prova ad aprire da excel un file dxf (tanto alla fine anche esso e' un file formato testo) e capisci meglio quello che voglio dire.

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #112 on: 22 December , 2009, 15:11:55 PM »
il problema secondo me non sta tanto nell'apertura nel file, quanto nella lettura dei dati delle coordinate degli oggetti presenti dentro il dxf. Per quello, sempre secondo me, serviranno librerie apposite (come ad esempio mi e' successo in c# per poter esportare/Importare dati da e in file dxf). Da qua però non ho excel e non posso fare prove al riguardo.

Edit: non sapevo che il dxf si potesse anche leggere come file di testo, e proprio ora lo sto osservando meglio...questo secondo me semplifica le cose di parecchio.
« Last Edit: 22 December , 2009, 15:13:27 PM by Gilean »
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

Offline ferrarialberto

  • Semi Esperto
  • **
  • Posts: 137
  • Karma: 26
Re: Una funzione per la stabilità dei pendii
« Reply #113 on: 22 December , 2009, 18:48:57 PM »
IL VBA per autocad agendo dall'interno dell'ambiente opera direttamente sul database degli oggetti presenti nel disegno. Altra cosa e' gestire un file dxf. Per estrarre i dati che ti servono devi conoscere il formato dati del file e attraverso programma scartare tutte le linee del file che riguardano altre sezioni per pervenire alla sezione che ti interessa.


Io in VB questo problema l'ho risolto così: 1) apro il file .dxf; 2) cerco la riga ENTITIES (vado a memoria), che contrassegna l'inizio degli oggetto contenuti nel dxf (linee, punti, blocchi, testi, polilinee eccetera); 3) cerchi a seguire le scritte LWPOLYLINE (che contraddistinguono l'inizio di sezione per ciascuna polilinea 2D); in  una riga seguente c'è il numero dei punti appartenenti alla polilinea (non ricordo a memoria il codice dietro il quale c'è l'info), le ascisse/ordinate di ciascun punto sono dopo le scritte "10" e "20" rispetivamente. Se ti interessa ti giro qualche info più precisa.

Ciao.
ing. FERRARI Alberto - www.ferrarialberto.it

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #114 on: 22 December , 2009, 18:50:39 PM »
Infatti, dopo aver notato che il dxf è un file di testo stavo scrivendo qualche riga di codice che scorresse tutto il file, e fermandosi ad una certa stringa, cominciasse il ciclo di scrittura delle coordinate sulle celle.

questo e' il contenuto relativo alla polilinea di una polilinea a 5 linee

Code: [Select]
LWPOLYLINE
  5
1B0
330
1F
100

Le coordinate dove sono?

Edit: leggendo meglio il file dovrebbero essere specificate in seguito

Code: [Select]
LWPOLYLINE
  5
1B0
330
1F
100
AcDbEntity
  8
0
100
AcDbPolyline
 90
        6
 70
     0
 43
0.0
 10
845.5959318439273
 20
764.4852931896885
 10
1240.860143063539
 20
1232.138822771062
 10
1958.475742410254
 20
1163.140760348933
 10
2150.351575965487
 20
1370.134947615319
 10
2511.07813299037
 20
1293.470433812954
 10
2791.2168484503
 20
1473.632041248512
  0
ENDSEC
  0
SECTION
  2
OBJECTS

Quindi bisogna considerare la AcDbPolyline, ma cosa sono quei numeri dopo la AcDbPolyline? la prima coordinata e' la  845.5959318439273
« Last Edit: 22 December , 2009, 18:55:45 PM by Gilean »
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #115 on: 22 December , 2009, 19:14:37 PM »
Infatti, dopo aver notato che il dxf è un file di testo stavo scrivendo qualche riga di codice che scorresse tutto il file, e fermandosi ad una certa stringa, cominciasse il ciclo di scrittura delle coordinate sulle celle.

questo e' il contenuto relativo alla polilinea di una polilinea a 5 linee

Code: [Select]
LWPOLYLINE
  5
1B0
330
1F
100

Le coordinate dove sono?

Edit: leggendo meglio il file dovrebbero essere specificate in seguito

Code: [Select]
LWPOLYLINE
  5
1B0
330
1F
100
AcDbEntity
  8
0
100
AcDbPolyline
 90
        6
 70
     0
 43
0.0
 10
845.5959318439273
 20
764.4852931896885
 10
1240.860143063539
 20
1232.138822771062
 10
1958.475742410254
 20
1163.140760348933
 10
2150.351575965487
 20
1370.134947615319
 10
2511.07813299037
 20
1293.470433812954
 10
2791.2168484503
 20
1473.632041248512
  0
ENDSEC
  0
SECTION
  2
OBJECTS

Quindi bisogna considerare la AcDbPolyline, ma cosa sono quei numeri dopo la AcDbPolyline? la prima coordinata e' la  845.5959318439273

non e' cosi semplice.
Cercare di scrivere un codice che ti legga i vertici di una polilinea senza conoscere il formato dati e' come andare al buio.
Intanto il file dxf di una stessa polilinea e' diverso da ambiente ad ambiente poichè in esso sono registrati anche altre variabili che dipendono dalle personalizzazioni di autocad.
Potresti trovarti per esempio anche il codice 30 che anticipa la coordinata z anche se hai disegnato una polilinea su un piano.
In ogni caso il codice che scriveresti non terrebbe conto del fatto che nello stesso file potrebbero essere presenti piu di una polilinea e tu leggeresti solo la prima oppure dovresti imporre a chi fa il disegno in cad di tracciare una polilinea per volta, mentre naturalmente chi fa il disegno metterebbe pure le polilinee di separazione tra gli strati.
Quindi dovresti  farle differenziare per layer o per colore e stabilire la convenzione comunicandola al disegnatore.
Meglio, invece, procedere al contrario: da ambiente cad scrivi un programma che, selezionando la polilinea che ti interessa, registri le coordinate dei vertici in un file txt.
Poi si importerebbero le polilineee dai file txt attraverso una macro dedicata.
« Last Edit: 22 December , 2009, 19:21:36 PM by afazio »

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #116 on: 22 December , 2009, 19:20:07 PM »
Sarà ma che io sappia il dxf è nato come file di interscambio tra i vari software, pertanto dovrebbe essere standardizzato:

http://it.wikipedia.org/wiki/AutoCAD_DXF

Ripeto, mi approccio ora a questo formato, ma non mi sembra che debba essere così differente tra i vari programmi, altrimenti l'interoperabilità andrebbe a farsi friggere.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

afazio

  • Guest
Re: Una funzione per la stabilità dei pendii
« Reply #117 on: 22 December , 2009, 19:42:14 PM »
Sarà ma che io sappia il dxf è nato come file di interscambio tra i vari software, pertanto dovrebbe essere standardizzato:

http://it.wikipedia.org/wiki/AutoCAD_DXF

Ripeto, mi approccio ora a questo formato, ma non mi sembra che debba essere così differente tra i vari programmi, altrimenti l'interoperabilità andrebbe a farsi friggere.

esatto, e' standardizzato, ma per poter interagire e quindi scambuare dati tra diverse applicaioni occorre conoscere lo standard.
IL fatto che possa anche presentarsi il codice 30 e' regolamente stabilito nella standard di modo che chiuque, conoscendo cio' possa scrivere nel suo codice:

if rigo=30
   saltalo che non mi interessa
end if

ecco perche ti dico che devi conoscere il formato dati del file dxf, cioè lo standard.


edit:

Siccome io non lo conosco, non posso scrivere una funzione che legga un dxf per estrarre i vertici della polilinea, mentre verrebbe banale per un file txt.

ciao
« Last Edit: 22 December , 2009, 20:00:11 PM by afazio »

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Una funzione per la stabilità dei pendii
« Reply #118 on: 22 December , 2009, 20:17:07 PM »
Pare che lo standard dell'autocad 2010 sia questo

http://images.autodesk.com/adsk/files/acad_dxf1.pdf

Ora esistono diversi PDF in base alla versione di autocad, il che mi confonde non poco.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

Offline ferrarialberto

  • Semi Esperto
  • **
  • Posts: 137
  • Karma: 26
Re: Una funzione per la stabilità dei pendii
« Reply #119 on: 22 December , 2009, 21:46:04 PM »
Non è poi così difficile come sembra: nel codice prima di tutto a mio avviso bisognerebbe leggere tutte le LWPOLYLINE e non fermarsi dopo la prima. Ricapitolo guardando un mio codice:
1) cerco LWPOLYLINE dopo l'inizio della sezione ENTITIES;
2) procedi con la lettura del file, una riga alla volta, cercando "AcDbpolyline";
3) cerchi il campo " 90" e la lettura successiva rappresenta il numero di punti della polilinea (nell'esempio di Gilean era 6);
4) cerchi il campo " 43", seguito da "0.0";
5) a seguire le coordinate x ed y dei punti dopo i campi " 10" e " 20".

Io l'ho usata parecchie volte questa tecnica e non mi ha mai dato problemi. Versioni più evolute di Autocad aggiungono campi nuovi ma non modificano i codici di quelli esistenti a quanto ne so.

Ciao.
ing. FERRARI Alberto - www.ferrarialberto.it

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24