Selaa lähdekoodia

existing graph can be equipped with new dataset now

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7128 8c9fc860-2736-0410-a75d-ab315db34111
eth.hunzikerp 8 vuotta sitten
vanhempi
commit
d65ec0b8c1
1 muutettua tiedostoa jossa 74 lisäystä ja 4 poistoa
  1. 74 4
      source/WMSimpleGraphs.Mod

+ 74 - 4
source/WMSimpleGraphs.Mod

@@ -37,6 +37,13 @@ TYPE
 			SetPointerInfo(manager.pointerCrosshair);
 			SetPointerInfo(manager.pointerCrosshair);
 		END New;
 		END New;
 		
 		
+		PROCEDURE NewData*(CONST data: ARRAY [*] OF LONGREAL);
+		BEGIN
+			SELF.data:=data;
+			Invalidate(WMGraphics.MakeRectangle(0,0,GetWidth(), GetHeight()));
+		END NewData;
+
+		
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		VAR i:LONGINT;
 		VAR i:LONGINT;
 		BEGIN
 		BEGIN
@@ -76,6 +83,18 @@ TYPE
 			SetPointerInfo(manager.pointerCrosshair);
 			SetPointerInfo(manager.pointerCrosshair);
 		END New;
 		END New;
 		
 		
+		PROCEDURE NewData*(CONST data: ARRAY [*,*] OF LONGREAL);
+		BEGIN
+			SELF.data:=data;
+			min:=MIN(data); max:=MAX(data);
+			max:=MAX(ABS(min), ABS(max));
+			min:=MIN(0, min); 
+			IF max=0 THEN max:=1 END;
+			offset:=0; gain:=255/max;
+			Invalidate(WMGraphics.MakeRectangle(0,0,GetWidth(), GetHeight()));
+		END NewData;
+
+		
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		VAR col: WMGraphics.Color; x,y:LONGINT; val:LONGREAL; valI:LONGINT;
 		VAR col: WMGraphics.Color; x,y:LONGINT; val:LONGREAL; valI:LONGINT;
 		BEGIN
 		BEGIN
@@ -120,6 +139,15 @@ TYPE
 			SetPointerInfo(manager.pointerCrosshair);
 			SetPointerInfo(manager.pointerCrosshair);
 		END New;
 		END New;
 		
 		
+		PROCEDURE NewData*(CONST data: ARRAY [*] OF LONGREAL);
+		BEGIN
+			SELF.data:=data;
+			max:=MAX(1, MAX(data));
+			min:=MIN(0, MIN(data)); 
+			Invalidate(WMGraphics.MakeRectangle(0,0,GetWidth(), GetHeight()));
+		END NewData;
+
+		
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		VAR i:LONGINT; mn,mx,x0,y0,x1,y1:LONGINT;
 		VAR i:LONGINT; mn,mx,x0,y0,x1,y1:LONGINT;
 		BEGIN
 		BEGIN
@@ -161,6 +189,14 @@ Graphs* = OBJECT (Window);
 			SetTitle(Strings.NewString(title));
 			SetTitle(Strings.NewString(title));
 			SetPointerInfo(manager.pointerCrosshair);
 			SetPointerInfo(manager.pointerCrosshair);
 		END New;
 		END New;
+
+		PROCEDURE NewData*(CONST data: ARRAY [*,*] OF LONGREAL);
+		BEGIN
+			SELF.data:=data;
+			max:=MAX(1, MAX(data));
+			min:=MIN(0, MIN(data)); 
+			Invalidate(WMGraphics.MakeRectangle(0,0,GetWidth(), GetHeight()));
+		END NewData;
 		
 		
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 		VAR i,j:LONGINT; mn,mx, x0,x1,y0,y1:LONGINT;
 		VAR i,j:LONGINT; mn,mx, x0,x1,y0,y1:LONGINT;
@@ -208,6 +244,15 @@ GraphXY* = OBJECT (Window);
 			GetTicks;
 			GetTicks;
 		END New;
 		END New;
 		
 		
+		PROCEDURE NewData*(CONST data: ARRAY [*,*] OF LONGREAL);
+		BEGIN
+			SELF.data:=data;
+			maxx:=MAX(0,MAX(data[0]));maxy:=MAX(0,MAX(data[1]));
+			minx:=MIN(0, MIN(data[0])); miny:=MIN(0, MIN(data[1])); 
+			Invalidate(WMGraphics.MakeRectangle(0,0,GetWidth(), GetHeight()));
+		END NewData;
+
+		
 		PROCEDURE GetTicks ; (*ticks along X, along Y, at decimal units*)
 		PROCEDURE GetTicks ; (*ticks along X, along Y, at decimal units*)
 		VAR maxx,maxy,stepx,stepy: LONGREAL; log:LONGREAL; steps,i:LONGINT;
 		VAR maxx,maxy,stepx,stepy: LONGREAL; log:LONGREAL; steps,i:LONGINT;
 		BEGIN
 		BEGIN
