home *** CD-ROM | disk | FTP | other *** search
- |##########|
- |#MAGIC #|BOPDNOKB
- |#PROJECT #|"FunctionPlotter"
- |#PATHS #|"EGSProject"
- |#FLAGS #|xx---x--x---x-x-x---------------
- |#USERSW #|--------------------------------
- |#USERMASK#|--------------------------------
- |#SWITCHES#|xx---xxxxx-xx---
- |##########|
-
- MODULE FunctionPlotter;
-
- FROM EGSIntui AS I IMPORT WindowGrp,MessageGrp;
- FROM EGSGadBox AS GB IMPORT GadBoxPtr,GadContext;
- FROM EGSGfx AS G IMPORT EFontPtr;
- FROM T_Dos IMPORT OpenErr;
- FROM EGS IMPORT CLUEntry,BitMapGrp;
- FROM Render AS r IMPORT FuncParams,DrawParams,RenderFunction,CheckFunction,
- AxisMove,DrawModes,LightDirs;
- FROM Intuition IMPORT okCancel;
- IMPORT Exec;
- FROM Strings IMPORT Str;
- FROM DosSupport IMPORT SubDir;
- FROM EGSIFF IMPORT OpenOutPic,CloseOutPic,SaveMap;
-
- IMPORT GBMenuSelect AS GM;
- IMPORT GBRadio AS GR;
- IMPORT GBScrollBox AS GS;
- IMPORT GBColorPot AS GC;
- FROM EGSRequest IMPORT FileRequestPtr,SimpleRequestPtr,
- ReqContextPtr,
- CreateReqContext,
- DeleteReqContext,
- DoRequest,
- CreateFileReq,
- CreateSimpleReq;
-
- CONST
- GID_FuncStr = $10000;
- GID_MinX = $20000;
- GID_MaxX = $20001;
- GID_MinY = $20002;
- GID_MaxY = $20003;
- GID_MinZ = $20004;
- GID_MaxZ = $20005;
- GID_Resolution = $30000;
- GID_FuncColor = $40000;
- GID_BackColor = $40001;
- GID_Light = $50000;
- GID_StdFuncs = $60000;
- GID_DrawMode = $70000;
- GID_OutLines = $80000;
- GID_Mirror = $80001;
- GID_Specular = $80002;
- GID_Shadows = $80003;
- GID_Pitch = $A0000;
- GID_Bearing = $A0001;
- GID_Render = $B0000;
- GID_Stop = $B0001;
-
- MID_Save = $11000;
- MID_About = $12000;
- MID_Quit = $13000;
-
- LightNames = GB.StrArray:("Top","Front","Left","Right",NIL);
- DrawModeNames = GB.StrArray:("Wireframe","Solid","Shaded","Traced",NIL);
-
- RealField = 7;
- Digits = 4;
-
- TYPE
- StdFNodePtr = POINTER TO StdFNode;
- StdFNode = RECORD OF Exec.Node;
- minX,maxX : LONGREAL;
- minY,maxY : LONGREAL;
- minZ,maxZ : LONGREAL;
- END;
-
- EXCEPTION
- NoGadSolution : "Could not create gadgets";
- GadgetNotFound : "Gadget not found";
- NoMenu : "Could not create menu";
-
- VAR
- Win : WindowPtr;
- DrawArea : GB.ResBox;
- GCon : GadContext;
- WFont : EFontPtr;
-
- StdFList : Exec.List;
-
- CurrentFunc := FuncParams:(funcStr="0",
- minX=-1.0,maxX=1.0,
- minY=-1.0,maxY=1.0,
- minZ=-1.0,maxZ=1.0);
-
- CurrentDraw := DrawParams:(mode=wire,
- light=left,
- outlined=FALSE,
- resolution=5,
- fColor=($00,$00,$FF),
- bColor=($AA,$AA,$AA),
- pitch=0,
- bearing=0);
-
- Menu : I.MenuPtr;
- MenuFont : G.EFontPtr;
-
- PROCEDURE InitStdFuncs;
- CONST
- FNodes = ARRAY OF StdFNode:((name="sin(4*(sin(x)+sin(y)))",
- minX=-6,maxX=6,
- minY=-6,maxY=6,
- minZ=-8,maxZ=8),
- (name="sin(2*exp(-4*(x*x+y*y)))/2",
- minX=-1,maxX=1,
- minY=-1,maxY=1,
- minZ=-1,maxZ=1),
- (name="cos(x*y*12)/6",
- minX=-1,maxX=1,
- minY=-1,maxY=1,
- minZ=-1,maxZ=1),
- (name="sqrt(abs(1.0-abs(1.0-abs(1.0-abs(x*y+1.0)))))",
- minX=-4,maxX=4,
- minY=-4,maxY=4,
- minZ=-4,maxZ=4),
- (name="sqrt(abs(1.0-abs(1.0-abs(1.0-abs(x*y+0.5)))))",
- minX=-2,maxX=2,
- minY=-2,maxY=2,
- minZ=-2,maxZ=2),
- (name="cos(sqrt(x*x+y*y)*14)*exp(-2*(x*x+y*y))/2",
- minX=-1,maxX=1,
- minY=-1,maxY=1,
- minZ=-1,maxZ=1),
- (name="cos(atan(x/y)*sgn(y)*8)/4*sin(sqrt(x*x+y*y)*3)",
- minX=-1,maxX=1,
- minY=-1.001,maxY=1,
- minZ=-1,maxZ=1),
- (name="abs(sin(x*4)+sin(y*4))/4+cos(sqrt(x*x+y*y)*16)/16",
- minX=-1,maxX=1,
- minY=-1,maxY=1,
- minZ=-1,maxZ=1));
- VAR i : INTEGER;
- BEGIN
- Exec.NewList(StdFList,Exec.unknown);
- FOR i:=0 TO FNodes'MAX DO
- Exec.AddTail(StdFList'PTR,FNodes[i]'PTR);
- END;
- END InitStdFuncs;
-
-
- PROCEDURE CreateGadgets;
-
- VAR
- root : GadBoxPtr;
-
-
- PROCEDURE LinkGadgets(from,to : LONGINT);
- BEGIN
- ASSERT(GB.LinkStringGadgetsID(GCon,from,to,
- I.MasterGadPtr(GCon.first).firstSon,
- I.MasterGadPtr(GCon.first).numSons),GadgetNotFound);
-
-
- END LinkGadgets;
-
-
- PROCEDURE CreatePictureBox():GadBoxPtr;
- BEGIN
- RETURN GB.CreateGroupBorder(GCon,
- GB.CreateVertiTableL(GCon,
- GB.CreateHorizBoxL(GCon,
- GB.CreateBackBorder(GCon,
- GB.CreateResponseBox(GCon,DrawArea,200,GB.max,100,GB.max),{}),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.NewPri(GB.CreateSuperVertiProp(GCon,95,5,0,GID_Pitch,{GB.aDecBR,GB.aIncBR}),-1)
- ),
- GB.CreateVertiFill(GCon,FALSE,0),
- GB.NewPri(
- GB.CreateHorizBoxL(GCon,
- GB.CreateSuperHorizProp(GCon,185,5,90,GID_Bearing,{GB.aDecBR,GB.aIncBR}),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateFillBox(GCon,-1)
- ),-1
- )
- ),{}," Picture "
- );
- END CreatePictureBox;
-
- PROCEDURE CreateRangeBox():GadBoxPtr;
- BEGIN
- RETURN GB.CreateGroupBorder(GCon,
- GB.CreateVertiTableL(GCon,
- GB.CreateHorizBoxL(GCon,
- GB.CreateFillBox(GCon,0),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateCenterText(GCon,"min"),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateCenterText(GCon,"max")
- ),
- GB.CreateVertiFill(GCon,TRUE,1),
- GB.CreateHorizBoxL(GCon,
- GB.CreateText(GCon,"x"),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateDoubleBorder(GCon,
- GB.CreateRealGadget(GCon,4,10,GID_MinX),{}
- ),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateDoubleBorder(GCon,
- GB.CreateRealGadget(GCon,4,10,GID_MaxX),{}
- )
- ),
- GB.CreateVertiFill(GCon,TRUE,1),
- GB.CreateHorizBoxL(GCon,
- GB.CreateText(GCon,"y"),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateDoubleBorder(GCon,
- GB.CreateRealGadget(GCon,4,10,GID_MinY),{}
- ),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateDoubleBorder(GCon,
- GB.CreateRealGadget(GCon,4,10,GID_MaxY),{}
- )
- ),
- GB.CreateVertiFill(GCon,TRUE,1),
- GB.CreateHorizBoxL(GCon,
- GB.CreateText(GCon,"z"),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateDoubleBorder(GCon,
- GB.CreateRealGadget(GCon,4,10,GID_MinZ),{}
- ),
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateDoubleBorder(GCon,
- GB.CreateRealGadget(GCon,4,10,GID_MaxZ),{}
- )
- )
- ),GB.AllFill," Range "
- );
- END CreateRangeBox;
-
- PROCEDURE CreateColorBox():GadBoxPtr;
- BEGIN
- RETURN GB.CreateGroupBorder(GCon,
- GB.CreateVertiBoxL(GCon,
- GM.CreateMenuGadget(GCon,GID_Light,LightNames'PTR),
- GB.CreateVertiFill(GCon,TRUE,-1),
- GB.CreateHorizBoxL(GCon,
- GC.CreateColorPotGadget(GCon,GID_FuncColor,0,0,255),
- GB.CreateHorizFill(GCon,FALSE,-1),
- GB.CreateText(GCon,"Function"),
- GB.CreateHorizFill(GCon,TRUE,1)
- ),
- GB.CreateVertiFill(GCon,TRUE,-1),
- GB.CreateHorizBoxL(GCon,
- GC.CreateColorPotGadget(GCon,GID_BackColor,0,0,0),
- GB.CreateHorizFill(GCon,FALSE,-1),
- GB.CreateText(GCon,"Background"),
- GB.CreateHorizFill(GCon,TRUE,1)
- ),
- GB.CreateFillBox(GCon,1)
- ),{}," Color "
- );
- END CreateColorBox;
-
- PROCEDURE CreateDrawModeBox():GadBoxPtr;
- BEGIN
- RETURN GB.CreateGroupBorder(GCon,
- GR.CreateRadioGadget(GCon,DrawModeNames'PTR,100,GID_DrawMode),
- {}," DrawMode "
- );
- END CreateDrawModeBox;
-
- PROCEDURE CreateFlagBox():GadBoxPtr;
-
- PROCEDURE CreateFlag(REF name : STRING;id : LONGINT):GadBoxPtr;
- BEGIN
- RETURN GB.CreateHorizBoxL(GCon,
- GB.CreateCheckmarkGadget(GCon,id),
- GB.CreateHorizFill(GCon,FALSE,-1),
- GB.CreateText(GCon,name),
- GB.CreateHorizFill(GCon,TRUE,1)
- );
- END CreateFlag;
-
- BEGIN
- RETURN GB.CreateGroupBorder(GCon,
- GB.CreateVertiTableL(GCon,
- CreateFlag("Outlined",GID_OutLines),
- GB.CreateVertiFill(GCon,FALSE,0),
- CreateFlag("Mirror",GID_Mirror),
- GB.CreateVertiFill(GCon,FALSE,0),
- CreateFlag("Specular",GID_Specular),
- GB.CreateVertiFill(GCon,FALSE,0),
- CreateFlag("Shadows",GID_Shadows),
- GB.CreateFillBox(GCon,1)
- ),{}," Flags "
- );
- END CreateFlagBox;
-
- PROCEDURE CreateAction():GadBoxPtr;
- BEGIN
- RETURN GB.CreateVertiBoxL(GCon,
- GB.CreateTextAction(GCon,"_Render",GID_Render,{}),
- GB.CreateVertiFill(GCon,FALSE,0),
- GB.CreateTextAction(GCon,"_Stop",GID_Stop,{})
- );
- END CreateAction;
-
- PROCEDURE CreateResolutionBox():GadBoxPtr;
- BEGIN
- RETURN GB.CreateGroupBorder(GCon,
- GB.CreateHorizProp(GCon,6,1,5,GID_Resolution),{}," Resolution ");
-
- END CreateResolutionBox;
-
- BEGIN
- GCon:=GB.CreateGadContext(NIL,NIL,-1,-1);
- root:=GB.CreateMasterWindow(GCon,Win,
- GB.CreateVertiBoxL(GCon,
- GB.NewPri(
- GB.CreateHorizBoxL(GCon,
-
- GB.NewPri(CreatePictureBox(),1),
-
- GB.CreateHorizFill(GCon,FALSE,0),
- GB.CreateVertiBoxL(GCon,
- GB.CreateHorizBoxL(GCon,
- GB.CreateVertiBoxL(GCon,
- CreateRangeBox(),
- GB.CreateVertiFill(GCon,TRUE,-1),
-
- CreateDrawModeBox()
-
- ),
- GB.CreateHorizFill(GCon,TRUE,-1),
- GB.CreateVertiBoxL(GCon,
-
- CreateColorBox(),
-
- GB.CreateVertiFill(GCon,FALSE,0),
-
- CreateResolutionBox(),
-
- GB.CreateVertiFill(GCon,FALSE,0),
-
- CreateFlagBox()
-
- )
- ),
- GB.CreateFillBox(GCon,1)
- )
- ),1
- ),
- GB.CreateVertiFill(GCon,FALSE,0),
- GB.CreateNameStringGadget(GCon,"f(x,y)",40,200,I.justifyLeft,GID_FuncStr),
- GB.CreateVertiFill(GCon,FALSE,0),
- GB.CreateHorizBoxL(GCon,
- GS.CreateLateScrollBox(GCon,40,200,4,8,FALSE,GID_StdFuncs),
- GB.CreateHorizFill(GCon,FALSE,0),
-
- CreateAction()
-
- )
- )
- );
- ASSERT(GB.ProcessGadBoxes(GCon,root),NoGadSolution);
- LinkGadgets(GID_MinX,GID_MaxX);
- LinkGadgets(GID_MaxX,GID_MinY);
- LinkGadgets(GID_MinY,GID_MaxY);
- LinkGadgets(GID_MaxY,GID_MinZ);
- LinkGadgets(GID_MinZ,GID_MaxZ);
- LinkGadgets(GID_MaxZ,GID_MinX);
- END CreateGadgets;
-
-
-
- PROCEDURE FindGadget(id : LONGINT):I.GadgetPtr;
- VAR gad : I.GadgetPtr;
- BEGIN
- gad:=GB.FindGadget(I.MasterGadPtr(GCon.first).firstSon,
- I.MasterGadPtr(GCon.first).numSons,id);
- ASSERT(gad#NIL,GadgetNotFound);
- RETURN gad;
- END FindGadget;
-
- PROCEDURE SetBoolGadStates(win : WindowPtr := NIL);
- TYPE
- BoolGadSet = SET OF [GID_OutLines..GID_Shadows];
-
- PROCEDURE SetOnOff(set : BoolGadSet);
- VAR i : LONGINT;
- BEGIN
- FOR i:=GID_OutLines TO GID_Shadows DO
- IF i IN set THEN
- I.OnGadget(win,FindGadget(i));
- ELSE
- I.OffGadget(win,FindGadget(i));
- END;
- END;
- END SetOnOff;
-
- BEGIN
- IF KEY CurrentDraw.mode
- OF wire THEN
- SetOnOff({});
- END
- OF solid THEN
- SetOnOff({GID_OutLines});
- END
- OF shaded THEN
- SetOnOff({GID_OutLines,GID_Specular});
- END
- OF traced THEN
- SetOnOff({GID_Specular,GID_Mirror,GID_Shadows});
- END
- END;
- END SetBoolGadStates;
-
- PROCEDURE OnGadgets(win : WindowPtr;
- gads : LIST OF LONGINT);
- VAR i : INTEGER;
- BEGIN
- FOR i:=0 TO gads'MAX DO
- I.OnGadget(win,FindGadget(gads[i]));
- END;
- END OnGadgets;
-
- PROCEDURE OffGadgets(win : WindowPtr;
- gads : LIST OF LONGINT);
- VAR i : INTEGER;
- BEGIN
- FOR i:=0 TO gads'MAX DO
- I.OffGadget(win,FindGadget(gads[i]));
- END;
- END OffGadgets;
-
- PROCEDURE RenderMode(win : WindowPtr := NIL);
- BEGIN
- OffGadgets(win,GID_FuncStr,
- GID_MinX,GID_MaxX,
- GID_MinY,GID_MaxY,
- GID_MinZ,GID_MaxZ,
- GID_Resolution,
- GID_FuncColor,GID_BackColor,
- GID_Light,
- GID_StdFuncs,
- GID_DrawMode,
- GID_OutLines,
- GID_Mirror,
- GID_Specular,
- GID_Shadows,
- GID_Pitch,
- GID_Bearing,
- GID_Render);
- OnGadgets(win,GID_Stop);
- END RenderMode;
-
- PROCEDURE EditMode(win : WindowPtr := NIL);
- BEGIN
- OnGadgets(win,GID_FuncStr,
- GID_MinX,GID_MaxX,
- GID_MinY,GID_MaxY,
- GID_MinZ,GID_MaxZ,
- GID_Resolution,
- GID_FuncColor,GID_BackColor,
- GID_Light,
- GID_StdFuncs,
- GID_DrawMode,
- GID_Pitch,
- GID_Bearing,
- GID_Render);
- OffGadgets(win,GID_Stop);
- SetBoolGadStates(win);
- END EditMode;
-
- PROCEDURE PutGadValues(win : WindowPtr:=NIL);
- BEGIN
- TRACK
- I.LockIntuition;
- WITH CurrentFunc AS f DO
- GB.PutStringData(win,FindGadget(GID_FuncStr),f.funcStr);
- GB.PutRealData(win,FindGadget(GID_MinX),f.minX,RealField,Digits,FALSE);
- GB.PutRealData(win,FindGadget(GID_MaxX),f.maxX,RealField,Digits,FALSE);
- GB.PutRealData(win,FindGadget(GID_MinY),f.minY,RealField,Digits,FALSE);
- GB.PutRealData(win,FindGadget(GID_MaxY),f.maxY,RealField,Digits,FALSE);
- GB.PutRealData(win,FindGadget(GID_MinZ),f.minZ,RealField,Digits,FALSE);
- GB.PutRealData(win,FindGadget(GID_MaxZ),f.maxZ,RealField,Digits,FALSE)
- END;
- WITH CurrentDraw AS d DO
- GR.ModifyRadioGadget(win,FindGadget(GID_DrawMode),INTEGER(d.mode));
- GM.ModifyMenuGadget(win,FindGadget(GID_Light),INTEGER(d.light));
- I.BoolGadPtr(FindGadget(GID_OutLines)).flag:=d.outlined;
- I.BoolGadPtr(FindGadget(GID_Mirror)).flag:=d.mirror;
- I.BoolGadPtr(FindGadget(GID_Specular)).flag:=d.specular;
- I.BoolGadPtr(FindGadget(GID_Shadows)).flag:=d.shadows;
- I.PropGadPtr(FindGadget(GID_Resolution)).value:=d.resolution-2;
-
- GC.ModifyColorPotGadget(win,FindGadget(GID_FuncColor),d.fColor.red,
- d.fColor.green,
- d.fColor.blue);
- GC.ModifyColorPotGadget(win,FindGadget(GID_BackColor),d.bColor.red,
- d.bColor.green,
- d.bColor.blue);
-
- GB.SPropGadPtr(FindGadget(GID_Pitch)).realProp.value:=d.pitch;
- INCL(GB.SPropGadPtr(FindGadget(GID_Pitch)).realProp.propflags,I.propFollow);
- GB.SPropGadPtr(FindGadget(GID_Bearing)).realProp.value:=INTEGER(d.bearing)+90;
- INCL(GB.SPropGadPtr(FindGadget(GID_Bearing)).realProp.propflags,I.propFollow);
- END;
- EditMode(win);
- GS.AddListToScrollBox(win,FindGadget(GID_StdFuncs),StdFList'PTR);
- IF win # NIL THEN
- I.RefreshGadget(win,win.firstGadget);
- END;
- CLOSE
- I.UnlockIntuition;
- END;
- END PutGadValues;
-
- PROCEDURE RemGadValues(win : WindowPtr := NIL);
- BEGIN
- GS.RemListFromScrollBox(win,FindGadget(GID_StdFuncs),StdFList'PTR);
- END RemGadValues;
-
-
- PROCEDURE HandleGadgets(msg : EIntuiMsgPtr);
- VAR
- pos : INTEGER;
- oldFPen,
- oldBPen : LONGINT;
- rg : I.RealGadPtr;
- val : LONGREAL;
- id : LONGINT;
- fnode : StdFNodePtr;
-
- PROCEDURE CheckBreak():BOOLEAN;
- VAR
- msg : EIntuiMsgPtr;
- BEGIN
- msg:=GetMsg(Win.port);
- WHILE msg # NIL DO
- IF msg.class=EIDCMPFlagSet:{iGadget} THEN
- IF I.GadgetPtr(msg.iAddress).id=GID_Stop THEN
- ReplyMsg(msg);
- RETURN TRUE;
- END
- OR_IF msg.class=EIDCMPFlagSet:{iSizeVerify} THEN
- msg.code:=okCancel;
- END;
- ReplyMsg(msg);
- msg:=GetMsg(Win.port);
- END;
- RETURN FALSE;
- END CheckBreak;
-
- BEGIN
- WITH I.GadgetPtr(msg.iAddress) AS g DO
- IF KEY g.id
- OF GID_FuncStr THEN
- GB.GetStringData(g,CurrentFunc.funcStr);
- pos:=CheckFunction(CurrentFunc.funcStr);
- IF pos#-1 THEN
- TRACK
- I.LockIntuition;
- I.StringGadPtr(g).bufferPos:=pos;
- I.ActivateGadget(Win,g,FALSE);
- CLOSE
- I.UnlockIntuition;
- END
- END;
- END;
- OF GID_Render THEN
- oldFPen:=CurrentDraw.fPen;
- oldBPen:=CurrentDraw.bPen;
- CurrentDraw.fPen:=I.ObtainColor(Win.screen,
- CurrentDraw.fColor.red,
- CurrentDraw.fColor.green,
- CurrentDraw.fColor.blue);
- CurrentDraw.bPen:=I.ObtainColor(Win.screen,
- CurrentDraw.bColor.red,
- CurrentDraw.bColor.green,
- CurrentDraw.bColor.blue);
- I.SetPointer(Win,I.GetPrefPointer(I.WorkingMouse));
- RenderMode(Win);
- RenderFunction(Win.rPort,DrawArea,
- CurrentFunc,CurrentDraw,CheckBreak);
- EditMode(Win);
- I.SetPointer(Win,I.GetPrefPointer(I.StandardMouse));
-
- I.ReleaseColor(Win.screen,oldFPen);
- I.ReleaseColor(Win.screen,oldBPen);
- END;
- OF GID_DrawMode THEN
- CurrentDraw.mode:=DrawModes(GR.RadioGadPtr(g).selected);
- SetBoolGadStates(Win);
- END
- OF GID_Light THEN
- CurrentDraw.light:=LightDirs(GM.MenuGadPtr(g).sel);
- END
- OF GID_OutLines THEN
- CurrentDraw.outlined:=I.BoolGadPtr(g).flag;
- END
- OF GID_Mirror THEN
- CurrentDraw.mirror:=I.BoolGadPtr(g).flag;
- END
- OF GID_Specular THEN
- CurrentDraw.specular:=I.BoolGadPtr(g).flag;
- END
- OF GID_Shadows THEN
- CurrentDraw.shadows:=I.BoolGadPtr(g).flag;
- END
- OF GID_FuncColor THEN
- CurrentDraw.fColor:=GC.ColorPotGadPtr(g).color;
- END
- OF GID_BackColor THEN
- CurrentDraw.bColor:=GC.ColorPotGadPtr(g).color;
- END
- OF GID_MinX..GID_MaxZ THEN
- id:=GID_MinX;
- REPEAT
- rg:=FindGadget(id);
- IF rg.valid THEN
- IF KEY id
- OF GID_MinX THEN CurrentFunc.minX:=rg.value END;
- OF GID_MaxX THEN CurrentFunc.maxX:=rg.value END;
- OF GID_MinY THEN CurrentFunc.minY:=rg.value END;
- OF GID_MaxY THEN CurrentFunc.maxY:=rg.value END;
- OF GID_MinZ THEN CurrentFunc.minZ:=rg.value END;
- OF GID_MaxZ THEN CurrentFunc.maxZ:=rg.value END;
- END;
- INC(id);
- ELSE
- I.ActivateGadget(Win,rg,FALSE);
- id:=SUCC(GID_MaxZ);
- END;
- UNTIL id>GID_MaxZ;
- END
- OF GID_Pitch THEN
- AxisMove(Win.rPort,DrawArea,CurrentDraw,
- GB.SPropGadPtr(g).realProp.value,
- CurrentDraw.bearing);
- END;
- OF GID_Bearing THEN
- AxisMove(Win.rPort,DrawArea,CurrentDraw,
- CurrentDraw.pitch,
- GB.SPropGadPtr(g).realProp.value-90);
- END;
- OF GID_Resolution THEN
- CurrentDraw.resolution:=I.PropGadPtr(g).value+2
- END
- OF GID_StdFuncs THEN
- fnode:=GS.ScrollGadPtr(g).actText;
- IF (fnode#NIL) AND (fnode.succ#NIL) THEN
- WITH CurrentFunc AS f DO
- f.funcStr:=Str(fnode.name);
- f.minX:=fnode.minX;
- f.maxX:=fnode.maxX;
- f.minY:=fnode.minY;
- f.maxY:=fnode.maxY;
- f.minZ:=fnode.minZ;
- f.maxZ:=fnode.maxZ;
- GB.PutStringData(Win,FindGadget(GID_FuncStr),f.funcStr);
- GB.PutRealData(Win,FindGadget(GID_MinX),f.minX,RealField,Digits,FALSE);
- GB.PutRealData(Win,FindGadget(GID_MaxX),f.maxX,RealField,Digits,FALSE);
- GB.PutRealData(Win,FindGadget(GID_MinY),f.minY,RealField,Digits,FALSE);
- GB.PutRealData(Win,FindGadget(GID_MaxY),f.maxY,RealField,Digits,FALSE);
- GB.PutRealData(Win,FindGadget(GID_MinZ),f.minZ,RealField,Digits,FALSE);
- GB.PutRealData(Win,FindGadget(GID_MaxZ),f.maxZ,RealField,Digits,FALSE)
- END;
- END;
- END
- END
- END;
- END HandleGadgets;
-
-
- VAR
- Msg : EIntuiMsgPtr;
- done : BOOLEAN;
- tmpRas : EBitMapPtr;
- Freq : FileRequestPtr;
- Failed,
- About : SimpleRequestPtr;
- RCon : ReqContextPtr;
-
- PROCEDURE HandleMenus(msg : EIntuiMsgPtr);
- BEGIN
- IF KEY I.MenuItemPtr(msg.iAddress).id
- OF MID_Save THEN
- IF CurrentDraw.renderMap#NIL THEN
- I.SleepWindow(Win);
- I.SetPointer(Win,I.GetPrefPointer(I.SleepMouse));
- IF DoRequest(Freq) THEN
- TRY
- OpenOutPic(SubDir(Freq.path,Freq.name),ilbm:=TRUE);
- I.SetPointer(Win,I.GetPrefPointer(I.DiskWriteMouse));
- SaveMap(CurrentDraw.renderMap,ilbm:=TRUE);
- CloseOutPic;
- EXCEPT
- OF OpenErr THEN
- FORGET DoRequest(Failed);
- END
- END
- END;
- I.SetPointer(Win,I.GetPrefPointer(I.StandardMouse));
- I.WakeWindow(Win);
- END;
- END
- OF MID_About THEN
- I.SleepWindow(Win);
- I.SetPointer(Win,I.GetPrefPointer(I.SleepMouse));
- FORGET DoRequest(About);
- I.SetPointer(Win,I.GetPrefPointer(I.StandardMouse));
- I.WakeWindow(Win);
- END
- OF MID_Quit THEN
- done:=TRUE
- END
- END;
- END HandleMenus;
-
- BEGIN
- InitStdFuncs;
- RCon:=CreateReqContext();
- Freq:=CreateFileReq(RCon);
- Failed:=CreateSimpleReq(RCon,
- "Bild konnte nicht|"+
- "gesichert werden",
- "ok");
- About:=CreateSimpleReq(RCon,
- "Funktionsplotter|"+
- "© 1993 U.Sigmund",
- "ja,ja mir wisses");
-
- MenuFont:=G.OpenFont(I.GetPrefFont(I.windowFont));
- ASSERT(MenuFont#NIL,NoMenu);
- Menu:=I.CreateMenuL(
- I.CreateItemL(MenuFont,"Project",sub:=
- I.CreateLeave(),
- I.CreateItem(MenuFont,"Save",MID_Save,"S",FALSE),
- NIL,
- I.CreateItem(MenuFont,"About",MID_About,"A",FALSE),
- I.CreateItem(MenuFont,"Quit",MID_Quit,"Q",FALSE)
- )
- );
- ASSERT(Menu#NIL,NoMenu);
-
- CreateGadgets;
- WITH GCon.newWin AS w DO
- UNI(w.flags,WindowFlagSet:{WindowSizeBottom,WindowActive,WindowMenuLocal});
- UNI(w.sysGadgets,SysGadgetSet:{windowClose,windowSize,windowFlip});
- UNI(w.idcmpFlags,EIDCMPFlagSet:{iWindowClose,iGadget,iMenu,iWindowSize,
- iDrop,iSizeVerify});
- w.name:="Functionplotter";
- END;
- PutGadValues;
- GCon.newWin.menu:=Menu;
-
- Win:=OpenWindow(GCon.newWin^);
- IF Win#NIL THEN
- CurrentDraw.fPen:=I.ObtainColor(Win.screen,
- CurrentDraw.fColor.red,
- CurrentDraw.fColor.green,
- CurrentDraw.fColor.blue);
- CurrentDraw.bPen:=I.ObtainColor(Win.screen,
- CurrentDraw.bColor.red,
- CurrentDraw.bColor.green,
- CurrentDraw.bColor.blue);
-
- CurrentDraw.renderMap:=
- AllocBitMap(DrawArea.w,DrawArea.h,24,EGS.pixelMap,{},NIL);
-
- tmpRas:=AllocBitMap(128,128,1,EGS.pixelMap,{},NIL);
- Win.rPort.tmpRas:=tmpRas;
-
- INC(DrawArea.x,Win.leftBorder);
- INC(DrawArea.y,Win.topBorder);
-
- REPEAT
- FORGET WaitPort(Win.port);
- Msg:= GetMsg(Win.port);
- WHILE Msg # NIL DO
- IF KEY Msg.class
- OF {iWindowClose} THEN
- done:=TRUE
- END;
- OF {iSizeVerify} THEN
- I.RemoveGadget(Win,GCon.first);
- RemGadValues(NIL);
- GB.DeleteGadContext(GCon);
- IF CurrentDraw.renderMap#NIL THEN
- DisposeBitMap(CurrentDraw.renderMap);
- CurrentDraw.renderMap:=NIL
- END;
- END;
- OF {iWindowSize} THEN
- CreateGadgets;
- INC(DrawArea.x,Win.leftBorder);
- INC(DrawArea.y,Win.topBorder);
- PutGadValues;
- I.AddGadget(Win,GCon.first);
- CurrentDraw.renderMap:=
- AllocBitMap(DrawArea.w,DrawArea.h,24,EGS.pixelMap,{},NIL);
- END;
- OF {iGadget},{iDrop} THEN
- HandleGadgets(Msg);
- END;
- OF {iMenu} THEN
- HandleMenus(Msg)
- END;
- END;
- ReplyMsg(Msg);
- Msg:=GetMsg(Win.port);
- END
- UNTIL done;
- END;
- CLOSE
- IF Win # NIL THEN
- I.ReleaseColor(Win.screen,CurrentDraw.fPen);
- I.ReleaseColor(Win.screen,CurrentDraw.bPen);
- CloseWindow(Win);
- Win:=NIL;
- END;
- IF tmpRas#NIL THEN
- DisposeBitMap(tmpRas);
- tmpRas:=NIL;
- END;
- IF GCon # NIL THEN
- GB.DeleteGadContext(GCon);
- GCon:=NIL;
- END;
- IF CurrentDraw.renderMap#NIL THEN
- DisposeBitMap(CurrentDraw.renderMap);
- CurrentDraw.renderMap:=NIL
- END;
- IF Menu#NIL THEN
- I.FreeMenu(Menu);Menu:=NIL
- END;
- IF MenuFont#NIL THEN
- G.CloseFont(MenuFont);MenuFont:=NIL
- END;
- IF RCon#NIL THEN
- DeleteReqContext(RCon);
- END;
- END FunctionPlotter.
-