|
Post by alexfish on May 28, 2013 13:53:22 GMT 1
Hey all ' ' @ Vovchic , think U got one in Post
This is a sort of light weight Vector Generator
The base is set so can be Expanded on , have a look at The SVG CUBE
The settings take Effect on the Start Button so adjust the settings then press pause then press Start.
The Rest is Down to U , add some Exta bits + look how the Paths Can Form Objects with fill color
RE : The SVG CUBE:
' ******************************************************* ' VECTOR GENERATER '@ .org alexfish(BaCon Converter Forum) ' 28 May 2013 ' ******************************************************* ' REQUIRES '@ BaCon CONST g_VERSION$ >= "2.1.4" '@ Latest Hug.bac >=0.86 ' ******************************************************* '@ Select which / Hug save as 'INCLUDE "hug86.bac" INCLUDE "hug.bac"
HUGOPTIONS("NOSCALING")
IMPORT "gdk_pixbuf_new_from_file(char*,void**)" FROM HUGLIB$("gdk") TYPE long IMPORT "goo_canvas_path_new(long,char*,...)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_raise(long,long)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_image_new(long,long,double,double,...)" FROM HUGLIB$("goo") TYPE long IMPORT "gdk_pixbuf_new_from_inline(int,unsigned char[],int,int)" FROM HUGLIB$("gdk") TYPE long IMPORT "goo_canvas_item_set_child_properties(long,long,...)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_group_new(long,...)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_remove_child(long,int)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_item_add_child(long,long,int)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_item_find_child(long,long)" FROM HUGLIB$("goo") TYPE int IMPORT "goo_canvas_item_get_parent(long)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_animate(long,double,double,double,double,int,int,int,int)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_item_rotate(long,double,double,double)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_item_set_simple_transform(long,double,double,double,double)" FROM HUGLIB$("goo") TYPE void IMPORT "goo_canvas_scroll_to(long,double,double)" FROM HUGLIB$("goo") TYPE void
CONST GOO_CANVAS_ANIMATE_FREEZE = 0 CONST GOO_CANVAS_ANIMATE_RESET = 1 CONST GOO_CANVAS_ANIMATE_RESTART = 2 CONST GOO_CANVAS_ANIMATE_BOUNCE = 3
' ********************* ' END INCLUDES ' ********************* DECLARE key$ ASSOC STRING key$(STR$(65361))="LEFT" key$(STR$(65362))="UP" key$(STR$(65363))="RIGHT" key$(STR$(65364))="DOWN"
' ********************* ' INIT VARS ' ********************* TRAP LOCAL OPTION COLLAPSE 1 SETENVIRON "OUTPUT_CHARSET", "UTF-8" OPTION INTERNATIONAL TRUE
DECLARE flag TYPE int
orgXSize =200.0 flag = FALSE
DECLARE CX_MAIN , CY_MAIN , OBJ_WIDTH , OBJ_X_MINOR , OBJ_X_MAJOR , M_V_X TYPE double
' ********************* ' END INIT VARS ' *********************
' ********************* ' SUBS & FUNCTIONS ' *********************
' ----------------- SUB MK_SVG() ' -----------------/* ' create initial svg A$="<svg><rect width='1' height='1' fill='green' opacity='0.5' /></svg>": a$="./green" B$="<svg><rect width='1' height='1' fill='red' opacity='0.5' /></svg>": b$="./red" C$="<svg><rect width='1' height='1' fill='cyan' opacity='0.5' /></svg>": c$="./cyan" D$="<svg><rect width='1' height='1' fill='brown' opacity='0.5' /></svg>": d$="./brown" E$="<svg><rect width='1' height='1' fill='yellow' opacity='0.5' /></svg>": e$="./yellow" F$="<svg><rect width='1' height='1' fill='orange' opacity='0.5' /></svg>": f$="./orange" G$="<svg><rect width='1' height='1' fill='black' opacity='0.5' /></svg>": g$="./black" */
A$="<svg width='1' height='1'><rect width='1' height='1' fill='green' opacity='0.5' /></svg>": a$="./green" B$="<svg width='1' height='1'><rect width='1' height='1' fill='red' opacity='0.5' /></svg>": b$="./red" C$="<svg width='1' height='1'><rect width='1' height='1' fill='cyan' opacity='0.5' /></svg>": c$="./cyan" D$="<svg width='1' height='1'><rect width='1' height='1' fill='brown' opacity='0.5' /></svg>": d$="./brown" E$="<svg width='1' height='1'><rect width='1' height='1' fill='yellow' opacity='0.5' /></svg>": e$="./yellow" F$="<svg width='1' height='1'><rect width='1' height='1' fill='orange' opacity='0.5' /></svg>": f$="./orange" G$="<svg width='1' height='1'><rect width='1' height='1' fill='black' opacity='0.5' /></svg>": g$="./black" */ OPEN a$ FOR WRITING AS svg WRITELN A$ TO svg CLOSE FILE svg OPEN b$ FOR WRITING AS svg WRITELN B$ TO svg CLOSE FILE svg OPEN c$ FOR WRITING AS svg WRITELN C$ TO svg CLOSE FILE svg OPEN d$ FOR WRITING AS svg WRITELN D$ TO svg CLOSE FILE svg OPEN e$ FOR WRITING AS svg WRITELN E$ TO svg CLOSE FILE svg OPEN f$ FOR WRITING AS svg WRITELN F$ TO svg CLOSE FILE svg OPEN g$ FOR WRITING AS svg WRITELN G$ TO svg CLOSE FILE svg END SUB
' ------------------ SUB ANIM_START() ' ------------------ ' start animation '@ GET THE RTY_SET AND OJECT SIZE ON S orgXSize = GET(spin_SIZE) RTY_SET = GET(spin_RTY) RTX_SET = GET(spin_RTX) DISABLE(but1) ENABLE(but2) flag = TRUE CALL VECTOR END SUB
' ------------------ SUB ANIM_STOP() ' ------------------ ' stop animation ENABLE(but1) DISABLE(but2) flag = FALSE CALL VECTOR END SUB
' ------------------ SUB MY_QUIT() ' ------------------ g_object_unref(green) g_object_unref(red) DELETE FILE a$: DELETE FILE b$ : DELETE FILE c$ DELETE FILE d$: DELETE FILE e$ :DELETE FILE f$ DELETE FILE g$ PRINT NL$, "End of demo...", NL$ QUIT END SUB DECLARE MX_POINT = 0.0 TYPE double DECLARE MY_POINT = 0.0 TYPE double
'@ MY_Radian = PI/360 this give ratio SIN TO COS 720 / canbe further divided '@ but this example need to see instant results DECLARE RADIAN = 0.00872665 TYPE double ''SET the ratio OF X to Y at 180 so can trap vertical to horizontal / IE is the the object behind or in front DECLARE DEG = 0.0 TYPE double DECLARE DEG2 = 180.0 TYPE double '@ SET TGE COUNTERS TO 0 COUNTER = 0 COUNTER_Y=0 '@ SET RTY FACTOR FOR SPEED AND ROTATON / 0 or Decimal Place = STATIONARY ON THIS plane RTY_SET = 1 ' ------------------ SUB VECTOR() ' ------------------ LOCAL XX1 , YY1 , XX2_H , YY2_H TYPE double LOCAL DEG_1 , DEG_2 TYPE double ' calculate and display sequence of images in a loop WHILE flag DO DEG = RADIAN*MX_POINT DEG2 =RADIAN*MY_POINT XX1 = SIN (DEG)*orgXSize XX1_H=COS (0-DEG)*orgXSize YY1 = COS(DEG2)*orgXSize YY2_H = SIN (DEG2)*orgXSize PRINT " Counter :",COUNTER , " : ",MX_POINT," : ", XX1 '@ Can trap the angles this toy is preset at 720 IF COUNTER = 720 THEN COUNTER = 0 END IF
CX_MAIN=300.0 CY_MAIN=300.0 DGT=0-YY1 '@ L1$ , L2$ radius from center x and xy : L3$ L4$ the object , using line_1 and line_2 '@ the function generater can just spin around the X if corect setting applied L1$ = CONCAT$("M ", STR$(CX_MAIN ), " ", STR$(CY_MAIN), " L ", STR$(CX_MAIN+XX1), " ", STR$(CY_MAIN+YY1)) L2$ = CONCAT$("M ", STR$(CX_MAIN ), " ", STR$(CY_MAIN), " L ", STR$(CX_MAIN+XX1), " ", STR$(CY_MAIN+DGT)) L3$ = CONCAT$("M ", STR$(CX_MAIN-orgXSize ), " ", STR$(CY_MAIN+YY1), " L ", STR$(CX_MAIN+orgXSize), " ", STR$(CY_MAIN+YY1)) L4$ = CONCAT$("M ", STR$(CX_MAIN-orgXSize ), " ", STR$(CY_MAIN+DGT), " L ", STR$(CX_MAIN+orgXSize), " ", STR$(CY_MAIN+DGT)) SYNC SLEEP 10 INCR MY_POINT, RTY_SET INCR MX_POINT,RTX_SET 'IF OFF_X = 1 THEN 'INCR RTY_SE INCR COUNTER
g_object_set(ORD_X,"data",L1$ , NULL) g_object_set(ORD_X2,"data",L2$ , NULL) g_object_set(line_1,"data",L3$ , NULL) g_object_set(line_2,"data",L4$ , NULL) WEND END SUB
'@ use own defind Goo Canvas Without the Event Box / goo has its own FUNCTION GooCanvas(int hug_xsize, int hug_ysize)
LOCAL canvas ,root canvas = goo_canvas_new() goo_canvas_set_bounds(canvas,0,0,hug_xsize,hug_ysize)
IF HUG_WIDGET_SHOW THEN gtk_widget_show_all(canvas)
hug_widget_image(STR$(canvas)) = canvas hug_widget_xsize(STR$(canvas)) = hug_xsize hug_widget_ysize(STR$(canvas)) = hug_ysize hug_widget_signal(STR$(canvas)) = 4 hug_widget_s_widget(STR$(canvas)) = canvas hug_widget_type$(STR$(canvas)) = "canvas" RETURN canvas END FUNCTION ' ------------------ SUB MK_GUI() ' ------------------
' define widgets win = WINDOW("BaCon Goo Canvas -SVG Vectors", 600,600) but1 = BUTTON("Go", 80, 30) but2 = BUTTON("Pause", 80, 30) but3 = BUTTON("Exit", 80, 30) '@ button for RTY settings and size spin_RTY=SPIN(75,30,0,10,1) spin_RTX=SPIN(75,30,0,10,1) spin_SIZE=SPIN(75,30,20,200,5) ' define properties PROPERTY(but1, "tooltip-text", "Start GOO animated vector demo.") PROPERTY(but2, "tooltip-text", "Pause GOO animated vector demo.") PROPERTY(but3, "tooltip-text", "Quit this animated vector demo.") PROPERTY(spin_RTX, "tooltip-text", "Set RTX.") PROPERTY(spin_RTY, "tooltip-text", "Set RTY.") PROPERTY(spin_SIZE, "tooltip-text", "Sixe of Object.") ' attach widgets ATTACH(win, but1, 10, 550) ATTACH(win, but2, 100 ,550) ATTACH(win, but3, 200, 550) ATTACH(win,spin_RTY,300,550) ATTACH(win,spin_RTX,400,550) ATTACH(win,spin_SIZE,500,550) ' define callback actions for buttons CALLBACK(but1, ANIM_START) CALLBACK(but2, ANIM_STOP) CALLBACK(but3, MY_QUIT) ' set initial state of but2 DISABLE(but2) '@ Add Goo Canvas goo_canvas1=GooCanvas(600,500) '@ get the root of the canvas root_canvas1 = goo_canvas_get_root_item(goo_canvas1) '@ set the background to black g_object_set(goo_canvas1,"background-color","white",NULL) ATTACH(win,goo_canvas1,0,0) '@ get the red=gdk_pixbuf_new_from_file("./red", 0) green=gdk_pixbuf_new_from_file("./green", 0)
ORD_X2 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","stroke-color","blue","line-width" ,2.0, NULL) ORD_X = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","stroke-color","red","line-width" ,2.0, NULL) line_1 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",red,"stroke-pixbuf",red,"line-width" ,2.0, NULL) line_2 = goo_canvas_path_new( root_canvas1," M 200 200 L 400 200 ","fill-pixbuf",green,"stroke-pixbuf",green,"line-width" ,2.0, NULL) END SUB
' ********************* ' END SUBS & FUNCTIONS ' *********************
' ********************* ' MAIN ' *********************
MK_SVG MK_GUI
DISPLAY
' ********************* ' END MAIN ' ********************
Have Fun + a bit of Inventive Programming
Alex
|
|
|
Post by alexfish on May 31, 2013 1:51:39 GMT 1
Hi All
The CUBE now with Total Control X Y Z :: ZOOM :: FRAMES :: MOVE :: SPEED
' any problems please notify '
Have Fun Alex
The Code:
' ******************************************************* ' PROGRAM: bmsv - BaCon SVG Vector (modded BaCon) ' VERSION: 0.1a ' PURPOSE: draw svg object (cube) and rotate ' AUTHOR: vovchik (Puppy Linux forum) ' MODDED: port of SFR's clever gtkdialog version ' posted on the Puppy Linux forum ' MODDED .org alexfish (bacon converter forum) 27.may.2013 ' .Impliment Goo Canvas ' DEPENDS: gcc, bacon (beta 1.30), hug (0.84) ' PLATFORM: Puppy Linux (actually, any *nix) ' DATE: 26-03-2013 ' LICENSE: GPL3 ' NOTES: Uses dynamic svgs. Pseudo-Glenz effect.' source (bacon.bac) to increase number of ' string buffers from 32 to 256 in var ' g_MAX_BUFFERS: g_MAX_BUFFERS = 256 (not 32) ' or rewrite to obtain string vars in VECTOR ' SUB and use in svg CONCAT$ routines. ' ******************************************************* ' REQUIRES '@ BaCon CONST g_VERSION$ >= "2.1.4" '@ Latest Hug.bac >=0.86 ' *******************************************************
' ********************* ' INCLUDES ' ********************* '@ Select which / Hug save as INCLUDE "hug86.bac" 'INCLUDE "hug.bac" HUGOPTIONS("NOSCALING") HUGOPTIONS("CANVAS GOO")
IMPORT "goo_canvas_path_new(long,char*,...)" FROM HUGLIB$("goo") TYPE long IMPORT "goo_canvas_group_new(long,...)" FROM HUGLIB$("goo") TYPE long
' ********************* ' END INCLUDES ' *********************
' ********************* ' INIT VARS ' *********************
TRAP LOCAL OPTION COLLAPSE 1 SETENVIRON "OUTPUT_CHARSET", "UTF-8" OPTION INTERNATIONAL TRUE
DECLARE flag TYPE int DECLARE mycos[360], mysin[360] TYPE NUMBER DECLARE X1, X2, X3, X4, X5, X6, X7, X8 TYPE NUMBER DECLARE Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8 TYPE NUMBER DECLARE Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8 TYPE NUMBER DECLARE XX1, XX2, XX3, XX4, XX5, XX6, XX7, XX8 TYPE NUMBER DECLARE YY1, YY2, YY3, YY4, YY5, YY6, YY7, YY8 TYPE NUMBER DECLARE NX1, NX2, NX3, NX4, NX5, NX6, NX7, NX8 TYPE NUMBER DECLARE NY1, NY2, NY3, NY4, NY5, NY6, NY7, NY8 TYPE NUMBER DECLARE NZ1, NZ2, NZ3, NZ4, NZ5, NZ6, NZ7, NZ8 TYPE NUMBER DECLARE D, S, XANGLE, YANGLE, ZANGLE TYPE NUMBER DECLARE TEMPDIR$, svg_file$, svg_string$, pic_file$, label_x$ TYPE STRING DECLARE xx1$, xx2$, xx3$, xx4$, xx5$, xx6$, xx7$, xx8$ TYPE STRING DECLARE yy1$, yy2$, yy3$, yy4$, yy5$, yy6$, yy7$, yy8$ TYPE STRING COLOR BG TO BLACK COLOR FG TO GREEN COLOR INTENSE flag = FALSE D = 512 XANGLE = 0 YANGLE = 0 ZANGLE = 0 S=0 ' ********************* ' END INIT VARS ' *********************
' ********************* ' SUBS & FUNCTIONS ' ********************* SUB MK_SVG()
' create initial svg
A$="<svg width='1' height='1'><rect width='1' height='1' fill='green' opacity='0.5' /></svg>": a$="./green" B$="<svg width='1' height='1'><rect width='1' height='1' fill='red' opacity='0.5' /></svg>": b$="./red" C$="<svg width='1' height='1'><rect width='1' height='1' fill='cyan' opacity='0.5' /></svg>": c$="./cyan" D$="<svg width='1' height='1'><rect width='1' height='1' fill='brown' opacity='0.5' /></svg>": d$="./brown" E$="<svg width='1' height='1'><rect width='1' height='1' fill='yellow' opacity='0.5' /></svg>": e$="./yellow" F$="<svg width='1' height='1'><rect width='1' height='1' fill='orange' opacity='0.5' /></svg>": f$="./orange" G$="<svg width='1' height='1'><rect width='1' height='1' fill='black' opacity='0.5' /></svg>": g$="./black" H$="<svg width='1' height='1'><rect width='1' height='1' fill='white' opacity='0.5' /></svg>": h$="./white" OPEN a$ FOR WRITING AS svg WRITELN A$ TO svg CLOSE FILE svg OPEN b$ FOR WRITING AS svg WRITELN B$ TO svg CLOSE FILE svg OPEN c$ FOR WRITING AS svg WRITELN C$ TO svg CLOSE FILE svg OPEN d$ FOR WRITING AS svg WRITELN D$ TO svg CLOSE FILE svg OPEN e$ FOR WRITING AS svg WRITELN E$ TO svg CLOSE FILE svg OPEN f$ FOR WRITING AS svg WRITELN F$ TO svg CLOSE FILE svg OPEN g$ FOR WRITING AS svg WRITELN G$ TO svg CLOSE FILE svg OPEN h$ FOR WRITING AS svg WRITELN H$ TO svg CLOSE FILE svg END SUB
' ------------------ SUB MK_TABLES(NUMBER sin1[], NUMBER cos1[]) ' ------------------ ' initialize sinus and cosinus tables as arrays LOCAL rad TYPE double LOCAL i TYPE NUMBER FOR i = 0 TO 359 rad = i * (PI/180) sin1[i] = FLOOR((SIN(rad) * 1000)) cos1[i] = FLOOR((COS(rad) * 1000)) NEXT i END SUB
' ------------------ SUB ANIM_START() ' ------------------ ' start animation DISABLE(but1) ENABLE(but2) flag = TRUE CALL VECTOR END SUB
' ------------------ SUB ANIM_STOP() ' ------------------ ' stop animation ENABLE(but1) DISABLE(but2) flag = FALSE CALL VECTOR END SUB
' ------------------ SUB MY_QUIT() ' ------------------ g_object_unref(green) g_object_unref(red) g_object_unref(cyan) g_object_unref(brown) g_object_unref(yellow) g_object_unref(orange) g_object_unref(black) g_object_unref(white) DELETE FILE a$: DELETE FILE b$ : DELETE FILE c$ DELETE FILE d$: DELETE FILE e$ :DELETE FILE f$ DELETE FILE g$: DELETE FILE h$ '@ Stop Shut down Until Files Deleted SYNC ' reset terminal + quit program COLOR RESET PRINT NL$, "End of demo...", NL$ QUIT END SUB
' ------------------ SUB VECTOR() ' ------------------ ' calculate and display sequence of images in a loop WHILE flag DO
pos_size = GET(spin_SIZE) neg_size=0-pos_size '@ get THE values OSETX=GET(move_X) OSETY =GET(move_Y) RTY_SET = GET(spin_RTY) RTX_SET = GET(spin_RTX) RTZ_SET = GET(spin_RTZ) DELAY_SET= GET(spin_DELAY)
X1 = neg_size: Y1 = neg_size : Z1 = neg_size X2 = neg_size: Y2 = pos_size: Z2 = neg_size X3 = pos_size: Y3 = neg_size: Z3 = neg_size X4 = pos_size: Y4 = pos_size: Z4 = neg_size X5 = neg_size: Y5 = neg_size: Z5 = pos_size X6 = neg_size: Y6 = pos_size: Z6 = pos_size X7 = pos_size: Y7 = neg_size: Z7 = pos_size X8 = pos_size: Y8 = pos_size: Z8 = pos_size INCR XANGLE,RTX_SET: INCR YANGLE, RTY_SET: INCR ZANGLE, RTZ_SET IF XANGLE >= 360 THEN XANGLE = 0 IF YANGLE >= 360 THEN YANGLE = 0 IF ZANGLE >= 360 THEN ZANGLE = 0 NX1 = X1: NX2 = X2: NX3 = X3: NX4 = X4 NX5 = X5: NX6 = X6: NX7 = X7: NX8 = X8 ' rotate X NY1 = ((mycos[XANGLE] * Y1) - (mysin[XANGLE] * Z1)) / 1000 NY2 = ((mycos[XANGLE] * Y2) - (mysin[XANGLE] * Z2)) / 1000 NY3 = ((mycos[XANGLE] * Y3) - (mysin[XANGLE] * Z3)) / 1000 NY4 = ((mycos[XANGLE] * Y4) - (mysin[XANGLE] * Z4)) / 1000 NY5 = ((mycos[XANGLE] * Y5) - (mysin[XANGLE] * Z5)) / 1000 NY6 = ((mycos[XANGLE] * Y6) - (mysin[XANGLE] * Z6)) / 1000 NY7 = ((mycos[XANGLE] * Y7) - (mysin[XANGLE] * Z7)) / 1000 NY8 = ((mycos[XANGLE] * Y8) - (mysin[XANGLE] * Z8)) / 1000 ' NZ1 = ((mysin[XANGLE] * Y1) + (mycos[XANGLE] * Z1)) / 1000 NZ2 = ((mysin[XANGLE] * Y2) + (mycos[XANGLE] * Z2)) / 1000 NZ3 = ((mysin[XANGLE] * Y3) + (mycos[XANGLE] * Z3)) / 1000 NZ4 = ((mysin[XANGLE] * Y4) + (mycos[XANGLE] * Z4)) / 1000 NZ5 = ((mysin[XANGLE] * Y5) + (mycos[XANGLE] * Z5)) / 1000 NZ6 = ((mysin[XANGLE] * Y6) + (mycos[XANGLE] * Z6)) / 1000 NZ7 = ((mysin[XANGLE] * Y7) + (mycos[XANGLE] * Z7)) / 1000 NZ8 = ((mysin[XANGLE] * Y8) + (mycos[XANGLE] * Z8)) / 1000 ' rotate Y X1 = ((mycos[YANGLE] * NX1) + (mysin[YANGLE] * NZ1)) / 1000 X2 = ((mycos[YANGLE] * NX2) + (mysin[YANGLE] * NZ2)) / 1000 X3 = ((mycos[YANGLE] * NX3) + (mysin[YANGLE] * NZ3)) / 1000 X4 = ((mycos[YANGLE] * NX4) + (mysin[YANGLE] * NZ4)) / 1000 X5 = ((mycos[YANGLE] * NX5) + (mysin[YANGLE] * NZ5)) / 1000 X6 = ((mycos[YANGLE] * NX6) + (mysin[YANGLE] * NZ6)) / 1000 X7 = ((mycos[YANGLE] * NX7) + (mysin[YANGLE] * NZ7)) / 1000 X8 = ((mycos[YANGLE] * NX8) + (mysin[YANGLE] * NZ8)) / 1000 ' Z1 = ((mycos[YANGLE] * NZ1) - (mysin[YANGLE] * NX1)) / 1000 Z2 = ((mycos[YANGLE] * NZ2) - (mysin[YANGLE] * NX2)) / 1000 Z3 = ((mycos[YANGLE] * NZ3) - (mysin[YANGLE] * NX3)) / 1000 Z4 = ((mycos[YANGLE] * NZ4) - (mysin[YANGLE] * NX4)) / 1000 Z5 = ((mycos[YANGLE] * NZ5) - (mysin[YANGLE] * NX5)) / 1000 Z6 = ((mycos[YANGLE] * NZ6) - (mysin[YANGLE] * NX6)) / 1000 Z7 = ((mycos[YANGLE] * NZ7) - (mysin[YANGLE] * NX7)) / 1000 Z8 = ((mycos[YANGLE] * NZ8) - (mysin[YANGLE] * NX8)) / 1000 ' rotate Z NX1 = ((mycos[ZANGLE] * X1) - (mysin[ZANGLE] * NY1)) / 1000 NX2 = ((mycos[ZANGLE] * X2) - (mysin[ZANGLE] * NY2)) / 1000 NX3 = ((mycos[ZANGLE] * X3) - (mysin[ZANGLE] * NY3)) / 1000 NX4 = ((mycos[ZANGLE] * X4) - (mysin[ZANGLE] * NY4)) / 1000 NX5 = ((mycos[ZANGLE] * X5) - (mysin[ZANGLE] * NY5)) / 1000 NX6 = ((mycos[ZANGLE] * X6) - (mysin[ZANGLE] * NY6)) / 1000 NX7 = ((mycos[ZANGLE] * X7) - (mysin[ZANGLE] * NY7)) / 1000 NX8 = ((mycos[ZANGLE] * X8) - (mysin[ZANGLE] * NY8)) / 1000 ' NY1 = ((mysin[ZANGLE] * X1) + (mycos[ZANGLE] * NY1)) / 1000 NY2 = ((mysin[ZANGLE] * X2) + (mycos[ZANGLE] * NY2)) / 1000 NY3 = ((mysin[ZANGLE] * X3) + (mycos[ZANGLE] * NY3)) / 1000 NY4 = ((mysin[ZANGLE] * X4) + (mycos[ZANGLE] * NY4)) / 1000 NY5 = ((mysin[ZANGLE] * X5) + (mycos[ZANGLE] * NY5)) / 1000 NY6 = ((mysin[ZANGLE] * X6) + (mycos[ZANGLE] * NY6)) / 1000 NY7 = ((mysin[ZANGLE] * X7) + (mycos[ZANGLE] * NY7)) / 1000 NY8 = ((mysin[ZANGLE] * X8) + (mycos[ZANGLE] * NY8)) / 1000
' was Perspective /then Zoom /***Smile now / Now MOVE X and MOVE y XX1 = ((NX1 * D) / (Z1 + D)) + OSETX XX2 = ((NX2 * D) / (Z2 + D)) + OSETX XX3 = ((NX3 * D) / (Z3 + D)) + OSETX XX4 = ((NX4 * D) / (Z4 + D)) + OSETX XX5 = ((NX5 * D) / (Z5 + D)) + OSETX XX6 = ((NX6 * D) / (Z6 + D)) + OSETX XX7 = ((NX7 * D) / (Z7 + D)) + OSETX XX8 = ((NX8 * D) / (Z8 + D)) + OSETX ' YY1 = ((NY1 * D) / (Z1 + D)) + OSETY YY2 = ((NY2 * D) / (Z2 + D)) + OSETY YY3 = ((NY3 * D) / (Z3 + D)) + OSETY YY4 = ((NY4 * D) / (Z4 + D)) + OSETY YY5 = ((NY5 * D) / (Z5 + D)) + OSETY YY6 = ((NY6 * D) / (Z6 + D)) + OSETY YY7 = ((NY7 * D) / (Z7 + D)) + OSETY YY8 = ((NY8 * D) / (Z8 + D)) + OSETY xx1$ = STR$(XX1): xx2$ = STR$(XX2): xx3$ = STR$(XX3): xx4$ = STR$(XX4) xx5$ = STR$(XX5): xx6$ = STR$(XX6): xx7$ = STR$(XX7): xx8$ = STR$(XX8) yy1$ = STR$(YY1): yy2$ = STR$(YY2): yy3$ = STR$(YY3): yy4$ = STR$(YY4) yy5$ = STR$(YY5): yy6$ = STR$(YY6): yy7$ = STR$(YY7): yy8$ = STR$(YY8) L1$ = CONCAT$("M ", STR$(XX1), " ", STR$(YY1), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX6), " ", STR$(YY6), " L ", STR$(XX2), " ", STR$(YY2), " Z ") L2$ = CONCAT$("M ", STR$(XX3), " ", STR$(YY3), " L ", STR$(XX7), " ", STR$(YY7), " L ", STR$(XX8), " ", STR$(YY8), " L ", STR$(XX4), " ", STR$(YY4), " Z ") L3$ = CONCAT$("M ", STR$(XX2), " ", STR$(YY2), " L ", STR$(XX6), " ", STR$(YY6), " L ", STR$(XX8), " ", STR$(YY8), " L ", STR$(XX4), " ", STR$(YY4), " Z ") L4$ = CONCAT$("M ", STR$(XX3), " ", STR$(YY3), " L ", STR$(XX7), " ", STR$(YY7), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX1), " ", STR$(YY1), " Z ") L5$ = CONCAT$("M ", STR$(XX8), " ", STR$(YY8), " L ", STR$(XX7), " ", STR$(YY7), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX6), " ", STR$(YY6), " Z ") L6$ = CONCAT$("M ", STR$(XX1), " ", STR$(YY1), " L ", STR$(XX5), " ", STR$(YY5), " L ", STR$(XX6), " ", STR$(YY6), " L ", STR$(XX2), " ", STR$(YY2), " Z ")
SYNC g_object_set(line_1,"data",L1$ , NULL) g_object_set(line_2,"data",L2$, NULL) g_object_set(line_3,"data",L3$, NULL) g_object_set(line_4,"data",L4$, NULL) g_object_set(line_5,"data",L5$, NULL) g_object_set(line_6,"data",L6$, NULL) ' insert a delay between image changes SLEEP DELAY_SET WEND END SUB
' ------------------ SUB MK_GUI() ' ------------------ ' create GUI
' define widgets win = WINDOW("BaCon 3 axis Vector Cube", 600,600) but1 = BUTTON("Go", 80, 30) but2 = BUTTON("Pause", 80, 30) but3 = BUTTON("Exit", 80, 30) spin_RTY=SPIN(75,30,0,50,1) SET(spin_RTY,0) spin_RTX=SPIN(75,30,0,50,1) SET(spin_RTX,0) spin_SIZE=SPIN(75,30,0,1000,1) SET(spin_SIZE,25) spin_RTZ=SPIN(75,30,0,50,1) SET(spin_RTZ,0) spin_DELAY=SPIN(75,30,5,300,5) SET(spin_DELAY,50) move_Y=SPIN(75,30,0,600,1) SET(move_Y,128) move_X=SPIN(75,30,0,600,1) SET(move_X,128) '@ propery PROPERTY(but1, "tooltip-text", "Start GOO animated vector demo.") PROPERTY(but2, "tooltip-text", "Pause GOO animated vector demo.") PROPERTY(but3, "tooltip-text", "Quit this animated vector demo.") PROPERTY(spin_RTX, "tooltip-text", "Speed Rotation X-Axis.") PROPERTY(spin_RTY, "tooltip-text", "Speed Rotation Y-Axis.") PROPERTY(spin_RTZ, "tooltip-text", "Speed Rotation Z-Axis.") PROPERTY(spin_DELAY, "tooltip-text", "Frame Time-Delay.") PROPERTY(spin_SIZE, "tooltip-text", "Zoom.") PROPERTY(move_X, "tooltip-text", "Move X.") PROPERTY(move_Y, "tooltip-text", "Move Y.") '@ attach ATTACH(win, but1, 10, 550) ATTACH(win, but2, 100 ,550) ATTACH(win, but3, 200, 550) ATTACH(win,spin_RTX,300,550) ATTACH(win,spin_RTY,380,550) ATTACH(win,spin_RTZ,460,550) ATTACH(win,spin_SIZE,300,515) ATTACH(win,spin_DELAY,200,515) ATTACH(win,move_X,380,515) ATTACH(win,move_Y,460,515) ' define callback actions for buttons CALLBACK(but1, ANIM_START) CALLBACK(but2, ANIM_STOP) CALLBACK(but3, MY_QUIT) ' set initial state of but2 DISABLE(but2) END SUB
SUB MK_GOO()
goo_canvas1=CANVAS(600,500) '@ get the root of the canvas root_canvas1 = goo_canvas_get_root_item(hug_widget_image(STR$(goo_canvas1))) ATTACH(win,goo_canvas1,0,0) '@ get Pix Buffs red=gdk_pixbuf_new_from_file("./red", 0) green=gdk_pixbuf_new_from_file("./green", 0) cyan=gdk_pixbuf_new_from_file("./cyan", 0) brown=gdk_pixbuf_new_from_file("./brown", 0) yellow=gdk_pixbuf_new_from_file("./yellow", 0) orange=gdk_pixbuf_new_from_file("./orange", 0) black=gdk_pixbuf_new_from_file("./black", 0) white=gdk_pixbuf_new_from_file("./white", 0)
'@ Make Cube Widget cube_1 = goo_canvas_group_new(root_canvas1 ,NULL) line_1 = goo_canvas_path_new( cube_1," M 200 200 L 400 200 ","fill-pixbuf",green,"stroke-pixbuf",white,"line-width" ,1.0, NULL) line_2 = goo_canvas_path_new( cube_1," M 200 200 L 400 200 ","fill-pixbuf",red,"stroke-pixbuf",white ,"line-width" ,1.0, NULL) line_3 = goo_canvas_path_new( cube_1," M 200 200 L 400 200 ","fill-pixbuf",cyan,"stroke-pixbuf",white,"line-width" ,1.0, NULL) line_4 = goo_canvas_path_new( cube_1," M 200 200 L 400 200 ","fill-pixbuf",brown,"stroke-pixbuf",white,"line-width" ,1.0, NULL) line_5 = goo_canvas_path_new( cube_1," M 200 200 L 400 200 ","fill-pixbuf",yellow,"stroke-pixbuf",white,"line-width" ,1.0, NULL) line_6 = goo_canvas_path_new( cube_1," M 200 200 L 400 200 ","fill-pixbuf",orange,"stroke-pixbuf",white ,"line-width" ,1.0, NULL) END SUB
' ********************* ' END SUBS & FUNCTIONS ' *********************
' ********************* ' MAIN ' *********************
MK_TABLES(mysin, mycos) MK_GUI() MK_SVG() MK_GOO() '@ Display until Quit DISPLAY
' ********************* ' END MAIN ' ********************
|
|