Ver Mensaje Individual
  #7 (permalink)  
Antiguo 11/05/2011, 15:11
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: txt y coordenadas en vb6

Saludos.
Te he dado cuartel para que no te encontrases el tema solucionado despues de comerte la cabeza, compañero lokoman.
El caso es que creo que no has pillado bien el asunto.
Las coordenadas positivas y negativas deben significar que cada linea comienza donde acabó la anterior.
Aunque no tengo claro como se hace para comenzar una linea nueva. Cada bloque deberia ser una parte del grafico, y debería tener al comienzo las coordenadas de inicio. Yo he usado el centro del PictureBox como inicio. A ver que os parece:

Se necesita un TextBox, un PictureBox grandecito y 3 botones (Command1, 2 y 3), y las coordenadas en un fichero llamado "Fichero.txt" de momento.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Type Coordenadas
  4.   X As Long
  5.   Y As Long
  6. End Type
  7.  
  8. Private Sub Command1_Click()
  9.   ' carga las coordenadas del fichero y las muestra en el textbox.
  10.  Dim F As Long
  11.   Dim F2 As Long
  12.   Dim Block() As Coordenadas
  13.   Text1.Text = ""
  14.   ' intentamos cargar hasta 100 posibles blocks
  15.  For F = 1 To 100
  16.     If CargaCoordenadas("Fichero.txt", F, Block) Then
  17.       Text1.Text = Text1.Text & "Block" & F & vbCrLf & Block(0).X & ", " & Block(0).Y & vbCrLf
  18.       For F2 = 1 To UBound(Block)
  19.         Text1.Text = Text1.Text & Block(F2).X & ", " & Block(F2).Y & vbCrLf
  20.       Next F2
  21.     Else
  22.       ' si un Block no existe se para y no se cargan mas
  23.      Exit For
  24.     End If
  25.   Next F
  26. End Sub
  27.  
  28. Private Sub Command2_Click()
  29.   ' carga las coordenadas del Block 2 y las muestra en un grafico
  30.  Dim Block() As Coordenadas
  31.   Picture1.Cls
  32.   CargaCoordenadas "Fichero.txt", 2, Block
  33.   MuestraGrafico Block, Picture1, vbRed, "Block 2"
  34. End Sub
  35.  
  36. Private Sub Command3_Click()
  37.   ' carga coordenadas aleatorias y las muestra en un grafico
  38.  Dim Block() As Coordenadas
  39.   Dim F As Long
  40.   Picture1.Cls
  41.   CargaCoordenadasAleatorias Block, 100, 300
  42.   ' las mostramos en el textbox
  43.  Text1.Text = "Block Aleatorio" & vbCrLf & Block(0).X & ", " & Block(0).Y & vbCrLf
  44.   For F = 1 To UBound(Block)
  45.     Text1.Text = Text1.Text & Block(F).X & ", " & Block(F).Y & vbCrLf
  46.   Next F
  47.  
  48.   MuestraGrafico Block, Picture1, vbRed, "Block Aleatorio"
  49. End Sub
  50.  
  51. Private Function CargaCoordenadas(ByVal FicheroTXT As String, ByVal NumBlock As Long, Matriz() As Coordenadas) As Boolean
  52.   ' carga una matriz con las coordenadas del Block elegido y del fichero elegido
  53.  Dim NumFichero As Integer
  54.   Dim Linea As String
  55.   Dim BlockABuscar As String
  56.   Dim Coord() As String
  57.   Dim Encontrado As Boolean
  58.   BlockABuscar = "BLOCK " & NumBlock
  59.   ReDim Matriz(0)
  60.   On Local Error GoTo ErrorSub
  61.   NumFichero = FreeFile
  62.   Open FicheroTXT For Input As NumFichero
  63.   Do Until EOF(NumFichero)
  64.     Line Input #NumFichero, Linea
  65.     If Encontrado = False Then
  66.       If UCase$(Trim$(Linea)) = BlockABuscar Then
  67.         Encontrado = True
  68.         GoTo Otro
  69.       End If
  70.     End If
  71.     If Encontrado = True Then
  72.       If UCase$(Left$(Trim$(Linea), 5)) = "BLOCK" Then Exit Do
  73.       Coord = Split(Linea, ",")
  74.       ReDim Preserve Coord(1) ' nos aseguramos de que se ha creado la matriz
  75.      Matriz(UBound(Matriz)).X = Val(Coord(0))
  76.       Matriz(UBound(Matriz)).Y = Val(Coord(1))
  77.       ReDim Preserve Matriz(UBound(Matriz) + 1)
  78.     End If
  79. Otro:
  80.   Loop
  81. ErrorSub:
  82.   If Err.Number <> 0 Then MsgBox Err.Description
  83.   CargaCoordenadas = Encontrado
  84.   Err.Clear
  85.   On Local Error Resume Next
  86.   Close
  87.   If UBound(Matriz) > 0 Then ReDim Preserve Matriz(UBound(Matriz) - 1)
  88. End Function
  89.  
  90. Private Sub MuestraGrafico(Matriz() As Coordenadas, ByVal Picture As PictureBox, Optional ByVal sColor As Long = vbBlue, Optional ByVal Titulo As String = "")
  91.   Dim F As Long
  92.   Dim CoordAct As Coordenadas
  93.   On Local Error Resume Next
  94.   Picture.AutoRedraw = True
  95.   Picture.Print Titulo
  96.   CoordAct.X = (Picture.Width) / 2
  97.   CoordAct.Y = (Picture.Height) / 2
  98.   For F = 0 To UBound(Matriz)
  99.     Picture.Line (CoordAct.X, CoordAct.Y)-(CoordAct.X + Matriz(F).X, CoordAct.Y + Matriz(F).Y), sColor
  100.     CoordAct.X = CoordAct.X + Matriz(F).X
  101.     CoordAct.Y = CoordAct.Y + Matriz(F).Y
  102.   Next F
  103. End Sub
  104.  
  105. Private Sub CargaCoordenadasAleatorias(Matriz() As Coordenadas, Cantidad As Long, Optional ByVal MaxLen As Long = 250)
  106.   Dim F As Long
  107.   ReDim Matriz(Cantidad)
  108.   For F = 0 To Cantidad - 1
  109.     Matriz(F).X = Int(Rnd * (MaxLen * 2)) - MaxLen
  110.     Matriz(F).Y = Int(Rnd * (MaxLen * 2)) - MaxLen
  111.   Next F
  112. End Sub
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 11/05/2011 a las 15:26