TU ANUNCIO / YOUR PUBLICITY

AQUÍ PODRÍA ESTAR TU ANUNCIO: / HERE COULD BE YOUR AD E-mail

viernes, 20 de febrero de 2015

Optimized GIS for linear projects XVII (Consultas 2) / SIG optimizado para obras lineales XVII (Queries 2)

Previamente: / Previously:

Optimized GIS for linear projects XVI (Consultas)
SIG optimizado para obras lineales XVI (Queries)

Índice Index

1.- Introducción
   1.1.- Situación actual
   1.2.- Problemática detectada y justificación del trabajo
   1.3.- Objetivos
   1.4.- Estructura del estudio
2.- Estado del conocimiento
   2.1.- La topografía en la obra lineal
      2.1.1.- Elementos básicos de documentación topográfica
      2.1.2.- Composición de los elementos básicos del trazado
      2.1.3.- Software habitual para definición de trazados en obras lineales
   2.2.- Formatos de dibujo
      2.2.1.- El formato dxf
      2.2.2.- El formato vml
      2.2.3.- El formato svg
      2.2.4.- El formato dwg
   2.3.- La información documentada de obra
   2.4.- Sistemas de información geográfica
      2.4.1.- Revisión de programas de gis estándar
      2.4.2.- Revisión de programas de gis que no siguen los estándares
   2.5.- Tipos de lenguajes de programación
      2.5.1.- Lenguajes de bajo nivel
      2.5.2.- Lenguajes de nivel medio
      2.5.3.- Lenguajes de alto nivel
   2.6.- Tipos de bases de datos
      2.6.1.- Sql, la comunicación entre bases de datos relacionales
   2.7.- Los sistemas de representación gráfica tradicionales
   2.8.- Normativa aplicable
3.- Solución
   3.1.- Lectura de elementos topográficos: trazado y estructuras
      3.1.1.- Elementos topográficos del trazado: eje
      3.1.2.- Elementos topográficos del trazado: terreno
      3.1.3.- Elementos topográficos del trazado: plataforma
      3.1.4.- Elementos topográficos anejos al trazado: las estructuras
   3.2.- Lectura de bases de datos
      3.2.1.- Bases de datos de ensayos e inspección
         3.2.1.1.- Bases de datos de ensayos, suelos
         3.2.1.2.- Bases de datos de ensayos, densidades
         3.2.1.3.- Bases de datos de ensayos, mezclas bituminosas
         3.2.1.4.- Bases de datos de ensayos, hormigones
         3.2.1.5.- Bases de datos de inspección, control
         3.2.1.6.- Bases de datos de inspección, diario
         3.2.2.- Bases de datos extras
         3.2.2.1.- Bases de datos extras, fotos
         3.2.2.2.- Bases de datos extras, definición de estructuras
         3.2.2.3.- Bases de datos extras, definición de la capa de firme
         3.2.2.4.- Bases de datos extras, localización extra
    3.3.- El dibujo del trazado
        3.3.1.- El dibujo en planta
        3.3.2.- El dibujo en perspectiva
            3.3.2.1.- El dibujo con superficies planas
            3.3.2.2.- El dibujo en el navegador
    3.4.- La unión del trazado con las bases de datos
        3.4.1.- La unión de las estructuras al trazado
        3.4.2.- La unión de los ensayos de suelos al trazado
        3.4.3.- La unión de los ensayos de densidades al trazado
        3.4.4.- La unión de los ensayos de hormigones al trazado
        3.4.5.- La unión de los ensayos de firmes al trazado
        3.4.6.- La unión de los inspecciones de control al trazado
        3.4.7.- La unión del diario al trazado
        3.4.8.- La unión de la documentación fotográfica al trazado
    3.5.- La unión de la documentación y otras inspecciones
        3.5.1.- La unión pasiva
        3.5.2.- La unión activa
    3.6.- Base matemática novedosa utilizada
        3.6.1.- Pseudo-bases de datos
        3.6.2.- Redes de taylor multidimensionales
        3.6.3.- Sintegrales
    3.7.- Consultas a la información a través de formularios
        3.7.1.- Formularios de ensayos de suelos
        3.7.2.- Formularios de ensayos de densidades
        3.7.3.- Formularios de ensayos de hormigones
        3.7.4.- Formularios de ensayos de firmes
        3.7.5.- Formulario de inspecciones, control
        3.7.6.- Formulario de inspecciones, diario
        3.7.7.- Formulario de inspecciones, fotos
        3.7.8.- Formulario de seguimiento en dxf y kml
    3.8.- Resultados finales
