-
Notifications
You must be signed in to change notification settings - Fork 0
/
Equation.cs
70 lines (62 loc) · 1.58 KB
/
Equation.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Drawing;
using System.Reflection;
using System.CodeDom.Compiler;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
using System.Xml.Serialization;
using Microsoft.CSharp;
namespace Fractals
{
public class Equation
{
delegate void GetColorIndexDelegate(double p, double q,out double r,out double g,out double b);
string code;
string compileError;
GetColorIndexDelegate getColorIndexMethod;
public string Code {
get {
return code;
}
set {
code = value;
try {
Type mainClass = Compiler.CompileClassBody(code);
MethodInfo getColorIndexMethodInfo = mainClass.GetMethod("GetColor");
if (getColorIndexMethodInfo == null) {
throw new CompileException("Method not found");
}
getColorIndexMethod = (GetColorIndexDelegate)Delegate.CreateDelegate(typeof(GetColorIndexDelegate), getColorIndexMethodInfo);
} catch (CompileException e) {
compileError = e.ErrorMessage;
MessageBox.Show(compileError, "Can not compile equation");
}
}
}
[XmlIgnore]
public bool Compiles {
get {
return compileError == null;
}
}
[XmlIgnore]
public string CompileError {
get {
return compileError;
}
}
public Equation() {}
public Equation(string code)
{
this.Code = code;
}
public ColorIndex GetColorIndex(double p, double q)
{
double r, g, b;
getColorIndexMethod(p, q, out r, out g, out b);
return new ColorIndex(0, r, g, b);
}
}
}