Browse Source

+ added arc,ellipse,fillelipse,sector,pieslice

michael 27 years ago
parent
commit
f087270d00
1 changed files with 94 additions and 10 deletions
  1. 94 10
      rtl/linux/graph.pp

+ 94 - 10
rtl/linux/graph.pp

@@ -66,12 +66,7 @@ unit Graph;
   SetTextStyle
   FillPoly
   FloodFill
-  GetArcCoords
-  Arc
   SetAspectRatio
-  PieSlice
-  Sector
-
 
   (please remove what you implement fom this list)
 }
@@ -1277,13 +1272,32 @@ end;
 
 { Nonlinearly bounded primitives
 }
+
+Var LastArcCoords : ArcCoordsType;
+
+
+procedure SetArcCoords (X,y,xradius,yradius,Stangle,endangle : integer);   
+
+begin
+  LastArcCoords.X:=X;
+  LastArccOords.y:=y;
+  Lastarccoords.xstart:=x+round(xradius*cos(stangle*pi/180));
+  Lastarccoords.ystart:=y-round(yradius*sin(stangle*pi/180));
+  LastArccoords.xend:=x+round(xradius*cos(endangle*pi/180));
+  LastArccoords.yend:=y-round(yradius*sin(endangle*pi/180));
+end;
+
+
 procedure GetArcCoords(var ArcCoords: ArcCoordsType);   
 
 begin
+  ArcCoords:=LastArcCoords;
 end;
 
 procedure Arc(X, Y: Integer; StAngle, EndAngle, Radius: Word);
+
 begin
+ Ellipse (X,y,stangle,endangle,Radius,radius);
 end;
 
 procedure Circle(X, Y: Integer; Radius: Word);
@@ -1294,12 +1308,44 @@ end;
 
 procedure Ellipse(X, Y: Integer;
   StAngle, EndAngle: Word; XRadius, YRadius : Word);
+
+Var I : longint;
+    tmpang : real;
+    
 begin
+ SetArcCoords (X,Y,xradius,yradius,Stangle,EndAngle);
+ For i:= StAngle To EndAngle Do
+  Begin
+   tmpAng:= i*Pi/180;
+   curX:= X + Round (xRadius*Cos (tmpAng));
+   curY:= Y - Round (YRadius*Sin (tmpAng));
+   PutPixel (curX, curY, TheColor);
+  End;
 end;
 
 procedure FillEllipse(X, Y: Integer; XRadius, YRadius : Word);
-begin
-  Bar(X - XRadius, Y - YRadius, X + XRadius, Y + YRadius);
+
+Var I,tmpcolor : longint;
+    tmpang : real;
+    tmpx,tmpy : Integer;
+    
+begin
+ tmpcolor:=Thecolor;
+ SetColor(TheFillColor);
+ For i:= 0 to 180 Do
+  Begin
+   tmpAng:= i*Pi/180;
+   curX:= Round (xRadius*Cos (tmpAng));
+   curY:= Round (YRadius*Sin (tmpAng));
+   tmpX:= X - curx;
+   tmpy:= Y + cury;
+   curx:=x+curx;
+   cury:=y-cury;
+   Line (curX, curY,tmpx,tmpy);
+   PutPixel (curx,cury,tmpcolor);
+   PutPixel (tmpx,tmpy,tmpcolor);
+  End;
+  SetColor(tmpcolor);
 end;
 
 procedure SetAspectRatio(Xasp, Yasp: Word);
@@ -1307,12 +1353,47 @@ begin
 end;
 
 procedure PieSlice(X, Y: Integer; StAngle, EndAngle, Radius: Word);
-begin
+
+Var   i,tmpcolor: Word;
+      ac : arccoordstype;
+      
+Begin
+ tmpcolor:=thecolor;
+ setcolor(thefillcolor);
+ For i:= 0 To Radius Do
+  Arc (X, Y, StAngle, EndAngle, i);
+ setcolor(tmpcolor);
+ { Border using current color}
+ arc (X,y,stangle,endangle,Radius);
+ getarccoords(ac);
+ Line (x,y,ac.xstart,ac.ystart);
+ Line (x,y,ac.xend,ac.yend);
 end;
 
 procedure Sector(X, Y: Integer;
   StAngle, EndAngle, XRadius, YRadius: Word);
-begin
+
+Var I,tmpcolor : longint;
+    tmpang : real;
+    tmpx,tmpy : Integer;
+    
+begin
+ tmpcolor:=Thecolor;
+ SetColor(TheFillColor);
+ For i:= stangle to endangle Do
+  Begin
+   tmpAng:= i*Pi/180;
+   curX:= Round (xRadius*Cos (tmpAng));
+   curY:= Round (YRadius*Sin (tmpAng));
+   tmpX:= X - curx;
+   tmpy:= Y + cury;
+   curx:=x+curx;
+   cury:=y-cury;
+   Line (curX, curY,tmpx,tmpy);
+   PutPixel (curx,cury,tmpcolor);
+   PutPixel (tmpx,tmpy,tmpcolor);
+  End;
+  SetColor(tmpcolor);
 end;
 
 { Color routines
@@ -1422,7 +1503,10 @@ end.
 
 {
   $Log$
-  Revision 1.3  1998-08-10 09:01:58  michael
+  Revision 1.4  1998-08-12 13:25:33  michael
+  + added arc,ellipse,fillelipse,sector,pieslice
+
+  Revision 1.3  1998/08/10 09:01:58  michael
   + Added some functions to improve compatibility
 
   Revision 1.2  1998/05/12 10:42:47  peter