4.- Conclusiones, futuras lineas de trabajo
5.- Bibliografía


3.7.3.- FORMULARIOS DE ENSAYOS DE HORMIGONES / TEST OF CONCRETE FORMS


Como ya se ha comentado, los hormigones son un caso especial, en cuanto se deben seguir las directrices de la EHE o norma de hormigones, en particular el articulado del control de calidad.

El inicio de selección del lote es el siguiente: Estructura y/o tipo de hormigón, después parte y/o elemento y en último lugar según se determine el recorrido (evaluación similar a una desviación de la media) se verificará el tipo de planta y con ese dato el coeficiente a comparar con la resistencia característica:

As already mentioned, the concretes are a special case, as they must follow the guidelines of the EHE or standard concrete, in particular the articles of quality control.

The start of the batch selection is as follows: Structure and / or type of concrete, then part and / or element and ultimately determined according to the route (similar to a deviation of the mean evaluation) plant type is checked and with this data the coefficient to compare the characteristic strength:

Para la determinación del recorrido se necesita el valor de los últimos 30 resultados como mínimo (tal como marca la norma) que se obtienen del conjunto global de resultados ordenados por fecha.

To determine the path the value of the last 30 results minimum required (as indicated in regulations) obtained the overall set of results sorted by date.

SELECT FR28 FROM BD-Hormigón ORDERBY FECHA
        SELECT FR28 FROM BD-Concrete ORDERBY DATA

Después, ya obtenido el coeficiente dependiendo de F28[1]..F28[30], se aplica sobre el conjunto:

Then, whether the ratio obtained depending F28 [1] .. F28 [30], is applied to the set:

SELECT * FROM BD-Hormigón WHERE (ESTRUCTURA=[estructura seleccionada]) (AND HORMIGON=[tipo de hormigón seleccionado]) (AND PARTE=[parte seleccionada]) (AND ELEMENTO=[elemento seleccionado]) ORDER BY FECHA.

       SELECT * FROM BD-Concrete WHERE (STRUCTUCT=[selected struct]) (AND CONCRETE=[Type of selected concrete]) (AND PARTE=[selected part]) (AND ELEMENTO=[selected element]) ORDER BY DATA

La forma de llevar a cabo estas acciones se puede observar a través de los formularios de las figuras 3.7.3, versión de Visual Basic.

How to perform these actions can be seen through the forms of Figures 3.7.3 version of Visual Basic.


3.7.3: Diversas vistas de preselección de lotes de hormigón
3.7.3: Different views preset batch of concrete
 La versión de PHP, es sólo diferente en apariencia. Figura 3.7.3.

PHP version, just different in appearance. Figure 3.7.3.


Figura 3.7.3: Diversas vistas de preselección de lotes de hormigón
Figure 3.7.3: Different views preset batch of concrete
El siguiente código adjunto corresponde a la versión de VB:

The following code attached corresponds to the version of VB:


Sub Hormigonea(Button As Integer, Shift As Integer, X As Single, Y As Single)
DataHormigon.Refresh
DataHormigon.Recordset.MoveLast
ndatos = DataHormigon.Recordset.RecordCount
paso = (Ancho - 500 - 800) / ndatos
DataHormigon.Recordset.MoveFirst
Series_ENM = 0: Series_Constructora = 0: Series_Conj = 0
Max_ENM = 0: Max_Constructora = 0: Max_Conj = 0
Min_ENM = 1000: Min_Constructora = 1000: Min_Conj = 1000
Medias_ENM = 0: Medias_Constructora = 0: Medias_Conj = 0
sumap = 0: sumae = 0
For X = (800 + paso / 2) To Ancho - 501 Step paso
If X = (800 + paso / 2) Then DataHormigon.Recordset.MoveFirst Else DataHormigon.Recordset.MoveNext
res = Cuanto_es(DataHormigon.Recordset(11))
abba = M * res + N / 10
If UCase(DataHormigon.Recordset(6)) = "ELLOS" Then
color1 = QBColor(9)
Series_Constructora = Series_Constructora + 1

