Página de inicio Mi Correo






   » Foro
   » Nuevo Foro
   » Mi Correo
   » Mis Actividades...


--- Novedades ---



    
  » CNC » Programación (6 de 8)   

.: CNC - Visor de Archivos PLT Previamente ordenado

Repasemos un poco para ver que es lo que tenemos hasta el momento.

Lo primero, es el punto actual o previo al movimiento PrevX.PrevY, luego tenemos el punto de destino o el nuevo punto, dado por NewX, NewY, A demás tenemos las distancias entre estos dos punto xi,yi

Lo que necesitamos ahora es saber cuanto avanzar en cada coordenada para llegar hasta NewX,NewY y a estas nuevas variables las llamaré Plusx,Plusy este par determinará donde está el punto a pintar, por ejemplo

Caso 1: Si xi = yi significa que la línea está a 45 grados, entonces PlusX=1 y PlusY=1, es decir, al punto actual se le sumará 1 en el Eje X, y 1 en el Eje Y

Caso 2: Si xi > yi, en este caso dijimos que avanzaríamos un punto en el eje más largo, entonces PlusX=1 y PlusY=(yi/xi). Ahora bien, si recuerdas, el cociente y/x es la pendiente de una recta, que si el cociente se efectúa, lo que tendrás es cuanto debes avanzar en el EjeY (matemáticas de primer año)

Caso 3: Si xi < yi, igual que antes, avanzaremos en el eje más largo, entonces PlusY=1 y PlusX=(xi/yi). Como verás el cociente esta vez es al revés, y tiene que ser así, ya que lo que buscamos es, cuánto avanzar en el EjeX.

En nuestro código de programación quedaría algo así...

'incrementa el eje x, luego calcula el valor de y
If xi > yi Then
    nPlusx = 1
    nPlusy = yi / xi
End If
'incrementa el eje y, luego calcula el valor de x
If xi < yi Then
    nPlusx = xi / yi
    nPlusy = 1
End If
'incrementa los dos por igual
If xi = yi Then
    nPlusx = 1
    nPlusy = 1
End If

De acuerdo, sólo nos está faltando una cosa, es saber cual de los 4 puntos que tenemos disponibles es el que estamos buscando, y con esto ya terminamos...

Esto ya es más fácil, mira...
  • Si PrevX < NewX, vamos a la Derecha, entonces le sumamos a PrevX el incremento que le corresponde (PlusX)
  • Si PrevX > NewX, vamos a la Izquierda, entonces le restamos a PrevX el incremento que le corresponde (PlusX)
  • Si PrevY < NewY, vamos Arriba, entonces le sumamos a PrevY el incremento que le corresponde (PlusY)
  • Si PrevY > NewY, vamos Abajo, entonces le restamos a PrevY el incremento que le corresponde (PlusY)

y nuestro código quedaría algo así...

      If nPrevx < nNewX Then nPrevx = nPrevx + nPlusx
      If nPrevx > nNewX Then nPrevx = nPrevx - nPlusx
      If nPrevy < nNewY Then nPrevy = nPrevy + nPlusy
      If nPrevy > nNewY Then nPrevy = nPrevy - nPlusy

y Ahora llegó el momento de pintar, puesto que cuando el programa se ejecute, pasará por aquí toda vez que deba avanzar un punto, entonces es aquí donde pintamos un píxel, y la instrucción será...

If bLapiz = True Then Picture1.PSet (nPrevx, -nPrevy), RGB(255, 0, 0)

bLapiz es una variable que determina si se debe o no pintar un píxel, se pondrá a True o False según la instrucción sea PU,PA o PD

y Bueno, el programa terminará cuando PrevX=NewX

Ejemmmmm... te diste cuenta que la instrucción para pintar un píxel tiene la coordenada en el EjeY con signo negativo...???

Ya me estaba olvidando de eso, bueno, lo que hice fue cambiar las coordenadas del Picture1 en lugar de que sea la Esquina Superior Izquierda, será la Esquina Inferior Izquierda

Hay una propiedad del Picture, llamada ScaleMode que por defecto está en 1-Twip y que está muy ligada a la propiedad ScaleTop, cuando esta última propiedad vale cero las coordenadas de origen están en la Esquina Superior Izquierda, ahora, si le pones a ScaleTop el valor de la altura del Picture1 con signo negativo, estarás bajando las coordenadas de origen del Picture, y ScaleMode pasará automáticamente a 0-User

Listo...!!!, hemos terminado con este programa, pero no sin antes ver una imagen previa de lo que es posible graficar, puedes ampliar la imagen para verla...

El código del programa, también incluye otros detalles, cosas simples como... la reubicación de controles en caso de ampliar o disminuir las dimensiones del formulario cuando se encuentra en Modo de Ejecución, botones como... Continuar, Detener, que alguna vez me hicieron falta mientras estaba probando el código, y otras cosas más...

Ahora, Las optimizaciones para este programa, quedan en tus manos, lo único que puedo hacer al respecto es dejarte el código del programa para que lo estudies...

Bajar Código Fuente y Ejecutable

Suerte..., y espero que haya sido productivo, que sirva para progresar en conocimiento, y que compartas tus logros, de lo contrario de nada habrá servido todo este trabajo.

Bien, nos queda un último programa por ver, y es el que controla la máquina, sus motores, y la forma de comunicarse con la interfaz de control, ahí nos vemos...



R-Luis...


<--Anterior   Introducción   Siguiente -->
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
Tabla de Referencias


    
--| |--