HP Forums

Full Version: [Request] drawing a dinamic line
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I'm trying to draw a diameter of a circle, and rotate by dragging your finger on the screen,
How to do a single line it looks? I tried but that rect(G2) after blit(G2) but erases the background

Code:

export Mes()
BEGIN
    LOCAL m,m1,m2,mx,my,mxi,myi,A;
  RECT(RGB(252,252,200));
        DIMGROB_P(G2,340,240,RGB(252,252,200,128));
        DIMGROB_P(G3,340,240,RGB(252,252,200,128));
      ARC_P(G3,160,105,85,0,360);
blit(G3);
WHILE MOUSE(1)≥0 DO END;
REPEAT
    REPEAT
        m:=MOUSE;
        m1:=B→R(m(1));
        m2:=B→R(m(2));
        
    UNTIL SIZE(m1)>0;
    
        mx:=m1(1);
        my:=m1(2);
        mxi:=m1(3);
        myi:=m1(4);

    if m1(5)==#2d then  A:=(mx-mxi); END;
    
    LINE_P(G2,161+85*COS(A),106+85*SIN(A),161-85*COS(A),106-85*SIN(A),RGB(0,0,255));    
    TEXTOUT_P(A,G2,20,208,2,RGB(255,0,0));
  BLIT(G2);
UNTIL my>220 ;
END;
For your example, fastest way is just redrawing the last line over with the background color.
(07-10-2014 07:41 PM)eried Wrote: [ -> ]For your example, fastest way is just redrawing the last line over with the background color.
the problem is that if redraw using blit (G3) in the last line, the screen flickers while dragging your finger with a very ugly effect.
Well, you can use G0 and/or a condition to avoid unnecessary redraws:

Code:
export Mes()
BEGIN
  LOCAL m,m1,m2,mx,my,mxi,myi,A;
  LOCAL p1:=0,p2:=0,p3:=0,p4:=0,o1:=-1,o2:=-1,o3:=-1,o4:=-1;
  RECT(RGB(252,252,200));
  DIMGROB_P(G2,340,240,RGB(252,252,200,128));
  DIMGROB_P(G3,340,240,RGB(252,252,200,128));
  ARC_P(G3,160,105,85,0,360);
  blit(G3);
  
WHILE MOUSE(1)≥0 DO END;
REPEAT
  REPEAT
    m:=MOUSE;
    m1:=B→R(m(1));
    m2:=B→R(m(2));
    
  UNTIL SIZE(m1)>0;
  
  mx:=m1(1);
  my:=m1(2);
  mxi:=m1(3);
  myi:=m1(4);
  
  if m1(5)==#2d then  A:=(mx-mxi); END;
  
  p1:=161+85*COS(A);
  p2:=106+85*SIN(A);
  p3:=161-85*COS(A);
  p4:=106-85*SIN(A);
  
  if p1<>o1 then
    LINE_P(G0,o1,o2,o3,o4,RGB(252,252,200));
    LINE_P(G0,p1,p2,p3,p4,RGB(0,0,255));
    o1:=p1;o2:=p2;o3:=p3;o4:=p4;
  end;
  //TEXTOUT_P(A,G0,20,208,2,RGB(255,0,0));
  //BLIT(G2);
UNTIL my>220 ;
END;
thank you very much for the code, just what I needed

Habia intentado el volver a dibujar la recta de color del fondo pero me faltaba el condicional muchas gracias.
Reference URL's