'Esta parte pertenece al cálculo del recorrido, concepto explicando en la EHE, e imprescindible para la validación de resultados
If res > Cuanto_es(Max_Constructora) Then Max_Constructora = res
If res < Cuanto_es(Min_Constructora) Then Min_Constructora = res
sumap = sumap + res
Else
color1 = QBColor(12)
Series_ENM = Series_ENM + 1
If res > Cuanto_es(Max_ENM) Then Max_ENM = res
If res < Cuanto_es(Min_ENM) Then Min_ENM = res
sumae = sumae + res
End If

Series_Conj = Series_Conj + 1
If res > Cuanto_es(Max_Conj) Then Max_Conj = res
If res < Cuanto_es(Min_Conj) Then Min_Conj = res
Picture1.Circle (X, abba), 20, color1: Picture1.CurrentX = X + 20
Picture1.CurrentY = abba – 50: Picture1.ForeColor = color1
Nombre = DataHormigon.Recordset("PARTE")
If IsNull(Nombre) Then Nombre = DataHormigon.Recordset("ELEMENTO")
If IsNull(Nombre) Then Nombre = ""
If DataHormigon.Recordset(3) = "OD" Then Picture1.Print "OD-";
If DataHormigon.Recordset(3) = "TRAZA" Then Picture1.Print "Sifón: ";: Nombre = "Pk." + Format(DataHormigon.Recordset("PK"), "0+000")
Picture1.Print Nombre
Next X
Picture1.DrawWidth = 2
Medias_Constructora = Forma00(sumap / Series_Constructora)
res = Cuanto_es(Medias_Constructora)
abba = M * res + N / 10
Picture1.Line (600, abba)-(Ancho - 300, abba), QBColor(9)

Picture1.DrawWidth = 2
If Series_ENM <> 0 Then Medias_ENM = Forma00(Str(sumae / Series_ENM)) Else Medias_ENM = "0,00"
res = Cuanto_es(Medias_ENM): abba = M * res + N / 10
Picture1.Line (600, abba)-(Ancho - 300, abba), QBColor(12)

Medias_Conj = Forma00((sumap + sumae) / Series_Conj)
Max_ENM = Forma00(Cuanto_es(Max_ENM))
Max_ConstConstructora = Forma00(Cuanto_es(Max_Constructora))
Max_Conj = Forma00(Cuanto_es(Max_Conj))
If Min_ENM = 1000 Then Min_ENM = 0
If Min_Constructora = 1000 Then Min_Constructora = 0
If Min_Conj = 1000 Then Min_Conj = 0
Min_ENM = Forma00(Cuanto_es(Min_ENM)): Min_Constructora = Forma00(Cuanto_es(Min_Constructora))
Min_Conj = Forma00(Cuanto_es(Min_Conj))
Porc_Contr = Forma0s(Cuanto_es(Series_ENM) / Cuanto_es(Series_Conj))

Rec_Max = Forma00((Cuanto_es(Max_Conj) - Cuanto_es(Min_Conj)) / Cuanto_es(Medias_Conj))
KN = KsubN(Cuanto_es(Rec_Max))

nn = Cuanto_es(Series_Conj)
If nn > 6 Then
Fest = Forma00(KN * Cuanto_es(Min_Conj))
Else
If nn / 2 = Int(nn / 2) Then tope = nn / 2 - 1 Else tope = (nn - 1) / 2 - 1
DataHormigon.RecordSource = Left(DataHormigon.RecordSource, Len(DataHormigon.RecordSource) - 8) + " FM28"
DataHormigon.Refresh: DataHormigon.Recordset.MoveFirst
suma = 0
For I = 1 To tope
cuan = Cuanto_es(DataHormigon.Recordset(11)): suma = suma + cuan
DataHormigon.Recordset.MoveNext
Next I
f1 = 2 * suma / tope – Cuanto_es(Medias_Conj): f2 = KN * Cuanto_es(Min_Conj)
If f1 > f2 Then Fest = Forma00(f1) Else Fest = Forma00(f2)
End If
Fck09 = Int(Cuanto_es(DataHormigon.Recordset(7))) * 0.9
Diagnostico.FontBold = True
If Cuanto_es(Fck09) < Cuanto_es(Fest) Then Diagnostico.ForeColor = QBColor(9): Diagnostico = "Conforme" Else Diagnostico = "No Conforme": Diagnostico.ForeColor = QBColor(12)