@@ -292,14 +337,22 @@ END Scatter;
 
 
 (** Regression plot. requires computation of slope,intercept by suited procedure, e.g. derived from /Matrix/StatisticsLinearRegression.SimpleRegression()  *)
 (** Regression plot. requires computation of slope,intercept by suited procedure, e.g. derived from /Matrix/StatisticsLinearRegression.SimpleRegression()  *)
 TYPE Regression*= OBJECT (Scatter)
 TYPE Regression*= OBJECT (Scatter)
-	VAR slope,intercept: LONGREAL;
+	VAR slope,intercept: LONGREAL; regressor:Regressor;
 	
 	
-	PROCEDURE &Initialize*(CONST data: ARRAY [*,*] OF LONGREAL; CONST title: ARRAY OF CHAR; regressor:Regressor);
+	PROCEDURE &Initialize*(CONST data: ARRAY [*,*] OF LONGREAL; CONST title: ARRAY OF CHAR; regress:Regressor);
 	BEGIN
 	BEGIN
 		New(data,title);
 		New(data,title);
-		regressor(data,slope,intercept);
+		regress(data,slope,intercept);
+		regressor:=regress;
 	END Initialize;
 	END Initialize;
 	
 	
+	PROCEDURE NewData*(CONST data: ARRAY [*,*] OF LONGREAL);
+	BEGIN
+		SELF.data:=data;
+		regressor(data,slope,intercept);
+		Invalidate(WMGraphics.MakeRectangle(0,0,GetWidth(), GetHeight()));
+	END NewData;
+	
 	PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 	PROCEDURE Draw*(canvas : WMGraphics.Canvas; w, h, q : LONGINT);
 	VAR mnw,mnh,x,y,xx,yy:LONGINT; scalex,scaley, x0, y0, x1, y1:LONGREAL; 
 	VAR mnw,mnh,x,y,xx,yy:LONGINT; scalex,scaley, x0, y0, x1, y1:LONGREAL; 
 	BEGIN
 	BEGIN
@@ -364,6 +417,23 @@ BEGIN {EXCLUSIVE}
 	NEW(m, [[1,2,3,4],[4,3,2,4],[5,4,-2,-6],[3,1,0,-1]], "Matrix"); 
 	NEW(m, [[1,2,3,4],[4,3,2,4],[5,4,-2,-6],[3,1,0,-1]], "Matrix"); 
 END Demo;
 END Demo;
 
 
+(*PROCEDURE Demo1*; (*associate new dataset with existing graph*)
+VAR h:Histogram; g:Graph; k: Graphs; gx:GraphXY; m:Matrix; s:Scatter; r:Regression; i:LONGINT;
+BEGIN {EXCLUSIVE}
+	NEW(k, [[-2,7,8,4,5,9,6,4,7,8,4,5,9,6],
+			[5,3,2,12,21,3,0,5,3,-2,12,17,4,1]], "MultiGraph"); 
+	NEW(g, [4,7,8,4,5,9,6,5,3,2,12,17,3,-3,2], "Graph"); 
+			FOR i:=0 TO 100000000 DO END;
+	k.NewData(
+			[[5,3,2,12,21,3,0,5,3,-2,12,17,4,1],
+			[-2,7,8,4,5,9,6,4,7,8,4,5,9,6],
+			[5-1,3,2-1,12,21-1,3,0,5-1,3,-2,12-1,17,4,1]]
+			);
+	g.NewData([-2,7,8,4,5,9,6,4,7,8,4,5,9,6]);
+END Demo1;*)
+
+
+
 PROCEDURE Cleanup;
 PROCEDURE Cleanup;
 VAR manager:WM.WindowManager; w,remove:WM.Window;
 VAR manager:WM.WindowManager; w,remove:WM.Window;
 BEGIN {EXCLUSIVE}
 BEGIN {EXCLUSIVE}
@@ -388,5 +458,5 @@ SystemTools.FreeDownTo MatrixBase ~
 
 
 Compiler.Compile -p=Win32G WMSimpleGraphs.Mod ~
 Compiler.Compile -p=Win32G WMSimpleGraphs.Mod ~
 
 
-WMSimpleGraphs.Demo ~
+WMSimpleGraphs.Demo1 ~