|
Post by alexfish on Nov 9, 2023 3:00:46 GMT 1
|
|
|
Post by alexfish on Nov 9, 2023 12:38:50 GMT 1
HUG.3.5.3 Released If want full gl API opengl un-comment lines required AT 1339
NOTE: there is no default canvas & must be declared in HUGOPTIONS CAIRO GOO GLAREA Latest update: 11 Nov 2023Latest update: 12 Nov 2023bug fixes : improved canvas functions : removed FLOXBOX -> Reason Floxbox not working in horizontal mode ? ::USE BOX Final update possible in the new year Final update: 05 Dec 2023IF Want GOO CANVAS install 'libgoocanvas' version2 BR Alex Attachments:hug353.bac.tar.bz2 (26.28 KB)
|
|
|
Post by alexfish on Nov 9, 2023 13:31:47 GMT 1
|
|
|
Post by alexfish on Nov 9, 2023 15:33:11 GMT 1
Turtle graphics by John Spikowski turtle.bac ' John Spikowski GLOBAL KATZOLWIA, POZYCJAX, POZYCJAY, RYSOWANIE GLOBAL KOLOR$
KOLOR$ = "#000000" KATZOLWIA = 0 POZYCJAX = 300 POZYCJAY = 300 RYSOWANIE = 1
SUB FORWARD (NUMBER DLUGOSC) LOCAL A, B, X, Y A = INT (SIN (KATZOLWIA * PI / 180) * DLUGOSC) B = INT (COS (KATZOLWIA * PI / 180) * DLUGOSC) X = POZYCJAX + A Y = POZYCJAY - B IF RYSOWANIE = 1 THEN LINE (KOLOR$, POZYCJAX, POZYCJAY, X, Y) END IF POZYCJAX = X POZYCJAY = Y SYNC () END SUB
SUB BACKWARD (NUMBER DLUGOSC) LOCAL A, B, X, Y A = INT (SIN (KATZOLWIA * PI / 180) * DLUGOSC) B = INT (COS (KATZOLWIA * PI / 180) * DLUGOSC) X = POZYCJAX - A Y = POZYCJAY + B IF RYSOWANIE = 1 THEN LINE (KOLOR$, POZYCJAX, POZYCJAY, X, Y) END IF POZYCJAX = X POZYCJAY = Y SYNC () END SUB
SUB TURNRIGHT (NUMBER ZMIANA) KATZOLWIA = KATZOLWIA + ZMIANA IF KATZOLWIA > 360 THEN KATZOLWIA = KATZOLWIA - 360 END IF IF KATZOLWIA < 0 THEN KATZOLWIA = KATZOLWIA + 360 END IF END SUB
SUB TURNLEFT (NUMBER ZMIANA) KATZOLWIA = KATZOLWIA - ZMIANA IF KATZOLWIA > 360 THEN KATZOLWIA = KATZOLWIA - 360 END IF IF KATZOLWIA < 0 THEN KATZOLWIA = KATZOLWIA + 360 END IF END SUB
SUB PENUP RYSOWANIE = 0 END SUB
SUB PENDOWN RYSOWANIE = 1 END SUB
SUB GOXY (NUMBER ZMIANAX, NUMBER ZMIANAY) POZYCJAX = ZMIANAX POZYCJAY = ZMIANAY END SUB
SUB GOX (NUMBER ZMIANAX) POZYCJAX = POZYCJAX + ZMIANAX END SUB
SUB GOY (NUMBER ZMIANAY) POZYCJAY = POZYCJAY + ZMIANAY END SUB
SUB RESETANGLE KATZOLWIA = 0 END SUB
SUB SETCOLOR (STRING NOWYKOLOR$) KOLOR$ = NOWYKOLOR$ END SUB PROGRAM INCLUDE "hug353.bac"
HUGOPTIONS ("CANVAS CAIRO") HUGOPTIONS ("NOSCALING")
INCLUDE "turtle.bac"
FUNCTION RYSUJ SQUARE ("#0000FF", 0, 0, 900, 600, TRUE) RESETANGLE () GOXY (110, 300) FOR X = 1 TO 100 FORWARD (250) TURNLEFT (198) NEXT X RESETANGLE () SETCOLOR ("#FF0000") GOXY (230, 440) FOR K = 1 TO 10 GOX (2) GOY (2) FOR X = 1 TO 36 IF MOD (X, 2) = 0 THEN PENUP () END IF BACKWARD (20) PENDOWN () TURNRIGHT (10) NEXT X NEXT K RESETANGLE () SETCOLOR ("@FFFF00") GOXY (350, 550) K = 2 WHILE (K < 496) FORWARD (500 - K) TURNRIGHT (91) K = K + 2 C = C + 1 WEND SYNC () RETURN (FALSE) END FUNCTION
WIN = WINDOW ("Example of turtle graphics", 920, 620) RYSUNEK = CANVAS (900, 600) ATTACH (WIN, RYSUNEK, 10, 10) TIMEOUT (50, RYSUJ) DISPLAY
find at Turtlealso tested GLAREA INCLUDE "hug353.bac" HUGOPTIONS ("CANVAS GLAREA") HUGOPTIONS ("NOSCALING") GOO CANVAS buggy Attachments:
|
|
|
Post by alexfish on Nov 9, 2023 16:21:38 GMT 1
Arg well
I got a bug in goo canvas
Second call to To a lib
sitting here have commented out the imports At
ELIF RIGHT$(hug_arg$, 3) = "GOO" THEN HUG_CANVAS_TYPE = 2 goolib$ = hug_Get_Goocanvas$ /*
Now looking further / a further test = fail in other bits , last week basic testing work Suggest leave lib as is , an avoid goo till new update available
Looks like I got that bug in goo only , ported those bits into the main init function All OK there Now need to find reason for No Draw Hopeful update will not take long UPDATE ARCHIVE Thinking this Rare Bug may also exit in another lib, have tested all other libs ,thinking could be in the goo.so Agh Well.
BR Alex
|
|
|
Post by alexfish on Nov 9, 2023 17:12:35 GMT 1
Updated at second post
BR Alex
|
|
|
Post by alexfish on Nov 9, 2023 21:40:08 GMT 1
As Mentioned in another thread gtk widgets can be embedded in goo_canvas Demo Code BR Alex Demo Code 'goo_canvas_widget_new(long,long,double,double,double,double,...) OPTION PARSE FALSE INCLUDE "hug353.bac" HUGOPTIONS("CANVAS GOO") HUGOPTIONS("NOSCALING")
SUB Click() PRINT "Clicked" END SUB
FUNCTION ADD_BUTTON(goo_text$,hug_xpos, hug_ypos, hug_width,hug_height) LOCAL pix, ebox, context,mybut,but pix = hug_gui_properties.canvas ebox = hug_widget_ebox(STR$(pix)) context = goo_canvas_get_root_item(pix) but= BUTTON(goo_text$,1,1) mybut = goo_canvas_widget_new (context, but, hug_xpos, hug_xpos, hug_width,hug_height, NULL) gtk_widget_show (but) RETURN but END FUNCTION
win = WINDOW("Goo",900,600)
can = CANVAS(900,600)
ATTACH(win,can,0,0) goo_but = ADD_BUTTON("Test",3,3,100,30) CALLBACK(goo_but,Click) DISPLAY Black 'goo_canvas_widget_new(long,long,double,double,double,double,...) OPTION PARSE FALSE INCLUDE "hug353.bac" HUGOPTIONS("CANVAS GOO") HUGOPTIONS("NOSCALING")
FUNCTION ADD_BUTTON(goo_text$,hug_xpos, hug_ypos, hug_width,hug_height) LOCAL pix, ebox, context,mybut,but pix = hug_gui_properties.canvas ebox = hug_widget_ebox(STR$(pix)) context = goo_canvas_get_root_item(pix) but= BUTTON(goo_text$,1,1) mybut = goo_canvas_widget_new (context, but, hug_xpos, hug_xpos, hug_width,hug_height, NULL) gtk_widget_show (but) RETURN but END FUNCTION
SUB Click() PRINT "Clicked" END SUB
win = WINDOW("Goo",900,600)
can = CANVAS(900,600)
ATTACH(win,can,0,0) SQUARE("#000000",0,0,900,600,1) goo_but = ADD_BUTTON("Test",3,3,100,30) CALLBACK(goo_but,Click) DISPLAY Nice GUI Tip :: load a picture size of window then add widgets Attachments:
|
|
|
Post by alexfish on Nov 11, 2023 14:04:35 GMT 1
LIB updated see post #2 Improved ARC Improving drawing fonts NOTE ARC use PIXEL : if importing the HUG funtions : if have ARC declare PIXEL as well 'Demo font INCLUDE "hug353.bac" HUGOPTIONS("CANVAS GOO") HUGOPTIONS("NOSCALING") LOCAL CL TYPE float SUB Draw()
SQUARE("#000000",0,0,900,750,1) LOCAL advance = 0 REM D 'ARC (colour,deg_start,deg_end,x_pos,ypos,width,height) :: org: topleft,top ARC("#FF00FF",0,180,advance+50,10,0,200) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,200) ARC("#FF00FF",180,360,advance+ -40,10,200,200) INCR advance,130 REM D ARC("#FF00FF",0,180,advance+50,10,0,200) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,200) ARC("#FF00FF",180,360,advance+ -40,10,200,200)
REM P INCR advance,130 ARC("#FF00FF",0,180,advance+50,10,0,200) LINE("#FF00FF",advance+50,210,advance+60,210) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,100) ARC("#FF00FF",180,360,advance+ -40,10,200,100)
REM B INCR advance,130 ARC("#FF00FF",0,180,advance+50,10,0,200) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,100) ARC("#FF00FF",180,360,advance+ -40,10,200,100) ARC("#FF00FF",180,360,advance+ -50,100,200,110) ARC("#FF00FF",180,360,advance+ -40,100,200,110)
REM P INCR advance,130 ARC("#FF00FF",0,180,advance+50,10,0,200) LINE("#FF00FF",advance+50,210,advance+60,210) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,100) ARC("#FF00FF",180,360,advance+ -40,10,200,100)
END SUB
win = WINDOW("Test Graphs",906,806) can = CANVAS(900,750) ATTACH(win,can,3,53) but = BUTTON("Draw",100,30) ATTACH(win,but,3,3) CALLBACK(but,Draw)
DISPLAY BR Alex Attachments:
|
|
|
Post by alexfish on Nov 11, 2023 15:05:54 GMT 1
Cairo AS Widget 'CAIROAREA'
'demo CAIROAREA INCLUDE "hug353.bac" HUGOPTIONS("CANVAS GOO") HUGOPTIONS("NOSCALING")
SUB Draw()
pix = GETCAIRO(cairo) surf= GETSURFACE(pix)
LOCAL cr cr = cairo_create (surf) cairo_set_source_rgb(cr,0,0,0) cairo_rectangle(cr,0,0,300,300) cairo_stroke(cr) cairo_save(cr) cairo_restore(cr) cairo_set_source_rgb(cr,0,0,1) cairo_rectangle(cr,50,55,80,80) cairo_fill(cr) cairo_destroy(cr) cairo_surface_flush(surf) gtk_image_set_from_surface (pix,surf) gtk_widget_queue_draw(cairo ) END SUB REM ------------------------------------------------------------- SUB Click()
PRINT "Clicked"
END SUB REM -------------------------------------------------------------
win = WINDOW("FONT",900,700)
cairo = CAIROAREA(300,300) ATTACH (win,cairo,1,1) Draw CALLBACK(cairo,Click) DISPLAY
Need To save the Image easy way
cairo_surface_write_to_png(surf,"my.png") Now can bake your fonts as well in any canvas can import using PICTURE
BR Alex
|
|
|
Post by alexfish on Nov 11, 2023 20:22:57 GMT 1
GOO CANVAS tricks 1 goo canvas 1 cairo area Draw in Cairo 'demo2 CAIROAREA INCLUDE "hug353.bac" HUGOPTIONS("CANVAS GOO") HUGOPTIONS("NOSCALING")
SUB Draw() LOCAL pix,surf pix = GETCAIRO(cairo) surf= GETSURFACE(pix)
LOCAL cr cr = cairo_create (surf) cairo_set_source_rgb(cr,0,0,0) cairo_rectangle(cr,0,0,300,300) cairo_stroke(cr) cairo_save(cr) cairo_restore(cr) cairo_set_source_rgb(cr,0,0,1) cairo_rectangle(cr,50,55,80,80) cairo_fill(cr) cairo_destroy(cr) cairo_surface_flush(surf) gtk_image_set_from_surface (pix,surf) gtk_widget_queue_draw(cairo ) cairo_surface_write_to_png(surf,"my.png") END SUB REM ================================================================================================= SUB ADD_WIDGET(NUMBER widget,hug_xpos, hug_ypos, hug_width,hug_height) LOCAL pix, ebox, context,mywidget pix = hug_gui_properties.canvas ebox = hug_widget_ebox(STR$(pix)) context = goo_canvas_get_root_item(pix)
mywidget = goo_canvas_widget_new (context, widget, hug_xpos, hug_ypos, hug_width,hug_height, NULL) gtk_widget_show (widget) REM ================================================================================================= END SUB REM ------------------------------------------------------------- SUB Click()
PRINT "Clicked"
END SUB REM -------------------------------------------------------------
win = WINDOW("FONT",900,700) can = CANVAS(900,700) SQUARE("#FF55FF",0,0,900,700,1) ATTACH(win,can,0,0) cairo = CAIROAREA(300,300) ADD_WIDGET(cairo,20,20,300,300) Draw DISPLAY Second picky ::Make Exciting UI's Attachments:
|
|
|
Post by alexfish on Nov 12, 2023 21:08:41 GMT 1
LIB Updated Post #2 Here looking at MYFONTS can see from code there is enough info there to Create the alphabet using arcs and Lines 'Demo Myfonts INCLUDE "hug353.bac" HUGOPTIONS("CANVAS CAIRO") HUGOPTIONS("NOSCALING") LOCAL CL TYPE float SUB Draw()
LOCAL advance = 0 REM D SYNC 'ARC (colour,deg_start,deg_end,x_pos,ypos,width,height) :: org: topleft,top ARC("#FF00FF",0,180,advance+50,10,0,200) PRINT CAIRO_X, ":", CAIRO_Y ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,200) ARC("#FF00FF",180,360,advance+ -40,10,200,200) INCR advance,130 PRINT CAIRO_X, ":", CAIRO_Y REM D ARC("#FF00FF",0,180,advance+50,10,0,200) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,200) ARC("#FF00FF",180,360,advance+ -40,10,200,200) PRINT CAIRO_X, ":", CAIRO_Y REM P INCR advance,130 ARC("#FF00FF",0,180,advance+50,10,0,200) LINE("#FF00FF",advance+50,210,advance+60,210) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,100) ARC("#FF00FF",180,360,advance+ -40,10,200,100) PRINT CAIRO_X, ":", CAIRO_Y REM B INCR advance,130 ARC("#FF00FF",0,180,advance+50,10,0,200) ARC("#FF00FF",0,180,advance+60,10,0,200) ARC("#FF00FF",180,360,advance+ -50,10,200,100) ARC("#FF00FF",180,360,advance+ -40,10,200,100) ARC("#FF00FF",180,360,advance+ -50,100,200,110) ARC("#FF00FF",180,360,advance+ -40,100,200,110) PRINT CAIRO_X, ":", CAIRO_Y
REM C INCR advance,130 ARC("#FF00FF",-27,207,advance+50,10,150,200) ARC("#FF00FF",0,180,advance+60,10,150,200)
INCR advance,130 REM 2C's make a X an so on REM X ARC("#FF00FF",0,180,advance+50+55,10,75,200) ARC("#FF00FF",-20,200,advance+50+60,10,75,200) ARC("#FF00FF",180-27,360+26,advance+30,10,75,200) ARC("#FF00FF",180,360,advance+35,10,75,200)
PRINT CAIRO_X, ":", CAIRO_Y 'SA END SUB
win = WINDOW("MY Fonts",906,806) can = CANVAS(900,750) ATTACH(win,can,3,53) but = BUTTON("Draw",100,30) ATTACH(win,but,3,3) CALLBACK(but,Draw) SQUARE("#000000",0,0,900,750,1) FOR t = 50 TO 900 STEP 130
LINE("#FFFFFF",t,0,t,800) LINE("#FFFFFF",t-18,0,t-18,800) NEXT LINE("#FFFFFF",0,10,900,10) LINE("#FFFFFF",0,112,900,112) LINE("#FFFFFF",0,212,900,212) DISPLAY Q:they are big fonts A: these are for Machine(CNC router) the arcs are circumference /X :Added in the real world the fonts are 200mm in height not many font.ttf look this good at those sizes if any Of interest to coders The ARC function SUB ARC(STRING hug_color$,float deg1,float deg2, float hug_x, float hug_y, float hug_xsize, float hug_ysize)
LOCAL circ, x, y , angle TYPE float IF hug_xsize < hug_ysize THEN circ = hug_ysize * PI circ= 360/circ ELSE circ = hug_xsize * PI circ= 360/circ END IF FOR i = deg1+180 TO deg2+180 STEP circ angle = 2 * PI * i / 360 x = (hug_xsize/2)*SIN(angle) y = (hug_ysize/2)*COS(angle) PIXEL(hug_color$,hug_x+(hug_xsize/2)+x,hug_y+(hug_ysize/2)+y) NEXT END SUB want smaller make them smaller or scale them down IE in cairo surface = hug_widget_surface( STR$(pix)) cr = cairo_create (surface) cairo_scale (cr,sx,sy) So If Draw ARC to full size of Screen ARC("#FFFF00",1,360,0,0,1900,1000) see 2nd Picky & the ARC function, Yellow Line, + does not produce Flat Bits : £rd Picky there is a sort of grid in this demo See Picky BR Alex
|
|
|
Post by alexfish on Nov 13, 2023 12:44:48 GMT 1
BOX : gtk_box_new() Default BOX = HORIZONTAL to keep simple In GTK3 found if a widget is place out of bounds then window will expand: constraining widgets can help with button type widgets & No math needed will not work with HUG canvas widgets Can Change using ORIENT using gtk$ = HUGLIB$("gtk") IMPORT "gtk_orientable_set_orientation(long,long)" FROM gtk$ TYPE void SET VERTICAL gtk_orientable_set_orientation(box,1)
Test Code + bits for CAIROAREA esp SET_RGB & SET_RGBA: handy if want to use Color Picker: SeePicky here trying to max window size within limits(Window mode fixed) use this as a baseline , handy for small screen 'demo2 BOX INCLUDE "hug353.bac" HUGOPTIONS("CANVAS CAIRO") HUGOPTIONS("NOSCALING") gtk$ = HUGLIB$("gtk") IMPORT "gtk_orientable_set_orientation(long,long)" FROM gtk$ TYPE void REM ============================================= SUB SET_RGB(NUMBER cr, char r, char g, char b) LOCAL R,G,B TYPE double R= (double)(1.0/255.0)*r G= (double)(1.0/255.0)*g B= (double)(1.0/255.0)*b cairo_set_source_rgb(cr,R,G,B) END SUB REM ============================================= SUB SET_RGBA(NUMBER cr, char r, char g, char b, char a) LOCAL R,G,B,A TYPE double R= (double)(1.0/255.0)*r G= (double)(1.0/255.0)*g B= (double)(1.0/255.0)*b A= (double)(1.0/255.0)*a cairo_set_source_rgba(cr,R,G,B,A) END SUB REM ============================================= SUB Draw() LOCAL pix,surf,cr pix = GETCAIRO(cairo) surf= GETSURFACE(pix)
cr = cairo_create (surf) SET_RGB(cr,155,55,55) cairo_rectangle(cr,0,0,700,400) cairo_fill(cr) cairo_save(cr) cairo_restore(cr) SET_RGB(cr,0,0,255) cairo_rectangle(cr,50,55,80,80) cairo_fill(cr) cairo_destroy(cr) cairo_surface_flush(surf) gtk_image_set_from_surface (pix,surf) gtk_widget_queue_draw(cairo ) END SUB REM =================================================
win = WINDOW("BOX",SCREENSIZE(0)-50,SCREENSIZE(1)-80) box = BOX(SCREENSIZE(0)-60/2,30) 'box = BOX(1,SCREENSIZE(1)-80) 'gtk_orientable_set_orientation(box,1) ATTACH(win,box,0,0)
but= BUTTON("Draw",100,-1) CALLBACK(but,Draw)
but2= BUTTON("QUIT",100,-1) CALLBACK(but2,QUIT)
PACKSTART(box,but) PACKEND(box,but2)
box2 = BOX(SCREENSIZE(0)-30,-1) ATTACH(win,box2,0,35)
cairo=CAIROAREA(700,400) PACKEND(box2,cairo)
DISPLAY
BR Alex USE LATEST updated LIB POST #2 Attachments:
|
|
|
Post by alexfish on Nov 15, 2023 18:20:45 GMT 1
Back on the GCODE theme looks ok but a little work needed the code works in bCNC but the obj's are upside down : but could get it flip Code wise FINESS(without the E) = optimizing the step 1 to 16 ADDED :: update TODO use CAIROAREA + canvas origins to be set centered -x 0 +x : -y 0 +y REF FLIP 'demo GCODE work in progress INCLUDE "hug353.bac" HUGOPTIONS("CANVAS CAIRO") HUGOPTIONS("NOSCALING") CONST FINESS_NORMAL = 16 PROTO sprintf DECLARE BLK$ = "block-[ ]" REM -------------------------------------------------------------------------
SUB G3(hug_block$, STRING hug_colour$, float deg1, float deg2, float hug_x, \ float hug_y, float hug_xsize, float hug_ysize,float finess) TEXT(ed,hug_block$ & NL$) IF finess < 1 THEN finess = 0.5 finess = finess * 0.0625 IF finess >1 THEN finess =1 LOCAL circ, x, y , angle TYPE float LOCAL gx$,gy$
IF hug_xsize < hug_ysize THEN circ = hug_ysize circ= 360*finess/circ ELSE circ = hug_xsize * PI circ= 360*finess/circ END IF
FOR i = deg1+180 TO deg2+180 STEP circ angle = 2 * PI * i / 360 x = (hug_xsize/2)*SIN(angle) y = (hug_ysize/2)*COS(angle) PIXEL(hug_colour$,hug_x+(hug_xsize/2)+x,hug_y+(hug_ysize/2)+y) LOCAL gx[50] TYPE static char LOCAL gy[50] TYPE static char sprintf(gx,"G3 X%.3f",hug_x+(hug_xsize/2)+x) sprintf(gy," Y%.3f",hug_y+(hug_ysize/2)+y) gx$ = gx gy$ = gy TEXT(ed,gx$ & gy$ & NL$) NEXT
END SUB
REM --------------------------------------------------------------------
SUB G2(hug_block$, STRING hug_colour$, float deg1, float deg2, float hug_x, \ float hug_y, float hug_xsize, float hug_ysize, float finess)
TEXT(ed,hug_block$ & NL$)
IF finess < 1 THEN finess = 0.5 finess = finess * 0.0625 IF finess >1 THEN finess =1 LOCAL circ, x, y , angle TYPE float LOCAL gx$,gy$
IF hug_xsize < hug_ysize THEN circ = hug_ysize circ= 360*finess/circ ELSE circ = hug_xsize * PI circ= 360*finess/circ END IF
FOR i = deg1+180 TO deg2+180 STEP circ angle = 2 * PI * i / 360 x = (hug_xsize/2)*SIN(angle) x=-x y = (hug_ysize/2)*COS(angle) PIXEL(hug_colour$,hug_x+(hug_xsize/2)+x,hug_y+(hug_ysize/2)+y) LOCAL gx[50] TYPE static char LOCAL gy[50] TYPE static char sprintf(gx,"G2 X%.3f",hug_x+(hug_xsize/2)+x) sprintf(gy," Y%.3f",hug_y+(hug_ysize/2)+y) gx$ = gx gy$ = gy TEXT(ed,gx$ & gy$ & NL$) NEXT
END SUB
REM -------------------------------------------------------------------------
SUB G1(hug_block$, hug_colour$,float xx1, float yy1, float xx2, float yy2, \ float finess)
TEXT(ed,hug_block$ & NL$)
IF finess < 1 THEN finess = 0.5 finess = finess * 0.0625
LOCAL err,e2,dx,dy,sx,sy,ptr TYPE float LOCAL gx$ LOCAL gy$
dx = IIF(xx2 - xx1 >= 0, xx2 - xx1 , xx1 - xx2) dy = IIF(yy2 - yy1 >= 0, yy2 - yy1 , yy1 - yy2)
sx = IIF(xx1 < xx2 , finess , -finess) sy = IIF(yy1 < yy2 , finess , -finess) err = dx - dy
WHILE (1) DO
PIXEL(hug_colour$,xx1,yy1) LOCAL gx[50] TYPE static char LOCAL gy[50] TYPE static char sprintf(gx,"G1 X%.3f",xx1) sprintf(gy," Y%.3f",yy1) gx$ = gx gy$ = gy TEXT(ed,gx$ & gy$ & NL$)
IF (FLOOR(xx1) == FLOOR(xx2) && FLOOR(yy1) == FLOOR(yy2) ) THEN PRINT xx1,":",xx2,"::",yy1,":",yy2 BREAK END IF
e2 = 2 * err IF (e2 > -dy) THEN err = err - dy xx1 = xx1 + sx END IF IF (e2 < dx) THEN err = err + dx yy1 = yy1 + sy END IF WEND
END SUB
REM -------------------------------------------------------------------------
SUB Draw() LOCAL txt$ SQUARE("#FFFFFF",0,0,500,600,1) G3(BLK$ & ";ARC", "#FF0000",0,90,50,100,200,200,FINESS_NORMAL) G2(BLK$ & ";Next ARC", "#0000FF",0,90,50,100,200,200,FINESS_NORMAL) G1(BLK$ & "Line 1", "#0000FF",0.5,10.1,100.5,10,FINESS_NORMAL) G1(BLK$ & "Line 2", "#FF00FF",100.5,10.1,100.5,100.6,FINESS_NORMAL) txt$ = GRAB$(ed) SAVE txt$ TO "Mygcode.nc" END SUB
REM -------------------------------------------------------------------------
win = WINDOW("Gcode",1012,666) can = CANVAS(500,600) ATTACH(win,can, 3,40)
but = BUTTON("Draw",100,30) ATTACH(win,but,3,3) CALLBACK(but,Draw)
ed = EDIT(500,600) FONT(ed,"monospace 16px") ATTACH(win,ed,503,0)
DISPLAY Update code not posted : moved 1 arc down 10 for Picky on bCNC BR Alex 1st Picky = canvas cairo 2nd Picky = bCNC flip sorted Attachments:
|
|
|
Post by alexfish on Nov 16, 2023 11:24:29 GMT 1
Last update on gcode bit 'demo2 GCODE
INCLUDE "hug353.bac" HUGOPTIONS("CANVAS CAIRO") HUGOPTIONS("NOSCALING") CONST FINESS_NORMAL = 16 CONST FINESS_MAX = 24 PROTO sprintf DECLARE BLK$ = "block-[" DECLARE BLKEND$ = "]" DECLARE BLOCS REM -------------------------------------------------------------------------
SUB G3(hug_block$, STRING hug_colour$, float deg1, float deg2, float hug_x, \ float hug_y, float hug_xsize, float hug_ysize,float finess) INCR BLOCS TEXT(ed,hug_block$ & STR$(BLOCS) & BLKEND$ & NL$) IF finess < 1 THEN finess = 0.5 finess = finess * 0.0625 IF finess >1 THEN finess =1 LOCAL circ, x, y , angle TYPE float LOCAL gx$,gy$ LOCAL ptr IF hug_xsize < hug_ysize THEN circ = hug_ysize circ= 360*finess/circ ELSE circ = hug_xsize * PI circ= 360*finess/circ END IF
FOR i = deg1+180 TO deg2+180 STEP circ INCR ptr angle = 2 * PI * i / 360 x = (hug_xsize/2)*SIN(angle) y = (hug_ysize/2)*COS(angle) PIXEL(hug_colour$,hug_x+(hug_xsize/2)+x,hug_y+(hug_ysize/2)+y) LOCAL gx[50] TYPE static char LOCAL gy[50] TYPE static char IF ptr = 1 THEN sprintf(gx,"G0 X%.3f",hug_x+(hug_xsize/2)+x) ELSE sprintf(gx,"G3 X%.3f",hug_x+(hug_xsize/2)+x) END IF sprintf(gy," Y%.3f",hug_y+(hug_ysize/2)+y) gx$ = gx gy$ = gy TEXT(ed,gx$ & gy$ & NL$) NEXT
END SUB
REM --------------------------------------------------------------------
SUB G2(hug_block$, STRING hug_colour$, float deg1, float deg2, float hug_x, \ float hug_y, float hug_xsize, float hug_ysize, float finess)
INCR BLOCS TEXT(ed,hug_block$ & STR$(BLOCS) & BLKEND$ & NL$)
IF finess < 1 THEN finess = 0.5 finess = finess * 0.0625 IF finess >1 THEN finess =1 LOCAL circ, x, y , angle TYPE float LOCAL gx$,gy$ LOCAL ptr IF hug_xsize < hug_ysize THEN circ = hug_ysize circ= 360*finess/circ ELSE circ = hug_xsize * PI circ= 360*finess/circ END IF
FOR i = deg1+180 TO deg2+180 STEP circ INCR ptr angle = 2 * PI * i / 360 x = (hug_xsize/2)*SIN(angle) x=-x y = (hug_ysize/2)*COS(angle) PIXEL(hug_colour$,hug_x+(hug_xsize/2)+x,hug_y+(hug_ysize/2)+y) LOCAL gx[50] TYPE static char LOCAL gy[50] TYPE static char IF ptr = 1 THEN sprintf(gx,"G0 X%.3f",hug_x+(hug_xsize/2)+x) ELSE sprintf(gx,"G2 X%.3f",hug_x+(hug_xsize/2)+x) END IF sprintf(gy," Y%.3f",hug_y+(hug_ysize/2)+y) gx$ = gx gy$ = gy TEXT(ed,gx$ & gy$ & NL$) NEXT
END SUB
REM -------------------------------------------------------------------------
SUB G1(hug_block$, hug_colour$,float xx1, float yy1, float xx2, float yy2, \ float finess)
INCR BLOCS TEXT(ed,hug_block$ & STR$(BLOCS) & BLKEND$ & NL$)
IF finess < 1 THEN finess = 0.5 finess = finess * 0.0625 LOCAL ptr LOCAL err,e2,dx,dy,sx,sy,ref TYPE float LOCAL gx$ LOCAL gy$ ' xx1 yy1 xx1 yy1 ' G1(BLK$ & "Line 2", "#FF00FF",100.5,10.1,100.5,100.6,FINESS_NORMAL) IF yy2 = yy1 THEN ref = yy2+yy1 PRINT "======" ,ref ELIF yy2 > yy1 THEN PRINT ">>>>>>" ELIF yy2 < yy1 THEN PRINT "<<<<<<" END IF
dx = IIF(xx2 - xx1 >= 0, xx2 - xx1 , xx1 - xx2) dy = IIF(yy2 - yy1 >= 0, yy2 - yy1 , yy1 - yy2)
sx = IIF(xx1 < xx2 , finess , -finess) sy = IIF(yy1 < yy2 , finess , -finess) err = dx - dy
WHILE (1) DO INCR ptr PIXEL(hug_colour$,xx1,yy1) LOCAL gx[50] TYPE static char LOCAL gy[50] TYPE static char IF ptr=1 THEN sprintf(gx,"G0 X%.3f",xx1) ELSE sprintf(gx,"G1 X%.3f",xx1) END IF sprintf(gy," Y%.3f",yy1 ) gx$ = gx gy$ = gy TEXT(ed,gx$ & gy$ & NL$)
IF (FLOOR(xx1) == FLOOR(xx2) && FLOOR(yy1) == FLOOR(yy2) ) THEN
BREAK END IF
e2 = 2 * err IF (e2 > -dy) THEN err = err - dy xx1 = xx1 + sx END IF IF (e2 < dx) THEN err = err + dx yy1 = yy1 + sy END IF WEND
END SUB
REM -------------------------------------------------------------------------
SUB Draw() LOCAL txt$ SQUARE("#FFFFFF",0,0,500,600,1)
G3(BLK$ , "#FF0000",0,90,50,110,200,200,FINESS_MAX) G2(BLK$ , "#0000FF",0,90,50,100,200,200,FINESS_MAX) G1(BLK$ , "#0000FF",0.5,10.0,100,10.0,FINESS_NORMAL) G1(BLK$ , "#FF00FF",100.5,10.1,100.5,100.6,FINESS_NORMAL)
txt$ = GRAB$(ed) SAVE txt$ TO "Mygcode.nc" END SUB
REM -------------------------------------------------------------------------
win = WINDOW("Gcode",1012,666) can = CANVAS(500,600) ATTACH(win,can, 3,40)
but = BUTTON("Draw",100,30) ATTACH(win,but,3,3) CALLBACK(but,Draw)
ed = EDIT(500,600) FONT(ed,"monospace 16px") ATTACH(win,ed,503,0)
in bCNC open the "Mygcode.nc" , it will be upside down click on block header , if correct all will be selected click flip vertical
scroll 'window' to view all
select 'move' , move 'keeping the center marker line 90 deg' to grid
move the 'origin' (pendant) to suitnow can follow the go to G0's and the G1,G2,G3 's BR Alex The Pick looks chunky , its well zoomed out from the original settings Attachments:
|
|
|
Post by alexfish on Nov 17, 2023 22:18:01 GMT 1
Q: me, the update lib produces larger execs than original hug A: me, Yes, for extended graphics it does , if I say a trick has four wheels then 'a trick has four wheels' want 3 wheels UPX the exec Typical app pi@raspberrypi:~/hug353 $ upx gcoder Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name -------------------- ------ ----------- ----------- 25780188 -> 101416 0.39% linux/arm gcoder
Packed 1 file. the actual sizes upx 24.6 MiB upx = 99.0 KiB Proof, the theory of a trick has four wheels'task manager original RSS 23.8 MB / VM-size 124.5MB 'task manager UPX app RSS 46.9 MB / VM-size 125.7MB 'RSS is the Resident Set Size and is used to show how much memory is allocated to that process original HUG typical demo app RSS 17.2 MB Sitting here on pi lxterminal: RS 29.7 MB BR Alex
|
|