Picture1.DrawWidth = 2
FCK100 = Int(Fck09 / 0.9 + 0.5): res = FCK100 : abba = M * res + N
Picture1.Line (mizdo + 600, abba)-(mizdo + Ancho - 300, abba), QBColor(2)

End Sub


3.7.4.- FORMULARIOS DE ENSAYOS DE FIRMES / FORMS OF TESTING PAVEMENT


Con los datos de los firmes se procede con los mismos criterios de selección que en el caso de las densidades. La única salvedad es la composición del sistema gráfico del Marshall y la composición de las granulometrías. Figuras 3.7.4.

With data from the firm proceeds with the same selection criteria as in the case of densities. The only caveat is the composition of the graphics system of Marshall and composition of the particle sizes. Figures 3.7.4.
Figura 3.7.4: Diversas preselecciones de tramos de MBC en VB (fondo negro) y PHP
Figure 3.7.4: Different presets sections of MBC in VB (black background) and PHP


El desarrollo se resuelve según las siguientes subrutinas:
The development is solved according to the following subroutines:



Private Sub Aglomerador()
DataAglo.RecordSource = "SELECT DISTINCT sector FROM [" + DBT_Aglomera + "]"
DataAglo.Refresh
DataAglo.Recordset.MoveFirst
Do
pepote = DataAglo.Recordset(0)
If Not IsNull(pepote) Then Combo1.AddItem pepote
DataAglo.Recordset.MoveNext
Aglomera 1, 1, 1, 1
Loop Until DataAglo.Recordset.EOF
Dim I As Integer
'Carga_Ejes
End Sub

Private Sub Aglomera(Button As Integer, Shift As Integer, X As Single, Y As Single)
'=================================================
' MARSHALL
'=================================================
If Combo2 = "Todas" Then
BDConjunta = "SELECT * FROM [" + DBT_Aglomera + "] WHERE SECTOR = '" & Combo1 & "' AND (PK BETWEEN " & Trim(Cuanto_es(Combo3)) & " AND " & Trim(Cuanto_es(Combo4)) & ")"
Else
BDConjunta = "SELECT * FROM [" + DBT_Aglomera + "] WHERE PROCEDENCI = '" & Combo2 & "' AND (SECTOR = '" & Combo1 & "' AND PK BETWEEN " & Trim(Cuanto_es(Combo3)) & " AND " & Trim(Cuanto_es(Combo4)) & ")"
End If

DataAglo.RecordSource = BDConjunta
If Combo6 <> "Todas" Then DataAglo.RecordSource = DataAglo.RecordSource & " AND CAPA = '" & Combo6 & "'"
DataAglo.Refresh
DataAglo.Recordset.MoveFirst
capote = UCase(DataAglo.Recordset("MEZCLA"))
If capote Like "*D*" And capote Like "*12*" Then Combo5 = "MBC D-12"
If capote Like "*D*" And capote Like "*20*" Then Combo5 = "MBC D-20"
If capote Like "*S*" And capote Like "*12*" Then Combo5 = "MBC S-12"
If capote Like "*S*" And capote Like "*20*" Then Combo5 = "MBC S-20"
If capote Like "*S*" And capote Like "*25*" Then Combo5 = "MBC S-25"
If capote Like "*G*" And capote Like "*20*" Then Combo5 = "MBC G-20"
If capote Like "*G*" And capote Like "*25*" Then Combo5 = "MBC G-25"
If capote Like "*PA*" And capote Like "*12*" Then Combo5 = "MBC PA-12"
If capote Like "*F*" And capote Like "*10*" Then Combo5 = "MBC F-10"

