home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 March / Chip_1998-03_cd.bin / tema / MINICAD / MC7DEMO / MINICAD.1 / SCENECHG.MPC < prev    next >
Text File  |  1997-04-30  |  3KB  |  112 lines

  1. PROCEDURE sceneChangeTemplate;
  2. CONST
  3. MOVES = 4;
  4. VAR
  5. h:HANDLE;
  6. i : INTEGER;
  7. the1stNum,the2ndNum : REAL;
  8. checkNum : BOOLEAN;
  9. Error,theName,theAction,str : STRING;
  10. sceneChange:ARRAY[1..MOVES] OF STRING;
  11.  
  12. PROCEDURE ParseStr(theStr : STRING; VAR errorStr,what,action : STRING; VAR num1,num2 : REAL);
  13. VAR
  14. delimitPos: INTEGER;
  15. paramItemStr,numStr: STRING;
  16. BEGIN
  17.         paramItemStr := theStr;
  18.         errorStr:= '';
  19.         delimitPos:= POS(',',paramItemStr);
  20.         IF (POS(',',paramItemStr) <> 0) THEN what:= COPY(paramItemStr,1,delimitPos-1) ELSE error := theStr;
  21.         DELETE(paramItemStr,1,delimitPos);
  22.         delimitPos:= POS(',',paramItemStr);
  23.         IF (POS(',',paramItemStr) <> 0) THEN action:= COPY(paramItemStr,1,delimitPos-1) ELSE error := theStr;
  24.         DELETE(paramItemStr,1,delimitPos);
  25.         delimitPos:= POS(',',paramItemStr);
  26.         IF (POS(',',paramItemStr) <> 0) THEN numStr:=COPY(paramItemStr,1,delimitPos-1);
  27.         checkNum:= ValidNumStr(numStr,num1);
  28.         IF NOT(checkNum) THEN errorStr:= CONCAT(errorStr,' 3rd param;');
  29.         delimitPos:= POS(',',paramItemStr);
  30.         IF (POS(',',paramItemStr) <> 0) THEN numStr:=COPY(paramItemStr,1,delimitPos-1);
  31.         checkNum:= ValidNumStr(numStr,num2);
  32.         IF NOT(checkNum) THEN errorStr:= CONCAT(errorStr,' 4th param;');
  33. UprString(action);
  34. WRITELN('final sendoff  ',what,action,num1,num2);
  35. END;
  36.  
  37. PROCEDURE doRotate(what: STRING; degrees: REAL);
  38. VAR
  39. rotateHan: HANDLE;
  40. ang,  X1, Y1: REAL;
  41. BEGIN
  42. rotateHan:= GetObject(what);
  43. ang:= GetSymRot(rotateHan);
  44. HCenter(rotateHan, X1, Y1);
  45. HRotate(rotateHan, X1, Y1, -ang);
  46. HRotate(rotateHan, X1, Y1, degrees);
  47. END;
  48.  
  49. PROCEDURE doMove(what: STRING; x1,y1: REAL);
  50. VAR
  51. moveHan:HANDLE;
  52. xC,yC : REAL;
  53. BEGIN
  54. moveHan:= GetObject(what);
  55. HCenter(moveHan, xC, yC);
  56. HMove(moveHan, x1-xC, y1-yc);
  57. END;
  58.  
  59. PROCEDURE doShow(what: STRING);
  60. VAR
  61. showHan:HANDLE;
  62. BEGIN
  63. showHan:= GetObject(what);
  64. Show(N=what);
  65. END;
  66.  
  67. PROCEDURE doHide(what: STRING);
  68. VAR
  69. hideHan:HANDLE;
  70. BEGIN
  71. hideHan:= GetObject(what);
  72. Hide(N=what);
  73. END;
  74.  
  75. PROCEDURE doError(error,what: STRING);
  76. VAR
  77. errorStr:STRING;
  78. BEGIN
  79. errorStr:= CONCAT(error,'I can╒t read the action for ',what,'.');
  80. AlrtDialog(errorStr); 
  81. END;
  82.  
  83. BEGIN
  84.  
  85. {_____________________________________________}
  86. {** Put your scene change assignments here. **};
  87.  
  88. sceneChange[1]:='None,Rotate,0,0';
  89. sceneChange[2]:='None,Move,0,0';
  90. sceneChange[3]:='None,Show,0,0';
  91. sceneChange[4]:='None,Hide,0,0';
  92. {_____________________________________________}
  93.  
  94. PUSHATTRS;
  95. DSELECTALL;
  96. FOR i:= 1 TO MOVES DO
  97.     BEGIN
  98.         ParseStr(sceneChange[i],Error,theName,theAction,the1stNum,the2ndNum);
  99. WRITELN('RETURNED ',theName,theAction,the1stNum,the2ndNum);
  100.             IF Error = '' THEN BEGIN
  101.         IF theAction = 'ROTATE' THEN doRotate(theName,the1stNum);
  102.         IF theAction = 'MOVE' THEN doMove(theName,the1stNum,the2ndNum);
  103.         IF theAction = 'SHOW' THEN doShow(theName);
  104.         IF theAction = 'HIDE' THEN doHide(theName);
  105.         END
  106.          ELSE doError(Error,theName);
  107.     END;
  108. POPATTRS;
  109. CLRMESSAGE;
  110. END;
  111. RUN(sceneChangeTemplate);
  112.