From: Peter S. <zu...@us...> - 2006-12-09 20:51:37
|
Update of /cvsroot/apophysis/2.10/Source In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv3325/Source Modified Files: ScriptForm.pas Log Message: added some error-checking & syntax-highlighting Index: ScriptForm.pas =================================================================== RCS file: /cvsroot/apophysis/2.10/Source/ScriptForm.pas,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** ScriptForm.pas 9 Dec 2006 13:37:51 -0000 1.28 --- ScriptForm.pas 9 Dec 2006 20:51:31 -0000 1.29 *************** *** 192,195 **** --- 192,196 ---- procedure TransformClearProc(AMachine: TatVirtualMachine); procedure TransformRotateProc(AMachine: TatVirtualMachine); + procedure TransformScaleProc(AMachine: TatVirtualMachine); procedure TransformRotateOriginProc(AMachine: TatVirtualMachine); *************** *** 351,354 **** --- 352,358 ---- {$R *.DFM} + const + ErrorOutOfRange = 'Transform out of range!'; + type { Library for math functions } *************** *** 1389,1393 **** begin try ! if (ActiveTransform < 0) or (ActiveTransform >= ScriptEditor.cp.NumXForms) then raise EFormatInvalid.Create('Transform out of range.'); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Rotate(GetInputArgAsFloat(0)); --- 1393,1397 ---- begin try ! if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then raise EFormatInvalid.Create(ErrorOutOfRange); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Rotate(GetInputArgAsFloat(0)); *************** *** 1404,1408 **** begin try ! if (ActiveTransform < 0) or (ActiveTransform >= ScriptEditor.cp.NumXForms) then raise EFormatInvalid.Create('Transform out of range.'); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Multiply(GetInputArgAsFloat(0), GetInputArgAsFloat(1), GetInputArgAsFloat(2), GetInputArgAsFloat(3)); --- 1408,1412 ---- begin try ! if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then raise EFormatInvalid.Create(ErrorOutOfRange); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Multiply(GetInputArgAsFloat(0), GetInputArgAsFloat(1), GetInputArgAsFloat(2), GetInputArgAsFloat(3)); *************** *** 1727,1731 **** begin try ! if (ActiveTransform < 0) or (ActiveTransform >= ScriptEditor.cp.NumXForms) then raise EFormatInvalid.Create('Transform out of range.'); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Scale(GetInputArgAsFloat(0)); --- 1731,1735 ---- begin try ! if (ActiveTransform < 0) or (ActiveTransform >= ScriptEditor.cp.NumXForms) then raise EFormatInvalid.Create(ErrorOutOfRange); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Scale(GetInputArgAsFloat(0)); *************** *** 1880,1885 **** --- 1884,1893 ---- NumTransforms := 0; ActiveTransform := -1; + { for i := 0 to NXFORMS - 1 do ScriptEditor.cp.xform[i].density := 0; + } + ScriptEditor.cp.Clear; + ScriptEditor.cp.xform[0].symmetry := 1; end; *************** *** 1940,1944 **** if (i >= 0) and (i < NXFORMS) then ActiveTransform := i ! else raise EFormatInvalid.Create('Transform out of range.'); except on E: EFormatInvalid do begin --- 1948,1952 ---- if (i >= 0) and (i < NXFORMS) then ActiveTransform := i ! else raise EFormatInvalid.Create(ErrorOutOfRange); except on E: EFormatInvalid do begin *************** *** 2068,2072 **** try if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then // was: NXFORMS-1 ! raise EFormatInvalid.Create('Transform out of range.'); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Translate(GetInputArgAsFloat(0), GetInputArgAsFloat(1)); --- 2076,2080 ---- try if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then // was: NXFORMS-1 ! raise EFormatInvalid.Create(ErrorOutOfRange); with AMachine do ScriptEditor.cp.xform[ActiveTransform].Translate(GetInputArgAsFloat(0), GetInputArgAsFloat(1)); *************** *** 2767,2776 **** v: double; begin with AMachine do begin i := 0; while (i < NRVAR) and (varnames(i) <> CurrentPropertyName) do Inc(i); ! // if (i >= NRVAR) then error ! ReturnOutPutArg(cp.xform[ActiveTransform].vars[i]); end; end; --- 2775,2796 ---- v: double; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin i := 0; while (i < NRVAR) and (varnames(i) <> CurrentPropertyName) do Inc(i); ! if (i < NRVAR) then ! ReturnOutPutArg(cp.xform[ActiveTransform].vars[i]) ! else begin // shouldn't happen ! LastError := 'Oops!'; ! ScriptEditor.Console.Lines.Add(LastError); ! Scripter.Halt; ! end; end; end; *************** *** 2781,2784 **** --- 2801,2811 ---- v: double; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin *************** *** 2786,2791 **** while (i < NRVAR) and (varnames(i) <> CurrentPropertyName) do Inc(i); if (i < NRVAR) then ! cp.xform[ActiveTransform].vars[i] := GetInputArgAsFloat(0); ! //else error end; end; --- 2813,2822 ---- while (i < NRVAR) and (varnames(i) <> CurrentPropertyName) do Inc(i); if (i < NRVAR) then ! cp.xform[ActiveTransform].vars[i] := GetInputArgAsFloat(0) ! else begin // shouldn't happen ! LastError := 'Oops!'; ! ScriptEditor.Console.Lines.Add(LastError); ! Scripter.Halt; ! end; end; end; *************** *** 2795,2798 **** --- 2826,2836 ---- v: double; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin *************** *** 2806,2809 **** --- 2844,2854 ---- v: double; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin *************** *** 2820,2823 **** --- 2865,2875 ---- i, j: integer; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin i := GetArrayIndex(0); *************** *** 2836,2839 **** --- 2888,2898 ---- i, j: integer; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin *************** *** 2853,2856 **** --- 2912,2922 ---- i, j: integer; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin i := GetArrayIndex(0); *************** *** 2869,2872 **** --- 2935,2945 ---- i, j: integer; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + with AMachine do begin *************** *** 2894,2897 **** --- 2967,2977 ---- tx, ty, rad: double; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + rad := AMachine.GetInputArgAsFloat(0) * pi / 180; with EditForm.WorldPivot do *************** *** 2904,2908 **** end; ! // -- pivot-aware rotating -- procedure TScriptEditor.TransformRotateProc(AMachine: TatVirtualMachine); --- 2984,2988 ---- end; ! // -- pivot-aware rotating & scaling -- procedure TScriptEditor.TransformRotateProc(AMachine: TatVirtualMachine); *************** *** 2913,2916 **** --- 2993,3003 ---- tx: TXForm; begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + tx := TXForm.Create; tx.Assign(scripteditor.cp.xform[NumTransforms]); // just in case (?) *************** *** 2926,2929 **** --- 3013,3043 ---- end; + procedure TScriptEditor.TransformScaleProc(AMachine: TatVirtualMachine); + var + Triangles: TTriangles; + px, py: double; + + tx: TXForm; + begin + if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin + ScriptEditor.Console.Lines.Add(ErrorOutOfRange); + LastError := ErrorOutOfRange; + Scripter.Halt; + exit; + end; + + tx := TXForm.Create; + tx.Assign(scripteditor.cp.xform[NumTransforms]); // just in case (?) + + EditForm.ScriptGetPivot(px, py); + cp.TrianglesFromCp(Triangles); // it's ugly but it works... + Triangles[ActiveTransform] := + ScaleTrianglePoint(Triangles[ActiveTransform], px, py, AMachine.GetInputArgAsFloat(0)); + cp.GetFromTriangles(Triangles, NumTransforms); + + cp.xform[NumTransforms].Assign(tx); + tx.Free; + end; + { *************************** Render interface ****************************** } *************** *** 2998,3001 **** --- 3112,3116 ---- end; Scripter.AddObject('Renderer', Renderer); + { Flame interface } with Scripter.defineClass(TFlame) do *************** *** 3025,3028 **** --- 3140,3144 ---- end; Scripter.AddObject('Flame', Flame); + { Transform interface } with Scripter.defineClass(TTransform) do *************** *** 3033,3043 **** DefineProp('Weight', tkFloat, GetTransformWeightProc, SetTransformWeightProc); DefineProp('Symmetry', tkFloat, GetTransformSymProc, SetTransformSymProc); ! for i:= 0 to NRVAR - 1 do DefineProp(Varnames(i), tkFloat, GetTransformVariationProc, SetTransformVariationProc); ! for i:= 0 to GetNrVariableNames - 1 do DefineProp(GetVariableNameAt(i), tkFloat, GetTransformVariableProc, SetTransformVariableProc); DefineMethod('Clear', 0, tkNone, nil, TransformClearProc); DefineMethod('Rotate', 1, tkNone, nil, TransformRotateProc); DefineMethod('RotateOrigin', 1, tkNone, nil, TransformRotateOriginProc); --- 3149,3166 ---- DefineProp('Weight', tkFloat, GetTransformWeightProc, SetTransformWeightProc); DefineProp('Symmetry', tkFloat, GetTransformSymProc, SetTransformSymProc); ! for i:= 0 to NRVAR - 1 do begin DefineProp(Varnames(i), tkFloat, GetTransformVariationProc, SetTransformVariationProc); ! Editor.SyntaxStyles.AutoCompletion.Add(Varnames(i)); ! end; ! for i:= 0 to GetNrVariableNames - 1 do begin DefineProp(GetVariableNameAt(i), tkFloat, GetTransformVariableProc, SetTransformVariableProc); + Editor.SyntaxStyles.AutoCompletion.Add(GetVariableNameAt(i)); + end; + Editor.SyntaxStyles.AutoCompletion.Sort; + while Editor.SyntaxStyles.AutoCompletion.Strings[0] = '' do Editor.SyntaxStyles.AutoCompletion.Delete(0); DefineMethod('Clear', 0, tkNone, nil, TransformClearProc); DefineMethod('Rotate', 1, tkNone, nil, TransformRotateProc); + DefineMethod('Scale', 1, tkNone, nil, TransformScaleProc); DefineMethod('RotateOrigin', 1, tkNone, nil, TransformRotateOriginProc); *************** *** 3051,3054 **** --- 3174,3178 ---- end; Scripter.AddObject('Transform', Transform); + { Options interface } with Scripter.defineClass(TOptions) do *************** *** 3106,3109 **** --- 3230,3234 ---- Scripter.AddLibrary(TOperationLibrary); Scripter.AddLibrary(TatClassesLibrary); + { Variables and constants } Scripter.AddConstant('PI', pi); *************** *** 3178,3182 **** { Variables } Scripter.AddVariable('SelectedTransform', EditForm.SelectedTriangle); ! Scripter.AddVariable('Compatibility', Compatibility); Scripter.AddVariable('ActiveTransform', ActiveTransform); Scripter.AddVariable('UpdateFlame', UpdateIt); --- 3303,3307 ---- { Variables } Scripter.AddVariable('SelectedTransform', EditForm.SelectedTriangle); ! Scripter.AddVariable('Compatibility', Compatibility); // obsolete Scripter.AddVariable('ActiveTransform', ActiveTransform); Scripter.AddVariable('UpdateFlame', UpdateIt); *************** *** 3188,3191 **** --- 3313,3317 ---- Scripter.AddVariable('CurrentFile', OpenFile); Scripter.AddVariable('LimitVibrancy', LimitVibrancy); + Scripter.AddLibrary(TMathLibrary); Scripter.AddLibrary(TatMathLibrary); |