Actuar_Picos

If Option3 Then
ChivAglo = DataAglo.RecordSource
DataAglo.RecordSource = ChivAglo + " AND lcase(EJECUTA) = 'ellos'"
DataAglo.Refresh
GranContratista
DataAglo.RecordSource = ChivAglo + " AND lcase(EJECUTA) = 'nosotros'"
DataAglo.Refresh
GranContraste
DataAglo.RecordSource = ChivAglo
DataAglo.Refresh
End If

If Option1 Then
ChivAglo = DataAglo.RecordSource
DataAglo.RecordSource = ChivAglo + " AND EJECUTA = 'Ellos'" : DataAglo.Refresh
GranContratista
DataAglo.RecordSource = ChivAglo : DataAglo.Refresh
End If

If Option2 Then
ChivAglo = DataAglo.RecordSource : DataAglo.RecordSource = ChivAglo + " AND EJECUTA = 'Nosotros'"
DataAglo.Refresh
GranContraste
DataAglo.RecordSource = ChivAglo : DataAglo.Refresh
End If
End Sub

Sub Actuar_Picos()
'Iniciación de gráficas, puesta a cero
PicD.Cls: Dmaxima = 0: Dminima = 10000: Dmedia = 0
PicE.Cls: Emaxima = 0: Eminima = 10000: Emedia = 0
PicF.Cls: Fmaxima = 0: Fminima = 10000: Fmedia = 0
PicA.Cls: Amaxima = 0: Aminima = 10000: Amedia = 0
PicM.Cls: Mmaxima = 0: Mminima = 10000: Mmedia = 0
PicR.Cls: Rmaxima = 0: Rminima = 10000: Rmedia = 0
PicD.ScaleTop = 2.6: PicD.ScaleHeight = -0.5
PicE.ScaleTop = 2350: PicE.ScaleHeight = -2000
PicF.ScaleTop = 4.5: PicF.ScaleHeight = -3.7
PicA.ScaleTop = 20: PicA.ScaleHeight = -15
PicM.ScaleTop = 10: PicM.ScaleHeight = -11.4
PicR.ScaleTop = 97: PicR.ScaleHeight = -60
BMaxima = 0: Bminima = 10000: Bmedia = 0
Mmaxima = 0: Mminima = 10000: Mmedia = 0
Zmaxima = 0: Zminima = 10000: Zmedia = 0
FBMaxima = 0: FBminima = 10000: FBmedia = 0
NEnsayos = 0: NExtracciones = 0

PK1 = Cuanto_es(Combo3)
PK2 = Cuanto_es(Combo4)
For I = 3 To 5.5 Step 0.5
If I = 3 Then PicR.DrawWidth = 2: PicA.DrawWidth = 2: PicM.DrawWidth = 2: PicD.DrawWidth = 2: PicE.DrawWidth = 2: PicF.DrawWidth = 2 Else PicD.DrawWidth = 1: PicE.DrawWidth = 1: PicF.DrawWidth = 1: PicA.DrawWidth = 1: PicM.DrawWidth = 1: PicR.DrawWidth = 1
ozi = Forma0s(I / 100)
PicD.Line (I, 2.18)-(I, 2.55) : PicD.CurrentX = I – 0.15 : PicD.CurrentY = 2.15 : PicD.Print ozi
PicE.Line (I, 700)-(I, 2200) : PicE.CurrentX = I – 0.15 : PicE.CurrentY = 550 : PicE.Print ozi
PicF.Line (I, 1.35)-(I, 4.2) : icF.CurrentX = I – 0.15 : PicF.CurrentY = 1.13 : PicF.Print ozi
PicA.Line (I, 7.8)-(I, 18.7) PicA.CurrentX = I – 0.15 PicA.CurrentY = 6.5 PicA.Print ozi
PicM.Line (I, 0.6)-(I, 9.3) PicM.CurrentX = I – 0.15 PicM.CurrentY = -0.2 '2.8 PicM.Print ozi
PicR.Line (I, 48)-(I, 92) PicR.CurrentX = I – 0.15 PicR.CurrentY = 43 PicR.Print ozi
Next I

