Option Explicit
Sub Main
Dim sFile
Dim collFig
Dim CollPar
Dim clsFig
Dim nFatte
Dim sFilefigura
Dim nRigheMax,nColonneMax
Dim Inizio
Dim nRidondanzaEstr
Dim bDisegnaFig
Dim nInizioReale
Dim nStart,nEnd
bDisegnaFig = True
nStart = EstrazioneIni
nEnd = EstrazioneFin
sFilefigura = GetDirectoryAppData & "Strutture\varie\cubo3test.dat"
nRigheMax = 30
nColonneMax = 55
nRidondanzaEstr = 10 ' in ogni quadro mostra le ultime 10 del quadro precedete
For Inizio = nStart To nEnd Step nRigheMax
ReDim aQuadro(nRigheMax,nColonneMax)
Call AlimentaQuadroNumeri(aQuadro,Inizio,nRidondanzaEstr,nInizioReale)
'Call ScriviQuadro(aQuadro)
Call GetCollFiguraUtenteQN(aQuadro,sFilefigura,collFig)
'Call GetCollParallelepipediQN(aQuadro,CollPar)
For Each clsFig In collFig
'If bDisegnaFig Then
'Call DisegnaFiguraSpaziometricaQN(aQuadro,clsFig)
'End If
Call ScriviInfoFigTrov(clsFig,nInizioReale,bDisegnaFig)
Call Scrivi
Call Scrivi(String(50,"="))
Call Scrivi
If ScriptInterrotto Then Exit For
DoEventsEx
Next
If ScriptInterrotto Then Exit For
Call AvanzamentoElab(nStart,nEnd,Inizio)
Next
End Sub
Sub ScriviQuadro(aQuadro)
Dim k
Dim s
For k = 1 To UBound(aQuadro)
s = ""
For e = 1 To UBound(aQuadro,2)
s = s & Format2(aQuadro(k,e)) & " "
Next
Call Scrivi(s)
Next
End Sub
Sub AlimentaQuadroNumeri(aQuadro,Inizio,nRidondanzaEstr,nRetStart)
Dim k,e,r,riga
Dim nStart,nEnd,Col
nStart = Inizio - nRidondanzaEstr
If nStart <= 0 Then nStart = Inizio
nRetStart = nStart
nEnd = nStart +(UBound(aQuadro) - 1)
For k = nStart To nEnd
riga = riga + 1
Col = 0
For r = 1 To 12
If r <> 11 Then
For e = 1 To 5
Col = Col + 1
aQuadro(riga,Col) = Estratto(k,r,e)
Next
End If
Next
Next
End Sub
Sub ScriviInfoFigTrov(clsFig,Inizio,bDisegna)
Dim clsV ' clsVertice
Dim i,j,jj
Dim nPrimaRiga,nUltimaRiga
Dim nidEstrI,nidEstrF,nRuota
ReDim aIdRighe(clsFig.CollCoord.count - 1)
ReDim aRuoteInt(clsFig.CollCoord.Count)
ReDim aNumeri(clsFig.CollCoord.Count)
ReDim aChiusure(clsFig.CollCoord.Count)
For Each clsV In clsFig.CollCoord
aIdRighe(i) = clsV.Riga
i = i + 1
nRuota = GetRuotaFromColonna(clsV.Colonna)
aRuoteInt(i) = nRuota
If clsV.bChiusura = False Then
j = j + 1
aNumeri(j) = clsV.Numero
Else
jj = jj + 1
aChiusure(jj) = clsV.Numero
End If
Next
nPrimaRiga = MinimoV(aIdRighe)
nUltimaRiga = MassimoV(aIdRighe)
nidEstrI = Inizio +(nPrimaRiga - 1)
nidEstrF = Inizio +(nUltimaRiga - 1)
Call EliminaRipetuti(aRuoteInt,True)
Call EliminaRipetuti(aNumeri,True)
Call EliminaRipetuti(aChiusure,True)
If bDisegna Then
Call OrdinaMatrice(aRuoteInt,1)
Call DisegnaStruttura(clsFig,aRuoteInt,nidEstrI,nidEstrF,Inizio)
End If
Call Scrivi("Inizio struttura : " & GetInfoEstrazione(nidEstrI))
Call Scrivi("Fine struttura : " & GetInfoEstrazione(nidEstrF))
Call Scrivi("Ruote interessate : " & StringaRuote(aRuoteInt))
Call Scrivi("Numeri : " & StringaNumeri(aNumeri))
Call Scrivi("Chiusure : " & StringaNumeri(aChiusure))
End Sub
Function GetRuotaFromColonna(C)
Dim r
If C Mod 5 = 0 Then
r = C /5
Else
If C > 5 Then
r =(C\5) + 1
Else
r = 1
End If
End If
If r = 11 Then r = 12
GetRuotaFromColonna = r
End Function
Sub DisegnaStruttura(clsFig,aRuote,nIdEstrIni,nIdEstrFin,nIdEstrBase)
Dim nWPic ' larghezza oggetto pic
Dim nHPic ' Altezza oggetto pic
Dim nHCella ' altezza cella in mm
Dim nWCella ' larghezza cella
Dim nBordo ' bordo esterno all'immagine
Dim nWDataEstr ' larghezza colonna data
Dim nRuoteTot ' totale ruote interessate
Dim nRighe ' quantita estrazioni interessate dalla struttura
Dim nSpess
Dim clsV
Dim nX,nY,nXX,nYY
Dim k,r,e,N,NTipo
nBordo = 5
nHCella = 7
nWCella = 7
nWDataEstr = 50
nRuoteTot = UBound(aRuote)
nRighe = nIdEstrFin -(nIdEstrIni - 1)
Scrivi nRighe & "_" & nRuoteTot
nWPic = nWDataEstr +(nRuoteTot *(nWCella*5))
nHPic = nHCella +(nHCella * nRighe) ' la riga del titolo + le n righe
nWPic = nWPic +(nBordo * 2)
nHPic = nHPic +(nBordo * 2)
PicClear
Call PicSetDimensioni(nWPic,nHPic,nWPic,nHPic)
' Quadrato bordo esterno
nSpess = 2
nX = nBordo : nY = nBordo : nXX = nWPic - nBordo : nYY = nBordo
Call PicLinea(nX,nY,nXX,nYY,,nSpess)
nX = nWPic - nBordo : nY = nBordo : nXX = nX : nYY = nHPic - nBordo
Call PicLinea(nX,nY,nXX,nYY,,nSpess)
nX = nBordo : nY = nHPic - nBordo : nXX = nWPic - nBordo : nYY = nHPic - nBordo
Call PicLinea(nX,nY,nXX,nYY,,nSpess)
nX = nBordo : nY = nBordo : nXX = nX : nYY = nHPic - nBordo
Call PicLinea(nX,nY,nXX,nYY,,nSpess)
' righe orizzontali
nSpess = 1
nX = nBordo
nY = nBordo + nHCella
nXX = nWPic - nBordo
For k = 1 To nRighe
If k = 1 Then
nSpess = 2
Else
nSpess = 1
End If
nYY = nY
Call PicLinea(nX,nY,nXX,nYY,,nSpess)
nY = nY + nHCella
Next
' righe verticali
nSpess = 1
nY = nBordo
nYY = nHPic - nBordo
nX = nWDataEstr + nBordo
For k = 1 To nRuoteTot * 5
nXX = nX
If(k - 1) Mod 5 = 0 Then
nY = nBordo
Else
nY = nBordo + nHCella
End If
Call PicLinea(nX,nY,nXX,nYY,,nSpess)
nX = nX + nWCella
Next
' intestazione tabella
nY = nBordo + 1
nX = nBordo + 2
Call PicStampaTesto(nX,nY,"Data",,,,,10)
' nomi ruote
nY = nBordo + 1
For k = 1 To nRuoteTot
nX = nBordo + nWDataEstr +((k - 1) *(nWCella *5)) + 2
Call PicStampaTesto(nX,nY,NomeRuota(aRuote(k)),,,,,10)
Next
' righe dati
nY = nBordo + nHCella + 1
For k = nIdEstrIni To nIdEstrFin
nX = nBordo + 2
Call PicStampaTesto(nX,nY,GetInfoEstrazione(k),,,,,8)
nX = nBordo + nWDataEstr + 2
For r = 1 To UBound(aRuote)
For e = 1 To 5
N = Estratto(k,aRuote(r),e)
NTipo = 0
For Each clsV In clsFig.CollCoord
If clsv.Numero = N Then
If clsv.riga +(nIdEstrBase - 1) = k Then
If GetRuotaFromColonna(clsV.colonna) = aRuote(r) Then
If clsv.bChiusura Then
NTipo = 1
Else
NTipo = 2
End If
End If
End If
End If
Next
If NTipo = 0 Then
Call PicStampaTesto(nX,nY,Format2(N),,,,,8)
ElseIf NTipo = 1 Then
Call PicRiempi(nX,nY,vbGreen)
Call PicStampaTesto(nX,nY,Format2(N),,True,,,8,vbRed)
ElseIf NTipo = 2 Then
Call PicRiempi(nX,nY,vbYellow)
Call PicStampaTesto(nX,nY,Format2(N),,True,,,8,vbBlue)
End If
nX = nX + nWCella
Next
Next
nY = nY + nHCella
Next
Call PicEsegui
End Sub