-
| .
|
|
|
Vediamo infine la sezione dedicata alla definizione delle isobare. In questa fase, per essere spedito, penserei di suddividere il range tra tensione minima e tensione massima in un numero definito di curve. Ci serve quindi conoscere il valori minimi e massimi delle tensioni verticali indotte dai carichi. Definiamo due variabili globali e dedichiamo due etichette da mettere nella cornice delle isobare.
Le due variabili devono essere definite nella sezione pubblica del codice:
Public siGma_min As Double Public siGma_max As Double
la loro determinazione possiamo farla all'interno del codice che genera i punti ed in particolare in questa parte di codice:
siGma_min = 100000 siGma_max = -100000 For i = 0 To NPointX For j = 0 To NPointZ For k = 1 To Num_tot_caRichi Quote(i, j) = Quote(i, j) + _ sigmaZ(Ascisse(i), orDinate(j), _ Carichi(k).xi, Carichi(k).xf, Carichi(k).qi, Carichi(k).qf, Carichi(k).z0) Next If Quote(i, j) > siGma_max Then siGma_max = Quote(i, j) If Quote(i, j) < siGma_min Then siGma_min = Quote(i, j) Next j Next i
Ho pensato di impostare la sezione isobare come da immagine che segue:
Ho aggiunto altra cornice destinata alla gestione ed al disegno delle isobare sul foglio dwg
Edited by afazio - 4/8/2012, 18:56
|
|
| .
|
-
| .
|
|
|
All'interno della cornice delle isobare ho inserito:
una label NPunti1 che conterrà il numero complessivo dei punti della griglia una label PSigma_min con il valore minimo della sigma verticale una label PSigma_max con il valore massimo della sigma verticale
un campo editabile N_isobare destinato ad acquisire il numero totale dei livelli a questo campo applico il filtro solo_numeri() ed ilcontrollo che sia non minore di 2
CODICE Private Sub N_isobare_Change() N_isobare.Text = solo_numeri(N_isobare.Text) If Val(N_isobare.Value) = 0 Then NLivelli = 2 N_isobare.Text = NLivelli End If End Sub
un pulsante GeneraLivelli alla pressione del quale si deve riempire il vettore colonna contenente i valori dei livelli da disegnare.
Mi serve quindi definire ancora le seguenti variabili pubbliche:
Public Livelli() As Double Public NLivelli As Integer
La generazione dei livelli viene delegata alla seguente sub:
CODICE Sub generoLivelli(ByVal qmin As Double, ByVal qmax As Double, ByVal divisioni As Integer) Dim delta As Double Dim conta As Integer
ReDim Livelli(0 To divisioni - 1) delta = (qmax - qmin) / (divisioni - 1) For count = 1 To divisioni Livelli(count - 1) = qmin + (count - 1) * delta Next End Sub
mentre alla pressione del pulsante "genera livelli" associamo il codice:
CODICE Private Sub GeneraLivelli_Click()
NLivelli = Val(N_isobare.Value)
Call generoLivelli(siGma_min, siGma_max, NLivelli)
End Sub
Rimane solo il codice finale che ci disegna le isobare
Al pulsante "disegna isobare" associamo il codice:
CODICE Private Sub GeneraIsobare_Click()
Call conrec(Quote(), Ascisse(), orDinate(), NLivelli, Livelli(), 0, NPointX, 0, NPointZ)
End Sub
Finito
|
|
| .
|
-
| .
|
|
|
Eccolo
questa immagine mostra il risultato che si ottiene facendo girare con dati corretti la macro
altra immagine ottenuta con dati diversi
e con questo penso proprio di aver raggiunto e centrato lo scopo che mi ero prefisso.
Noterete che: - il diagramma delle isobare è riportato rovesciato - che non c'e' alcuna gestione dei colori - che non sono riportate etichette delle isobare - che le curve non sono polilinee ma una serie di segmenti - che il diagramma è disegnato sempre a partire dall'origine del sistema di riferimento di Autocad. - che non c'e' alcuna gestione degli errori a partire dalla fase di discretizzazione del sottosuolo e della costruzione delle isobare.
Tutto cio' potrà essere oggetto di modifica correzione ed ampliamento da parte di chiunque lo vorrà. Per quel che mi riguarda considero concluso questo 3d con la pubblicazione del progetto dvb (nel prossimo post) rimanendo, tuttavia, sempre aperto per commenti e discussioni.
Enjoy
Edited by afazio - 4/8/2012, 15:27
|
|
| .
|
-
| .
|
|
|
ecco il link al mio box con l'ultima versione del progetto
https://www.box.com/s/a53d35dbd3adc7ddb081
Chiunque è libero di prelevarlo (finchè non lo tolgo) modificarlo a suo piacimento, mantenendo ovviamente le citazioni a quelle parti di codice che non sono mie (la sub per il calcolo delle curve di livello). E' gradita eventuale comunicazione delle modifiche ed anche la pubblicazione in queste pagine di progetti che si basano sul codice qui prelevato.
Una sola notazione: con la pubblicazione del presente codice non mi sento obbligato a rispondere di eventuali errori o di malfunzionamenti o a richieste di chiarimenti su qualche parte del codice. Lo faro' solo se ne avro' voglia e possibilità.
Saluti
Edited by afazio - 4/8/2012, 20:48
|
|
| .
|
-
| .
|
|
|
un esempio
|
|
| .
|
-
-
| .
|
|
|
Il link da cui scaricare la nuova versione del progetto "Isobare in Autocad"
Isobare v.5.dvb
|
|
| .
|
-
| .
|
|
|
Il foglio del calcolo e disegno delle ISOBARE in excel RIVIVE ----- Dopo sette anni per sopravvenute necessità di lavoro, ho rimesso mano al foglio excel che avevo perduto a causa dei cambiamenti di sistemi operativi e di versioni di excel. Alla luce delle conoscenze che nel frattempo ho acquisito, dopo un giorno intero di dibattimenti tra librerie e codice, sono finalmente riuscito a far rivivere quel foglio. --- Adesso la questione consiste nel riuscire ad entrare nella logica di programmazione adottata ai tempi in cui composi il foglio, per adattarlo alle nuove esigenze. --- Se ne avrò tempo e voglia ne parlerò qui al forum.
|
|
| .
|
37 replies since 30/7/2012, 22:08 4646 views
.