(The subroutine "Sub Manipulator", not working well, now this right!)
Please notify any problems or mistake!
Here Part-2
Code: Select all
'INIT SUBS AND FUNCTION SHAPES ***********************************************
'INIT T_INIT
SUB T_INIT () 'INIT TURTLE
'PARAMETERS COMMONS
SCREENINFO T_W , T_H
WINDOW (0,0)-(T_W,T_H)
T_CENTER_SCREEN_X = INT (T_W / 2)
T_CENTER_SCREEN_Y = INT (T_H / 2)
T_POSITION_X = T_CENTER_SCREEN_X
T_POSITION_Y = T_CENTER_SCREEN_Y
T_GT (T_POSITION_X , T_POSITION_Y)
T_HEADING = 0
T_ORIENT 0
T_PEN = 1
T_SHAPES = 1'ENABLES OR DISABLES THE SHAPES , VALUES 0 / 1
T_THICKNESS = 0 'THICKNESS OF LINES, ARCS, CIRCLES... , VALUES 0...
T_BOLD = 0 'ENABLES OR DISABLES THE BOLD TEXT , VALUES 0 / 1
T_HOLE = 0 'ENABLE OR DISABLE THE HOLE TEXT , VALUES 0 / 1
T_COLOR = 12 'COLOR LINES, ARCS, CIRCLES, ELLIPSES... VALUES 0 ..
T_HOLE_COLOR = 14 'COLORED HOLE CHARS VALUES 0 ..
T_GROSS = 2 'GROSOR INTERIOR TEXTO , VALUES 1...4
T_SCALE = 1 ' SCALE SHAPES, TEXT, NUMBERS...
TX_INIT
END SUB
'END T_INIT
'INIT T_GRID_T
SUB T_GRID (BYVAL T_STEP_GRID AS DOUBLE, T_GRID_OPTION AS INTEGER) 'DRAW A GRIDS
'T_GRID_OPTION = 1 DRAW THE GRID OF TURTLE WOLD
'T_GRID_OPTION = 2 DRAW THE GRID OF SCREEN COORDINATES
'T_GRID_OPTION = 3 DRAW THE GRID OF RADIUS AN ANGLES
DIM AS INTEGER T_N , GT_SHAPES , GT_HOLE , GT_COLOR , GT_PEN , GT_HOLE_COLOR , GT_BOLD
DIM AS DOUBLE GT_SCALE , GT_THICKNESS , GT_POSITION_X , GT_POSITION_Y
DIM AS INTEGER GTX_KEY , GTX_HOLE , GTX_COLOR , GTX_PEN , GTX_HOLE_COLOR , GTX_BOLD
DIM AS INTEGER TX_AI, TX_AF
DIM AS DOUBLE GTX_SCALE , GTX_THICKNESS , GTX_POSITION_X , GTX_POSITION_Y , GTX_SEPARATION , GTX_ROTATE
DIM AS DOUBLE TX_CONT
IF T_GRID_OPTION = 3 THEN TX_AI = 0 : TX_AF = 360 : TX_CONT = 360 : END IF
IF T_GRID_OPTION = 4 THEN TX_AI = -90 : TX_AF = 270 : TX_CONT = 0 : END IF
GT_SHAPES = T_SHAPES
GT_SCALE = T_SCALE
GT_BOLD = T_BOLD
GT_HOLE = T_HOLE
GT_COLOR = T_COLOR
GT_HOLE_COLOR = T_HOLE_COLOR
GT_THICKNESS = T_THICKNESS
GT_PEN = T_PEN
GT_POSITION_X = T_POSITION_X
GT_POSITION_Y = T_POSITION_Y
GTX_KEY = TX_KEY
GTX_SCALE = TX_SCALE
GTX_BOLD = TX_BOLD
GTX_HOLE = TX_HOLE
GTX_COLOR = TX_COLOR
GTX_HOLE_COLOR = TX_HOLE_COLOR
GTX_THICKNESS = TX_THICKNESS
GTX_PEN = TX_PEN
GTX_POSITION_X = TX_POSITION_X
GTX_POSITION_Y = TX_POSITION_Y
GTX_SEPARATION = TX_SEPARATION
GTX_ROTATE = TX_ROTATE
TX_SCALE = 1
TX_KEY = 1
TX_BOLD = 0
TX_HOLE = 0
TX_COLOR = 15
TX_ORIENT 0
TX_ROTATE = 90
TX_SEPARATION = 0
IF T_GRID_OPTION = 1 OR T_GRID_OPTION = 2 THEN
FOR T_N = 0 TO TX_H STEP T_STEP_GRID
LINE(0 , T_N) - (TX_W , T_N) , 8 'LINEAS HORIZONTALES
NEXT T_N
FOR T_N = 0 TO TX_W STEP T_STEP_GRID
LINE(T_N , 0) - (T_N , TX_H) , 8 'LINEAS VERTICALES
NEXT T_N
END IF
IF T_GRID_OPTION = 3 OR T_GRID_OPTION = 4 THEN
FOR T_N = 0 TO TX_H STEP T_STEP_GRID
CIRCLE (TX_W/2, TX_H/2), T_N,8 'DIBUJA CIRCULOS CONCENTRICOS
NEXT T_N
FOR T_N = TX_AI TO TX_AF STEP T_STEP_GRID
'AQUI DIBUJAMOS LOS RADIOS/ANGULOS
TX_ORIENT T_N
TX_POSITION (0/TX_SCALE ,0/TX_SCALE)
TX_COLOR = 8
TX_FD TX_W
'AQUI ESCRIBIMOS LOS ANGULOS
TX_POSITION (0/T_SCALE ,0/T_SCALE)
TX_FD 195
TX_ORIENT 0
TX_THICKNESS = 0
TX_COLOR = 15
TX_TEXT STR(ABS(INT(TX_CONT)))
IF T_GRID_OPTION = 3 THEN TX_CONT = TX_CONT - T_STEP_GRID : END IF
IF T_GRID_OPTION = 4 THEN TX_CONT = TX_CONT - T_STEP_GRID : END IF
NEXT T_N
END IF
IF T_GRID_OPTION = 1 OR T_GRID_OPTION = 2 OR T_GRID_OPTION = 3 THEN
TX_POSITION (0 , 0)
END IF
IF T_GRID_OPTION = 1 THEN
'AXE X+
FOR T_N = TX_W/2 TO TX_W STEP T_STEP_GRID
TX_POSITION_X = T_N
TX_POSITION_Y = TX_H/2
TX_TEXT STR(INT(T_N-TX_W/2))
NEXT T_N
'AXE X-
FOR T_N = TX_W/2 TO 0 STEP -T_STEP_GRID
TX_POSITION_X = T_N
TX_POSITION_Y = TX_H/2
TX_TEXT STR(INT(T_N-TX_W/2))
NEXT T_N
'AXE Y+
FOR T_N = TX_H/2 TO TX_H STEP T_STEP_GRID
TX_POSITION_X = TX_W/2
TX_POSITION_Y = T_N
TX_TEXT STR(INT(T_N-TX_H/2))
NEXT T_N
'AXE Y-
FOR T_N = TX_H/2 TO 0 STEP -T_STEP_GRID
TX_POSITION_X = TX_W/2
TX_POSITION_Y = T_N
TX_TEXT STR(INT(T_N-TX_H/2))
NEXT T_N
END IF
IF T_GRID_OPTION = 2 THEN
'AXE X
FOR T_N = 0 TO TX_W STEP T_STEP_GRID
TX_POSITION_X = T_N : TX_POSITION_Y = 0 : TX_TEXT STR(INT(T_N))
TX_POSITION_X = T_N : TX_POSITION_Y = TX_H - T_STEP_GRID + T_STEP_GRID/2 : TX_TEXT STR(INT(T_N))
NEXT T_N
'AXE Y
FOR T_N = 0 TO TX_H STEP T_STEP_GRID
TX_POSITION_X = 0 : TX_POSITION_Y = T_N : TX_TEXT STR(INT(T_N))
TX_POSITION_X = T_W - T_STEP_GRID : TX_POSITION_Y = T_N : TX_TEXT STR(INT(T_N))
NEXT T_N
END IF
T_SHAPES = GT_SHAPES
T_SCALE = GT_SCALE
T_BOLD = GT_BOLD
T_HOLE = GT_HOLE
T_COLOR = GT_COLOR
T_HOLE_COLOR = GT_HOLE_COLOR
T_THICKNESS = GT_THICKNESS
T_PEN = GT_PEN
T_POSITION_X = GT_POSITION_X
T_POSITION_Y = GT_POSITION_Y
TX_KEY = GTX_KEY
TX_SCALE = GTX_SCALE
TX_BOLD = GTX_BOLD
TX_HOLE = GTX_HOLE
TX_COLOR = GTX_COLOR
TX_HOLE_COLOR = GTX_HOLE_COLOR
TX_THICKNESS = GTX_THICKNESS
TX_PEN = GTX_PEN
TX_POSITION_X = GTX_POSITION_X
TX_POSITION_Y = GTX_POSITION_Y
TX_ROTATE = GTX_ROTATE
T_POSITION (0 , 0)
END SUB
FUNCTION T_RADIANS(BYVAL T_ANGLE AS DOUBLE) AS DOUBLE 'TRANSFORM DEGREES TO RADIANS
RETURN (T_ANGLE * 0.0174532925199433)
END FUNCTION
FUNCTION T_APHOTEME (BYVAL T_R AS DOUBLE , BYVAL T_NSIDE AS INTEGER) AS DOUBLE 'CALCULATE APHOTEME
DIM AS DOUBLE T_RGRAD , T_HIP
T_RGRAD = T_RADIANS(0)
T_X0 = (T_R * COS (T_RGRAD)) + T_POSITION_X
T_Y0 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
T_RGRAD = T_RADIANS(360 / T_NSIDE)
T_X1 = (T_R * COS (T_RGRAD)) + T_POSITION_X
T_Y1 = (T_R * SIN (T_RGRAD)) + T_POSITION_Y
T_X2 = ABS(T_X0 - T_X1)
T_Y2 = ABS(T_Y0 - T_Y1)
T_HIP = SQR((T_X2^2) + (T_Y2^2))
RETURN SQR((T_R^2) - (T_HIP / 2)^2)
END FUNCTION
SUB T_ORIENT (BYVAL T_ANGLE AS DOUBLE) 'SET ORIENTATION TURTLE
T_HEADING = (T_ANGLE * 0.0174532925199433)
END SUB
#MACRO T_DRAW1 ()
'DRAW SHAPES
IF T_PEN = 1 AND T_THICKNESS = 0 AND T_BOLD = 0 THEN LINE (T_POSITION_X , T_POSITION_Y) - (T_NEW_POSITION_X , T_NEW_POSITION_Y) , T_COLOR : END IF
IF T_PEN = 1 AND T_THICKNESS > 0 AND T_BOLD = 1 THEN T_SEGMENT (T_POSITION_X , T_POSITION_Y , T_NEW_POSITION_X , T_NEW_POSITION_Y) : END IF
T_POSITION_X = T_NEW_POSITION_X
T_POSITION_Y = T_NEW_POSITION_Y
#ENDMACRO
SUB T_GT (BYVAL T_X AS DOUBLE , BYVAL T_Y AS DOUBLE) 'GO TO NEW POSITION X , Y
T_X = T_X * T_SCALE
T_Y = T_Y * T_SCALE
T_NEW_POSITION_X = T_CENTER_SCREEN_X + T_X
T_NEW_POSITION_Y = T_CENTER_SCREEN_Y + T_Y
T_DRAW1 ()
END SUB
SUB T_POSITION (BYVAL T_X AS DOUBLE , BYVAL T_Y AS DOUBLE)
T_PEN = 0
T_GT (T_X , T_Y)
T_PEN = 1
END SUB
SUB T_HOME () 'GO HOME TURTLE
T_PEN = 0
T_POSITION_X = T_W \ 2
T_POSITION_Y = T_H \ 2
T_PEN = 1
END SUB
SUB T_BK (BYVAL T_DISTANCE AS DOUBLE) 'FORWARD X DISTANCE
T_DISTANCE = T_DISTANCE * T_SCALE
T_NEW_POSITION_X = T_POSITION_X + (T_DISTANCE * SIN(T_HEADING))
T_NEW_POSITION_Y = T_POSITION_Y - (T_DISTANCE * COS(T_HEADING))
T_DRAW1 ()
END SUB
SUB T_FD (BYVAL T_DISTANCE AS DOUBLE) 'BACK X DISTANCE
T_DISTANCE = T_DISTANCE * T_SCALE
T_NEW_POSITION_X = T_POSITION_X - ( T_DISTANCE * SIN (T_HEADING))
T_NEW_POSITION_Y = T_POSITION_Y + ( T_DISTANCE * COS (T_HEADING))
T_DRAW1 ()
END SUB
SUB T_LT (BYVAL T_ANGLE AS DOUBLE) 'TURN RIGHT
T_HEADING = T_HEADING + (T_ANGLE * 0.0174532925199433)
END SUB
SUB T_RT (BYVAL T_ANGLE AS DOUBLE) 'TURN LEFT
T_HEADING = T_HEADING - (T_ANGLE * 0.0174532925199433)
END SUB
FUNCTION T_LONG (BYVAL T_X1 AS DOUBLE , BYVAL T_Y1 AS DOUBLE , BYVAL T_X2 AS DOUBLE , BYVAL T_Y2 AS DOUBLE) AS DOUBLE 'CALCULATE DISTANCE / LENGHT TWO POINTS
RETURN SQR(ABS((T_X1 - T_X2)^2) + ABS((T_Y1 - T_Y2)^2))
END FUNCTION
#MACRO T_DRAW2 (T_N , T_HIP , T_ANG , T_LX , T_LY , T_LPX , T_LPY , T_DX , T_DY)
T_LY = SIN(T_ANG) * T_N
T_LX = COS(T_ANG) * T_N
IF T_LX1 < T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY + T_LY1 : END IF
IF T_LX1 < T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX1 : T_LPY = T_LY1 - T_LY : END IF
IF T_LX1 > T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
IF T_LX1 > T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX1 - T_LX : T_LPY = T_LY1 - T_LY : END IF
IF T_LX1 = T_LX2 AND T_LY1 < T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 - T_LY : END IF
IF T_LX1 = T_LX2 AND T_LY1 > T_LY2 THEN T_LPX = T_LX + T_LX2 : T_LPY = T_LY2 + T_LY : END IF
IF T_LX1 < T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 - T_LX : T_LPY = T_LY2 + T_LY : END IF
IF T_LX1 > T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX2 + T_LX : T_LPY = T_LY2 + T_LY : END IF
IF T_LX1 = T_LX2 AND T_LY1 = T_LY2 THEN T_LPX = T_LX1 : T_LPY = T_LY1 : END IF
#ENDMACRO
SUB T_SEGMENT (BYVAL T_LX1 AS DOUBLE , BYVAL T_LY1 AS DOUBLE , BYVAL T_LX2 AS DOUBLE , BYVAL T_LY2 AS DOUBLE)
DIM AS INTEGER T_N
DIM AS DOUBLE T_HIP , T_ANG , T_LX , T_LY , T_LPX , T_LPY , T_DX , T_DY
T_DX = ABS (T_LX1 - T_LX2)
T_DY = ABS (T_LY1 - T_LY2)
T_HIP = T_LONG (BYVAL T_LX1 , BYVAL T_LY1 , BYVAL T_LX2 , BYVAL T_LY2 )
T_ANG = ATN(T_DY / T_DX)
IF T_BOLD = 1 THEN
FOR T_N = 0 TO T_HIP
T_DRAW2 (T_N , T_HIP , T_ANG , T_LX , T_LY , T_LPX , T_LPY , T_DX , T_DY)
IF T_PEN = 1 AND T_BOLD = 0 THEN EXIT FOR
IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX , T_LPY) , T_THICKNESS , T_COLOR , , , , F : END IF
NEXT T_N
END IF
IF T_HOLE = 1 AND T_BOLD = 1 THEN
FOR T_N = 0 TO T_HIP
IF T_PEN = 1 AND T_BOLD = 0 THEN EXIT FOR
T_DRAW2 (T_N , T_HIP , T_ANG , T_LX , T_LY , T_LPX , T_LPY , T_DX , T_DY)
IF T_PEN = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_LPX , T_LPY) , T_THICKNESS / T_GROSS , T_HOLE_COLOR , , , , F : END IF
NEXT T_N
END IF
END SUB
'INIT SHAPES / FIGURES ********************************************************
'INIT T_CIRCLE
SUB T_CIRCLE (BYVAL T_R AS DOUBLE)
'DRAW A CIRCLE
'T_R = RADIUS CIRCLE
DIM AS DOUBLE T_GRAD , T_X0 , T_Y0 , T_X1 , T_Y1 , T_X2 , T_Y2 , T_X3 , T_Y3
T_R1 = T_R * T_SCALE
T_X0 = (T_R1 * COS(T_RADIANS (0))) + T_POSITION_X
T_Y0 = (T_R1 * SIN(T_RADIANS (0))) + T_POSITION_Y
T_FIRST_POSITION_X = T_X0
T_FIRST_POSITION_Y = T_Y0
FOR T_GRAD = 0 TO 360
T_X1 = (T_R1 * COS(T_RADIANS (T_GRAD))) + T_POSITION_X
T_Y1 = (T_R1 * SIN(T_RADIANS (T_GRAD))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_X0 , T_Y0) - (T_X1 , T_Y1) , T_COLOR : END IF
IF T_SHAPES = 1 AND T_PEN = 1 AND T_THICKNESS > 0 AND T_BOLD = 1 THEN CIRCLE (T_X1 , T_Y1) , T_THICKNESS , T_COLOR , , , , F : END IF
T_X0 = T_X1
T_Y0 = T_Y1
T_LAST_POSITION_X = T_X1
T_LAST_POSITION_Y = T_Y1
NEXT T_GRAD
IF T_HOLE = 1 THEN
FOR T_GRAD = 0 TO 360
T_X1 = (T_R1 * COS(T_RADIANS (T_GRAD))) + T_POSITION_X
T_Y1 = (T_R1 * SIN(T_RADIANS (T_GRAD))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 AND T_THICKNESS > 0 AND T_BOLD = 1 THEN CIRCLE (T_X1 , T_Y1) , T_THICKNESS / T_GROSS , T_HOLE_COLOR , , , , F : END IF
NEXT T_GRAD
END IF
END SUB
'END T_CIRCLE
'INIT T_ARC_SEC_CIR
SUB T_ARC_SEC_CIR (BYVAL T_R1 AS DOUBLE , BYVAL T_INI AS DOUBLE , BYVAL T_END AS DOUBLE , BYVAL T_ANG_ROT AS DOUBLE , BYVAL T_ARC_SEC_CIRCLE AS INTEGER) 'DRAW A ARC CIRCLE
'DRAW A SECTOR CIR
'T_R = RADIUS CIRCLE
'T_INI = ANGLE INIT
'T_END = ANGLE END
'T_ANG_ROT = ANGLE OF ROTATION
'T_ARC_SEC_CIR = 0 = ARC / 1 = SECTOR
DIM AS DOUBLE T_GRAD , T_X0 , T_Y0 , T_X1 , T_Y1 , T_X2 , T_Y2 , T_X3 , T_Y3
T_R1 = T_R1 * T_SCALE
T_X0 = (T_R1 * COS(T_RADIANS (T_INI)))
T_Y0 = (T_R1 * SIN(T_RADIANS (T_INI)))
T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
T_FIRST_POSITION_X = T_X1:T_FIRST_POSITION_Y = T_Y1
FOR T_GRAD = T_INI TO T_END
T_X2 = (T_R1 * COS(T_RADIANS (T_GRAD)))
T_Y2 = (T_R1 * SIN(T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
'RADIUS
IF T_ARC_SEC_CIRCLE = 1 AND T_GRAD = T_INI AND T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_POSITION_X , T_POSITION_Y) - (T_X3 , T_Y3) , T_COLOR
IF T_ARC_SEC_CIRCLE = 1 AND T_GRAD = T_END AND T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_POSITION_X , T_POSITION_Y) - (T_X3 , T_Y3) , T_COLOR
IF T_ARC_SEC_CIRCLE = 1 AND T_GRAD = T_INI AND T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X , T_POSITION_Y , T_X3 , T_Y3)
IF T_ARC_SEC_CIRCLE = 1 AND T_GRAD = T_END AND T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X , T_POSITION_Y , T_X3 , T_Y3)
'ARC
IF T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_X1 , T_Y1) - (T_X3 , T_Y3) , T_COLOR
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X3 , T_Y3) , T_THICKNESS , T_COLOR , , , , F
T_X1 = T_X3
T_Y1 = T_Y3
T_LAST_POSITION_X = T_X3
T_LAST_POSITION_Y = T_Y3
NEXT T_GRAD
IF T_HOLE = 1 THEN
FOR T_GRAD = T_INI TO T_END
T_X2 = (T_R1 * COS(T_RADIANS (T_GRAD))):T_Y2 = (T_R1 * SIN(T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X3 , T_Y3) , T_THICKNESS / T_GROSS , T_HOLE_COLOR , , , , F
NEXT T_GRAD
END IF
END SUB
'END T_ARC_SEC_CIR
'INIT T_ELLIPSE
SUB T_ELLIPSE (BYVAL T_R1 AS DOUBLE , BYVAL T_R2 AS DOUBLE , BYVAL T_ANG_ROT AS DOUBLE)
'DRAW A ELLIPSE WITH ROTATION
'T_R1 = RADIUS BIGGER
'T_R2 = RADIUS SMALLER
'T_ANG_ROT = DEGREES TO ROTATE
DIM AS DOUBLE T_RGRAD , T_GRAD , T_X0 , T_Y0 , T_X1 , T_Y1 , T_X2 , T_Y2 , T_X3 , T_Y3
T_R1 = T_R1 * T_SCALE
T_R2 = T_R2 * T_SCALE
T_RGRAD = T_RADIANS (T_ANG_ROT)
T_X0 = (T_R1 * COS(T_RGRAD))
T_Y0 = (T_R2 * SIN(T_RGRAD))
T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
T_FIRST_POSITION_X = T_X1
T_FIRST_POSITION_Y = T_Y1
FOR T_GRAD = T_ANG_ROT TO T_ANG_ROT + 360
T_X2 = (T_R1 * COS(T_RADIANS (T_GRAD)))
T_Y2 = (T_R2 * SIN(T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_X1 , T_Y1) - (T_X3 , T_Y3) , T_COLOR
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X3 , T_Y3) , T_THICKNESS , T_COLOR , , , , F
T_X1 = T_X3
T_Y1 = T_Y3
T_LAST_POSITION_X = T_X3
T_LAST_POSITION_Y = T_Y3
NEXT T_GRAD
IF T_HOLE = 1 THEN
FOR T_GRAD = T_ANG_ROT TO T_ANG_ROT + 360
T_X2 = (T_R1 * COS(T_RADIANS (T_GRAD)))
T_Y2 = (T_R2 * SIN(T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN CIRCLE (T_X3 , T_Y3) , T_THICKNESS / T_GROSS , T_HOLE_COLOR , , , , F
NEXT T_GRAD
END IF
END SUB
'END T_ELLIPSE
'INIT T_ARC_SEC_ELLIP
SUB T_ARC_SEC_ELLIP (BYVAL T_R1 AS DOUBLE , BYVAL T_R2 AS DOUBLE , BYVAL T_INI AS DOUBLE , BYVAL T_END AS DOUBLE , BYVAL T_ANG_ROT AS DOUBLE , BYVAL T_ARC_SEC_ELLIPSE AS INTEGER) 'DRAW A ELLIPTIC SECTOR
'DRAW A SECTOR ELLIPTIC
'T_R1 = RADIUS 1
'T_R2 = RADIUS 2
'T_INI = ANGLE INIT
'T_END = ANGLE END
'T_ANG_ROT = ANGLE OF ROTATION
'T_ARC_SEC_ELLIPSE = 0/1 DRAW A SECTOR OR ARC OF ELLIPSE
DIM AS DOUBLE T_GRAD , T_X0 , T_Y0 , T_X1 , T_Y1 , T_X2 , T_Y2 , T_X3 , T_Y3
T_R1 = T_R1 * T_SCALE
T_R2 = T_R2 * T_SCALE
T_X0 = (T_R1 * COS(T_RADIANS (T_INI)))
T_Y0 = (T_R2 * SIN(T_RADIANS (T_INI)))
T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
T_FIRST_POSITION_X = T_X1
T_FIRST_POSITION_Y = T_Y1
IF T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_POSITION_X , T_POSITION_Y) - (T_X1 , T_Y1) , T_COLOR
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X , T_POSITION_Y , T_X1 , T_Y1)
FOR T_GRAD = T_INI TO T_END
T_X2 = (T_R1 * COS(T_RADIANS (T_GRAD)))
T_Y2 = (T_R2 * SIN(T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
'RADIUS
IF T_ARC_SEC_ELLIPSE = 1 AND T_GRAD = T_INI AND T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_POSITION_X , T_POSITION_Y) - (T_X1 , T_Y1) , T_COLOR
IF T_ARC_SEC_ELLIPSE = 1 AND T_GRAD = T_END AND T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_POSITION_X , T_POSITION_Y) - (T_X3 , T_Y3) , T_COLOR
IF T_ARC_SEC_ELLIPSE = 1 AND T_GRAD = T_INI AND T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X , T_POSITION_Y , T_X1 , T_Y1)
IF T_ARC_SEC_ELLIPSE = 1 AND T_GRAD = T_END AND T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN T_SEGMENT (T_POSITION_X , T_POSITION_Y , T_X3 , T_Y3)
'ARC
IF T_SHAPES = 1 AND T_PEN = 1 THEN LINE (T_X1 , T_Y1) - (T_X3 , T_Y3) , T_COLOR
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN CIRCLE(T_X3 , T_Y3) , T_THICKNESS , T_COLOR , , , , F
T_X1 = T_X3
T_Y1 = T_Y3
T_LAST_POSITION_X = T_X3
T_LAST_POSITION_Y = T_Y3
NEXT T_GRAD
IF T_HOLE = 1 THEN
FOR T_GRAD = T_INI TO T_END
T_X2 = (T_R1 * COS(T_RADIANS (T_GRAD)))
T_Y2 = (T_R2 * SIN(T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 AND T_BOLD = 1 AND T_THICKNESS > 0 THEN CIRCLE(T_X3 , T_Y3) , T_THICKNESS / T_GROSS , T_HOLE_COLOR , , , , F
NEXT T_GRAD
END IF
END SUB
'END T_ARC_SEC_ELLIP
'INIT T_POLY
SUB T_POLY (BYVAL T_R AS DOUBLE , BYVAL T_NSIDE AS INTEGER , BYVAL T_ANG_ROT AS INTEGER)
'DRAW AND ROTATE A POLYGON
'T_R = RADIUS POLYGON
'T_NSIDE = NUMBER OF SIDES
'T_ANG_ROT = DEGREES OF ROTATION
DIM AS DOUBLE T_GRAD , T_X3 , T_Y3
T_R = T_R * T_SCALE
T_X0 = (T_R * COS (T_RADIANS (T_ANG_ROT)))
T_Y0 = (T_R * SIN (T_RADIANS (T_ANG_ROT)))
T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
T_FIRST_POSITION_X = T_X1
T_FIRST_POSITION_Y = T_Y1
IF T_BOLD = 0 THEN T_THICKNESS = 0
FOR T_GRAD = T_ANG_ROT TO T_ANG_ROT + 360 STEP 360 / T_NSIDE
T_X2 = (T_R * COS (T_RADIANS (T_GRAD)))
T_Y2 = (T_R * SIN (T_RADIANS (T_GRAD)))
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 AND T_THICKNESS = 0 AND T_BOLD = 0 THEN LINE (T_X1 , T_Y1) - (T_X3 , T_Y3) , T_COLOR
IF T_SHAPES = 1 AND T_PEN = 1 AND T_THICKNESS > 0 AND T_BOLD = 1 THEN T_SEGMENT (T_X1 , T_Y1 , T_X3 , T_Y3)
T_X1 = T_X3
T_Y1 = T_Y3
T_LAST_POSITION_X = T_X3
T_LAST_POSITION_Y = T_Y3
NEXT T_GRAD
END SUB
'END T_POLY
'INIT T_STAR
SUB T_STAR (BYVAL T_NP AS INTEGER , BYVAL T_RG AS DOUBLE , BYVAL T_RP AS DOUBLE , BYVAL T_ANG_ROT AS DOUBLE)
DIM AS INTEGER C
DIM AS DOUBLE NP , N , R, T_X0 , T_Y0 , T_X1 , T_Y1 , T_X2 , T_Y2 , T_X3 , T_Y3
IF T_NP = 0 THEN T_NP = 1 : END IF
T_NP = ABS(T_NP)
NP = (180 / T_NP)
C = 0
R = T_RG * T_SCALE
T_X0 = (T_R * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y0 = (T_R * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
T_X1 = (T_X0 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y0 * SIN (T_RADIANS (T_ANG_ROT))) '+ T_POSITION_X
T_Y1 = (T_X0 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y0 * COS (T_RADIANS (T_ANG_ROT))) '+ T_POSITION_Y
T_FIRST_POSITION_X = T_X1
T_FIRST_POSITION_Y = T_Y1
FOR N = T_ANG_ROT TO (T_ANG_ROT + 360 + NP) STEP NP
IF C MOD 2 = 0 THEN
R = T_RG * T_SCALE
ELSE
R = T_RP * T_SCALE
END IF
T_X2 = (COS(T_RADIANS(N)) * R )
T_Y2 = (SIN(T_RADIANS(N)) * R )
T_X3 = (T_X2 * COS (T_RADIANS (T_ANG_ROT))) - (T_Y2 * SIN (T_RADIANS (T_ANG_ROT))) + T_POSITION_X
T_Y3 = (T_X2 * SIN (T_RADIANS (T_ANG_ROT))) + (T_Y2 * COS (T_RADIANS (T_ANG_ROT))) + T_POSITION_Y
IF T_SHAPES = 1 AND T_PEN = 1 AND C > 0 THEN LINE (T_X0 , T_Y0) - (T_X3 , T_Y3) , T_COLOR
IF T_SHAPES = 1 AND T_PEN = 1 AND C > 0 AND T_THICKNESS > 0 AND T_BOLD = 1 THEN T_SEGMENT (T_X0 , T_Y0 , T_X3 , T_Y3)
C = C + 1
T_X0 = T_X3
T_Y0 = T_Y3
NEXT N
T_LAST_POSITION_X = T_X3
T_LAST_POSITION_Y = T_Y3
END SUB
'END T_STAR
'INIT OVOID
SUB T_OVOID (BYVAL T_R1 AS DOUBLE , BYVAL T_R2 AS DOUBLE , BYVAL T_ANG_ROT AS DOUBLE) 'DRAW A OVOID
'DRAW A OVOID
'T_R1 = RADIUS 1 (SMALLER)
'T_R2 = RADIUS 2 (BIGGER)
'T_ANG_ROT = ANGLE OF ROTATION
T_ARC_SEC_ELLIP (T_R1 , T_R2 , 0 , 180 , T_ANG_ROT,0)
T_ARC_SEC_CIR (T_R1 , 180 , 360 , T_ANG_ROT,0)
END SUB
'END OVOID
'INIT T_SPRING
SUB T_SPRING (T_NS AS INTEGER , T_RS AS DOUBLE , T_LO AS DOUBLE) 'DRAW A T_SPRING
DIM T_N AS INTEGER
'T_NS = NUMBER OF SPIRALS
'T_RS = STRETCH OF SPIRAL 0...90
'T_LO = LONG OF SPIRAL
FOR T_N = 1 TO T_NS
T_RT T_RS
T_FD T_LO
T_LT T_RS * 2
T_FD T_LO
T_RT T_RS
NEXT T_N
END SUB
'END SPRING
'INIT T_CILINDER
SUB T_CILINDER ( T_CA AS DOUBLE, T_CR AS DOUBLE, T_CD AS DOUBLE, T_CL AS DOUBLE, T_CP AS DOUBLE, T_CS AS DOUBLE) 'DRAW A PNEUMATIC CILINDER
'DRAW A PNEUMATIC / HIDRAULIC CILINDER
'T_CA ANGLE POSITION CILINDER
'T_CR RADIUS ROTATION
'T_CD DIAMETER CILINDER
'T_CL LONG CILINDER
'T_CP POSITION PISTON
'T_CS SUPLEMENTARY PISTON
T_ORIENT T_CA
T_PEN = 0
T_FD T_CR 'ROTATION RADIUS
T_BK T_CR
T_PEN = 1
T_CIRCLE T_CD /8 'SHOW ROTATION POINT
T_PEN = 0
T_FD T_CR
T_PEN = 1
T_RT 90
T_FD T_CD / 2
T_RT 90
T_FD T_CL
T_RT 90
T_FD T_CD
T_RT 90
T_FD T_CL
T_RT 90
T_FD T_CD / 2
'VASTAGO / PISTON
T_LT 180
T_FD T_CD /8
T_RT 90
IF T_CP > T_CL THEN T_CP = T_CL
IF T_CP < 0 THEN T_CP = 0
T_FD ABS (T_CP)+ T_CS 'SALIDA DEL VASTAGO + ADICIONAL
T_RT 90
T_FD T_CD /8 'CENTER PISTON
T_FD T_CD /8 'CENTER PISTON
T_RT 90
T_FD ABS (T_CP) + T_CS 'SALIDA DEL VASTAGO + ADICIONAL
T_RT 90
T_FD T_CD /8
T_PEN = 0
T_RT 90
T_FD ABS (T_CP) + T_CS
T_PEN = 1
END SUB
'END T_CILINDER
'INIT T_MANIPULATOR
SUB T_MANIPULATOR (T_MLA AS DOUBLE , T_MLP AS DOUBLE , T_MP AS DOUBLE , T_MROT AS DOUBLE, T_MLC AS DOUBLE)
'DRAW MANIPULATOR
'T_MLA LONG TOTAL APERTURE
'T_MLP LONG TOTAL PINCERS
'T_MP POSITION PINCERS
'T_MROT POSITION ANGLE ROTATION
'T_MLC CONTACT POINT PINCERS
T_ORIENT T_MROT
T_PEN = 1
T_MLA = T_MLA * 2
IF T_MP > = (T_MLA / 2) THEN T_MP = (T_MLA / 2)
'AQUI CREAMOS EL CUERPO DEL MANIPULADOR
T_RT 90 : T_FD (T_MLA / 2) + 10
T_RT 90 : T_FD T_MLA / 2
T_RT 90 : T_FD T_MLA + 20
T_RT 90 : T_FD T_MLA / 2
T_RT 90 : T_FD (T_MLA / 2) + 10
'AQUI CREAMOS LA PARTE GIRATORIA
T_ARC_SEC_CIR ((T_MLA / 2) + 10 , 0 , 180 , T_MROT,0)
'AQUI CREAMOS EL PUNTO DE ROTACION
T_CIRCLE (5)
T_PEN = 0
'AQUI CREAMOS Y POSICIONAMOS LAS PINZAS
T_RT 90
T_FD (T_MLA / 2)
T_LT 90
T_FD T_MP 'POSICION INICIAL "0" PINZAS
'INICIO PINZA DERECHA
T_LT 90
T_PEN = 1
T_ARC_SEC_ELLIP (10 , T_MLP , 270 , 360 , T_MROT,0)
'FIN PINZA DERECHA
'ESTO ES LA POSICION DE APERTURA CIERRE DE LAS PINZAS
T_PEN = 1
T_RT 90
T_BK 10
T_BK ((T_MP ) * 2) - 10
'INICIO PINZA IZQUIERDA
T_RT 90
T_PEN = 1
T_ARC_SEC_ELLIP (10 , T_MLP , 180 , 270 , T_MROT, 0)
T_FD T_MLP
T_BK T_MLP
'FIN PINZA IZQUIERDA
'PUNTO DE CONTACTO
T_PEN = 0
T_RT 270
T_FD (T_MP)
T_RT 90
IF T_MLC >= T_MLP THEN T_MLC = T_MLP
IF T_MLC <= 0 THEN T_MLC = 0
T_FD T_MLC 'PUNTO DE CONTACTO DE LAS PINZAS
T_PEN = 1
END SUB
'END MANIPULATOR
'END SHAPES *******************************************************************