For I = 2.2 To 2.6 Step 0.1
If I = 2.2 Then PicD.DrawWidth = 2 Else PicD.DrawWidth = 1
PicD.Line (2.8, I)-(5.6, I)
PicD.CurrentX = 2.2: PicD.CurrentY = I + 0.02: PicD.Print I
Next I

For I = 750 To 2000 Step 250
If I = 750 Then PicE.DrawWidth = 2 Else PicE.DrawWidth = 1
PicE.Line (2.8, I)-(5.6, I)
PicE.CurrentX = 2.2: PicE.CurrentY = I + 75: PicE.Print I
Next I

For I = 1.5 To 4 Step 0.5
If I = 1.5 Then PicF.DrawWidth = 2 Else PicF.DrawWidth = 1
PicF.Line (2.8, I)-(5.6, I)
PicF.CurrentX = 2.2: PicF.CurrentY = I + 0.12: PicF.Print Forma0(I)
Next I

For I = 8 To 18 Step 2
If I = 8 Then PicA.DrawWidth = 2 Else PicA.DrawWidth = 1
PicA.Line (2.8, I)-(5.6, I)
PicA.CurrentX = 2.2: PicA.CurrentY = I + 0.5: PicA.Print I
Next I

For I = 1 To 9 Step 1
If I = 1 Then PicM.DrawWidth = 2 Else PicM.DrawWidth = 1
PicM.Line (2.8, I)-(5.6, I)
If I = Int(I) Then PicM.CurrentX = 2.2: PicM.CurrentY = I + 0.3: PicM.Print I
Next I

For I = 50 To 90 Step 10
If I = 50 Then PicR.DrawWidth = 2 Else PicR.DrawWidth = 1
PicR.Line (2.8, I)-(5.6, I)
PicR.CurrentX = 2.2: PicR.CurrentY = I + 1: PicR.Print I
Next I

DataAglo.Recordset.MoveFirst
Do
uf = DataAglo.Recordset("bmezcla")
If Not IsNull(uf) Then
zplof = Cuanto_es(uf)
If zplof > Cuanto_es(Zmaxima) Then Zmaxima = Forma00(zplof)
If zplof < Cuanto_es(Zminima) Then Zminima = Forma00(zplof)
Zmedia = Forma00(Cuanto_es(Zmedia) + zplof)
End If

uf = DataAglo.Recordset("relfb")
If Not IsNull(uf) Then
fbplof = Cuanto_es(uf)
If fbplof > Cuanto_es(FBMaxima) Then FBMaxima = Forma00(fbplof)
If fbplof < Cuanto_es(FBminima) Then FBminima = Forma00(fbplof)
FBmedia = Forma00(Cuanto_es(FBmedia) + fbplof)
End If

uf = DataAglo.Recordset("densi")
If Not IsNull(uf) Then
dplof = Cuanto_es(uf)
PicD.Circle (bplof, dplof), 0.03, CPLOF
If dplof > Cuanto_es(Dmaxima) Then Dmaxima = Forma00(dplof)
If dplof < Cuanto_es(Dminima) Then Dminima = Forma00(dplof)
Dmedia = Forma00(Cuanto_es(Dmedia) + dplof)
NEnsayos = NEnsayos + 1
End If

uf = DataAglo.Recordset("estabili")
If Not IsNull(uf) Then
eplof = Cuanto_es(uf)
PicE.Circle (bplof, eplof), 0.03, CPLOF
If eplof > Cuanto_es(Emaxima) Then Emaxima = Int(eplof)
If eplof < Cuanto_es(Eminima) Then Eminima = Int(eplof)
Emedia = Int(Cuanto_es(Emedia) + eplof)
End If

uf = DataAglo.Recordset("deforme")
If Not IsNull(uf) Then
fplof = Cuanto_es(uf)
PicF.Circle (bplof, fplof), 0.03, CPLOF
If fplof > Cuanto_es(Fmaxima) Then Fmaxima = Forma00(fplof)
If fplof < Cuanto_es(Fminima) Then Fminima = Forma00(fplof)
Fmedia = Forma00(Cuanto_es(Fmedia) + fplof)
End If

