Attribute VB_Name = "Module1" Option Explicit Option Base 1 Dim coinciden As Boolean Dim posiciones() As Integer Public factor As Single Public factorx As Single Public factory As Single Dim DMayor As Single Dim DMayorIzda As Single Dim DMayorDcha As Single Dim DMayorArriba As Single Dim DMayorAbajo As Single ' Variables RedibujaImagen ' Ancho y alto pantalla en twips Dim anchoPantalla As Integer Dim altoPantalla As Integer ' Variables comunes Dim i As Integer Dim j As Integer Dim X As Single Dim Y As Single Dim radioFinal As Single Public HaCancelado As Boolean Public lineaSuelo As Single ' Variables conductor Dim radio As Single ' Variables 2 conductores horiz y vert Dim d1 As Single Dim d2 As Single Dim h As Single Dim d As Single ' Variables 4 conductores Dim d3 As Single Dim d4 As Single ' Variables obstaculo normal Dim xinic As Single Dim yinic As Single Dim xfin As Single Dim yfin As Single Dim arriba As Single Dim izda As Single Dim derecha As Single ' Numero total de obstaculos de cada tipo Public totalLineasHorizontales As Integer Public totalcond As Integer Public totalcondmultiples As Integer Public totalnorm As Integer Public totalelevados As Integer Public total3cond As Integer Public total4cond As Integer Public totalZonas As Integer Public totalLazos As Integer ' Contador que asigna el numero de obstaculo segun ' orden de inserción. Public elementos As Integer ' Arrays que almacenarán los obstaculos y conductores Public LineasHorizontales() As LineaHorizontal Public conductoresPictureBox() As conductor Public conductoresMultiples() As dosconductores Public tresConductores() As tresCond Public NormalesPictureBox() As ObstaculoNormal Public ElevadosPictureBox() As ObstaculoElevado Public cuatroConductores() As cuatroCond Public zonasProhibidas() As Zona Public Lazos() As lazo Dim imagenSuperpuesto() As coordImagen ' Variables para cuando se haga doble click en un objeto. Dim TipoObjetoSeleccionado As String Dim NumeroObjetoSeleccionado As Integer Public Type lazo pasivo As Boolean tipo As String numero As Integer numeroglobal As Integer x1 As String x2 As String x3 As String x4 As String y1 As String y2 As String y3 As String y4 As String I1 As String I2 As String theta1 As String theta2 As String xc1 As Single xc2 As Single xc3 As Single xcampo As Single ycampo As Single Isugerida As String Isugerida2 As String usaFc As Boolean automatico As Boolean nombreConductor As String RConductor As String rgmConductor As String costeConductor As String nombrePoste As String alturaPoste As String costePoste As String Calcular As Boolean longitud As String End Type Public Type coordImagen coordx As Single coordy As Single End Type ' Ahora definimos los tipos de obstaculos que vamos a tener. Public Type LineaHorizontal numero As Integer numeroglobal As Integer tipo As String altura As Single End Type Public Type conductor numeroglobal As Integer ' Almacena el numero de orden global numero As Integer ' Almacena el numero de orden en su clase tipo As String linea As Integer altura As Single coordx As Single diametro As Single intensidad As Single desfase As Single End Type Public Type dosconductores numero As Integer numeroglobal As Integer tipo As String coordx As Single coordy As Single separacion As Single diametro1 As Single diametro2 As Single linea As String intensidad1 As Single desfase1 As Single End Type Public Type tresCond numero As Integer numeroglobal As Integer tipo As String coordx As Single coordy As Single h As Single d As Single diametro1 As Single diametro2 As Single diametro3 As Single linea As String intensidad As Single desfase As Single unoarriba As Boolean End Type Public Type cuatroCond numero As Integer numeroglobal As Integer tipo As String coordx As Single coordy As Single disth As Single distv As Single diametro1 As Single diametro2 As Single diametro3 As Single diametro4 As Single linea As String intensidad1 As Single desfase1 As Single End Type Public Type ObstaculoNormal numeroglobal As Integer numero As Integer tipo As String altura As Single anchura As Single izquierda As Single derecha As Single arriba As Single coordx As Single End Type Public Type ObstaculoElevado numeroglobal As Integer numero As Integer tipo As String coordx As Single altura As Single anchura As Single distanciaAlSuelo As Single inferior As Single alturaprohibida As Single izda As Single dcha As Single apoyado As Boolean End Type Public Type Zona xminima As Single yminima As Single xmaxima As Single ymaxima As Single dibujarSeñal As Boolean ' Determina si se dibuja señal de superposicion o no tipo As String ' Representa el tipo de obstaculo numero As Integer ' Representa la posicion que ocupa en el array de elementos de objetos suyos numeroglobal As Integer ' Numero de elemento global del elemento generador End Type ' Variables para controlar si los lazos estan sobre zonas no permitidas Dim xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4 As Integer Sub añadeLinea() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Se crea la nueva línea horizontal Dim unalineahorizontal As LineaHorizontal With unalineahorizontal .numero = totalLineasHorizontales + 1 .altura = CSng(FormLineaHorizontal.Text1.Text) .numeroglobal = elementos .tipo = "Horizontal" End With ' Cerramos el formulario Unload FormLineaHorizontal ' Si la linea se sale de la pantalla, se ajusta la escala de la misma If (unalineahorizontal.altura > Principal.ymaxima) Then Principal.ymaxima = unalineahorizontal.altura If (totalLineasHorizontales = 0) Then ReDim LineasHorizontales(1) LineasHorizontales(1) = unalineahorizontal totalLineasHorizontales = 1 Else i = UBound(LineasHorizontales) i = i + 1 ReDim Preserve LineasHorizontales(i) LineasHorizontales(i) = unalineahorizontal totalLineasHorizontales = totalLineasHorizontales + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If With unazona .xminima = Principal.xminima .xmaxima = Principal.xmaxima .yminima = unalineahorizontal.altura - 0.25 .ymaxima = unalineahorizontal.altura + 0.25 .tipo = "linea" .numero = totalLineasHorizontales End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se redibuja todo Module1.RedibujaImagen End Sub Sub añadeConductor() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Se crea el nuevo conductor Dim unconductor As conductor With unconductor .numero = totalcond + 1 .numeroglobal = elementos .tipo = "conductor" .coordx = CSng(FormConductor.Text1.Text) .altura = CSng(FormConductor.Text2.Text) .diametro = CSng(FormConductor.Text3.Text) .numero = totalcond + 1 .intensidad = CSng(FormConductor.Text4.Text) .desfase = CSng(FormConductor.Text5.Text) End With If (FormConductor.Option1.Value = True) Then unconductor.linea = 1 Else unconductor.linea = 2 End If ' Se cierra el formulario Unload FormConductor ' Se añade el nuevo conductor If (totalcond = 0) Then ReDim conductoresPictureBox(1) conductoresPictureBox(1) = unconductor totalcond = 1 i = 1 Else i = UBound(conductoresPictureBox) i = i + 1 ReDim Preserve conductoresPictureBox(i) conductoresPictureBox(i) = unconductor totalcond = totalcond + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If With unazona .xminima = conductoresPictureBox(i).coordx - 0.25 .xmaxima = conductoresPictureBox(i).coordx + 0.25 .yminima = conductoresPictureBox(i).altura - 0.25 .ymaxima = conductoresPictureBox(i).altura + 0.25 .tipo = "conductor" .numero = totalcond .numeroglobal = elementos End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se comprueba si el conductor se sale de la imagen actual If ((unconductor.altura + unconductor.diametro / 2) > Principal.ymaxima) Then Principal.ymaxima = unconductor.altura + unconductor.diametro / 2 + 3 End If If ((unconductor.altura - unconductor.diametro / 2) < Principal.yminima) Then Principal.yminima = unconductor.altura - unconductor.diametro / 2 - 3 End If If ((unconductor.coordx + unconductor.diametro / 2) > Principal.xmaxima) Then Principal.xmaxima = unconductor.coordx + unconductor.diametro / 2 + 3 End If If ((unconductor.coordx - unconductor.diametro / 2) < Principal.xminima) Then Principal.xminima = unconductor.coordx - unconductor.diametro / 2 - 3 End If ' Se redibuja todo. RedibujaImagen End Sub Sub añade2condhoriz() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Recogemos los datos del formulario Dim doscond As dosconductores With doscond .numero = totalcondmultiples + 1 .tipo = "2condhoriz" .coordx = CSng(Form2condhoriz.Text1.Text) .coordy = CSng(Form2condhoriz.Text2.Text) .separacion = CSng(Form2condhoriz.Text3.Text) .diametro1 = CSng(Form2condhoriz.Text4.Text) .diametro2 = CSng(Form2condhoriz.Text5.Text) .numeroglobal = elementos .intensidad1 = CSng(Form2condhoriz.Text6.Text) .desfase1 = CSng(Form2condhoriz.Text8.Text) End With If (Form2condhoriz.Option1.Value = True) Then doscond.linea = 1 Else doscond.linea = 2 End If ' Cerramos el formulario Unload Form2condhoriz ' Añadimos este elemento al vector correspondiente Dim i As Integer If (totalcondmultiples = 0) Then ReDim conductoresMultiples(1) conductoresMultiples(1) = doscond totalcondmultiples = 1 i = 1 Else i = UBound(conductoresMultiples) i = i + 1 ReDim Preserve conductoresMultiples(i) conductoresMultiples(i) = doscond totalcondmultiples = totalcondmultiples + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If With unazona .xminima = conductoresMultiples(i).coordx - 0.25 .xmaxima = conductoresMultiples(i).coordx + conductoresMultiples(i).separacion + 0.25 .yminima = conductoresMultiples(i).coordy - 0.25 .ymaxima = conductoresMultiples(i).coordy + 0.25 .tipo = "2condhoriz" .numero = totalcondmultiples .numeroglobal = elementos End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se comprueba si el conductor se sale de la imagen actual If (doscond.diametro1 > doscond.diametro2) Then DMayor = doscond.diametro1 Else DMayor = doscond.diametro2 End If If (doscond.coordy + DMayor / 2 > Principal.ymaxima) Then Principal.ymaxima = doscond.coordy + DMayor + 3 End If If (doscond.coordy - DMayor / 2 < Principal.yminima) Then Principal.yminima = doscond.coordy - DMayor + 3 End If If ((doscond.coordx - doscond.diametro1 / 2) < Principal.xminima) Then Principal.xminima = doscond.coordx - doscond.diametro1 / 2 - 3 End If If ((doscond.coordx + doscond.separacion + doscond.diametro2 / 2) > Principal.xmaxima) Then Principal.xmaxima = doscond.coordx + doscond.separacion + doscond.diametro2 / 2 + 3 End If ' Se redibuja todo. RedibujaImagen End Sub Sub añade2condvert() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Recogemos los datos del formulario Dim doscond As dosconductores With doscond .numero = totalcondmultiples + 1 .tipo = "2condvert" .coordx = CSng(Form2condvert.Text1.Text) .coordy = CSng(Form2condvert.Text2.Text) .separacion = CSng(Form2condvert.Text3.Text) .diametro1 = CSng(Form2condvert.Text4.Text) .diametro2 = CSng(Form2condvert.Text5.Text) .numeroglobal = elementos .intensidad1 = Form2condvert.Text6.Text .desfase1 = Form2condvert.Text8.Text End With If (Form2condvert.Option1.Value = True) Then doscond.linea = 1 Else doscond.linea = 2 End If ' Cerramos el formulario Unload Form2condvert ' Añadimos este elemento al vector correspondiente Dim i As Integer If (totalcondmultiples = 0) Then ReDim conductoresMultiples(1) conductoresMultiples(1) = doscond totalcondmultiples = 1 i = 1 Else i = UBound(conductoresMultiples) i = i + 1 ReDim Preserve conductoresMultiples(i) conductoresMultiples(i) = doscond totalcondmultiples = totalcondmultiples + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If With unazona .xminima = conductoresMultiples(i).coordx - 0.25 .xmaxima = conductoresMultiples(i).coordx + 0.25 .ymaxima = conductoresMultiples(i).coordy + 0.25 .yminima = conductoresMultiples(i).coordy - conductoresMultiples(i).separacion - 0.25 .tipo = "2condvert" .numero = totalcondmultiples .numeroglobal = elementos End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se comprueba si los conductores se salen de la imagen actual If (doscond.diametro1 > doscond.diametro2) Then DMayor = doscond.diametro1 Else DMayor = doscond.diametro2 End If If (doscond.coordy + doscond.separacion + doscond.diametro1 / 2 > Principal.ymaxima) Then Principal.ymaxima = doscond.coordy + doscond.separacion + doscond.diametro1 / 2 + 3 End If If (doscond.coordy - doscond.diametro2 / 2 < Principal.yminima) Then Principal.yminima = doscond.coordy - doscond.diametro2 / 2 - 3 End If If ((doscond.coordx - DMayor / 2) < Principal.xminima) Then Principal.xminima = doscond.coordx - DMayor / 2 - 3 End If If ((doscond.coordx + DMayor / 2) > Principal.xmaxima) Then Principal.xmaxima = doscond.coordx + DMayor / 2 + 3 End If ' Se redibuja todo. RedibujaImagen End Sub Sub añade3cond(ByVal hayUnoArriba As Boolean) ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Recogemos los datos del formulario Dim tres As tresCond Dim i As Integer Dim unazona As Zona If hayUnoArriba = False Then ' Si venimos del formulario form3cond1 With tres .numero = total3cond + 1 .numeroglobal = elementos .unoarriba = False .tipo = "3conductores" .coordx = CSng(Form3cond1.Text1.Text) .coordy = CSng(Form3cond1.Text2.Text) .d = CSng(Form3cond1.Text3.Text) .h = CSng(Form3cond1.Text4.Text) .diametro1 = CSng(Form3cond1.Text5.Text) .diametro2 = CSng(Form3cond1.Text6.Text) .diametro3 = CSng(Form3cond1.Text7.Text) .intensidad = CSng(Form3cond1.Text8.Text) .desfase = CSng(Form3cond1.Text9.Text) End With If (Form3cond1.Option1.Value = True) Then tres.linea = 1 Else tres.linea = 2 End If ' Cerramos el formulario Unload Form3cond1 ' Añadimos este elemento al vector correspondiente If (total3cond = 0) Then ReDim tresConductores(1) tresConductores(1) = tres total3cond = 1 i = 1 Else i = UBound(tresConductores) i = i + 1 ReDim Preserve tresConductores(i) tresConductores(i) = tres total3cond = total3cond + 1 End If ' Metemos la zona prohibida en el array If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If totalZonas = totalZonas + 1 With unazona .xminima = tresConductores(i).coordx - 0.25 .xmaxima = tresConductores(i).coordx + tresConductores(i).d + 0.25 .yminima = tresConductores(i).coordy - 0.25 .ymaxima = tresConductores(i).coordy + tresConductores(i).h + 0.25 .tipo = "3cond" .numero = total3cond .numeroglobal = elementos End With zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se comprueba si los conductores se salen de la imagen actual DMayorArriba = tres.diametro3 DMayorIzda = tres.diametro1 DMayorDcha = tres.diametro2 If (tres.diametro1 > tres.diametro2) Then DMayorAbajo = tres.diametro1 Else DMayorAbajo = tres.diametro2 End If If ((tres.coordy + tres.h + DMayorArriba / 2) > Principal.ymaxima) Then Principal.ymaxima = tres.coordy + tres.h + DMayorArriba / 2 + 3 End If If ((tres.coordy - DMayorAbajo / 2) < Principal.yminima) Then Principal.yminima = tres.coordy - DMayorAbajo / 2 - 3 End If If ((tres.coordx - DMayorIzda / 2) < Principal.xminima) Then Principal.xminima = tres.coordx - DMayorIzda / 2 - 3 End If If ((tres.coordx + DMayorDcha / 2) > Principal.xmaxima) Then Principal.xmaxima = tres.coordx + DMayorDcha / 2 + 3 End If Else With tres .numero = total3cond + 1 .unoarriba = True .tipo = "3conductores" .coordx = CSng(Form3cond2.Text1.Text) .coordy = CSng(Form3cond2.Text2.Text) .d = CSng(Form3cond2.Text3.Text) .h = CSng(Form3cond2.Text4.Text) .diametro1 = CSng(Form3cond2.Text5.Text) .diametro2 = CSng(Form3cond2.Text6.Text) .diametro3 = CSng(Form3cond2.Text7.Text) .numeroglobal = elementos .intensidad = CSng(Form3cond2.Text8.Text) .desfase = CSng(Form3cond2.Text9.Text) End With If (Form3cond2.Option1.Value = True) Then tres.linea = 1 Else tres.linea = 2 End If ' Cerramos el formulario Unload Form3cond2 If (total3cond = 0) Then ReDim tresConductores(1) tresConductores(1) = tres total3cond = 1 i = 1 Else i = UBound(tresConductores) i = i + 1 ReDim Preserve tresConductores(i) tresConductores(i) = tres total3cond = total3cond + 1 End If ' Metemos la zona prohibida en el array If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If totalZonas = totalZonas + 1 With unazona .xminima = tresConductores(i).coordx - tresConductores(i).d / 2 - 0.25 .xmaxima = tresConductores(i).coordx + tresConductores(i).d / 2 + 0.25 .yminima = tresConductores(i).coordy - 0.25 .ymaxima = tresConductores(i).coordy + tresConductores(i).h + 0.25 .tipo = "3cond" .numero = total3cond .numeroglobal = elementos End With zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se comprueba si los conductores se salen de la imagen actual DMayorAbajo = tres.diametro3 DMayorIzda = tres.diametro1 DMayorDcha = tres.diametro2 If (tres.diametro1 > tres.diametro2) Then DMayorArriba = tres.diametro1 Else DMayorArriba = tres.diametro2 End If If ((tres.coordy + tres.h + DMayorArriba / 2) > Principal.ymaxima) Then Principal.ymaxima = tres.coordy + tres.h + DMayorArriba / 2 + 3 End If If ((tres.coordy - DMayorAbajo / 2) < Principal.yminima) Then Principal.yminima = tres.coordy - DMayorAbajo / 2 - 3 End If If ((tres.coordx - DMayorIzda / 2) < Principal.xminima) Then Principal.xminima = tres.coordx - DMayorIzda / 2 - 3 End If If ((tres.coordx + DMayorDcha / 2) > Principal.xmaxima) Then Principal.xmaxima = tres.coordx + DMayorDcha / 2 + 3 End If End If ' Se redibuja todo. RedibujaImagen End Sub Sub añade4Cond() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Recogemos los datos del formulario Dim cuatro As cuatroCond With cuatro .numero = total4cond + 1 .numeroglobal = elementos .tipo = "4conductores" .coordx = CSng(Form4cond.Text1.Text) .coordy = CSng(Form4cond.Text2.Text) .disth = CSng(Form4cond.Text3.Text) .distv = CSng(Form4cond.Text4.Text) .diametro1 = CSng(Form4cond.Text5.Text) .diametro2 = CSng(Form4cond.Text6.Text) .diametro3 = CSng(Form4cond.Text7.Text) .diametro4 = CSng(Form4cond.Text8.Text) .intensidad1 = CSng(Form4cond.Text9.Text) .desfase1 = CSng(Form4cond.Text13.Text) End With If (Form4cond.Option1.Value = True) Then cuatro.linea = 1 Else cuatro.linea = 2 End If ' Cerramos el formulario Unload Form4cond ' Añadimos este elemento al vector correspondiente Dim i As Integer If (total4cond = 0) Then ReDim cuatroConductores(1) cuatroConductores(1) = cuatro total4cond = 1 i = 1 Else i = UBound(cuatroConductores) i = i + 1 ReDim Preserve cuatroConductores(i) cuatroConductores(i) = cuatro total4cond = total4cond + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If totalZonas = totalZonas + 1 With unazona .xminima = cuatroConductores(i).coordx - 0.25 .xmaxima = cuatroConductores(i).coordx + cuatroConductores(i).disth + 0.25 .yminima = cuatroConductores(i).coordy - 0.25 .ymaxima = cuatroConductores(i).coordy + cuatroConductores(i).distv + 0.25 .tipo = "4cond" .numero = total4cond .numeroglobal = elementos End With zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Se comprueba si los conductores se salen de la imagen actual If (cuatro.diametro1 > cuatro.diametro2) Then DMayorArriba = cuatro.diametro1 Else DMayorArriba = cuatro.diametro2 End If If (cuatro.diametro1 > cuatro.diametro3) Then DMayorIzda = cuatro.diametro1 Else DMayorIzda = cuatro.diametro3 End If If (cuatro.diametro3 > cuatro.diametro4) Then DMayorAbajo = cuatro.diametro3 Else DMayorAbajo = cuatro.diametro4 End If If (cuatro.diametro2 > cuatro.diametro4) Then DMayorDcha = cuatro.diametro2 Else DMayorDcha = cuatro.diametro4 End If If ((cuatro.coordy + cuatro.distv + DMayorArriba / 2) > Principal.ymaxima) Then Principal.ymaxima = cuatro.coordy + cuatro.distv + DMayorArriba / 2 + 3 End If If ((cuatro.coordy - DMayorAbajo / 2) < Principal.yminima) Then Principal.yminima = cuatro.coordy - DMayorAbajo / 2 - 3 End If If ((cuatro.coordx - DMayorIzda / 2) < Principal.xminima) Then Principal.xminima = cuatro.coordx - DMayorIzda / 2 - 3 End If If ((cuatro.coordx + DMayorDcha / 2) > Principal.xmaxima) Then Principal.xmaxima = cuatro.coordx + DMayorDcha / 2 + 3 End If ' Se redibuja todo. RedibujaImagen End Sub Sub añadeObstaculoNormal() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Creamos un nuevo obstaculo normal y le asignamos ' las propiedades Dim unObstaculoNormal As ObstaculoNormal With unObstaculoNormal .numeroglobal = elementos .numero = totalnorm + 1 .tipo = "Normal" .coordx = CSng(FormObstaculoNormal.Text2.Text) .altura = CSng(FormObstaculoNormal.Text3.Text) .anchura = CSng(FormObstaculoNormal.Text4.Text) .arriba = CSng(FormObstaculoNormal.Text5.Text) .derecha = CSng(FormObstaculoNormal.Text6.Text) .izquierda = CSng(FormObstaculoNormal.Text1.Text) .numero = totalnorm + 1 End With ' Cerramos el formulario porque ya hemos leido sus datos Unload FormObstaculoNormal ' Se añade el nuevo ObstaculoNormal Dim i As Integer If (totalnorm = 0) Then ReDim NormalesPictureBox(1) NormalesPictureBox(1) = unObstaculoNormal totalnorm = 1 i = 1 Else i = UBound(NormalesPictureBox) i = i + 1 ReDim Preserve NormalesPictureBox(i) NormalesPictureBox(i) = unObstaculoNormal totalnorm = totalnorm + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If With unazona .xminima = NormalesPictureBox(i).coordx .xmaxima = NormalesPictureBox(i).coordx + NormalesPictureBox(i).anchura .yminima = 0 .ymaxima = NormalesPictureBox(i).altura .tipo = "normal" .numero = totalnorm .numeroglobal = elementos End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = unazona ' Comprobamos que no esté fuera de la imagen If ((unObstaculoNormal.coordx - unObstaculoNormal.izquierda) < Principal.xminima) Then Principal.xminima = unObstaculoNormal.coordx - unObstaculoNormal.izquierda - 3 End If If ((unObstaculoNormal.coordx + unObstaculoNormal.anchura + _ unObstaculoNormal.derecha) > Principal.xmaxima) Then Principal.xmaxima = unObstaculoNormal.coordx + unObstaculoNormal.anchura + _ unObstaculoNormal.derecha + 3 End If If ((unObstaculoNormal.altura + unObstaculoNormal.arriba) > Principal.ymaxima) Then Principal.ymaxima = unObstaculoNormal.altura + unObstaculoNormal.arriba + 3 End If ' Se redibuja todo. RedibujaImagen End Sub Sub añadeObstaculoElevado() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Creamos un nuevo obstaculo normal y le asignamos ' las propiedades Dim unObstaculoElevado As ObstaculoElevado With unObstaculoElevado .numero = totalelevados + 1 .numeroglobal = elementos .tipo = "Elevado" .coordx = CSng(FormObstaculoElevado.Text1.Text) .altura = CSng(FormObstaculoElevado.Text2.Text) .anchura = CSng(FormObstaculoElevado.Text3.Text) .distanciaAlSuelo = CSng(FormObstaculoElevado.Text4.Text) .alturaprohibida = CSng(FormObstaculoElevado.Text5.Text) .inferior = CSng(FormObstaculoElevado.Text6.Text) .izda = CSng(FormObstaculoElevado.Text7.Text) .dcha = CSng(FormObstaculoElevado.Text8.Text) .apoyado = False End With ' Cerramos el formulario porque ya hemos leido sus datos Unload FormObstaculoElevado ' Se añade el nuevo ObstaculoElevado Dim i As Integer If (totalelevados = 0) Then ReDim ElevadosPictureBox(1) ElevadosPictureBox(1) = unObstaculoElevado totalelevados = 1 i = 1 Else i = UBound(ElevadosPictureBox) i = i + 1 ReDim Preserve ElevadosPictureBox(i) ElevadosPictureBox(i) = unObstaculoElevado totalelevados = totalelevados + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If Dim miZona As Zona With miZona .xminima = ElevadosPictureBox(i).coordx .xmaxima = ElevadosPictureBox(i).coordx + ElevadosPictureBox(i).anchura .yminima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo .ymaxima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo + _ ElevadosPictureBox(i).altura .numero = totalelevados .tipo = "Elevado" .numeroglobal = elementos End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = miZona ' Comprobamos que no se salga del area de dibujo If ((unObstaculoElevado.coordx - unObstaculoElevado.izda) < Principal.xminima) Then Principal.xminima = unObstaculoElevado.coordx - unObstaculoElevado.izda - 3 End If If ((unObstaculoElevado.coordx + unObstaculoElevado.anchura + _ unObstaculoElevado.dcha) > Principal.xmaxima) Then Principal.xmaxima = unObstaculoElevado.coordx + unObstaculoElevado.anchura + _ unObstaculoElevado.dcha + 3 End If If ((unObstaculoElevado.distanciaAlSuelo + unObstaculoElevado.inferior + _ unObstaculoElevado.altura + unObstaculoElevado.alturaprohibida) > Principal.ymaxima) Then Principal.ymaxima = unObstaculoElevado.distanciaAlSuelo + unObstaculoElevado.inferior _ + unObstaculoElevado.altura + unObstaculoElevado.alturaprohibida End If ' Se redibuja todo. RedibujaImagen End Sub Sub añadeObstaculoElevadoI() ' Actualizamos el contador global de elementos elementos = elementos + 1 ' Creamos un nuevo obstaculo normal y le asignamos ' las propiedades Dim unObstaculoElevado As ObstaculoElevado With unObstaculoElevado .numero = totalelevados + 1 .numeroglobal = elementos .tipo = "Elevado" .coordx = CSng(FormObstaculoElevadoI.Text1.Text) .altura = CSng(FormObstaculoElevadoI.Text2.Text) .anchura = CSng(FormObstaculoElevadoI.Text3.Text) .distanciaAlSuelo = 0 .alturaprohibida = CSng(FormObstaculoElevadoI.Text5.Text) .inferior = CSng(FormObstaculoElevadoI.Text6.Text) .izda = CSng(FormObstaculoElevadoI.Text7.Text) .dcha = CSng(FormObstaculoElevadoI.Text8.Text) .apoyado = True End With ' Cerramos el formulario porque ya hemos leido sus datos Unload FormObstaculoElevadoI ' Se añade el nuevo ObstaculoElevado Dim i As Integer If (totalelevados = 0) Then ReDim ElevadosPictureBox(1) ElevadosPictureBox(1) = unObstaculoElevado totalelevados = 1 i = 1 Else i = UBound(ElevadosPictureBox) i = i + 1 ReDim Preserve ElevadosPictureBox(i) ElevadosPictureBox(i) = unObstaculoElevado totalelevados = totalelevados + 1 End If ' Creamos un objeto de zona prohibida y lo metemos en el array Dim unazona As Zona If (totalZonas = 0) Then ReDim zonasProhibidas(1) Else ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) + 1) End If Dim miZona As Zona With miZona .xminima = ElevadosPictureBox(i).coordx .xmaxima = ElevadosPictureBox(i).coordx + ElevadosPictureBox(i).anchura .yminima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo .ymaxima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo + _ ElevadosPictureBox(i).altura .numero = totalelevados .tipo = "Elevado" .numeroglobal = elementos End With totalZonas = totalZonas + 1 zonasProhibidas(UBound(zonasProhibidas)) = miZona ' Comprobamos si se sale del área actual de dibujo If ((unObstaculoElevado.coordx - unObstaculoElevado.izda) < Principal.xminima) Then Principal.xminima = unObstaculoElevado.coordx - unObstaculoElevado.izda - 3 End If If ((unObstaculoElevado.coordx + unObstaculoElevado.anchura + _ unObstaculoElevado.dcha) > Principal.xmaxima) Then Principal.xmaxima = unObstaculoElevado.coordx + unObstaculoElevado.anchura _ + unObstaculoElevado.dcha + 3 End If If ((unObstaculoElevado.inferior + unObstaculoElevado.altura + _ unObstaculoElevado.alturaprohibida) > Principal.ymaxima) Then Principal.ymaxima = unObstaculoElevado.inferior + unObstaculoElevado.altura _ + unObstaculoElevado.alturaprohibida + 3 End If ' Se redibuja todo. RedibujaImagen End Sub Sub RedibujaImagen() ' Obtenemos el ancho y alto del picturebox anchoPantalla = Principal.Picturedef.Width altoPantalla = Principal.Picturedef.Height ' Ahora vemos si algún elemento se ha salido de la imagen, ya sea porque se haya ' creado fuera o porque se haya desplazado fuera. RecalculaLimites ' Este factor es la relación entre twips de la imagen y tamaño en metros. ' O sea: twips/metro real. ' Para que se pueda ver adecuadamente la imagen en pantalla vamos a calcular el factor para el eje ' horizontal y para el vertical, y nos quedaremos con el adecuado (el menor). factorx = anchoPantalla / (Principal.xmaxima - Principal.xminima) factory = altoPantalla / (Principal.ymaxima - Principal.yminima) If (factorx < factory) Then factor = factorx Principal.ymaxima = Principal.ymaxima * factory / factorx Principal.yminima = Principal.yminima * factory / factorx Else factor = factory Principal.xmaxima = Principal.xmaxima * factorx / factory Principal.xminima = Principal.xminima * factorx / factory End If ' % de altura de la linea de suelo lineaSuelo = 1 - Abs(Principal.yminima) / (Principal.ymaxima - Principal.yminima) ' Borramos todo el picturebox y ponemos de nuevo ' el color de fondo Principal.Picturedef.BackColor = RGB(200, 200, 200) Principal.Picturedef.ScaleMode = 1 ' Se dibujan primero todas las areas prohibidas ' y luego los cuerpos, para evitar superposiciones problemáticas. dibujaAreasProhibidas dibujaCuerpos ' Ahora si existen objetos superpuestos, se detecta y se pone una marca If (totalZonas > 1) Then Dim re As Integer re = 1 While (re <= UBound(zonasProhibidas)) zonasProhibidas(re).dibujarSeñal = False re = re + 1 Wend dibujaseñales End If ' Caja que representa el suelo. Principal.Picturedef.Line (0, lineaSuelo * Principal.Picturedef.Height) _ -(Principal.Picturedef.Width, Principal.Picturedef.Height), RGB(175, 175, 175), BF ' LAzos dibujaLazos ' Ahora representamos los ejes dibujaEjes End Sub Sub dibujaseñales() Dim ii As Integer ii = 1 While (ii < totalZonas) j = ii + 1 ' Vamos a comprobar que cada zona ii no se solape con las j siguientes While (j <= totalZonas) 'Primero comprobamos que el objeto j no sea interior a ii If ((zonasProhibidas(j).xminima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).yminima <= zonasProhibidas(ii).ymaxima And _ zonasProhibidas(j).xminima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).yminima >= zonasProhibidas(ii).yminima) And _ (zonasProhibidas(j).xmaxima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).xmaxima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).ymaxima <= zonasProhibidas(ii).ymaxima And _ zonasProhibidas(j).ymaxima >= zonasProhibidas(ii).yminima) And _ (zonasProhibidas(j).xmaxima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).xmaxima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).yminima >= zonasProhibidas(ii).yminima And _ zonasProhibidas(j).yminima <= zonasProhibidas(ii).ymaxima) And _ (zonasProhibidas(j).xminima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).xminima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).ymaxima >= zonasProhibidas(ii).yminima And _ zonasProhibidas(j).yminima <= zonasProhibidas(ii).yminima)) Then ' Si j es interior a ii entonces en ii se pone señal zonasProhibidas(ii).dibujarSeñal = True ' Si j no es interior a ii comprobamos si ii tiene algún vertice dentro de j ElseIf ((zonasProhibidas(j).xminima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).yminima <= zonasProhibidas(ii).ymaxima And _ zonasProhibidas(j).xminima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).yminima >= zonasProhibidas(ii).yminima) Or _ (zonasProhibidas(j).xmaxima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).xmaxima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).ymaxima <= zonasProhibidas(ii).ymaxima And _ zonasProhibidas(j).ymaxima >= zonasProhibidas(ii).yminima) Or _ (zonasProhibidas(j).xmaxima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).xmaxima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).yminima >= zonasProhibidas(ii).yminima And _ zonasProhibidas(j).yminima <= zonasProhibidas(ii).ymaxima) Or _ (zonasProhibidas(j).xminima >= zonasProhibidas(ii).xminima And _ zonasProhibidas(j).xminima <= zonasProhibidas(ii).xmaxima And _ zonasProhibidas(j).ymaxima >= zonasProhibidas(ii).yminima And _ zonasProhibidas(j).yminima <= zonasProhibidas(ii).yminima)) Then ' Si ii tiene algún vértice en j, se señala el solapamiento zonasProhibidas(j).dibujarSeñal = True End If j = j + 1 Wend ii = ii + 1 Wend dibujaImagen End Sub Sub dibujaImagen() Dim xbase As Single Dim ybase As Single Dim uncontador As Integer Dim altoZona As Single uncontador = 1 While (uncontador <= UBound(zonasProhibidas)) If (zonasProhibidas(uncontador).dibujarSeñal = True) Then xbase = (zonasProhibidas(uncontador).xminima - Principal.xminima - 2.5) * factor ybase = Principal.Picturedef.Height * lineaSuelo - zonasProhibidas(uncontador).yminima * factor altoZona = zonasProhibidas(uncontador).ymaxima - zonasProhibidas(uncontador).yminima ybase = ybase - altoZona * factor / 2 Principal.Picturedef.Line (xbase - 50, ybase)-(xbase + 50, ybase + 100) Principal.Picturedef.Line (xbase - 50, ybase + 100)-(xbase + 50, ybase) Principal.Picturedef.Line (xbase, ybase)-(xbase, ybase + 100) End If uncontador = uncontador + 1 Wend End Sub Sub RecalculaLimites() Dim indice As Integer Dim limdcha As Single Dim limizda As Single Dim limsup As Single Dim liminf As Single Dim modificaciones As Integer ' Inicializamos limdcha = Principal.xmaxorig limizda = Principal.xminorig limsup = Principal.ymaxorig liminf = Principal.yminorig modificaciones = 0 'Lineas Horizontales indice = 1 If (totalLineasHorizontales <> 0) Then While (indice <= UBound(LineasHorizontales)) If (LineasHorizontales(indice).altura > limsup) Then limsup = LineasHorizontales(indice).altura + 3 modificaciones = modificaciones + 1 End If indice = indice + 1 Wend End If ' Conductores indice = 1 If (totalcond <> 0) Then While (indice <= UBound(conductoresPictureBox)) If ((conductoresPictureBox(indice).coordx + _ conductoresPictureBox(indice).diametro / 2) > limdcha) Then limdcha = conductoresPictureBox(indice).coordx + _ conductoresPictureBox(indice).diametro / 2 + 3 modificaciones = modificaciones + 1 End If If ((conductoresPictureBox(indice).coordx - _ conductoresPictureBox(indice).diametro / 2) < limizda) Then limizda = (conductoresPictureBox(indice).coordx - _ conductoresPictureBox(indice).diametro / 2) - 3 modificaciones = modificaciones + 1 End If If ((conductoresPictureBox(indice).altura - _ conductoresPictureBox(indice).diametro / 2) < liminf) Then liminf = (conductoresPictureBox(indice).altura - _ conductoresPictureBox(indice).diametro) - 3 modificaciones = modificaciones + 1 End If If ((conductoresPictureBox(indice).altura + _ conductoresPictureBox(indice).diametro / 2) > limsup) Then limsup = (conductoresPictureBox(indice).altura + _ conductoresPictureBox(indice).diametro / 2) + 3 modificaciones = modificaciones + 1 End If indice = indice + 1 Wend End If ' Grupos de dos conductores If (totalcondmultiples <> 0) Then indice = 1 While (indice <= UBound(conductoresMultiples)) If (conductoresMultiples(indice).tipo = "2condhoriz") Then If (conductoresMultiples(indice).coordx - _ conductoresMultiples(indice).diametro1 / 2 < limizda) Then limizda = conductoresMultiples(indice).coordx - _ conductoresMultiples(indice).diametro1 / 2 modificaciones = modificaciones + 1 End If If (conductoresMultiples(indice).coordx + _ conductoresMultiples(indice).separacion + _ conductoresMultiples(indice).diametro2 / 2 > limdcha) Then limdcha = conductoresMultiples(indice).coordx + _ conductoresMultiples(indice).separacion + _ conductoresMultiples(indice).diametro2 / 2 modificaciones = modificaciones + 1 End If If (conductoresMultiples(indice).diametro1 > _ conductoresMultiples(indice).diametro2) Then DMayor = conductoresMultiples(indice).diametro1 Else DMayor = conductoresMultiples(indice).diametro2 End If If (conductoresMultiples(indice).coordy - DMayor / 2 < liminf) Then liminf = conductoresMultiples(indice).coordy - DMayor / 2 modificaciones = modificaciones + 1 End If If ((conductoresMultiples(indice).coordy + DMayor / 2) > limsup) Then limsup = conductoresMultiples(indice).coordy + DMayor / 2 modificaciones = modificaciones + 1 End If Else ' Si es vertical If (conductoresMultiples(indice).coordy - _ conductoresMultiples(indice).diametro2 / 2 < liminf) Then liminf = conductoresMultiples(indice).coordy - _ conductoresMultiples(indice).diametro2 / 2 modificaciones = modificaciones + 1 End If If (conductoresMultiples(indice).coordy + _ conductoresMultiples(indice).separacion + _ conductoresMultiples(indice).diametro1 / 2 > limsup) Then limsup = conductoresMultiples(indice).coordy + _ conductoresMultiples(indice).separacion + _ conductoresMultiples(indice).diametro1 / 2 modificaciones = modificaciones + 1 End If If (conductoresMultiples(indice).diametro1 > _ conductoresMultiples(indice).diametro2) Then DMayor = conductoresMultiples(indice).diametro1 Else DMayor = conductoresMultiples(indice).diametro2 End If If (conductoresMultiples(indice).coordx - DMayor / 2 < limizda) Then limizda = conductoresMultiples(indice).coordx - DMayor / 2 modificaciones = modificaciones + 1 End If If ((conductoresMultiples(indice).coordx + DMayor / 2) > limdcha) Then limdcha = conductoresMultiples(indice).coordx + DMayor / 2 modificaciones = modificaciones + 1 End If End If indice = indice + 1 Wend End If ' Grupos de 3 conductores tipo 1 indice = 1 If (total3cond <> 0) Then While (indice <= UBound(tresConductores)) If tresConductores(indice).unoarriba = True Then ' Se comprueba si los conductores se salen de la imagen actual DMayorArriba = tresConductores(indice).diametro3 DMayorIzda = tresConductores(indice).diametro1 DMayorDcha = tresConductores(indice).diametro2 If (tresConductores(indice).diametro1 > _ tresConductores(indice).diametro2) Then DMayorAbajo = tresConductores(indice).diametro1 Else DMayorAbajo = tresConductores(indice).diametro2 End If If ((tresConductores(indice).coordy + tresConductores(indice).h + _ DMayorArriba / 2) > limsup) Then limsup = tresConductores(indice).coordy + _ tresConductores(indice).h + DMayorArriba / 2 + 3 modificaciones = modificaciones + 1 End If If ((tresConductores(indice).coordy - DMayorAbajo / 2) < liminf) Then liminf = tresConductores(indice).coordy - DMayorAbajo / 2 - 3 modificaciones = modificaciones + 1 End If If ((tresConductores(indice).coordx - DMayorIzda / 2) < limizda) Then limizda = tresConductores(indice).coordx - DMayorIzda / 2 - 3 modificaciones = modificaciones + 1 End If If ((tresConductores(indice).coordx + tresConductores(indice).d + _ DMayorDcha / 2) > limdcha) Then limdcha = tresConductores(indice).coordx + tresConductores(indice).d _ + DMayorDcha / 2 + 3 modificaciones = modificaciones + 1 End If indice = indice + 1 Else ' tipo 2 ' Se comprueba si los conductores se salen de la imagen actual DMayorAbajo = tresConductores(indice).diametro3 DMayorIzda = tresConductores(indice).diametro1 DMayorDcha = tresConductores(indice).diametro2 If (tresConductores(indice).diametro1 > _ tresConductores(indice).diametro2) Then DMayorArriba = tresConductores(indice).diametro1 Else DMayorArriba = tresConductores(indice).diametro2 End If If ((tresConductores(indice).coordy + tresConductores(indice).h _ + DMayorArriba / 2) > limsup) Then limsup = tresConductores(indice).coordy + _ tresConductores(indice).h + DMayorArriba / 2 + 3 modificaciones = modificaciones + 1 End If If ((tresConductores(indice).coordy - DMayorAbajo / 2) < liminf) Then liminf = tresConductores(indice).coordy - DMayorAbajo / 2 - 3 modificaciones = modificaciones + 1 End If If ((tresConductores(indice).coordx - DMayorIzda / 2) < limizda) Then limizda = tresConductores(indice).coordx - DMayorIzda / 2 - 3 modificaciones = modificaciones + 1 End If If ((tresConductores(indice).coordx + tresConductores(indice).d + _ DMayorDcha / 2) > limdcha) Then limdcha = tresConductores(indice).coordx + _ tresConductores(indice).d + DMayorDcha / 2 + 3 modificaciones = modificaciones + 1 End If indice = indice + 1 End If Wend End If ' Grupos de 4 conductores indice = 1 If (total4cond <> 0) Then While (indice <= UBound(cuatroConductores)) ' Se comprueba si los conductores se salen de la imagen actual If (cuatroConductores(indice).diametro1 > _ cuatroConductores(indice).diametro2) Then DMayorArriba = cuatroConductores(indice).diametro1 Else DMayorArriba = cuatroConductores(indice).diametro2 End If If (cuatroConductores(indice).diametro1 > _ cuatroConductores(indice).diametro3) Then DMayorIzda = cuatroConductores(indice).diametro1 Else DMayorIzda = cuatroConductores(indice).diametro3 End If If (cuatroConductores(indice).diametro3 > _ cuatroConductores(indice).diametro4) Then DMayorAbajo = cuatroConductores(indice).diametro3 Else DMayorAbajo = cuatroConductores(indice).diametro4 End If If (cuatroConductores(indice).diametro2 > cuatroConductores(indice).diametro4) Then DMayorDcha = cuatroConductores(indice).diametro2 Else DMayorDcha = cuatroConductores(indice).diametro4 End If If ((cuatroConductores(indice).coordy + _ cuatroConductores(indice).distv + DMayorArriba / 2) > limsup) Then limsup = cuatroConductores(indice).coordy + _ cuatroConductores(indice).distv + DMayorArriba / 2 + 3 modificaciones = modificaciones + 1 End If If ((cuatroConductores(indice).coordy - DMayorAbajo / 2) < liminf) Then liminf = cuatroConductores(indice).coordy - DMayorAbajo / 2 - 3 modificaciones = modificaciones + 1 End If If ((cuatroConductores(indice).coordx - DMayorIzda / 2) < limizda) Then limizda = cuatroConductores(indice).coordx - DMayorIzda / 2 - 3 modificaciones = modificaciones + 1 End If If ((cuatroConductores(indice).coordx + DMayorDcha / 2) > limdcha) Then limdcha = cuatroConductores(indice).coordx + DMayorDcha / 2 + 3 modificaciones = modificaciones + 1 End If indice = indice + 1 Wend End If ' Obstaculos Normales indice = 1 If (totalnorm <> 0) Then While (indice <= UBound(NormalesPictureBox)) If (NormalesPictureBox(indice).coordx + NormalesPictureBox(indice).anchura + _ NormalesPictureBox(indice).derecha > limdcha) Then limdcha = NormalesPictureBox(indice).coordx + _ NormalesPictureBox(indice).anchura + _ NormalesPictureBox(indice).derecha modificaciones = modificaciones + 1 End If If (NormalesPictureBox(indice).coordx - _ NormalesPictureBox(indice).izquierda < limizda) Then limizda = NormalesPictureBox(indice).coordx - _ NormalesPictureBox(indice).izquierda modificaciones = modificaciones + 1 End If If (NormalesPictureBox(indice).altura + _ NormalesPictureBox(indice).arriba > limsup) Then limsup = NormalesPictureBox(indice).altura + _ NormalesPictureBox(indice).arriba modificaciones = modificaciones + 1 End If indice = indice + 1 Wend End If ' Obstaculos Elevados indice = 1 If (totalelevados <> 0) Then While (indice <= UBound(ElevadosPictureBox)) If (ElevadosPictureBox(indice).coordx - _ ElevadosPictureBox(indice).izda < limizda) Then limizda = ElevadosPictureBox(indice).coordx - _ ElevadosPictureBox(indice).izda modificaciones = modificaciones + 1 End If If (ElevadosPictureBox(indice).coordx + _ ElevadosPictureBox(indice).anchura + _ ElevadosPictureBox(indice).dcha > limdcha) Then limdcha = ElevadosPictureBox(indice).coordx + _ ElevadosPictureBox(indice).anchura + _ ElevadosPictureBox(indice).dcha modificaciones = modificaciones + 1 End If If (ElevadosPictureBox(indice).distanciaAlSuelo + _ ElevadosPictureBox(indice).altura + _ ElevadosPictureBox(indice).alturaprohibida > limsup) Then limsup = ElevadosPictureBox(indice).distanciaAlSuelo + _ ElevadosPictureBox(indice).altura + _ ElevadosPictureBox(indice).alturaprohibida + 5 modificaciones = modificaciones + 1 End If indice = indice + 1 Wend End If ' Si ha habido alguna modificacion respecto al principio, se pasan los nuevos valores. If (modificaciones = 0) Then Principal.xmaxima = Principal.xmaxorig / Principal.zoom Principal.xminima = Principal.xminorig / Principal.zoom Principal.ymaxima = Principal.ymaxorig / Principal.zoom Principal.yminima = Principal.yminorig / Principal.zoom Else If (limdcha > Principal.xmaxorig) Then Principal.xmaxima = limdcha / Principal.zoom Else Principal.xmaxima = Principal.xmaxorig / Principal.zoom End If If (limizda < Principal.xminorig) Then Principal.xminima = limizda / Principal.zoom Else Principal.xminima = Principal.xminorig / Principal.zoom End If If (limsup > Principal.ymaxorig) Then Principal.ymaxima = limsup / Principal.zoom Else Principal.ymaxima = Principal.ymaxorig / Principal.zoom End If If (liminf < Principal.yminorig) Then Principal.yminima = liminf / Principal.zoom Else Principal.yminima = Principal.yminorig / Principal.zoom End If End If End Sub Function minimo(valor1 As Single, valor2 As Single) If (valor1 < valor2) Then minimo = valor1 Else minimo = valor2 End If End Function Function maximo(valor1 As Single, valor2 As Single) If (valor1 > valor2) Then maximo = valor1 Else maximo = valor2 End If End Function Sub actualiza_global(ByVal indice As Integer) ' Vamos a recorrer todos los elementos existentes, y si su numero ' de orden global es mayor al borrado, se les restará uno. Dim miIndice As Integer ' Zonas prohibidas miIndice = 1 If (totalZonas > 0) Then While (miIndice <= UBound(zonasProhibidas)) If zonasProhibidas(miIndice).numeroglobal > indice Then zonasProhibidas(miIndice).numeroglobal = _ zonasProhibidas(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Lineas horizontales miIndice = 1 If (totalLineasHorizontales > 0) Then While (miIndice <= UBound(LineasHorizontales)) If (LineasHorizontales(miIndice).numeroglobal > indice) Then LineasHorizontales(miIndice).numeroglobal = _ LineasHorizontales(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Conductores miIndice = 1 If (totalcond > 0) Then While (miIndice <= UBound(conductoresPictureBox)) If (conductoresPictureBox(miIndice).numeroglobal > indice) Then conductoresPictureBox(miIndice).numeroglobal = _ conductoresPictureBox(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Dos conductores miIndice = 1 If (totalcondmultiples > 0) Then While (miIndice <= UBound(conductoresMultiples)) If (conductoresMultiples(miIndice).numeroglobal > indice) Then conductoresMultiples(miIndice).numeroglobal = _ conductoresMultiples(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Tres conductores miIndice = 1 If (total3cond > 0) Then While (miIndice <= UBound(tresConductores)) If (tresConductores(miIndice).numeroglobal > indice) Then tresConductores(miIndice).numeroglobal = _ tresConductores(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Cuatro conductores miIndice = 1 If (total4cond > 0) Then While (miIndice <= UBound(cuatroConductores)) If (cuatroConductores(miIndice).numeroglobal > indice) Then cuatroConductores(miIndice).numeroglobal = _ cuatroConductores(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Obstaculos normales miIndice = 1 If (totalnorm > 0) Then While (miIndice <= UBound(NormalesPictureBox)) If (NormalesPictureBox(miIndice).numeroglobal > indice) Then NormalesPictureBox(miIndice).numeroglobal = _ NormalesPictureBox(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If ' Obstaculos elevados miIndice = 1 If (totalelevados > 0) Then While (miIndice <= UBound(ElevadosPictureBox)) If (ElevadosPictureBox(miIndice).numeroglobal > indice) Then ElevadosPictureBox(miIndice).numeroglobal = _ ElevadosPictureBox(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If miIndice = 1 ' Lazos If (totalLazos > 0) Then While (miIndice <= UBound(Lazos)) If (Lazos(miIndice).numeroglobal > indice) Then Lazos(miIndice).numeroglobal = Lazos(miIndice).numeroglobal - 1 End If miIndice = miIndice + 1 Wend End If End Sub Function borraElementos(ByVal X As Single, ByVal Y As Single) As Integer Dim auxiliar As Zona Dim iii As Integer Dim mix As Single Dim miy As Single Dim borrados As Integer mix = X / factor + Principal.xminima miy = (lineaSuelo * Principal.Picturedef.Height - Y) / factor borrados = 0 iii = 1 ' Almacena la posicion actual del array ZonasProhibidas If totalZonas > 0 Then ' Vemos de todas las zonas prohibidas cuantas están debajo del ratón. ' Se almacenan en posiciones y se lleva un contador en borrados. While (iii <= UBound(zonasProhibidas)) If (mix <= zonasProhibidas(iii).xmaxima And mix >= zonasProhibidas(iii).xminima And _ miy <= zonasProhibidas(iii).ymaxima And miy >= zonasProhibidas(iii).yminima And _ Principal.Picturedef.Point(X, Y) = 0) Then borrados = borrados + 1 If (borrados = 1) Then ReDim posiciones(1) posiciones(1) = iii Else ReDim Preserve posiciones(UBound(posiciones) + 1) posiciones(UBound(posiciones)) = iii End If End If iii = iii + 1 Wend If (borrados > 0) Then Dim posLocal As Integer Dim mensaje As String Dim boton As Integer Dim pos As Integer Dim posGlobal As Integer Dim tipo As String If (borrados = 1) Then If Principal.idioma = "Español" Then mensaje = "Atención, se va a borrar el elemento. ¿Desea continuar?" Else mensaje = "An element will be deleted. Continue?" End If Else If Principal.idioma = "Español" Then mensaje = "Atención, se van a borrar los elementos. ¿Desea continuar?" Else mensaje = "Some elements will be deleted. Continue?" End If End If boton = MsgBox(mensaje, vbYesNo + vbQuestion, "MitLoop") If (boton = 6) Then iii = 1 While (iii <= borrados) pos = posiciones(iii) If (mix <= zonasProhibidas(pos).xmaxima And _ mix >= zonasProhibidas(pos).xminima And _ miy <= zonasProhibidas(pos).ymaxima And _ miy >= zonasProhibidas(pos).yminima) Then posLocal = zonasProhibidas(pos).numero posGlobal = zonasProhibidas(pos).numeroglobal tipo = zonasProhibidas(pos).tipo Select Case zonasProhibidas(pos).tipo Dim ju As Integer Dim recorre As Integer Case Is = "linea" If (totalLineasHorizontales = 1) Then ' Actualizamos array local Erase LineasHorizontales ' Actualizamos contador local y global totalLineasHorizontales = 0 elementos = elementos - 1 ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Actualizamos los numeros globales de aquellos elementos posteriores al borrado actualiza_global posGlobal ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos actualiza_posiciones iii Else ' Actualizamos array local recorre = zonasProhibidas(pos).numero ' Movemos los elementos (los necesarios) una posicion hacia atrás en el array. While (recorre < UBound(LineasHorizontales)) LineasHorizontales(recorre) = LineasHorizontales(recorre + 1) LineasHorizontales(recorre).numero = _ LineasHorizontales(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array ReDim Preserve LineasHorizontales(UBound(LineasHorizontales) - 1) ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Renumeramos los elementos que lo necesiten actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global totalLineasHorizontales = totalLineasHorizontales - 1 elementos = elementos - 1 End If Case Is = "conductor" ' Borramos el conductor If (totalcond = 1) Then ' Actualizamos array local Erase conductoresPictureBox ' Actualizamos contador local y global totalcond = 0 elementos = elementos - 1 ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Actualizamos los numeros globales de aquellos elementos posteriores al borrado actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii Else ' Actualizamos array local recorre = zonasProhibidas(pos).numero ' Movemos los elementos (los necesarios) una posicion hacia atrás en el array. While (recorre < UBound(conductoresPictureBox)) conductoresPictureBox(recorre) = conductoresPictureBox(recorre + 1) conductoresPictureBox(recorre).numero = _ conductoresPictureBox(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array ReDim Preserve conductoresPictureBox(UBound(conductoresPictureBox) - 1) ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Renumeramos los elementos que lo necesiten actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global totalcond = totalcond - 1 elementos = elementos - 1 End If Case Is = "2condhoriz" ' Borramos el conjunto If (totalcondmultiples = 1) Then ' Actualizamos array local Erase conductoresMultiples totalcondmultiples = 0 ' Actualizamos contador global elementos = elementos - 1 ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Actualizamos los números globales de los eltos posteriores al borrado actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii Else ' Actualizamos array local recorre = zonasProhibidas(pos).numero ' Movemos los elementos una posicion hacia atrás en el array While (recorre < UBound(conductoresMultiples)) conductoresMultiples(recorre) = conductoresMultiples(recorre + 1) conductoresMultiples(recorre).numero = conductoresMultiples(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array para cargarnos el ultimo elemento ReDim Preserve conductoresMultiples(UBound(conductoresMultiples) - 1) ' Renumeramos los elementos que lo necesiten actualiza_global (posGlobal) ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global totalcondmultiples = totalcondmultiples - 1 elementos = elementos - 1 End If Case Is = "2condvert" ' Borramos el conjunto If (totalcondmultiples = 1) Then ' Actualizamos array local Erase conductoresMultiples totalcondmultiples = 0 ' Actualizamos contador global elementos = elementos - 1 ' Actualizamos los números globales de los eltos posteriores al borrado actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal Else ' Actualizamos el array local ju = UBound(conductoresMultiples) recorre = zonasProhibidas(pos).numero ' Posicion local del elemento ' Movemos los elementos una posicion hacia atrás en el array While (recorre < ju) conductoresMultiples(recorre) = conductoresMultiples(recorre + 1) conductoresMultiples(recorre).numero = conductoresMultiples(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array para cargarnos el ultimo elemento ReDim Preserve conductoresMultiples(UBound(conductoresMultiples) - 1) ' Eliminamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Renumeramos los elementos que lo necesiten actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global totalcondmultiples = totalcondmultiples - 1 elementos = elementos - 1 End If Case Is = "3cond" If (total3cond = 1) Then ' Actualizamos array local Erase tresConductores total3cond = 0 ' Actualizamos el contador global elementos = elementos - 1 ' Actualizamos los numeros globales necesarios actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Eliminamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal Else ' Actualizamos el array local recorre = zonasProhibidas(pos).numero ' Posicion local del elemento ' Movemos los elementos una posición hacia atrás en el array While (recorre < UBound(tresConductores)) tresConductores(recorre) = tresConductores(recorre + 1) tresConductores(recorre).numero = tresConductores(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array para cargarnos el último elemento. ReDim Preserve tresConductores(UBound(tresConductores) - 1) ' Eliminamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Renumeramos los elementos que lo necesiten actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global. total3cond = total3cond - 1 elementos = elementos - 1 End If Case Is = "4cond" ' Borramos el conjunto If (total4cond = 1) Then ' Actualizamos array local Erase cuatroConductores total4cond = 0 ' Actualizamos contador global elementos = elementos - 1 ' Actualizamos los números globales de los eltos posteriores al borrado actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal Else ' Actualizamos el array local recorre = zonasProhibidas(pos).numero ' Posicion local del elemento ' Movemos los elementos una posicion hacia atrás en el array While (recorre < UBound(cuatroConductores)) cuatroConductores(recorre) = cuatroConductores(recorre + 1) cuatroConductores(recorre).numero = cuatroConductores(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array para cargarnos el ultimo elemento. ReDim Preserve cuatroConductores(UBound(cuatroConductores) - 1) ' Eliminamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Renumeramos los elementos que lo necesiten actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global. total4cond = total4cond - 1 elementos = elementos - 1 End If Case Is = "normal" ' Borramos el conjunto If (totalnorm = 1) Then ' Actualizamos el array global Erase NormalesPictureBox totalnorm = 0 ' Actualizamos contador global elementos = elementos - 1 ' Actualizamos los números globales de los eltos posteriores al borrado actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal Else ' Actualizamos el array local recorre = zonasProhibidas(pos).numero ' Posicion local del elemento ' Movemos los elementos una posicion hacia atrás en el array While (recorre < UBound(NormalesPictureBox)) NormalesPictureBox(recorre) = NormalesPictureBox(recorre + 1) NormalesPictureBox(recorre).numero = NormalesPictureBox(recorre).numero - 1 recorre = recorre + 1 Wend ' Nos cargamos el último elemento ReDim Preserve NormalesPictureBox(UBound(NormalesPictureBox) - 1) ' Eliminamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Ajustamos los contadores local y global. totalnorm = totalnorm - 1 elementos = elementos - 1 End If Case Is = "Elevado" ' Borramos el obstáculo If (totalelevados = 1) Then ' Actualizamos array local Erase ElevadosPictureBox totalelevados = 0 ' Actualizamos contador global elementos = elementos - 1 ' Actualizamos los numeros globales de los eltos posteriores al borrado actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Nos cargamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal Else ' Actualizamos el array local recorre = zonasProhibidas(pos).numero ' Movemos los elementos una posicion hacia atrás en el array While (recorre < UBound(ElevadosPictureBox)) ElevadosPictureBox(recorre) = ElevadosPictureBox(recorre + 1) ElevadosPictureBox(recorre).numero = ElevadosPictureBox(recorre).numero - 1 recorre = recorre + 1 Wend ' Redimensionamos el array para cargarnos el ultimo elemento. ReDim Preserve ElevadosPictureBox(UBound(ElevadosPictureBox) - 1) ' Eliminamos la zona prohibida asociada borraEltoZonasProhibidas tipo, pos, posGlobal, posLocal ' Renumeramos los eltos que lo necesiten actualiza_global (posGlobal) ' Actualizamos el vector posiciones, restando 1 a los siguientes elementos. actualiza_posiciones iii ' Quitamos un elemento del contador local y el mismo del global totalelevados = totalelevados - 1 elementos = elementos - 1 End If End Select End If iii = iii + 1 Wend If (borrados = 1) Then mensaje = "Se ha borrado el elemento." Else mensaje = "Se han borrado " & borrados & " elementos." End If MsgBox mensaje, vbInformation, "MitLoop" End If Else MsgBox "No hay nada que borrar", vbInformation, "MitLoop" End If Else MsgBox "No hay nada que borrar", vbInformation, "MitLoop" End If borraElementos = borrados Module1.RedibujaImagen End Function Sub actualiza_posiciones(ByVal posic As Integer) ' Hay que actualizar correctamente el array posiciones Dim yy As Integer For yy = posic + 1 To UBound(posiciones) posiciones(yy) = posiciones(yy) - 1 Next yy End Sub Sub borraEltoZonasProhibidas(ByVal tipo As String, ByVal cont As Integer, _ ByVal posGlobal As Integer, ByVal posLocal As Integer) ' Comprobar si solo habia una zona en total o no. If ((totalcond + totalcondmultiples + total3cond + total4cond + _ totalnorm + totalelevados) = 0) Then Erase zonasProhibidas totalZonas = 0 Else ' Borramos el elemento While (cont < UBound(zonasProhibidas)) zonasProhibidas(cont) = zonasProhibidas(cont + 1) cont = cont + 1 Wend ' Quitamos una zona del contador totalZonas = totalZonas - 1 ' Redimensionamos el array de zonas prohibidas If UBound(zonasProhibidas) > 1 Then ReDim Preserve zonasProhibidas(UBound(zonasProhibidas) - 1) Else Erase zonasProhibidas End If ' Actualizamos la variable Local de los elementos, _ ' si eran posteriores al que se ha borrado cont = 1 While (cont <= UBound(zonasProhibidas)) If tipo = "2condvert" Or tipo = "2condhoriz" Then If ((zonasProhibidas(cont).tipo = "2condhoriz" Or _ zonasProhibidas(cont).tipo = "2condvert") And _ zonasProhibidas(cont).numero > posLocal) Then zonasProhibidas(cont).numero = zonasProhibidas(cont).numero - 1 End If ElseIf zonasProhibidas(cont).tipo = tipo And _ zonasProhibidas(cont).numero > posLocal Then zonasProhibidas(cont).numero = zonasProhibidas(cont).numero - 1 End If cont = cont + 1 Wend End If End Sub Function HayElemento(ByVal X As Single, ByVal Y As Single) Dim TipoElemento As String Dim i As Long Dim distancia1 As Long Dim distancia2 As Long Dim distancia3 As Long Dim distancia4 As Long Dim numeroElto As Integer Dim posicionACambiar As Integer Dim posLocal As Integer Dim posGlobal As Integer HaCancelado = False Y = Principal.Picturedef.Height * lineaSuelo - Y ' Comprobamos si existe algún objeto donde hemos pulsado ' Lineas Horizontales If (totalLineasHorizontales <> 0) Then i = UBound(LineasHorizontales) While (i <> 0) If (Abs(Y - LineasHorizontales(i).altura * factor) < 100) Then TipoObjetoSeleccionado = "linea horizontal" ' Cargamos el formulario Load FormLineaHorizontal ' Rellenamos los campos FormLineaHorizontal.Editando = "SI" FormLineaHorizontal.Text1.Text = CStr(LineasHorizontales(i).altura) If Principal.idioma = "Español" Then FormLineaHorizontal.Caption = "Editar Restricción Horizontal" Else FormLineaHorizontal.Caption = "Edit Horizontal Restriction" End If ' Mostramos el formulario FormLineaHorizontal.Show vbModal ' Ponemos a NO el flag de edicion FormLineaHorizontal.Editando = "NO" ' Y ahora grabamos los cambios en nuestro array, si no se dio a cancelar. If (Not HaCancelado) Then LineasHorizontales(i).altura = CSng(FormLineaHorizontal.Text1.Text) End If HaCancelado = False ' Cerramos el formulario de edicion Unload FormLineaHorizontal ' Finalmente redibujamos para ver los cambios Module1.RedibujaImagen End If i = i - 1 Wend End If ' Conductores simples If (totalcond <> 0) Then i = UBound(conductoresPictureBox) While (i <> 0) distancia1 = Sqr((X - (conductoresPictureBox(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - conductoresPictureBox(i).altura * factor) ^ 2) If (distancia1 <= 100) Then NumeroObjetoSeleccionado = i TipoObjetoSeleccionado = "conductor" ' Cargamos el formulario Load FormConductor ' Rellenamos los datos con los que corresponda. FormConductor.Editando = "SI" FormConductor.Text1.Text = CStr(conductoresPictureBox(i).coordx) FormConductor.Text2.Text = CStr(conductoresPictureBox(i).altura) FormConductor.Text3.Text = CStr(conductoresPictureBox(i).diametro) FormConductor.Text4.Text = CStr(conductoresPictureBox(i).intensidad) FormConductor.Text5.Text = CStr(conductoresPictureBox(i).desfase) If Principal.idioma = "Español" Then FormConductor.Caption = "Edite Conductor" Else FormConductor.Caption = "Edit Conductor" End If ' Mostramos el formulario correspondiente. FormConductor.Show vbModal ' Cuando lo cierren quitamos el flag de edición. FormConductor.Editando.Caption = "NO" ' Y ahora grabamos los cambios en nuestro array, si no se dio a cancelar. If (Not HaCancelado) Then conductoresPictureBox(i).coordx = CSng(FormConductor.Text1.Text) conductoresPictureBox(i).altura = CSng(FormConductor.Text2.Text) conductoresPictureBox(i).diametro = CSng(FormConductor.Text3.Text) conductoresPictureBox(i).intensidad = CSng(FormConductor.Text4.Text) conductoresPictureBox(i).desfase = CSng(FormConductor.Text5.Text) ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ conductoresPictureBox(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona As Zona With unazona .xminima = conductoresPictureBox(i).coordx - 0.25 .xmaxima = conductoresPictureBox(i).coordx + 0.25 .yminima = conductoresPictureBox(i).altura - 0.25 .ymaxima = conductoresPictureBox(i).altura + 0.25 .tipo = "conductor" .numero = conductoresPictureBox(i).numero .numeroglobal = conductoresPictureBox(i).numeroglobal End With zonasProhibidas(posicionACambiar) = unazona End If HaCancelado = False ' Cerramos el formulario de edicion Unload FormConductor ' Finalmente redibujamos para ver los cambios Module1.RedibujaImagen End If i = i - 1 Wend End If ' Ahora grupos de dos conductores If (totalcondmultiples <> 0) Then i = UBound(conductoresMultiples) While (i <> 0) distancia1 = Sqr((X - (conductoresMultiples(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - conductoresMultiples(i).coordy * factor) ^ 2) If (conductoresMultiples(i).tipo = "2condhoriz") Then distancia2 = Sqr((X - (conductoresMultiples(i).coordx - _ Principal.xminima + _ conductoresMultiples(i).separacion) * factor) ^ 2 + _ (Y - conductoresMultiples(i).coordy * factor) ^ 2) Else distancia2 = Sqr((X - (conductoresMultiples(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - (conductoresMultiples(i).coordy - _ conductoresMultiples(i).separacion) * factor) ^ 2) End If If (distancia1 < 100 Or distancia2 < 100) Then NumeroObjetoSeleccionado = i ' Segun sea horizontal o vertical se actúa. If (conductoresMultiples(i).tipo = "2condhoriz") Then TipoObjetoSeleccionado = "2condhoriz" Load Form2condhoriz Form2condhoriz.Editando = "SI" If Principal.idioma = "Español" Then Form2condhoriz.Caption = "Editar Fase Dúplex" Else Form2condhoriz.Caption = "Edit Duplex Phase" End If Form2condhoriz.Text1.Text = CStr(conductoresMultiples(i).coordx) Form2condhoriz.Text2.Text = CStr(conductoresMultiples(i).coordy) Form2condhoriz.Text3.Text = CStr(conductoresMultiples(i).separacion) Form2condhoriz.Text4.Text = CStr(conductoresMultiples(i).diametro1) Form2condhoriz.Text5.Text = CStr(conductoresMultiples(i).diametro2) Form2condhoriz.Text6.Text = CStr(conductoresMultiples(i).intensidad1) Form2condhoriz.Text8.Text = CStr(conductoresMultiples(i).desfase1) If (CStr(conductoresMultiples(i).linea) = "1") Then Form2condhoriz.Option1.Value = True Else Form2condhoriz.Option2.Value = True End If Form2condhoriz.Show vbModal Form2condhoriz.Editando = "NO" If (Not HaCancelado) Then conductoresMultiples(i).coordx = CSng(Form2condhoriz.Text1.Text) conductoresMultiples(i).coordy = CSng(Form2condhoriz.Text2.Text) conductoresMultiples(i).separacion = CSng(Form2condhoriz.Text3.Text) conductoresMultiples(i).diametro1 = CSng(Form2condhoriz.Text4.Text) conductoresMultiples(i).diametro2 = CSng(Form2condhoriz.Text5.Text) conductoresMultiples(i).intensidad1 = CSng(Form2condhoriz.Text6.Text) conductoresMultiples(i).desfase1 = CSng(Form2condhoriz.Text8.Text) If (Form2condhoriz.Option1.Value = 1) Then conductoresMultiples(i).linea = 1 Else conductoresMultiples(i).linea = 2 End If ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ conductoresMultiples(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona2 As Zona With unazona2 .xminima = conductoresMultiples(i).coordx - 0.25 .xmaxima = conductoresMultiples(i).coordx + conductoresMultiples(i).separacion + 0.25 .yminima = conductoresMultiples(i).coordy - 0.25 .ymaxima = conductoresMultiples(i).coordy + 0.25 .numero = conductoresMultiples(i).numero .numeroglobal = conductoresMultiples(i).numeroglobal .tipo = "2condhoriz" End With zonasProhibidas(posicionACambiar) = unazona2 End If HaCancelado = False ' Cerramos el formulario Unload Form2condhoriz Else TipoObjetoSeleccionado = "2condvert" Load Form2condvert Form2condvert.Editando = "SI" If Principal.idioma = "Español" Then Form2condvert.Caption = "Editar Fase Dúplex" Else Form2condvert.Caption = "Edit Duplex Phase" End If Form2condvert.Text1.Text = CStr(conductoresMultiples(i).coordx) Form2condvert.Text2.Text = CStr(conductoresMultiples(i).coordy) Form2condvert.Text3.Text = CStr(conductoresMultiples(i).separacion) Form2condvert.Text4.Text = CStr(conductoresMultiples(i).diametro1) Form2condvert.Text5.Text = CStr(conductoresMultiples(i).diametro2) Form2condvert.Text6.Text = CStr(conductoresMultiples(i).intensidad1) Form2condvert.Text8.Text = CStr(conductoresMultiples(i).desfase1) If (CStr(conductoresMultiples(i).linea) = "1") Then Form2condvert.Option1.Value = True Else Form2condvert.Option2.Value = True End If Form2condvert.Show vbModal Form2condvert.Editando = "NO" If (Not HaCancelado) Then conductoresMultiples(i).coordx = CSng(Form2condvert.Text1.Text) conductoresMultiples(i).coordy = CSng(Form2condvert.Text2.Text) conductoresMultiples(i).separacion = CSng(Form2condvert.Text3.Text) conductoresMultiples(i).diametro1 = CSng(Form2condvert.Text4.Text) conductoresMultiples(i).diametro2 = CSng(Form2condvert.Text5.Text) conductoresMultiples(i).intensidad1 = CSng(Form2condvert.Text6.Text) conductoresMultiples(i).desfase1 = CSng(Form2condvert.Text8.Text) If (Form2condvert.Option1.Value = True) Then conductoresMultiples(i).linea = 1 Else conductoresMultiples(i).linea = 2 End If ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ conductoresMultiples(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona3 As Zona With unazona3 .xminima = conductoresMultiples(i).coordx - 0.25 .xmaxima = conductoresMultiples(i).coordx + 0.25 .yminima = conductoresMultiples(i).coordy - 0.25 .ymaxima = conductoresMultiples(i).coordy + conductoresMultiples(i).separacion + 0.25 .tipo = "2condvert" .numero = conductoresMultiples(i).numero .numeroglobal = conductoresMultiples(i).numeroglobal End With zonasProhibidas(posicionACambiar) = unazona3 End If HaCancelado = False ' Cerramos el formulario Unload Form2condvert End If ' Redibujamos para ver los cambios Module1.RedibujaImagen End If i = i - 1 Wend End If ' Ahora grupos de 3 conductores If (total3cond <> 0) Then i = UBound(tresConductores) While (i <> 0) If tresConductores(i).unoarriba = True Then distancia1 = Sqr((X - (tresConductores(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - tresConductores(i).coordy * factor) ^ 2) distancia2 = Sqr((X - (tresConductores(i).coordx - _ Principal.xminima + tresConductores(i).d) * factor) ^ 2 + _ (Y - tresConductores(i).coordy * factor) ^ 2) distancia3 = Sqr((X - (tresConductores(i).coordx - _ Principal.xminima + tresConductores(i).d / 2) * factor) ^ 2 + _ (Y - (tresConductores(i).coordy + _ tresConductores(i).h) * factor) ^ 2) Else distancia1 = Sqr((X - (tresConductores(i).coordx - _ tresConductores(i).d / 2 - Principal.xminima) * factor) ^ 2 + _ (Y - (tresConductores(i).coordy + tresConductores(i).h) * factor) ^ 2) distancia2 = Sqr((X - (tresConductores(i).coordx - _ Principal.xminima + tresConductores(i).d / 2) * factor) ^ 2 + _ (Y - (tresConductores(i).coordy + tresConductores(i).h) * factor) ^ 2) distancia3 = Sqr((X - (tresConductores(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - tresConductores(i).coordy * factor) ^ 2) End If If (distancia1 < 100 Or distancia2 < 100 Or distancia3 < 100) Then If tresConductores(i).unoarriba = True Then Load Form3cond1 Form3cond1.Editando = "SI" If Principal.idioma = "Español" Then Form3cond1.Caption = "Editar Fase Tríplex" Else Form3cond1.Caption = "Edit Triplex Phase" End If Form3cond1.Text1.Text = CStr(tresConductores(i).coordx) Form3cond1.Text2.Text = CStr(tresConductores(i).coordy) Form3cond1.Text3.Text = CStr(tresConductores(i).d) Form3cond1.Text4.Text = CStr(tresConductores(i).h) Form3cond1.Text5.Text = CStr(tresConductores(i).diametro1) Form3cond1.Text6.Text = CStr(tresConductores(i).diametro2) Form3cond1.Text7.Text = CStr(tresConductores(i).diametro3) Form3cond1.Text8.Text = CStr(tresConductores(i).intensidad) Form3cond1.Text9.Text = CStr(tresConductores(i).desfase) If (CStr(tresConductores(i).linea) = "1") Then Form3cond1.Option1.Value = True Else Form3cond1.Option2.Value = True End If Form3cond1.Show vbModal Form3cond1.Editando = "NO" If (Not HaCancelado) Then tresConductores(i).coordx = CSng(Form3cond1.Text1.Text) tresConductores(i).coordy = CSng(Form3cond1.Text2.Text) tresConductores(i).d = CSng(Form3cond1.Text3.Text) tresConductores(i).h = CSng(Form3cond1.Text4.Text) tresConductores(i).diametro1 = CSng(Form3cond1.Text5.Text) tresConductores(i).diametro2 = CSng(Form3cond1.Text6.Text) tresConductores(i).diametro3 = CSng(Form3cond1.Text7.Text) tresConductores(i).intensidad = CSng(Form3cond1.Text8.Text) tresConductores(i).desfase = CSng(Form3cond1.Text9.Text) If (Form3cond1.Option1.Value = True) Then tresConductores(i).linea = 1 Else tresConductores(i).linea = 2 End If ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ tresConductores(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona31 As Zona With unazona31 .xminima = tresConductores(i).coordx - 0.25 .xmaxima = tresConductores(i).coordx + tresConductores(i).d + 0.25 .yminima = tresConductores(i).coordy - 0.25 .ymaxima = tresConductores(i).coordy + tresConductores(i).h + 0.25 .tipo = "3cond" .numero = tresConductores(i).numero .numeroglobal = tresConductores(i).numeroglobal End With zonasProhibidas(posicionACambiar) = unazona31 End If HaCancelado = False ' Cerramos el formulario Unload Form3cond1 Else Load Form3cond2 Form3cond2.Editando = "SI" If Principal.idioma = "Español" Then Form3cond2.Caption = "Editar Fase Tríplex" Else Form3cond2.Caption = "Edit Triplex Phase" End If Form3cond2.Text1.Text = CStr(tresConductores(i).coordx) Form3cond2.Text2.Text = CStr(tresConductores(i).coordy) Form3cond2.Text3.Text = CStr(tresConductores(i).d) Form3cond2.Text4.Text = CStr(tresConductores(i).h) Form3cond2.Text5.Text = CStr(tresConductores(i).diametro1) Form3cond2.Text6.Text = CStr(tresConductores(i).diametro2) Form3cond2.Text7.Text = CStr(tresConductores(i).diametro3) Form3cond2.Text8.Text = CStr(tresConductores(i).intensidad) Form3cond2.Text9.Text = CStr(tresConductores(i).desfase) If (CStr(tresConductores(i).linea) = "1") Then Form3cond2.Option1.Value = True Else Form3cond2.Option2.Value = True End If Form3cond2.Show vbModal Form3cond2.Editando = "NO" If (Not HaCancelado) Then tresConductores(i).coordx = CSng(Form3cond2.Text1.Text) tresConductores(i).coordy = CSng(Form3cond2.Text2.Text) tresConductores(i).d = CSng(Form3cond2.Text3.Text) tresConductores(i).h = CSng(Form3cond2.Text4.Text) tresConductores(i).diametro1 = CSng(Form3cond2.Text5.Text) tresConductores(i).diametro2 = CSng(Form3cond2.Text6.Text) tresConductores(i).diametro3 = CSng(Form3cond2.Text7.Text) tresConductores(i).intensidad = CSng(Form3cond2.Text8.Text) tresConductores(i).desfase = CSng(Form3cond2.Text9.Text) If (Form3cond2.Option1.Value = True) Then tresConductores(i).linea = 1 Else tresConductores(i).linea = 2 End If ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ tresConductores(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona32 As Zona With unazona32 .xminima = tresConductores(i).coordx - 0.25 .xmaxima = tresConductores(i).coordx + tresConductores(i).d + 0.25 .yminima = tresConductores(i).coordy - 0.25 .ymaxima = tresConductores(i).coordy + tresConductores(i).h + 0.25 .tipo = "3cond" .numero = tresConductores(i).numero .numeroglobal = tresConductores(i).numeroglobal End With zonasProhibidas(posicionACambiar) = unazona32 End If HaCancelado = False ' Cerramos el formulario Unload Form3cond2 End If Module1.RedibujaImagen End If i = i - 1 Wend End If ' Ahora grupos de 4 conductores If (total4cond <> 0) Then i = UBound(cuatroConductores) While (i <> 0) distancia1 = Sqr((X - (cuatroConductores(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - (cuatroConductores(i).coordy - _ cuatroConductores(i).distv) * factor) ^ 2) distancia2 = Sqr((X - (cuatroConductores(i).coordx - _ Principal.xminima + cuatroConductores(i).disth) * factor) ^ 2 + _ (Y - (cuatroConductores(i).coordy - _ cuatroConductores(i).distv) * factor) ^ 2) distancia3 = Sqr((X - (cuatroConductores(i).coordx - _ Principal.xminima) * factor) ^ 2 + _ (Y - cuatroConductores(i).coordy * factor) ^ 2) distancia4 = Sqr((X - (cuatroConductores(i).coordx - _ Principal.xminima + cuatroConductores(i).disth) * factor) ^ 2 + _ (Y - cuatroConductores(i).coordy * factor) ^ 2) If (distancia1 < 100 Or distancia2 < 100 Or _ distancia3 < 100 Or distancia4 < 100) Then Load Form4cond Form4cond.Editando = "SI" If Principal.idioma = "Español" Then Form4cond.Caption = "Editar Fase Cuádruplex" Else Form4cond.Caption = "Edit Cuadruplex Phase" End If Form4cond.Text1.Text = CStr(cuatroConductores(i).coordx) Form4cond.Text2.Text = CStr(cuatroConductores(i).coordy) Form4cond.Text3.Text = CStr(cuatroConductores(i).disth) Form4cond.Text4.Text = CStr(cuatroConductores(i).distv) Form4cond.Text5.Text = CStr(cuatroConductores(i).diametro1) Form4cond.Text6.Text = CStr(cuatroConductores(i).diametro2) Form4cond.Text7.Text = CStr(cuatroConductores(i).diametro3) Form4cond.Text8.Text = CStr(cuatroConductores(i).diametro4) Form4cond.Text9.Text = CStr(cuatroConductores(i).intensidad1) Form4cond.Text13.Text = CStr(cuatroConductores(i).desfase1) If (CStr(cuatroConductores(i).linea) = "1") Then Form4cond.Option1.Value = True Else Form4cond.Option2.Value = True End If Form4cond.Show vbModal Form4cond.Editando = "NO" If (Not HaCancelado) Then cuatroConductores(i).coordx = CSng(Form4cond.Text1.Text) cuatroConductores(i).coordy = CSng(Form4cond.Text2.Text) cuatroConductores(i).disth = CSng(Form4cond.Text3.Text) cuatroConductores(i).distv = CSng(Form4cond.Text4.Text) cuatroConductores(i).diametro1 = CSng(Form4cond.Text5.Text) cuatroConductores(i).diametro2 = CSng(Form4cond.Text6.Text) cuatroConductores(i).diametro3 = CSng(Form4cond.Text7.Text) cuatroConductores(i).diametro4 = CSng(Form4cond.Text8.Text) cuatroConductores(i).intensidad1 = CSng(Form4cond.Text9.Text) cuatroConductores(i).desfase1 = CSng(Form4cond.Text13.Text) If (Form4cond.Option1.Value = True) Then cuatroConductores(i).linea = 1 Else cuatroConductores(i).linea = 2 End If ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ cuatroConductores(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona4 As Zona With unazona4 .xminima = cuatroConductores(i).coordx - 0.25 .xmaxima = cuatroConductores(i).coordx + cuatroConductores(i).disth + 0.25 .yminima = cuatroConductores(i).coordy - 0.25 .ymaxima = cuatroConductores(i).coordy + cuatroConductores(i).distv + 0.25 .tipo = "4cond" .numero = cuatroConductores(i).numero .numeroglobal = cuatroConductores(i).numeroglobal End With zonasProhibidas(posicionACambiar) = unazona4 End If HaCancelado = False ' Cerramos el formulario Unload Form4cond Module1.RedibujaImagen End If i = i - 1 Wend End If ' Ahora obstaculos normales If (totalnorm <> 0) Then i = UBound(NormalesPictureBox) While (i <> 0) If ((X - (NormalesPictureBox(i).coordx - Principal.xminima) _ * factor) > 0 And (X - (NormalesPictureBox(i).coordx - _ Principal.xminima + NormalesPictureBox(i).anchura) * factor < 0) _ And Y <= NormalesPictureBox(i).altura * factor) Then Load FormObstaculoNormal FormObstaculoNormal.Editando = "SI" If Principal.idioma = "Español" Then Form2condhoriz.Caption = "Editar Obstáculo Normal" Else Form2condhoriz.Caption = "Edit Normal Restriction" End If FormObstaculoNormal.Text2.Text = CStr(NormalesPictureBox(i).coordx) FormObstaculoNormal.Text3.Text = CStr(NormalesPictureBox(i).altura) FormObstaculoNormal.Text4.Text = CStr(NormalesPictureBox(i).anchura) FormObstaculoNormal.Text5.Text = CStr(NormalesPictureBox(i).arriba) FormObstaculoNormal.Text6.Text = CStr(NormalesPictureBox(i).izquierda) FormObstaculoNormal.Text1.Text = CStr(NormalesPictureBox(i).derecha) FormObstaculoNormal.Show vbModal FormObstaculoNormal.Editando = "NO" If (Not HaCancelado) Then NormalesPictureBox(i).coordx = CSng(FormObstaculoNormal.Text2.Text) NormalesPictureBox(i).altura = CSng(FormObstaculoNormal.Text3.Text) NormalesPictureBox(i).anchura = CSng(FormObstaculoNormal.Text4.Text) NormalesPictureBox(i).arriba = CSng(FormObstaculoNormal.Text5.Text) NormalesPictureBox(i).izquierda = CSng(FormObstaculoNormal.Text6.Text) NormalesPictureBox(i).derecha = CSng(FormObstaculoNormal.Text1.Text) ' Actualizamos el array zonasProhibidas ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ NormalesPictureBox(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim unazona5 As Zona With unazona5 .xminima = NormalesPictureBox(i).coordx .xmaxima = NormalesPictureBox(i).coordx + NormalesPictureBox(i).anchura .yminima = 0 .ymaxima = NormalesPictureBox(i).altura .tipo = "Normal" .numero = NormalesPictureBox(i).numero .numeroglobal = NormalesPictureBox(i).numeroglobal End With zonasProhibidas(posicionACambiar) = unazona5 End If HaCancelado = False Unload FormObstaculoNormal Module1.RedibujaImagen End If i = i - 1 Wend End If ' Ahora obstaculos elevados (normales y tipo I) If (totalelevados <> 0) Then i = UBound(ElevadosPictureBox) While (i <> 0) If ((X >= ((ElevadosPictureBox(i).coordx - _ Principal.xminima) * factor) And Y >= ((ElevadosPictureBox(i).inferior _ + ElevadosPictureBox(i).distanciaAlSuelo) * factor) _ And X <= ((ElevadosPictureBox(i).coordx - Principal.xminima + _ ElevadosPictureBox(i).anchura + ElevadosPictureBox(i).dcha) * factor) And _ Y <= ((ElevadosPictureBox(i).distanciaAlSuelo + ElevadosPictureBox(i).inferior + _ ElevadosPictureBox(i).altura) * factor))) Then If (ElevadosPictureBox(i).apoyado = False) Then Load FormObstaculoElevado FormObstaculoElevado.Editando = "SI" If Principal.idioma = "Español" Then Form2condhoriz.Caption = "Editar Obstáculo Elevado" Else Form2condhoriz.Caption = "Edit Lifted Obstacle" End If FormObstaculoElevado.Text1.Text = CStr(ElevadosPictureBox(i).coordx) FormObstaculoElevado.Text2.Text = CStr(ElevadosPictureBox(i).altura) FormObstaculoElevado.Text3.Text = CStr(ElevadosPictureBox(i).anchura) FormObstaculoElevado.Text4.Text = CStr(ElevadosPictureBox(i).distanciaAlSuelo) FormObstaculoElevado.Text5.Text = CStr(ElevadosPictureBox(i).alturaprohibida) FormObstaculoElevado.Text6.Text = CStr(ElevadosPictureBox(i).izda) FormObstaculoElevado.Text7.Text = CStr(ElevadosPictureBox(i).dcha) FormObstaculoElevado.Text8.Text = CStr(ElevadosPictureBox(i).inferior) FormObstaculoElevado.Show vbModal FormObstaculoElevado.Editando = "NO" If (Not HaCancelado) Then ElevadosPictureBox(i).coordx = CSng(FormObstaculoElevado.Text1.Text) ElevadosPictureBox(i).altura = CSng(FormObstaculoElevado.Text2.Text) ElevadosPictureBox(i).anchura = CSng(FormObstaculoElevado.Text3.Text) ElevadosPictureBox(i).distanciaAlSuelo = CSng(FormObstaculoElevado.Text4.Text) ElevadosPictureBox(i).alturaprohibida = CSng(FormObstaculoElevado.Text5.Text) ElevadosPictureBox(i).izda = CSng(FormObstaculoElevado.Text6.Text) ElevadosPictureBox(i).dcha = CSng(FormObstaculoElevado.Text7.Text) ElevadosPictureBox(i).inferior = CSng(FormObstaculoElevado.Text8.Text) ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ ElevadosPictureBox(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim miZona As Zona With miZona .xminima = ElevadosPictureBox(i).coordx .xmaxima = ElevadosPictureBox(i).coordx + ElevadosPictureBox(i).anchura .yminima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo .ymaxima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo + _ ElevadosPictureBox(i).altura .tipo = "Elevado" .numero = ElevadosPictureBox(i).numero .numeroglobal = ElevadosPictureBox(i).numeroglobal End With zonasProhibidas(posicionACambiar) = miZona End If Unload FormObstaculoElevado Else Load FormObstaculoElevadoI FormObstaculoElevadoI.Editando = "SI" If Principal.idioma = "Español" Then Form2condhoriz.Caption = "Editar Obstáculo Elevado" Else Form2condhoriz.Caption = "Edit Lifted Restriction" End If FormObstaculoElevadoI.Text1.Text = CStr(ElevadosPictureBox(i).coordx) FormObstaculoElevadoI.Text2.Text = CStr(ElevadosPictureBox(i).altura) FormObstaculoElevadoI.Text3.Text = CStr(ElevadosPictureBox(i).anchura) FormObstaculoElevadoI.Text5.Text = CStr(ElevadosPictureBox(i).alturaprohibida) FormObstaculoElevadoI.Text7.Text = CStr(ElevadosPictureBox(i).izda) FormObstaculoElevadoI.Text8.Text = CStr(ElevadosPictureBox(i).dcha) FormObstaculoElevadoI.Text6.Text = CStr(ElevadosPictureBox(i).inferior) FormObstaculoElevadoI.Show vbModal FormObstaculoElevadoI.Editando = "NO" If (Not HaCancelado) Then ElevadosPictureBox(i).coordx = CSng(FormObstaculoElevadoI.Text1.Text) ElevadosPictureBox(i).altura = CSng(FormObstaculoElevadoI.Text2.Text) ElevadosPictureBox(i).anchura = CSng(FormObstaculoElevadoI.Text3.Text) ElevadosPictureBox(i).distanciaAlSuelo = 0 ElevadosPictureBox(i).alturaprohibida = CSng(FormObstaculoElevadoI.Text5.Text) ElevadosPictureBox(i).izda = CSng(FormObstaculoElevadoI.Text7.Text) ElevadosPictureBox(i).dcha = CSng(FormObstaculoElevadoI.Text8.Text) ElevadosPictureBox(i).inferior = CSng(FormObstaculoElevadoI.Text6.Text) ' Actualizamos el array zonasProhibidas ' Buscamos el elemento del array que se corresponde con nuestro objeto numeroElto = 1 posicionACambiar = 0 While (numeroElto <= UBound(zonasProhibidas)) If zonasProhibidas(numeroElto).numeroglobal = _ ElevadosPictureBox(i).numeroglobal Then posicionACambiar = numeroElto End If numeroElto = numeroElto + 1 Wend Dim miZona2 As Zona With miZona2 .xminima = ElevadosPictureBox(i).coordx .xmaxima = ElevadosPictureBox(i).coordx + ElevadosPictureBox(i).anchura .yminima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo .ymaxima = ElevadosPictureBox(i).inferior + ElevadosPictureBox(i).distanciaAlSuelo + _ ElevadosPictureBox(i).altura .tipo = "Elevado" .numero = ElevadosPictureBox(i).numero .numeroglobal = ElevadosPictureBox(i).numeroglobal End With zonasProhibidas(posicionACambiar) = miZona2 End If Unload FormObstaculoElevadoI End If HaCancelado = False Module1.RedibujaImagen End If i = i - 1 Wend End If ' Lazo pasivo If totalLazos > 0 Then Dim pisa As Boolean i = UBound(Lazos) While (i > 0) If (Lazos(i).pasivo = True) Then Select Case Lazos(i).tipo Case Is = "2" ' Lazo 2 conductores, pasivo. distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y1 * factor - Y) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y2 * factor - Y) ^ 2) If distancia1 < 150 Or distancia2 < 150 Then Load FormLazoPasivo FormLazoPasivo.Editando = "SI" If Principal.idioma = "Español" Then FormLazoPasivo.Caption = "Editar Lazo Pasivo" Else FormLazoPasivo.Caption = "Edit Passive Loop" End If ' Ponemos los datos del seleccionado FormLazoPasivo.Text1.Enabled = True FormLazoPasivo.Text1.Text = CStr(Lazos(i).x1) FormLazoPasivo.Text2.Enabled = True FormLazoPasivo.Text2.Text = CStr(Lazos(i).y1) FormLazoPasivo.Text3.Enabled = True FormLazoPasivo.Text3.Text = CStr(Lazos(i).x2) FormLazoPasivo.Text4.Enabled = True FormLazoPasivo.Text4.Text = CStr(Lazos(i).y2) FormLazoPasivo.Text5.Enabled = False FormLazoPasivo.Text5.Text = "N/A" FormLazoPasivo.Text6.Enabled = False FormLazoPasivo.Text6.Text = "N/A" FormLazoPasivo.Text7.Enabled = False FormLazoPasivo.Text7.Text = "N/A" FormLazoPasivo.Text8.Enabled = False FormLazoPasivo.Text8.Text = "N/A" FormLazoPasivo.Text15.Text = Lazos(i).nombreConductor FormLazoPasivo.Text16.Text = Lazos(i).RConductor FormLazoPasivo.Text17.Text = Lazos(i).rgmConductor FormLazoPasivo.Text18.Text = Lazos(i).longitud FormLazoPasivo.Text19.Text = Lazos(i).costeConductor FormLazoPasivo.Text20.Text = Lazos(i).nombrePoste FormLazoPasivo.Text21.Text = Lazos(i).alturaPoste FormLazoPasivo.Text22.Text = Lazos(i).costePoste If Lazos(i).usaFc = False Then FormLazoPasivo.Option1.Value = True FormLazoPasivo.Text9.Enabled = True FormLazoPasivo.Text9.Text = CStr(Lazos(i).xc1) FormLazoPasivo.Text10.Enabled = False FormLazoPasivo.Text10.Text = "N/A" FormLazoPasivo.Text11.Enabled = False FormLazoPasivo.Text11.Text = "N/A" FormLazoPasivo.Text12.Enabled = False FormLazoPasivo.Text12.Text = "N/A" FormLazoPasivo.Text13.Enabled = False FormLazoPasivo.Text13.Text = "N/A" FormLazoPasivo.Text14.Enabled = False FormLazoPasivo.Text14.Text = "N/A" Else FormLazoPasivo.Option2.Value = True FormLazoPasivo.Text9.Enabled = False FormLazoPasivo.Text9.Text = "N/A" FormLazoPasivo.Text10.Enabled = False FormLazoPasivo.Text10.Text = "N/A" FormLazoPasivo.Text11.Enabled = False FormLazoPasivo.Text11.Text = "N/A" FormLazoPasivo.Text12.Enabled = True FormLazoPasivo.Text12.Text = CStr(Lazos(i).xc1) FormLazoPasivo.Text13.Enabled = False FormLazoPasivo.Text13.Text = "N/A" FormLazoPasivo.Text14.Enabled = False FormLazoPasivo.Text14.Text = "N/A" End If FormLazoPasivo.Show vbModal If Not HaCancelado Then Lazos(i).x1 = FormLazoPasivo.Text1.Text Lazos(i).y1 = FormLazoPasivo.Text2.Text Lazos(i).x2 = FormLazoPasivo.Text3.Text Lazos(i).y2 = FormLazoPasivo.Text4.Text If FormLazoPasivo.Option1.Value = True Then Lazos(i).usaFc = False Lazos(i).xc1 = FormLazoPasivo.Text9.Text Else Lazos(i).usaFc = True Lazos(i).xc1 = FormLazoPasivo.Text12.Text End If Lazos(i).nombreConductor = FormLazoPasivo.Text15.Text Lazos(i).RConductor = FormLazoPasivo.Text16.Text Lazos(i).rgmConductor = FormLazoPasivo.Text17.Text Lazos(i).longitud = FormLazoPasivo.Text18.Text Lazos(i).costeConductor = FormLazoPasivo.Text19.Text Lazos(i).nombrePoste = FormLazoPasivo.Text20.Text Lazos(i).alturaPoste = FormLazoPasivo.Text21.Text Lazos(i).costePoste = FormLazoPasivo.Text22.Text Unload FormLazoPasivo Unload SelLazo End If RedibujaImagen End If Case Is = "3" ' Lazo 3 conductores, pasivo. distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y1 * factor - Y) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y2 * factor - Y) ^ 2) distancia3 = Sqr(((Lazos(i).x3 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y3 * factor - Y) ^ 2) If distancia1 < 150 Or distancia2 < 150 Or distancia3 < 150 Then Load FormLazoPasivo FormLazoPasivo.Editando = "SI" If Principal.idioma = "Español" Then FormLazoPasivo.Caption = "Editar Lazo Pasivo" Else FormLazoPasivo.Caption = "Edit Passive Loop" End If ' Ponemos los datos del seleccionado FormLazoPasivo.Text1.Enabled = True FormLazoPasivo.Text1.Text = CStr(Lazos(i).x1) FormLazoPasivo.Text2.Enabled = True FormLazoPasivo.Text2.Text = CStr(Lazos(i).y1) FormLazoPasivo.Text3.Enabled = True FormLazoPasivo.Text3.Text = CStr(Lazos(i).x2) FormLazoPasivo.Text4.Enabled = True FormLazoPasivo.Text4.Text = CStr(Lazos(i).y2) FormLazoPasivo.Text5.Enabled = True FormLazoPasivo.Text5.Text = CStr(Lazos(i).x3) FormLazoPasivo.Text6.Enabled = True FormLazoPasivo.Text6.Text = CStr(Lazos(i).y3) FormLazoPasivo.Text7.Enabled = False FormLazoPasivo.Text7.Text = "N/A" FormLazoPasivo.Text8.Enabled = False FormLazoPasivo.Text8.Text = "N/A" If Lazos(i).usaFc = True Then FormLazoPasivo.Option2.Value = True FormLazoPasivo.Text12.Enabled = True FormLazoPasivo.Text12.Text = Lazos(i).xc1 FormLazoPasivo.Text12.Enabled = True FormLazoPasivo.Text13.Text = Lazos(i).xc2 FormLazoPasivo.Text14.Enabled = True FormLazoPasivo.Text14.Text = Lazos(i).xc3 FormLazoPasivo.Text9.Enabled = False FormLazoPasivo.Text9.Text = "N/A" FormLazoPasivo.Text10.Enabled = False FormLazoPasivo.Text10.Text = "N/A" FormLazoPasivo.Text11.Enabled = False FormLazoPasivo.Text11.Text = "N/A" Else FormLazoPasivo.Option1.Value = True FormLazoPasivo.Text12.Enabled = False FormLazoPasivo.Text12.Text = "N/A" FormLazoPasivo.Text12.Enabled = False FormLazoPasivo.Text13.Text = "N/A" FormLazoPasivo.Text14.Enabled = False FormLazoPasivo.Text14.Text = "N/A" FormLazoPasivo.Text9.Enabled = True FormLazoPasivo.Text9.Text = Lazos(i).xc1 FormLazoPasivo.Text10.Enabled = True FormLazoPasivo.Text10.Text = Lazos(i).xc2 FormLazoPasivo.Text11.Enabled = True FormLazoPasivo.Text11.Text = Lazos(i).xc3 End If FormLazoPasivo.Text15.Text = Lazos(i).nombreConductor FormLazoPasivo.Text16.Text = Lazos(i).RConductor FormLazoPasivo.Text17.Text = Lazos(i).rgmConductor FormLazoPasivo.Text18.Text = Lazos(i).longitud FormLazoPasivo.Text19.Text = Lazos(i).costeConductor FormLazoPasivo.Text20.Text = Lazos(i).nombrePoste FormLazoPasivo.Text21.Text = Lazos(i).alturaPoste FormLazoPasivo.Text22.Text = Lazos(i).costePoste FormLazoPasivo.Show vbModal FormLazoPasivo.Editando = "NO" If Not HaCancelado Then Lazos(i).x1 = FormLazoPasivo.Text1.Text Lazos(i).y1 = FormLazoPasivo.Text2.Text Lazos(i).x2 = FormLazoPasivo.Text3.Text Lazos(i).y2 = FormLazoPasivo.Text4.Text Lazos(i).x3 = FormLazoPasivo.Text5.Text Lazos(i).y3 = FormLazoPasivo.Text6.Text If FormLazoPasivo.Option1.Value = True Then Lazos(i).usaFc = False Lazos(i).xc1 = FormLazoPasivo.Text9.Text Else Lazos(i).usaFc = True Lazos(i).xc1 = FormLazoPasivo.Text12.Text End If Lazos(i).nombreConductor = FormLazoPasivo.Text15.Text Lazos(i).RConductor = FormLazoPasivo.Text16.Text Lazos(i).rgmConductor = FormLazoPasivo.Text17.Text Lazos(i).longitud = FormLazoPasivo.Text18.Text Lazos(i).costeConductor = FormLazoPasivo.Text19.Text Lazos(i).nombrePoste = FormLazoPasivo.Text20.Text Lazos(i).alturaPoste = FormLazoPasivo.Text21.Text Lazos(i).costePoste = FormLazoPasivo.Text22.Text Unload FormLazoPasivo Unload SelLazo End If RedibujaImagen End If Case Is = "4" ' Lazo 4 conductores, pasivo. distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y1 * factor - Y) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y2 * factor - Y) ^ 2) distancia3 = Sqr(((Lazos(i).x3 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y3 * factor - Y) ^ 2) distancia4 = Sqr(((Lazos(i).x4 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y4 * factor - Y) ^ 2) If distancia1 < 150 Or distancia2 < 150 Or distancia3 < 150 Or _ distancia4 < 150 Then Load FormLazoPasivo FormLazoPasivo.Editando = "SI" If Principal.idioma = "Español" Then FormLazoPasivo.Caption = "Editar Lazo Pasivo" Else FormLazoPasivo.Caption = "Edit Passive Loop" End If ' Ponemos los datos del seleccionado FormLazoPasivo.Text1.Enabled = True FormLazoPasivo.Text1.Text = CStr(Lazos(i).x1) FormLazoPasivo.Text2.Enabled = True FormLazoPasivo.Text2.Text = CStr(Lazos(i).y1) FormLazoPasivo.Text3.Enabled = True FormLazoPasivo.Text3.Text = CStr(Lazos(i).x2) FormLazoPasivo.Text4.Enabled = True FormLazoPasivo.Text4.Text = CStr(Lazos(i).y2) FormLazoPasivo.Text5.Enabled = True FormLazoPasivo.Text5.Text = CStr(Lazos(i).x3) FormLazoPasivo.Text6.Enabled = True FormLazoPasivo.Text6.Text = CStr(Lazos(i).y3) FormLazoPasivo.Text7.Enabled = True FormLazoPasivo.Text7.Text = CStr(Lazos(i).x4) FormLazoPasivo.Text8.Enabled = True FormLazoPasivo.Text8.Text = CStr(Lazos(i).y4) If Lazos(i).usaFc = True Then FormLazoPasivo.Option2.Value = True FormLazoPasivo.Text9.Enabled = False FormLazoPasivo.Text9.Text = "N/A" FormLazoPasivo.Text10.Enabled = False FormLazoPasivo.Text10.Text = "N/A" FormLazoPasivo.Text11.Enabled = False FormLazoPasivo.Text11.Text = "N/A" FormLazoPasivo.Text12.Enabled = True FormLazoPasivo.Text12.Text = Lazos(i).xc1 FormLazoPasivo.Text13.Enabled = False FormLazoPasivo.Text13.Text = "N/A" FormLazoPasivo.Text14.Enabled = True FormLazoPasivo.Text14.Text = Lazos(i).xc3 Else FormLazoPasivo.Option1.Value = True FormLazoPasivo.Text9.Enabled = True FormLazoPasivo.Text9.Text = Lazos(i).xc1 FormLazoPasivo.Text10.Enabled = False FormLazoPasivo.Text10.Text = "N/A" FormLazoPasivo.Text11.Enabled = True FormLazoPasivo.Text11.Text = Lazos(i).xc3 FormLazoPasivo.Text12.Enabled = False FormLazoPasivo.Text12.Text = "N/A" FormLazoPasivo.Text13.Enabled = False FormLazoPasivo.Text13.Text = "N/A" FormLazoPasivo.Text14.Enabled = False FormLazoPasivo.Text14.Text = "N/A" End If FormLazoPasivo.Text15.Text = Lazos(i).nombreConductor FormLazoPasivo.Text16.Text = Lazos(i).RConductor FormLazoPasivo.Text17.Text = Lazos(i).rgmConductor FormLazoPasivo.Text18.Text = Lazos(i).longitud FormLazoPasivo.Text19.Text = Lazos(i).costeConductor FormLazoPasivo.Text20.Text = Lazos(i).nombrePoste FormLazoPasivo.Text21.Text = Lazos(i).alturaPoste FormLazoPasivo.Text22.Text = Lazos(i).costePoste FormLazoPasivo.Show vbModal FormLazoPasivo.Editando = "NO" If Not HaCancelado Then Lazos(i).x1 = FormLazoPasivo.Text1.Text Lazos(i).y1 = FormLazoPasivo.Text2.Text Lazos(i).x2 = FormLazoPasivo.Text3.Text Lazos(i).y2 = FormLazoPasivo.Text4.Text Lazos(i).x3 = FormLazoPasivo.Text5.Text Lazos(i).y3 = FormLazoPasivo.Text6.Text Lazos(i).x4 = FormLazoPasivo.Text7.Text Lazos(i).y4 = FormLazoPasivo.Text8.Text If FormLazoPasivo.Option1.Value = True Then Lazos(i).usaFc = False Lazos(i).xc1 = FormLazoPasivo.Text9.Text Lazos(i).xc3 = FormLazoPasivo.Text11.Text Else Lazos(i).usaFc = True Lazos(i).xc1 = FormLazoPasivo.Text12.Text Lazos(i).xc3 = FormLazoPasivo.Text14.Text End If Lazos(i).nombreConductor = FormLazoPasivo.Text15.Text Lazos(i).RConductor = FormLazoPasivo.Text16.Text Lazos(i).rgmConductor = FormLazoPasivo.Text17.Text Lazos(i).longitud = FormLazoPasivo.Text18.Text Lazos(i).costeConductor = FormLazoPasivo.Text19.Text Lazos(i).nombrePoste = FormLazoPasivo.Text20.Text Lazos(i).alturaPoste = FormLazoPasivo.Text21.Text Lazos(i).costePoste = FormLazoPasivo.Text22.Text RedibujaImagen End If Unload FormLazoPasivo Unload SelLazo End If HaCancelado = False End Select Else Select Case Lazos(i).tipo Case Is = "2" ' Lazo 2 conductores, activo. distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y1 * factor - Y) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y2 * factor - Y) ^ 2) If distancia1 < 150 Or distancia2 < 150 Then Load FormLazoActivo FormLazoActivo.Editando = "SI" If Principal.idioma = "Español" Then FormLazoActivo.Caption = "Editar Lazo Activo" Else FormLazoActivo.Caption = "Edit Active Loop" End If ' Ponemos los datos del seleccionado FormLazoActivo.Text5.Enabled = True FormLazoActivo.Text5.Text = CStr(Lazos(i).x1) FormLazoActivo.Text6.Enabled = True FormLazoActivo.Text6.Text = CStr(Lazos(i).y1) FormLazoActivo.Text7.Enabled = True FormLazoActivo.Text7.Text = CStr(Lazos(i).x2) FormLazoActivo.Text8.Enabled = True FormLazoActivo.Text8.Text = CStr(Lazos(i).y2) FormLazoActivo.Text9.Enabled = False FormLazoActivo.Text9.Text = "N/A" FormLazoActivo.Text10.Enabled = False FormLazoActivo.Text10.Text = "N/A" FormLazoActivo.Text11.Enabled = False FormLazoActivo.Text11.Text = "N/A" FormLazoActivo.Text12.Enabled = False FormLazoActivo.Text12.Text = "N/A" FormLazoActivo.Text3.Enabled = True FormLazoActivo.Text3.Text = CStr(Lazos(i).I1) FormLazoActivo.Text13.Enabled = True FormLazoActivo.Text13.Text = CStr(Lazos(i).theta1) FormLazoActivo.Text14.Enabled = False FormLazoActivo.Text14.Text = "N/A" FormLazoActivo.Text15.Enabled = False FormLazoActivo.Text15.Text = "N/A" FormLazoActivo.Text16.Text = Lazos(i).nombreConductor FormLazoActivo.Text17.Text = Lazos(i).RConductor FormLazoActivo.Text18.Text = Lazos(i).rgmConductor FormLazoActivo.Text20.Text = Lazos(i).longitud FormLazoActivo.Text21.Text = Lazos(i).costeConductor FormLazoActivo.Text22.Text = Lazos(i).nombrePoste FormLazoActivo.Text23.Text = Lazos(i).alturaPoste FormLazoActivo.Text24.Text = Lazos(i).costePoste FormLazoActivo.Text2.Text = CStr(Lazos(i).Isugerida) FormLazoActivo.Text19.Text = CStr(Lazos(i).Isugerida2) FormLazoActivo.Show vbModal FormLazoActivo.Editando = "NO" If Not HaCancelado Then Lazos(i).x1 = FormLazoActivo.Text5.Text Lazos(i).y1 = FormLazoActivo.Text6.Text Lazos(i).x2 = FormLazoActivo.Text7.Text Lazos(i).y2 = FormLazoActivo.Text8.Text Lazos(i).I1 = FormLazoActivo.Text3.Text Lazos(i).theta1 = FormLazoActivo.Text13.Text Lazos(i).nombreConductor = FormLazoActivo.Text16.Text Lazos(i).RConductor = FormLazoActivo.Text17.Text Lazos(i).rgmConductor = FormLazoActivo.Text18.Text Lazos(i).longitud = FormLazoActivo.Text20.Text Lazos(i).costeConductor = FormLazoActivo.Text21.Text Lazos(i).nombrePoste = FormLazoActivo.Text22.Text Lazos(i).alturaPoste = FormLazoActivo.Text23.Text Lazos(i).costePoste = FormLazoActivo.Text24.Text Lazos(i).xcampo = FormLazoActivo.Text1.Text Lazos(i).ycampo = FormLazoActivo.Text4.Text Lazos(i).Isugerida = FormLazoActivo.Text2.Text Lazos(i).Isugerida2 = FormLazoActivo.Text19.Text RedibujaImagen End If Unload FormLazoActivo Unload SelLazo End If Case Is = "3" ' Lazo 3 conductores, activo. distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y1 * factor - Y) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y2 * factor - Y) ^ 2) distancia3 = Sqr(((Lazos(i).x3 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y3 * factor - Y) ^ 2) If distancia1 < 150 Or distancia2 < 150 Or distancia3 < 150 Then Load FormLazoActivo FormLazoActivo.Editando = "SI" If Principal.idioma = "Español" Then FormLazoActivo.Caption = "Editar Lazo Activo" Else FormLazoActivo.Caption = "Edit Active Loop" End If ' Ponemos los datos del seleccionado FormLazoActivo.Text5.Enabled = True FormLazoActivo.Text5.Text = CStr(Lazos(i).x1) FormLazoActivo.Text6.Enabled = True FormLazoActivo.Text6.Text = CStr(Lazos(i).y1) FormLazoActivo.Text7.Enabled = True FormLazoActivo.Text7.Text = CStr(Lazos(i).x2) FormLazoActivo.Text8.Enabled = True FormLazoActivo.Text8.Text = CStr(Lazos(i).y2) FormLazoActivo.Text9.Enabled = True FormLazoActivo.Text9.Text = CStr(Lazos(i).x3) FormLazoActivo.Text10.Enabled = True FormLazoActivo.Text10.Text = CStr(Lazos(i).y3) FormLazoActivo.Text11.Enabled = False FormLazoActivo.Text11.Text = "N/A" FormLazoActivo.Text12.Enabled = False FormLazoActivo.Text12.Text = "N/A" FormLazoActivo.Text3.Enabled = True FormLazoActivo.Text3.Text = CStr(Lazos(i).I1) FormLazoActivo.Text13.Enabled = True FormLazoActivo.Text13.Text = CStr(Lazos(i).theta1) FormLazoActivo.Text14.Enabled = True FormLazoActivo.Text14.Text = CStr(Lazos(i).I2) FormLazoActivo.Text15.Enabled = True FormLazoActivo.Text15.Text = CStr(Lazos(i).theta2) FormLazoActivo.Text16.Text = Lazos(i).nombreConductor FormLazoActivo.Text17.Text = Lazos(i).RConductor FormLazoActivo.Text18.Text = Lazos(i).rgmConductor FormLazoActivo.Text20.Text = Lazos(i).longitud FormLazoActivo.Text21.Text = Lazos(i).costeConductor FormLazoActivo.Text22.Text = Lazos(i).nombrePoste FormLazoActivo.Text23.Text = Lazos(i).alturaPoste FormLazoActivo.Text24.Text = Lazos(i).costePoste FormLazoActivo.Text2.Text = Lazos(i).Isugerida FormLazoActivo.Text19.Text = Lazos(i).Isugerida2 FormLazoActivo.Show vbModal FormLazoActivo.Editando = "NO" If Not HaCancelado Then ' Intensidades sugeridas Lazos(i).Isugerida = FormLazoActivo.Text2.Text Lazos(i).Isugerida2 = FormLazoActivo.Text19.Text ' Datos conductor Lazos(i).nombreConductor = FormLazoActivo.Text16.Text Lazos(i).RConductor = FormLazoActivo.Text17.Text Lazos(i).rgmConductor = FormLazoActivo.Text18.Text Lazos(i).longitud = FormLazoActivo.Text20.Text Lazos(i).costeConductor = FormLazoActivo.Text21.Text ' Datos postes Lazos(i).nombrePoste = FormLazoActivo.Text22.Text Lazos(i).alturaPoste = FormLazoActivo.Text23.Text Lazos(i).costePoste = FormLazoActivo.Text24.Text ' Posicion lazo Lazos(i).x1 = FormLazoActivo.Text5.Text Lazos(i).y1 = FormLazoActivo.Text6.Text Lazos(i).x2 = FormLazoActivo.Text7.Text Lazos(i).y2 = FormLazoActivo.Text8.Text Lazos(i).x3 = FormLazoActivo.Text9.Text Lazos(i).y3 = FormLazoActivo.Text10.Text ' Intensidades Lazos(i).I1 = FormLazoActivo.Text3.Text Lazos(i).theta1 = FormLazoActivo.Text13.Text Lazos(i).I2 = FormLazoActivo.Text14.Text Lazos(i).theta2 = FormLazoActivo.Text15.Text RedibujaImagen End If Unload FormLazoActivo Unload SelLazo End If Case Is = "4" ' Lazo 4 conductores, activo. distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y1 * factor - Y) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y2 * factor - Y) ^ 2) distancia3 = Sqr(((Lazos(i).x3 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y3 * factor - Y) ^ 2) distancia4 = Sqr(((Lazos(i).x4 - Principal.xminima) * factor - X) ^ 2 + _ (Lazos(i).y4 * factor - Y) ^ 2) If distancia1 < 150 Or distancia2 < 150 Or distancia3 < 150 Or _ distancia4 < 150 Then Load FormLazoActivo FormLazoActivo.Editando = "SI" If Principal.idioma = "Español" Then FormLazoActivo.Caption = "Editar Lazo Activo" Else FormLazoActivo.Caption = "Edit Active Loop" End If ' Ponemos los datos del seleccionado FormLazoActivo.Text5.Enabled = True FormLazoActivo.Text5.Text = CStr(Lazos(i).x1) FormLazoActivo.Text6.Enabled = True FormLazoActivo.Text6.Text = CStr(Lazos(i).y1) FormLazoActivo.Text7.Enabled = True FormLazoActivo.Text7.Text = CStr(Lazos(i).x2) FormLazoActivo.Text8.Enabled = True FormLazoActivo.Text8.Text = CStr(Lazos(i).y2) FormLazoActivo.Text9.Enabled = True FormLazoActivo.Text9.Text = CStr(Lazos(i).x3) FormLazoActivo.Text10.Enabled = True FormLazoActivo.Text10.Text = CStr(Lazos(i).y3) FormLazoActivo.Text11.Enabled = True FormLazoActivo.Text11.Text = CStr(Lazos(i).x4) FormLazoActivo.Text12.Enabled = True FormLazoActivo.Text12.Text = CStr(Lazos(i).y4) FormLazoActivo.Text3.Enabled = True FormLazoActivo.Text3.Text = CStr(Lazos(i).I1) FormLazoActivo.Text13.Enabled = True FormLazoActivo.Text13.Text = CStr(Lazos(i).theta1) FormLazoActivo.Text14.Enabled = True FormLazoActivo.Text14.Text = CStr(Lazos(i).I2) FormLazoActivo.Text15.Enabled = True FormLazoActivo.Text15.Text = CStr(Lazos(i).theta2) ' Datos del conductor FormLazoActivo.Text16.Text = Lazos(i).nombreConductor FormLazoActivo.Text17.Text = Lazos(i).RConductor FormLazoActivo.Text18.Text = Lazos(i).rgmConductor FormLazoActivo.Text20.Text = Lazos(i).longitud FormLazoActivo.Text21.Text = Lazos(i).costeConductor ' Datos del poste FormLazoActivo.Text22.Text = Lazos(i).nombrePoste FormLazoActivo.Text23.Text = Lazos(i).alturaPoste FormLazoActivo.Text24.Text = Lazos(i).costePoste ' Punto de minimo campo FormLazoActivo.Text1.Text = CStr(Lazos(i).xcampo) FormLazoActivo.Text4.Text = CStr(Lazos(i).ycampo) ' Intensidades sugeridas FormLazoActivo.Text2.Text = CStr(Lazos(i).Isugerida) FormLazoActivo.Text19.Text = CStr(Lazos(i).Isugerida2) FormLazoActivo.Show vbModal FormLazoActivo.Editando = "NO" If Not HaCancelado Then Lazos(i).nombreConductor = FormLazoActivo.Text16.Text Lazos(i).RConductor = FormLazoActivo.Text17.Text Lazos(i).rgmConductor = FormLazoActivo.Text18.Text Lazos(i).longitud = FormLazoActivo.Text20.Text Lazos(i).costeConductor = FormLazoActivo.Text21.Text Lazos(i).nombrePoste = FormLazoActivo.Text22.Text Lazos(i).alturaPoste = FormLazoActivo.Text23.Text Lazos(i).costePoste = FormLazoActivo.Text24.Text Lazos(i).x1 = FormLazoActivo.Text5.Text Lazos(i).y1 = FormLazoActivo.Text6.Text Lazos(i).x2 = FormLazoActivo.Text7.Text Lazos(i).y2 = FormLazoActivo.Text8.Text Lazos(i).x3 = FormLazoActivo.Text9.Text Lazos(i).y3 = FormLazoActivo.Text10.Text Lazos(i).x4 = FormLazoActivo.Text11.Text Lazos(i).y4 = FormLazoActivo.Text12.Text Lazos(i).I1 = FormLazoActivo.Text3.Text Lazos(i).theta1 = FormLazoActivo.Text13.Text Lazos(i).I2 = FormLazoActivo.Text14.Text Lazos(i).theta2 = FormLazoActivo.Text15.Text Lazos(i).xcampo = FormLazoActivo.Text1.Text Lazos(i).ycampo = FormLazoActivo.Text4.Text Lazos(i).Isugerida = FormLazoActivo.Text2.Text Lazos(i).Isugerida2 = FormLazoActivo.Text19.Text End If RedibujaImagen Unload FormLazoActivo Unload SelLazo End If HaCancelado = False End Select End If i = i - 1 Wend End If End Function Sub dibujaAreasProhibidas() Dim redibujaDeNuevo As Boolean ' Establecemos el color de relleno para las areas prohibidas Principal.Picturedef.FillColor = RGB(200, 0, 0) Principal.Picturedef.FillStyle = 0 ' Areas prohibidas lineas horizontales i = 1 If (totalLineasHorizontales <> 0) Then While (i <= UBound(LineasHorizontales)) Y = CSng(LineasHorizontales(i).altura * factor) Y = Principal.Picturedef.Height * lineaSuelo - Y Principal.Picturedef.Line (0, Y)-(Principal.Picturedef.Width, _ Principal.Picturedef.Height * lineaSuelo), RGB(200, 0, 0), BF Principal.Picturedef.Line (0, Y)-(Principal.Picturedef.Width, Y), RGB(0, 0, 0) i = i + 1 Wend End If ' Areas prohibidas conductores simples i = 1 If (totalcond <> 0) Then While (i <= UBound(conductoresPictureBox)) X = CSng((conductoresPictureBox(i).coordx - Principal.xminima) * factor) Y = CSng(conductoresPictureBox(i).altura * factor) radio = CSng(conductoresPictureBox(i).diametro * factor / 2) Principal.Picturedef.FillColor = RGB(200, 0, 0) Principal.Picturedef.FillStyle = 0 Y = Principal.Picturedef.Height * lineaSuelo - Y ' dibujamos la zona prohibida Principal.Picturedef.Circle (X, Y), radio, RGB(200, 0, 0) i = i + 1 Wend End If ' Areas prohibidas 2 conductores (horizontales y/o verticales) i = 1 If (totalcondmultiples <> 0) Then While (i <= UBound(conductoresMultiples)) ' Leemos los datos comunes a ambos tipos (horiz y vert) X = CSng((conductoresMultiples(i).coordx - Principal.xminima) * factor) Y = CSng(conductoresMultiples(i).coordy * factor) d1 = CSng(conductoresMultiples(i).diametro1 * factor) d2 = CSng(conductoresMultiples(i).diametro2 * factor) Y = Principal.Picturedef.Height * lineaSuelo - Y ' Ahora segun el tipo se hace una cosa u otra If (conductoresMultiples(i).tipo = "2condhoriz") Then d = CSng(conductoresMultiples(i).separacion * factor) Principal.Picturedef.Circle (X, Y), (d1 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X + d, Y), (d2 / 2), RGB(200, 0, 0) Else h = CSng(conductoresMultiples(i).separacion * factor) Principal.Picturedef.Circle (X, Y), (d1 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X, Y + h), (d2 / 2), RGB(200, 0, 0) End If i = i + 1 Wend End If ' Areas prohibidas 3 conductores i = 1 If (total3cond <> 0) Then While (i <= UBound(tresConductores)) X = CSng((tresConductores(i).coordx - Principal.xminima) * factor) Y = CSng(tresConductores(i).coordy * factor) d = CSng(tresConductores(i).d * factor) h = CSng(tresConductores(i).h * factor) d1 = CSng(tresConductores(i).diametro1 * factor) d2 = CSng(tresConductores(i).diametro2 * factor) d3 = CSng(tresConductores(i).diametro3 * factor) Y = Principal.Picturedef.Height * lineaSuelo - Y If tresConductores(i).unoarriba = False Then Principal.Picturedef.Circle (X, Y), (d3 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X + d / 2, Y - h), (d2 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X - d / 2, Y - h), (d1 / 2), RGB(200, 0, 0) Else Principal.Picturedef.Circle (X, Y), (d1 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X + d, Y), (d2 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X + d / 2, Y - h), (d3 / 2), RGB(200, 0, 0) End If i = i + 1 Wend End If ' Areas prohibidas 4 conductores i = 1 If (total4cond <> 0) Then While (i <= UBound(cuatroConductores)) X = CSng((cuatroConductores(i).coordx - Principal.xminima) * factor) Y = CSng(cuatroConductores(i).coordy * factor) d = CSng(cuatroConductores(i).disth * factor) h = CSng(cuatroConductores(i).distv * factor) d1 = CSng(cuatroConductores(i).diametro1 * factor) d2 = CSng(cuatroConductores(i).diametro2 * factor) d3 = CSng(cuatroConductores(i).diametro3 * factor) d4 = CSng(cuatroConductores(i).diametro4 * factor) Y = Principal.Picturedef.Height * lineaSuelo - Y Principal.Picturedef.Circle (X, Y), (d1 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X + d, Y), (d2 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X, Y + h), (d3 / 2), RGB(200, 0, 0) Principal.Picturedef.Circle (X + d, Y + h), (d4 / 2), RGB(200, 0, 0) i = i + 1 Wend End If ' Areas prohibidas obstaculos normales i = 1 If (totalnorm <> 0) Then While (i <= UBound(NormalesPictureBox)) xinic = CSng((NormalesPictureBox(i).coordx - NormalesPictureBox(i).izquierda - _ Principal.xminima) * factor) yinic = CSng(Principal.Picturedef.Height * lineaSuelo) - _ (CSng(NormalesPictureBox(i).altura + NormalesPictureBox(i).arriba) * factor) xfin = CSng((NormalesPictureBox(i).coordx + NormalesPictureBox(i).anchura + _ NormalesPictureBox(i).derecha - Principal.xminima) * factor) yfin = CSng(Principal.Picturedef.Height * lineaSuelo) Principal.Picturedef.Line (xinic, yinic)-(xinic, yfin), RGB(0, 0, 0) Principal.Picturedef.Line (xinic, yinic)-(xfin, yinic), RGB(0, 0, 0) Principal.Picturedef.Line (xfin, yinic)-(xfin, yfin), RGB(0, 0, 0) Principal.Picturedef.Line (xinic, yinic)-(xfin, yfin), RGB(200, 0, 0), BF i = i + 1 Wend End If ' Areas prohibidas obstaculos elevados i = 1 If (totalelevados <> 0) Then While (i <= UBound(ElevadosPictureBox)) xinic = CSng((ElevadosPictureBox(i).coordx - ElevadosPictureBox(i).izda - _ Principal.xminima) * factor) yinic = CSng(Principal.Picturedef.Height * lineaSuelo) - _ CSng((ElevadosPictureBox(i).distanciaAlSuelo _ + ElevadosPictureBox(i).inferior _ + ElevadosPictureBox(i).altura _ + ElevadosPictureBox(i).alturaprohibida) * factor) xfin = CSng(ElevadosPictureBox(i).coordx + ElevadosPictureBox(i).anchura _ + ElevadosPictureBox(i).dcha - Principal.xminima) * factor yfin = CSng((Principal.Picturedef.Height * lineaSuelo) _ - ElevadosPictureBox(i).distanciaAlSuelo * factor) Principal.Picturedef.Line (xinic, yinic)-(xinic, yfin), RGB(0, 0, 0) Principal.Picturedef.Line (xinic, yinic)-(xfin, yinic), RGB(0, 0, 0) Principal.Picturedef.Line (xfin, yinic)-(xfin, yfin), RGB(0, 0, 0) Principal.Picturedef.Line (xinic, yinic)-(xfin, yfin), RGB(200, 0, 0), BF ' Pasamos al siguiente objeto i = i + 1 Wend End If End Sub Sub dibujaCuerpos() Dim j As Integer ' Establecemos el color de relleno para los cuerpos Principal.Picturedef.FillColor = RGB(0, 0, 0) Principal.Picturedef.FillStyle = 0 ' Dibujamos los cuerpos de conductores i = 1 If (totalcond <> 0) Then While (i <= UBound(conductoresPictureBox)) If (conductoresPictureBox(i).diametro * factor / 10 < _ Principal.Picturedef.Height / 200) Then radioFinal = conductoresPictureBox(i).diametro * factor / 10 Else radioFinal = Principal.Picturedef.Height / 200 End If ' Dibujamos X = CSng((conductoresPictureBox(i).coordx - Principal.xminima) * factor) Y = CSng(conductoresPictureBox(i).altura * factor) Principal.Picturedef.FillColor = RGB(0, 0, 0) Y = Principal.Picturedef.Height * lineaSuelo - Y Principal.Picturedef.Circle (X, Y), radioFinal i = i + 1 Wend End If ' Cuerpos de 2 conductores horizontales o verticales i = 1 If (totalcondmultiples <> 0) Then While (i <= UBound(conductoresMultiples)) If (conductoresMultiples(i).tipo = "2condhoriz") Then ' Obtenemos los parámetros del conjunto actual d = CSng(conductoresMultiples(i).separacion * factor) X = (conductoresMultiples(i).coordx - Principal.xminima) * factor Y = conductoresMultiples(i).coordy * factor Y = Principal.Picturedef.Height * lineaSuelo - Y ' Radio adecuado para representar el cuerpo de los cond horizontales If (conductoresMultiples(i).diametro1 * factor / 10 < _ Principal.Picturedef.Height / 200) Then radioFinal = conductoresMultiples(i).diametro1 * factor / 10 Else radioFinal = Principal.Picturedef.Height / 200 End If Principal.Picturedef.Circle (X, Y), radioFinal, RGB(0, 0, 0) ' Idem para el segundo conductor If (conductoresMultiples(i).diametro2 * factor / 10 < _ Principal.Picturedef.Height / 200) Then radioFinal = conductoresMultiples(i).diametro2 * factor / 10 Else radioFinal = Principal.Picturedef.Height / 200 End If Principal.Picturedef.Circle (X + d, Y), radioFinal, RGB(0, 0, 0) Else ' Obtenemos los parámetros del conjunto actual h = CSng(conductoresMultiples(i).separacion * factor) X = (conductoresMultiples(i).coordx - Principal.xminima) * factor Y = conductoresMultiples(i).coordy * factor Y = Principal.Picturedef.Height * lineaSuelo - Y If (conductoresMultiples(i).diametro1 * factor / 10 < _ Principal.Picturedef.Height / 200) Then radioFinal = conductoresMultiples(i).diametro1 * factor / 10 Else radioFinal = Principal.Picturedef.Height / 200 End If Principal.Picturedef.Circle (X, Y), radioFinal, RGB(0, 0, 0) If (conductoresMultiples(i).diametro2 * factor / 10 < _ Principal.Picturedef.Height / 200) Then radioFinal = conductoresMultiples(i).diametro2 * factor / 10 Else radioFinal = Principal.Picturedef.Height / 200 End If Principal.Picturedef.Circle (X, Y + h), radioFinal, RGB(0, 0, 0) End If i = i + 1 Wend End If ' Ahora los cuerpos de los grupos de 3 conductores i = 1 If (total3cond <> 0) Then While (i <= UBound(tresConductores)) X = CSng((tresConductores(i).coordx - Principal.xminima) * factor) Y = CSng(tresConductores(i).coordy * factor) d = CSng(tresConductores(i).d * factor) h = CSng(tresConductores(i).h * factor) d1 = CSng(tresConductores(i).diametro1 * factor) d2 = CSng(tresConductores(i).diametro2 * factor) d3 = CSng(tresConductores(i).diametro3 * factor) Y = Principal.Picturedef.Height * lineaSuelo - Y ' Ahora segun el tipo se dibuja de una u otra manera If tresConductores(i).unoarriba = True Then ' Zona 1 If (tresConductores(i).diametro1 * factor / 10 < 30) Then radioFinal = tresConductores(i).diametro1 * factor / 10 Else radioFinal = 30 End If Principal.Picturedef.Circle (X, Y), radioFinal, RGB(0, 0, 0) If (tresConductores(i).diametro2 * factor / 10 < 30) Then radioFinal = tresConductores(i).diametro2 * factor / 10 Else radioFinal = 30 End If Principal.Picturedef.Circle (X + d, Y), radioFinal, RGB(0, 0, 0) If (tresConductores(i).diametro3 * factor / 10 < 30) Then radioFinal = tresConductores(i).diametro3 * factor / 10 Else radioFinal = 30 End If Principal.Picturedef.Circle (X + d / 2, Y - h), radioFinal, RGB(0, 0, 0) Else If (tresConductores(i).diametro1 * factor / 10 < 30) Then radioFinal = tresConductores(i).diametro1 * factor / 10 Else radioFinal = 30 End If Principal.Picturedef.Circle (X - d / 2, Y - h), radioFinal, RGB(0, 0, 0) If (tresConductores(i).diametro2 * factor / 10 < 30) Then radioFinal = tresConductores(i).diametro2 * factor / 10 Else radioFinal = 30 End If Principal.Picturedef.Circle (X + d / 2, Y - h), radioFinal, RGB(0, 0, 0) If (tresConductores(i).diametro3 * factor / 10 < 30) Then radioFinal = tresConductores(i).diametro3 * factor / 10 Else radioFinal = 30 End If Principal.Picturedef.Circle (X, Y), radioFinal, RGB(0, 0, 0) End If i = i + 1 Wend End If ' Ahora los cuerpos de los grupos de 4 conductores i = 1 If (total4cond <> 0) Then While (i <= UBound(cuatroConductores)) X = CSng((cuatroConductores(i).coordx - Principal.xminima) * factor) Y = CSng(cuatroConductores(i).coordy * factor) d = CSng(cuatroConductores(i).disth * factor) h = CSng(cuatroConductores(i).distv * factor) d1 = CSng(cuatroConductores(i).diametro1 * factor) d2 = CSng(cuatroConductores(i).diametro2 * factor) d3 = CSng(cuatroConductores(i).diametro3 * factor) d4 = CSng(cuatroConductores(i).diametro4 * factor) Y = Principal.Picturedef.Height * lineaSuelo - Y 'If (cuatroConductores(i).diametro1 * factor / 10 < Principal.Picturedef.Height / 200) Then If (cuatroConductores(i).diametro1 * factor / 10 < 30) Then radioFinal = cuatroConductores(i).diametro1 * factor / 10 Else 'radioFinal = Principal.Picturedef.Height / 200 radioFinal = 30 End If Principal.Picturedef.Circle (X, Y + h), radioFinal, RGB(0, 0, 0) 'If (cuatroConductores(i).diametro2 * factor / 10 < Principal.Picturedef.Height / 200) Then If (cuatroConductores(i).diametro2 * factor / 10 < 30) Then radioFinal = cuatroConductores(i).diametro2 * factor / 10 Else 'radioFinal = Principal.Picturedef.Height / 200 radioFinal = 30 End If Principal.Picturedef.Circle (X + d, Y + h), radioFinal, RGB(0, 0, 0) 'If (cuatroConductores(i).diametro3 * factor / 10 < Principal.Picturedef.Height / 200) Then If (cuatroConductores(i).diametro3 * factor / 10 < 30) Then radioFinal = cuatroConductores(i).diametro3 * factor / 10 Else ' radioFinal = Principal.Picturedef.Height / 200 radioFinal = 30 End If Principal.Picturedef.Circle (X, Y), radioFinal, RGB(0, 0, 0) 'If (cuatroConductores(i).diametro4 * factor / 10 < Principal.Picturedef.Height / 200) Then If (cuatroConductores(i).diametro4 * factor / 10 < 30) Then radioFinal = cuatroConductores(i).diametro4 * factor / 10 Else 'radioFinal = Principal.Picturedef.Height / 200 radioFinal = 30 End If Principal.Picturedef.Circle (X + d, Y), radioFinal, RGB(0, 0, 0) i = i + 1 Wend End If ' Ahora dibujamos los cuerpos de los obstaculos normales i = 1 If (totalnorm <> 0) Then While (i <= UBound(NormalesPictureBox)) xinic = CSng((NormalesPictureBox(i).coordx - Principal.xminima) * factor) yinic = CSng(Principal.Picturedef.Height * lineaSuelo) - _ CSng(NormalesPictureBox(i).altura * factor) xfin = xinic + CSng(NormalesPictureBox(i).anchura * factor) yfin = CSng(Principal.Picturedef.Height * lineaSuelo) Principal.Picturedef.FillColor = RGB(0, 0, 0) Principal.Picturedef.FillStyle = 0 Principal.Picturedef.Line (xinic, yinic)-(xfin, yfin), RGB(0, 0, 0), BF i = i + 1 Wend End If ' Y ahora dibujamos los cuerpos de los obstaculos elevados i = 1 If (totalelevados <> 0) Then While (i <= UBound(ElevadosPictureBox)) xinic = CSng((ElevadosPictureBox(i).coordx - Principal.xminima) * factor) yinic = CSng(Principal.Picturedef.Height * lineaSuelo) _ - CSng((ElevadosPictureBox(i).altura _ + ElevadosPictureBox(i).distanciaAlSuelo _ + ElevadosPictureBox(i).inferior) * factor) xfin = xinic + CSng(ElevadosPictureBox(i).anchura * factor) yfin = CSng(Principal.Picturedef.Height * lineaSuelo) _ - CSng((ElevadosPictureBox(i).distanciaAlSuelo _ + ElevadosPictureBox(i).inferior)) * factor Principal.Picturedef.FillColor = RGB(0, 0, 0) Principal.Picturedef.FillStyle = 0 Principal.Picturedef.Line (xinic, yinic)-(xfin, yfin), RGB(0, 0, 0), BF i = i + 1 Wend End If End Sub Sub dibujaLazos() ' Y finalmente los lazos. i = 1 Dim sacaMensaje As Boolean If (totalLazos <> 0) Then While (i <= UBound(Lazos)) If Lazos(i).pasivo = True Then Principal.Picturedef.FillColor = RGB(0, 150, 0) Else Principal.Picturedef.FillColor = RGB(0, 0, 150) End If Dim color As Long Select Case Lazos(i).tipo Case Is = "2" ' Primer conductor color = Principal.Picturedef.Point((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x1 > Principal.xminima And Lazos(i).y1 < Principal.ymaxima And _ Lazos(i).y1 > Principal.yminima Then sacaMensaje = True End If End If ' Segundo conductor color = Principal.Picturedef.Point((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x2 > Principal.xminima And Lazos(i).y2 < Principal.ymaxima And _ Lazos(i).y2 > Principal.yminima Then sacaMensaje = True End If End If If Lazos(i).pasivo = True Then Principal.Picturedef.Circle ((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 _ * factor), 100, RGB(0, 150, 0) Principal.Picturedef.Circle ((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 _ * factor), 100, RGB(0, 150, 0) Else Principal.Picturedef.Circle ((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 _ * factor), 100, RGB(0, 0, 150) Principal.Picturedef.Circle ((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 _ * factor), 100, RGB(0, 0, 150) End If Case Is = "3" ' Primer conductor color = Principal.Picturedef.Point((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x1 > Principal.xminima And Lazos(i).y1 < Principal.ymaxima And _ Lazos(i).y1 > Principal.yminima Then sacaMensaje = True End If End If ' Segundo conductor color = Principal.Picturedef.Point((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x2 > Principal.xminima And Lazos(i).y2 < Principal.ymaxima And _ Lazos(i).y2 > Principal.yminima Then sacaMensaje = True End If End If ' Tercer conductor color = Principal.Picturedef.Point((Lazos(i).x3 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y3 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x3 > Principal.xminima And Lazos(i).y3 < Principal.ymaxima And _ Lazos(i).y3 > Principal.yminima Then sacaMensaje = True End If End If If Lazos(i).pasivo = True Then Principal.Picturedef.Circle ((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 _ * factor), 100, RGB(0, 150, 0) Principal.Picturedef.Circle ((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 _ * factor), 100, RGB(0, 150, 0) Principal.Picturedef.Circle ((Lazos(i).x3 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y3 _ * factor), 100, RGB(0, 150, 0) Else Principal.Picturedef.Circle ((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 _ * factor), 100, RGB(0, 0, 150) Principal.Picturedef.Circle ((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 _ * factor), 100, RGB(0, 0, 150) Principal.Picturedef.Circle ((Lazos(i).x3 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y3 _ * factor), 100, RGB(0, 0, 150) End If Case Is = "4" ' Primer conductor color = Principal.Picturedef.Point((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x1 > Principal.xminima And Lazos(i).y1 < Principal.ymaxima And _ Lazos(i).y1 > Principal.yminima Then sacaMensaje = True End If End If ' Segundo conductor color = Principal.Picturedef.Point((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x2 > Principal.xminima And Lazos(i).y2 < Principal.ymaxima And _ Lazos(i).y2 > Principal.yminima Then sacaMensaje = True End If End If ' Tercer conductor color = Principal.Picturedef.Point((Lazos(i).x3 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y3 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x3 > Principal.xminima And Lazos(i).y3 < Principal.ymaxima And _ Lazos(i).y3 > Principal.yminima Then sacaMensaje = True End If End If ' Cuarto conductor color = Principal.Picturedef.Point((Lazos(i).x4 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y4 * factor) If color <> 13158600 And color <> 1 And color <> 11513775 Then ' Si el conductor esta fuera de la pantalla debido a un gran zoom, ' no debemos decir que está en una zona prohibida. If Lazos(i).x4 > Principal.xminima And Lazos(i).y4 < Principal.ymaxima And _ Lazos(i).y4 > Principal.yminima Then sacaMensaje = True End If End If If Lazos(i).pasivo = True Then Principal.Picturedef.Circle ((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 _ * factor), 100, RGB(0, 150, 0) Principal.Picturedef.Circle ((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 _ * factor), 100, RGB(0, 150, 0) Principal.Picturedef.Circle ((Lazos(i).x3 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y3 _ * factor), 100, RGB(0, 150, 0) Principal.Picturedef.Circle ((Lazos(i).x4 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y4 _ * factor), 100, RGB(0, 150, 0) Else Principal.Picturedef.Circle ((Lazos(i).x1 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y1 _ * factor), 100, RGB(0, 0, 150) Principal.Picturedef.Circle ((Lazos(i).x2 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y2 _ * factor), 100, RGB(0, 0, 150) Principal.Picturedef.Circle ((Lazos(i).x3 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y3 _ * factor), 100, RGB(0, 0, 150) Principal.Picturedef.Circle ((Lazos(i).x4 - Principal.xminima) * factor, _ Principal.Picturedef.Height * lineaSuelo - Lazos(i).y4 _ * factor), 100, RGB(0, 0, 150) End If End Select i = i + 1 Wend If sacaMensaje = True Then If Principal.idioma = "Español" Then MsgBox "Hay lazos situados en zonas no permitidas", vbExclamation, "MitLoop" Else MsgBox "There are loops placed at forbidden areas", vbExclamation, "MitLoop" End If End If End If End Sub Sub dibujaEjes() ' Esta subrutina nos representa los ejes y los grids Dim divisionesx As Integer Dim divisionesy As Integer Dim xaux As Integer Dim yaux As Integer Dim i As Integer Dim j As Integer If (factor <> 0) Then ' Semieje x+ i = 0 If (Principal.GridHorizontal = True) Then Principal.Picturedef.DrawWidth = 2 Else Principal.Picturedef.DrawWidth = 1 End If Principal.Picturedef.DrawStyle = 2 Principal.Picturedef.Line (0, lineaSuelo * Principal.Picturedef.Height)- _ (Principal.Picturedef.Width, lineaSuelo * _ Principal.Picturedef.Height), 1 Principal.Picturedef.DrawWidth = 2 divisionesx = (Principal.xmaxima + 1) * factor ' Obtiene twips totales del semieje x While (i * factor <= divisionesx) Principal.Picturedef.DrawWidth = 2 Principal.Picturedef.DrawStyle = 0 Principal.Picturedef.Line ((i + Abs(Principal.xminima)) * factor, _ lineaSuelo * Principal.Picturedef.Height - 50)- _ ((i + Abs(Principal.xminima)) * factor, 50 + _ lineaSuelo * Principal.Picturedef.Height), 1 If (Principal.GridVertical = True And i <> 0) Then Principal.Picturedef.DrawWidth = 1 Principal.Picturedef.DrawStyle = 2 Principal.Picturedef.Line ((i - Principal.xminima) * factor, 0)- _ ((i - Principal.xminima) * factor, _ (Abs(Principal.ymaxima) / (Principal.ymaxima - _ Principal.yminima) * Principal.Picturedef.Height)), 1 End If i = i + Principal.incrementoGridV Wend ' SEMIEJE X- i = 0 divisionesx = (Principal.xminima - 1) * factor While (i * factor <= Abs(divisionesx)) Principal.Picturedef.DrawWidth = 2 Principal.Picturedef.DrawStyle = 0 Principal.Picturedef.Line ((Abs(Principal.xminima) - i) * factor, _ lineaSuelo * Principal.Picturedef.Height - 50)- _ ((Abs(Principal.xminima) - i) * factor, 50 + _ lineaSuelo * Principal.Picturedef.Height), 1 If (Principal.GridVertical = True And i <> 0) Then Principal.Picturedef.DrawWidth = 1 Principal.Picturedef.DrawStyle = 2 Principal.Picturedef.Line ((Abs(Principal.xminima) - i) * _ factor, 0)-((Abs(Principal.xminima) - i) * factor, _ (Abs(Principal.ymaxima) / (Principal.ymaxima - _ Principal.yminima) * Principal.Picturedef.Height)), 1 End If i = i + Principal.incrementoGridV Wend ' Semieje y+ j = 0 divisionesy = (Principal.ymaxima + 1) * factor ' dibuja eje If (Principal.GridVertical = True) Then Principal.Picturedef.DrawWidth = 2 Else Principal.Picturedef.DrawWidth = 1 End If Principal.Picturedef.DrawStyle = 2 Principal.Picturedef.Line (Abs(Principal.xminima) * factor, 0)- _ (Abs(Principal.xminima) * factor, lineaSuelo * _ Principal.Picturedef.Height - j * factor), 1 Principal.Picturedef.DrawWidth = 2 ' dibuja divisiones eje y grid While (j * factor <= divisionesy) Principal.Picturedef.DrawWidth = 2 Principal.Picturedef.DrawStyle = 0 Principal.Picturedef.Line (Abs(Principal.xminima) * factor - 50, _ lineaSuelo * Principal.Picturedef.Height - j * factor)- _ (50 + Abs(Principal.xminima) * factor, lineaSuelo * _ Principal.Picturedef.Height - j * factor), 1 If (Principal.GridHorizontal = True) Then Principal.Picturedef.DrawWidth = 1 Principal.Picturedef.DrawStyle = 2 Principal.Picturedef.Line (0, Principal.Picturedef.Height * _ lineaSuelo - j * factor)- _ (Principal.Picturedef.Width, Principal.Picturedef.Height _ * lineaSuelo - j * factor), 1 End If j = j + Principal.incrementoGridH Wend Else ' Si factor es cero es porque estamos en la inicialización ' del programa principal. Por tanto se asigna el valor por defecto. factor = 150 Module1.dibujaEjes End If End Sub Sub grabaProyecto(ByVal filename As String) Dim proyecto As Integer Dim contador As Integer Dim cadena As String proyecto = FreeFile If (filename <> "") Then Open filename For Output As proyecto ' Grabamos primero los datos generales del proyecto Print #proyecto, "Autor, " & Principal.autor Print #proyecto, "Fecha, " & Principal.autor Print #proyecto, "Descripcion, " & Principal.descripcion ' Ahora la configuracion de obstaculos Print #proyecto, "Obstaculos" ' Comenzamos por lineas horizontales contador = 1 If totalLineasHorizontales > 0 Then While (contador <= totalLineasHorizontales) cadena = "1;" & LineasHorizontales(contador).altura & ";" & _ LineasHorizontales(contador).numeroglobal & ";" & _ LineasHorizontales(contador).tipo contador = contador + 1 Print #proyecto, cadena Wend End If ' Ahora fases simplex contador = 1 If totalcond > 0 Then While (contador <= totalcond) cadena = "2;" & conductoresPictureBox(contador).altura & ";" & _ conductoresPictureBox(contador).coordx & ";" & _ conductoresPictureBox(contador).diametro & ";" & _ conductoresPictureBox(contador).linea & ";" & _ conductoresPictureBox(contador).numero & ";" & _ conductoresPictureBox(contador).numeroglobal & ";" & _ conductoresPictureBox(contador).intensidad & ";" & _ conductoresPictureBox(contador).desfase & ";" & _ conductoresPictureBox(contador).tipo Print #proyecto, cadena contador = contador + 1 Wend End If ' Ahora fases dúplex contador = 1 If (totalcondmultiples > 0) Then While (contador <= totalcondmultiples) cadena = "3;" & conductoresMultiples(contador).coordx & ";" & _ conductoresMultiples(contador).coordy & ";" & _ conductoresMultiples(contador).diametro1 & ";" & _ conductoresMultiples(contador).diametro2 & ";" & _ conductoresMultiples(contador).linea & ";" & _ conductoresMultiples(contador).numeroglobal & ";" & _ conductoresMultiples(contador).separacion & ";" & _ conductoresMultiples(contador).tipo & ";" & _ conductoresMultiples(contador).intensidad1 & ";" & _ conductoresMultiples(contador).desfase1 Print #proyecto, cadena contador = contador + 1 Wend End If ' fases triplex contador = 1 If (total3cond > 0) Then While (contador <= total3cond) cadena = "7;" & tresConductores(contador).coordx & ";" & _ tresConductores(contador).coordy & ";" & _ tresConductores(contador).diametro1 & ";" & _ tresConductores(contador).diametro2 & ";" & _ tresConductores(contador).diametro3 & ";" & _ tresConductores(contador).d & ";" & _ tresConductores(contador).h & ";" & _ tresConductores(contador).linea & ";" & _ tresConductores(contador).numeroglobal & ";" & _ tresConductores(contador).tipo & ";" & _ tresConductores(contador).intensidad & ";" & _ tresConductores(contador).desfase & ";" & _ tresConductores(contador).unoarriba contador = contador + 1 Print #proyecto, cadena Wend End If ' Grupos de 4 conductores contador = 1 If (total4cond > 0) Then While (contador <= total4cond) cadena = "4;" & cuatroConductores(contador).coordx & ";" & _ cuatroConductores(contador).coordy & ";" & _ cuatroConductores(contador).diametro1 & ";" & _ cuatroConductores(contador).diametro2 & ";" & _ cuatroConductores(contador).diametro3 & ";" & _ cuatroConductores(contador).diametro4 & ";" & _ cuatroConductores(contador).disth & ";" & _ cuatroConductores(contador).distv & ";" & _ cuatroConductores(contador).linea & ";" & _ cuatroConductores(contador).numeroglobal & ";" & _ cuatroConductores(contador).tipo & ";" & _ cuatroConductores(contador).intensidad1 & ";" & _ cuatroConductores(contador).desfase1 contador = contador + 1 Print #proyecto, cadena Wend End If ' Obstaculos normales contador = 1 If (totalnorm > 0) Then While (contador <= totalnorm) cadena = "5;" & NormalesPictureBox(contador).altura & ";" & _ NormalesPictureBox(contador).arriba & ";" & _ NormalesPictureBox(contador).coordx & ";" & _ NormalesPictureBox(contador).derecha & ";" & _ NormalesPictureBox(contador).izquierda & ";" & _ NormalesPictureBox(contador).numero & ";" & _ NormalesPictureBox(contador).numeroglobal & ";" & _ NormalesPictureBox(contador).tipo & ";" & _ NormalesPictureBox(contador).anchura contador = contador + 1 Print #proyecto, cadena Wend End If ' Obstaculos elevados contador = 1 If (totalelevados > 0) Then While (contador <= totalelevados) cadena = "6;" & ElevadosPictureBox(contador).altura & ";" & _ ElevadosPictureBox(contador).alturaprohibida & ";" & _ ElevadosPictureBox(contador).anchura & ";" & _ ElevadosPictureBox(contador).apoyado & ";" & _ ElevadosPictureBox(contador).coordx & ";" & _ ElevadosPictureBox(contador).dcha & ";" & _ ElevadosPictureBox(contador).distanciaAlSuelo & ";" & _ ElevadosPictureBox(contador).inferior & ";" & _ ElevadosPictureBox(contador).izda & ";" & _ ElevadosPictureBox(contador).numeroglobal & ";" & _ ElevadosPictureBox(contador).tipo contador = contador + 1 Print #proyecto, cadena Wend End If ' Si tenemos la posicion de lo(s) lazo(s), tambien se guarda(n). contador = 1 If (totalLazos > 0) Then Print #proyecto, "Lazos:" While (contador <= totalLazos) If Lazos(contador).tipo = "2" Then ' Lazo 2 conductores ' Posición. cadena = "2;" & Lazos(contador).x1 & ";" & Lazos(contador).y1 & ";" & _ Lazos(contador).x2 & ";" & Lazos(contador).y2 & _ ";" & Lazos(contador).pasivo & ";" ' Si es pasivo grabamos Xc1. If Lazos(contador).pasivo = True Then cadena = cadena & Lazos(contador).usaFc & ";" cadena = cadena & Lazos(contador).xc1 & ";" Else ' Si es activo se graban las intensidades y desfases. cadena = cadena & Lazos(contador).I1 & ";" & _ Lazos(contador).theta1 & ";" & Lazos(contador).xcampo _ & ";" & Lazos(contador).ycampo & ";" & _ Lazos(contador).Isugerida & ";" End If ' Y ahora nombre de conductor, R', rgm y coste. cadena = cadena & Lazos(contador).nombreConductor & ";" & _ Lazos(contador).RConductor & ";" & Lazos(contador).rgmConductor & ";" & _ Lazos(contador).longitud & ";" & Lazos(contador).costeConductor & ";" ' Finalmente datos del poste cadena = cadena & Lazos(contador).nombrePoste & ";" & _ Lazos(contador).alturaPoste & ";" & Lazos(contador).costePoste & ";" ElseIf Lazos(contador).tipo = "3" Then ' Lazos 3 conductores. ' Posición. cadena = "3;" & Lazos(contador).x1 & ";" & Lazos(contador).y1 & ";" & _ Lazos(contador).x2 & ";" & Lazos(contador).y2 & ";" & _ Lazos(contador).x3 & ";" & Lazos(contador).y3 & ";" & _ Lazos(contador).pasivo & ";" ' Si es pasivo grabamos Xc1, Xc2 y Xc3. If Lazos(contador).pasivo = True Then cadena = cadena & Lazos(contador).usaFc & ";" cadena = cadena & Lazos(contador).xc1 & ";" & _ Lazos(contador).xc2 & ";" & Lazos(contador).xc3 & ";" Else ' Si es activo se graban las intensidades y desfases. cadena = cadena & Lazos(contador).I1 & ";" & _ Lazos(contador).theta1 & ";" & Lazos(contador).I2 & ";" & _ Lazos(contador).theta2 & ";" & Lazos(contador).xcampo & ";" & _ Lazos(contador).ycampo & ";" & Lazos(contador).Isugerida _ & ";" & Lazos(contador).Isugerida2 & ";" End If ' Y ahora nombre de conductor, R' y rgm cadena = cadena & Lazos(contador).nombreConductor & ";" & _ Lazos(contador).RConductor & ";" & Lazos(contador).rgmConductor & ";" & _ Lazos(contador).longitud & ";" & Lazos(contador).costeConductor & ";" ' Finalmente datos del poste cadena = cadena & Lazos(contador).nombrePoste & ";" & _ Lazos(contador).alturaPoste & ";" & Lazos(contador).costePoste & ";" Else ' Lazos 4 conductores. ' Posición. cadena = "4;" & Lazos(contador).x1 & ";" & Lazos(contador).y1 & ";" & _ Lazos(contador).x2 & ";" & Lazos(contador).y2 & ";" & _ Lazos(contador).x3 & ";" & Lazos(contador).y3 & ";" & _ Lazos(contador).x4 & ";" & Lazos(contador).y4 & ";" & _ Lazos(contador).pasivo & ";" ' Si es activo grabamos intensidades y desfases. If Lazos(contador).pasivo = False Then cadena = cadena & Lazos(contador).I1 & ";" & Lazos(contador).theta1 & _ ";" & Lazos(contador).I2 & ";" & Lazos(contador).theta2 & ";" _ & Lazos(contador).xcampo & ";" & Lazos(contador).ycampo & ";" & _ Lazos(contador).Isugerida & ";" & Lazos(contador).Isugerida2 & ";" Else ' Si es pasivo grabamos Xc1 y Xc3 cadena = cadena & Lazos(contador).usaFc & ";" cadena = cadena & Lazos(contador).xc1 & ";" & Lazos(contador).xc3 & ";" End If ' Y ahora nombre de conductor, R' y rgm cadena = cadena & Lazos(contador).nombreConductor & ";" & _ Lazos(contador).RConductor & ";" & Lazos(contador).rgmConductor & ";" & _ Lazos(contador).longitud & ";" & Lazos(contador).costeConductor & ";" ' Finalmente datos del poste cadena = cadena & Lazos(contador).nombrePoste & ";" & _ Lazos(contador).alturaPoste & ";" & Lazos(contador).costePoste & ";" End If ' Grabamos el lazo actual en fichero. Print #proyecto, cadena contador = contador + 1 Wend End If Print #proyecto, "FIN" Close #proyecto Else MsgBox "El proyecto no se ha grabado.", vbExclamation, "MitLoop" End If End Sub Sub añadeLazoPasivo() Dim unlazo As lazo elementos = elementos + 1 With unlazo .pasivo = True .numeroglobal = elementos .numero = totalLazos + 1 .tipo = "2" If FormLazoPasivo.Option1.Value = True Then .xc1 = CSng(FormLazoPasivo.Text9.Text) Else .xc1 = CSng(FormLazoPasivo.Text12.Text) End If .x1 = CSng(FormLazoPasivo.Text1.Text) .y1 = CSng(FormLazoPasivo.Text2.Text) .x2 = CSng(FormLazoPasivo.Text3.Text) .y2 = CSng(FormLazoPasivo.Text4.Text) .x3 = "" .y3 = "" .x4 = "" .y4 = "" .nombreConductor = FormLazoPasivo.Text15.Text .RConductor = FormLazoPasivo.Text16.Text .rgmConductor = FormLazoPasivo.Text17.Text .longitud = FormLazoPasivo.Text18.Text .costeConductor = FormLazoPasivo.Text19.Text .nombrePoste = FormLazoPasivo.Text20.Text .alturaPoste = FormLazoPasivo.Text21.Text .costePoste = FormLazoPasivo.Text22.Text End With ' Esta variable booleana nos dice si los valores que ' se almacenan en Xc1, Xc2 y Xc3 son impedancias o ' bien valores p.u. If FormLazoPasivo.Option1 = True Then unlazo.usaFc = False Else unlazo.usaFc = True End If ' Si es lazo de 4 conductores If FormLazoPasivo.Text5.Text <> "N/A" And FormLazoPasivo.Text7.Text <> "N/A" Then With unlazo .tipo = "4" .x3 = CSng(FormLazoPasivo.Text5.Text) .y3 = CSng(FormLazoPasivo.Text6.Text) .x4 = CSng(FormLazoPasivo.Text7.Text) .y4 = CSng(FormLazoPasivo.Text8.Text) End With If unlazo.usaFc = True Then If FormLazoPasivo.Text14.Text <> "N/A" Then unlazo.xc3 = FormLazoPasivo.Text14.Text End If Else If FormLazoPasivo.Text11.Text <> "N/A" Then unlazo.xc3 = FormLazoPasivo.Text11.Text End If End If ' Y si es de 3 conductores ElseIf FormLazoPasivo.Text5.Text <> "N/A" Then With unlazo .tipo = "3" .x3 = CSng(FormLazoPasivo.Text5.Text) .y3 = CSng(FormLazoPasivo.Text6.Text) End With If unlazo.usaFc = True Then If FormLazoPasivo.Text13.Text <> "N/A" Then unlazo.xc2 = FormLazoPasivo.Text13.Text End If If FormLazoPasivo.Text14.Text <> "N/A" Then unlazo.xc3 = FormLazoPasivo.Text14.Text End If Else If FormLazoPasivo.Text10.Text <> "N/A" Then unlazo.xc2 = FormLazoPasivo.Text10.Text End If If FormLazoPasivo.Text11.Text <> "N/A" Then unlazo.xc3 = FormLazoPasivo.Text11.Text End If End If End If ' Cerramos el formulario Unload FormLazoPasivo ' Añadimos el lazo al array If totalLazos = 0 Then totalLazos = 1 ReDim Lazos(1) Lazos(1) = unlazo Else totalLazos = totalLazos + 1 ReDim Preserve Lazos(totalLazos) Lazos(UBound(Lazos)) = unlazo End If RedibujaImagen End Sub Sub añadeLazoActivo() Dim unlazo As lazo elementos = elementos + 1 With unlazo .pasivo = False .numeroglobal = elementos .numero = totalLazos + 1 .tipo = "2" .nombreConductor = FormLazoActivo.Text16.Text .RConductor = FormLazoActivo.Text17.Text .rgmConductor = FormLazoActivo.Text18.Text .longitud = FormLazoActivo.Text20.Text .costeConductor = FormLazoActivo.Text21.Text .nombrePoste = FormLazoActivo.Text22.Text .alturaPoste = FormLazoActivo.Text23.Text .costePoste = FormLazoActivo.Text24.Text .I1 = CSng(FormLazoActivo.Text3.Text) .theta1 = CSng(FormLazoActivo.Text13.Text) .x1 = CSng(FormLazoActivo.Text5.Text) .y1 = CSng(FormLazoActivo.Text6.Text) .x2 = CSng(FormLazoActivo.Text7.Text) .y2 = CSng(FormLazoActivo.Text8.Text) .x3 = "" .y3 = "" .x4 = "" .y4 = "" ' Si se ha calculado el punto donde se quiere minimizar el campo, se añade If Len(FormLazoActivo.Text1.Text) > 0 Then .xcampo = FormLazoActivo.Text1.Text If Len(FormLazoActivo.Text4.Text) > 0 Then .ycampo = FormLazoActivo.Text4.Text ' Si se tiene también la intensidad se añade If Len(FormLazoActivo.Text2.Text) > 0 Then .Isugerida = FormLazoActivo.Text2.Text Else .Isugerida = "N/A" End If If Len(FormLazoActivo.Text19.Text) > 0 Then .Isugerida2 = FormLazoActivo.Text19.Text Else .Isugerida2 = "N/A" End If End With ' Si es lazo de 4 conductores If FormLazoActivo.Text9.Text <> "N/A" And FormLazoActivo.Text11.Text <> "N/A" Then With unlazo .tipo = "4" .x3 = CSng(FormLazoActivo.Text9.Text) .y3 = CSng(FormLazoActivo.Text10.Text) .x4 = CSng(FormLazoActivo.Text11.Text) .y4 = CSng(FormLazoActivo.Text12.Text) .I2 = CSng(FormLazoActivo.Text14.Text) .theta2 = CSng(FormLazoActivo.Text15.Text) End With ' Y si es de 3 conductores ElseIf FormLazoActivo.Text9.Text <> "N/A" And FormLazoActivo.Text11 = "N/A" Then With unlazo .tipo = "3" .x3 = CSng(FormLazoActivo.Text9.Text) .y3 = CSng(FormLazoActivo.Text10.Text) .I2 = CSng(FormLazoActivo.Text14.Text) .theta2 = CSng(FormLazoActivo.Text15.Text) End With End If ' Cerramos el formulario Unload FormLazoActivo ' Añadimos el lazo al array If totalLazos = 0 Then totalLazos = 1 ReDim Lazos(1) Lazos(1) = unlazo Else totalLazos = totalLazos + 1 ReDim Preserve Lazos(totalLazos) Lazos(UBound(Lazos)) = unlazo End If ' Si alguno de los conductores que forman el lazo se va a situar sobre ' algo que no sea el fondo es porque estara en un sitio no permitido. Se deja ' pero se avisa Select Case unlazo.tipo Case Is = "2" xx1 = CInt((unlazo.x1 - Principal.xminima) * factor) yy1 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y1 * factor) xx2 = CInt((unlazo.x2 - Principal.xminima) * factor) yy2 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y2 * factor) If ((Principal.Picturedef.Point(xx1, yy1) <> 13158600 And _ Principal.Picturedef.Point(xx1, yy1) <> 1) Or _ (Principal.Picturedef.Point(xx2, yy2) <> 13158600 And _ Principal.Picturedef.Point(xx2, yy2) <> 1)) Then If Principal.idioma = "Español" Then MsgBox "El lazo que va a añadir está situado en una " & _ "zona no permitida", vbExclamation, "MitLoop" Else MsgBox "The loop you're about to add is placed in a " & _ "forbidden area", vbExclamation, "MitLoop" End If End If Case Is = "3" xx1 = CInt((unlazo.x1 - Principal.xminima) * factor) yy1 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y1 * factor) xx2 = CInt((unlazo.x2 - Principal.xminima) * factor) yy2 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y2 * factor) xx3 = CInt((unlazo.x3 - Principal.xminima) * factor) yy3 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y3 * factor) If ((Principal.Picturedef.Point(xx1, yy1) <> 13158600 And _ Principal.Picturedef.Point(xx1, yy1) <> 1) Or _ (Principal.Picturedef.Point(xx2, yy2) <> 13158600 And _ Principal.Picturedef.Point(xx2, yy2) <> 1) Or _ (Principal.Picturedef.Point(xx3, yy3) <> 13158600 And _ Principal.Picturedef.Point(xx3, yy3) <> 1)) Then If Principal.idioma = "Español" Then MsgBox "El lazo que va a añadir está situado en una " & _ "zona no permitida", vbExclamation, "MitLoop" Else MsgBox "The loop you're about to add is placed in a " & _ "forbidden area", vbExclamation, "MitLoop" End If End If Case Is = "4" xx1 = CInt((unlazo.x1 - Principal.xminima) * factor) yy1 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y1 * factor) xx2 = CInt((unlazo.x2 - Principal.xminima) * factor) yy2 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y2 * factor) xx3 = CInt((unlazo.x3 - Principal.xminima) * factor) yy3 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y3 * factor) xx4 = CInt((unlazo.x4 - Principal.xminima) * factor) yy4 = CInt(Principal.Picturedef.Height * lineaSuelo - unlazo.y4 * factor) If ((Principal.Picturedef.Point(xx1, yy1) <> 13158600 And _ Principal.Picturedef.Point(xx1, yy1) <> 1) Or _ (Principal.Picturedef.Point(xx2, yy2) <> 13158600 And _ Principal.Picturedef.Point(xx2, yy2) <> 1) Or _ (Principal.Picturedef.Point(xx3, yy3) <> 13158600 And _ Principal.Picturedef.Point(xx3, yy3) <> 1) Or _ (Principal.Picturedef.Point(xx4, yy4) <> 13158600 And _ Principal.Picturedef.Point(xx4, yy4) <> 1)) Then If Principal.idioma = "Español" Then MsgBox "El lazo que va a añadir está situado en una " & _ "zona no permitida", vbExclamation, "MitLoop" Else MsgBox "The loop you're about to add is placed in a " & _ "forbidden area", vbExclamation, "MitLoop" End If End If End Select RedibujaImagen End Sub Function borralazo(ByVal XX As Single, ByVal yy As Single) Dim u As Integer Dim i As Integer Dim t As Integer Dim mensaje As String Dim boton As Integer Dim distancia1 As Single Dim distancia2 As Single Dim distancia3 As Single Dim distancia4 As Single Dim lazoaux As lazo i = 1 yy = Principal.Picturedef.Height * lineaSuelo - yy While (i <= totalLazos) Select Case Lazos(i).tipo Case Is = "2" ' Lazo de 2 conductores distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y1 * factor - yy) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y2 * factor - yy) ^ 2) If (distancia1 < 150 Or distancia2 < 150) Then If Principal.idioma = "Español" Then mensaje = "Se borrará el lazo. ¿Continuar?" Else mensaje = "Loop will be deleted. Continue? " End If boton = MsgBox(mensaje, vbYesNo + vbInformation, "MitLoop") If boton = 6 Then actualiza_global (Lazos(i).numeroglobal) totalLazos = totalLazos - 1 u = UBound(Lazos) lazoaux = Lazos(i) For t = i To u - 1 Lazos(t) = Lazos(t + 1) Next Lazos(u) = lazoaux If (u = 1) Then Erase Lazos Else ReDim Preserve Lazos(u - 1) End If RedibujaImagen End If End If Case Is = "3" ' Lazo de 3 conductores (activo o pasivo) distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y1 * factor - yy) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y2 * factor - yy) ^ 2) distancia3 = Sqr(((Lazos(i).x3 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y3 * factor - yy) ^ 2) If (distancia1 < 150 Or distancia2 < 150 Or distancia3 < 150) Then If Principal.idioma = "Español" Then mensaje = "Se borrará el lazo. ¿Continuar?" Else mensaje = "Loop will be deleted. Continue? " End If boton = MsgBox(mensaje, vbYesNo + vbInformation, "MitLoop") If boton = 6 Then actualiza_global (Lazos(i).numeroglobal) totalLazos = totalLazos - 1 u = UBound(Lazos) lazoaux = Lazos(i) For t = i To u - 1 Lazos(t) = Lazos(t + 1) Next Lazos(u) = lazoaux If u = 1 Then Erase Lazos Else ReDim Preserve Lazos(u - 1) End If RedibujaImagen End If End If Case Is = "4" ' Lazo de 4 conductores (activo o pasivo) distancia1 = Sqr(((Lazos(i).x1 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y1 * factor - yy) ^ 2) distancia2 = Sqr(((Lazos(i).x2 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y2 * factor - yy) ^ 2) distancia3 = Sqr(((Lazos(i).x3 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y3 * factor - yy) ^ 2) distancia4 = Sqr(((Lazos(i).x4 - Principal.xminima) * factor - XX) ^ 2 + _ (Lazos(i).y4 * factor - yy) ^ 2) If (distancia1 < 150 Or distancia2 < 150 Or distancia3 < 150 _ Or distancia4 < 150) Then If Principal.idioma = "Español" Then mensaje = "Se borrará el lazo. ¿Continuar?" Else mensaje = "Loop will be deleted. Continue? " End If boton = MsgBox(mensaje, vbYesNo + vbInformation, "MitLoop") If boton = 6 Then actualiza_global (Lazos(i).numeroglobal) totalLazos = totalLazos - 1 u = UBound(Lazos) lazoaux = Lazos(i) For t = i To u - 1 Lazos(t) = Lazos(t + 1) Next Lazos(u) = lazoaux If (u = 1) Then Erase Lazos Else ReDim Preserve Lazos(u - 1) End If RedibujaImagen End If End If End Select i = i + 1 Wend End Function Sub ZoomAqui() ' Esta sub hace el zoom con centro donde esté el ratón End Sub