uf = DataAglo.Recordset("porcha")
If Not IsNull(uf) Then
aplof = Cuanto_es(uf)
PicA.Circle (bplof, aplof), 0.03, CPLOF
If aplof > Cuanto_es(Amaxima) Then Amaxima = Forma00(aplof)
If aplof < Cuanto_es(Aminima) Then Aminima = Forma00(aplof)
Amedia = Forma00(Cuanto_es(Amedia) + aplof)
End If

uf = DataAglo.Recordset("porchm")
If Not IsNull(uf) Then
mplof = Cuanto_es(uf)
PicM.Circle (bplof, mplof), 0.03, CPLOF
If mplof > Cuanto_es(Mmaxima) Then Mmaxima = Forma00(mplof)
If mplof < Cuanto_es(Mminima) Then Mminima = Forma00(mplof)
Mmedia = Forma00(Cuanto_es(Mmedia) + mplof)
End If

uf = DataAglo.Recordset("porchrell")
If Not IsNull(uf) Then
rplof = Cuanto_es(uf)
PicR.Circle (bplof, rplof), 0.03, CPLOF
If rplof > Cuanto_es(Rmaxima) Then Rmaxima = Forma00(rplof)
If rplof < Cuanto_es(Rminima) Then Rminima = Forma00(rplof)
Rmedia = Forma00(Cuanto_es(Rmedia) + rplof)
End If

DataAglo.Recordset.MoveNext
Loop Until DataAglo.Recordset.EOF

Bmedia = Forma00(Bmedia / Nextracciones) : Zmedia = Forma00(Zmedia / Nextracciones) : FBmedia = Forma00(FBmedia / NExtracciones)

Dmedia = Forma00(Dmedia / Nensayos) : Emedia = Int(Emedia / Nensayos) : Fmedia = Forma00(Fmedia / NEnsayos)
Amedia = Forma00(Amedia / Nensayos) : Mmedia = Forma00(Mmedia / Nensayos) : Rmedia = Forma00(Rmedia / NEnsayos)

'=================================================
' GRANULOMETRÍAS
'=================================================
PintaGrano.ScaleLeft = 2.1
PintaGrano.ScaleWidth = -3.3
PintaGrano.Cls
For I = 0 To 100 Step 10
If I = 0 Or I = 100 Then PintaGrano.DrawWidth = 2 Else PintaGrano.DrawWidth = 1
PintaGrano.Line (1.85, I)-(-1.17, I)
PintaGrano.CurrentX = 2.04
PintaGrano.CurrentY = I + 2
PintaGrano.Print Trim(I) + " %"
Next I
PintaGrano.DrawWidth = 1
pet = 1000
For I = 1 To 5
pet = pet / 10
For j = pet To pet / 10 Step -pet / 10
If j < 70 Then
HU = Log(j) / Log(10)
PintaGrano.Line (HU, -2)-(HU, 102)
PintaGrano.CurrentX = HU
PintaGrano.CurrentY = -5
' PintaGrano.Print Int(j)
End If
Next j
Next I
PintaGrano.DrawWidth = 2
j = 50: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 40: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 25: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 12.5: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 10: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 5: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 2.5: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 1.25: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 0.63: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 0.32: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 0.16: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
j = 0.08: HU = Log(j) / Log(10): PintaGrano.Line (HU, -2)-(HU, 102): PintaGrano.CurrentX = HU + 0.05: PintaGrano.CurrentY = -5: PintaGrano.Print j
End Sub 


3.7.5.- FORMULARIO DE INSPECCIONES, CONTROL / FORM OF INSPECTION, CONTROL


La selección y/o búsqueda de inspecciones son de forma intersectante. Es decir, que confluyan varias condiciones de búsqueda. Son una excelente ayuda a la hora de realizar informes parciales del estado de la obra, ya que no sólo se encuentra la información sino que al mismo tiempo se realiza la consulta y el informe, ahorrando gran cantidad de tiempo

The selection and / or search form inspections are intersecting. That is, they converge multiple search conditions. They are a great help when performing partial reports the status of the work, since not only information but is simultaneously the query and the report is made, saving considerable time




Continuará ...
To be continued ...

No hay comentarios:

Publicar un comentario