コード例 #1
0
        public static void SetValue(this IQueryValue l, IQueryValue r)
        {
            if (l.GetIQLType() != r.GetIQLType())
            {
                throw new InvalidOperationException("Cannot set query value to disparate type");
            }

            switch (l.GetIQLType())
            {
                case IQLType.Number:
                    l.Number = r.Number;
                    break;

                case IQLType.Boolean:
                    l.Boolean = r.Boolean;
                    break;

                case IQLType.Canvas:
                    l.Canvas = r.Canvas;
                    break;

                case IQLType.Color:
                    l.Color = r.Color.Clone();
                    break;
            }
        }
コード例 #2
0
        public void CreateVariable(string name, IQueryValue value)
        {
            if (_variables.ContainsKey(name))
                throw new ArgumentException(string.Format("A variable with the name \"{0}\" already exists", name), "name");

            _variables.Add(name, value);
        }
コード例 #3
0
        public override IQueryValue EvaluateOperator(IEnvironment env, IQueryValue left, IQueryValue right)
        {
            switch (left.GetIQLType())
            {
                default:
                    throw new ArgumentException(string.Format("Left side of + cannot be of type {0}", left.GetIQLType()));

                case IQLType.Number:
                    switch (right.GetIQLType())
                    {
                        default:
                            throw new ArgumentException(string.Format("Right side of + cannot be of type {0} when left side is a number", right.GetIQLType()));

                        case IQLType.Number:
                            return new NumberValue() {Number = left.Number + right.Number};

                        case IQLType.Color:
                            return new ColorValue() {Color = right.Color.Each(v => left.Number + v)};
                    }

                case IQLType.Color:
                    switch (right.GetIQLType())
                    {
                        default:
                            throw new ArgumentException(string.Format("Right side of + cannot be of type {0} when left side is a color", right.GetIQLType()));

                        case IQLType.Color:
                            return new ColorValue() {Color = left.Color + right.Color};

                        case IQLType.Number:
                            return new ColorValue() {Color = left.Color.Each(v => v + right.Number)};
                    }
            }
        }
コード例 #4
0
ファイル: ImageMath.cs プロジェクト: redxdev/ImageQuery-CS
 public static IQueryValue CClamp(IEnvironment env, IQueryValue[] args)
 {
     FunctionUtils.CheckArgumentCountEqual("cclamp", 1, args.Length);
     Color color = args[0].Color;
     color.Clamp();
     return new ColorValue() {Color = color};
 }
コード例 #5
0
ファイル: ImageMath.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue CTan(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountBetween("ctan", 1, 2, args.Length);

            return new ColorValue()
            {
                Color = args[0].Color.Each(v => (float) Math.Tan(v), args.Length == 2 && args[1].Boolean)
            };
        }
コード例 #6
0
ファイル: Utility.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue PrintAndReturn(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountEqual("par", 1, args.Length);

            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine(args[0].ToString());
            Console.ForegroundColor = ConsoleColor.White;

            return args[0];
        }
コード例 #7
0
ファイル: ImageRandom.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue CRand(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountBetween("rand", 0, 1, args.Length);

            return new ColorValue()
            {
                Color =
                    new Color((float) random.NextDouble(), (float) random.NextDouble(), (float) random.NextDouble(),
                        args.Length == 1 ? args[0].Number : (float) random.NextDouble())
            };
        }
コード例 #8
0
        public override IQueryValue EvaluateOperator(IEnvironment env, IQueryValue left, IQueryValue right)
        {
            switch (left.GetIQLType())
            {
                default:
                    throw new ArgumentException(string.Format("Arguments to < cannot be of type {0}", left.GetIQLType()));

                case IQLType.Number:
                    return new BooleanValue() { Boolean = left.Number < right.Number };
            }
        }
コード例 #9
0
ファイル: ImageMath.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue Magnitude(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountBetween("magnitude", 1, 2, args.Length);

            Color color = args[0].Color;
            float result = color.R*color.R + color.G*color.G + color.B*color.B;
            if (args.Length == 2 && args[1].Boolean == true)
                result += color.A*color.A;
            result = (float) Math.Sqrt(result);

            return new NumberValue() {Number = result};
        }
コード例 #10
0
ファイル: Utility.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue Print(IEnvironment env, IQueryValue[] args)
        {
            Console.ForegroundColor = ConsoleColor.Blue;
            if (args.Length == 0)
            {
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine(string.Join(" ", args.Select(v => v.ToString()).ToArray()));
            }

            Console.ForegroundColor = ConsoleColor.White;

            return new NullValue();
        }
コード例 #11
0
        public override IQueryValue EvaluateOperator(IEnvironment env, IQueryValue left, IQueryValue right)
        {
            if (left.GetIQLType() != right.GetIQLType())
                return new BooleanValue() {Boolean = false};

            switch (left.GetIQLType())
            {
                case IQLType.Number:
                    return new BooleanValue() {Boolean = left.Number != right.Number};

                case IQLType.Color:
                    return new BooleanValue() {Boolean = !left.Color.Equals(right.Color)};

                case IQLType.Canvas:
                    return new BooleanValue() {Boolean = left.Canvas != right.Canvas};

                case IQLType.Boolean:
                    return new BooleanValue() {Boolean = left.Boolean != right.Boolean};
            }

            return new BooleanValue() {Boolean = false};
        }
コード例 #12
0
ファイル: ImageMath.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue Clamp(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountEqual("clamp", 3, args.Length);

            return new NumberValue() {Number = args[0].Number.Clamp(args[1].Number, args[2].Number)};
        }
コード例 #13
0
ファイル: ImageMath.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue Abs(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountEqual("abs", 1, args.Length);

            return new NumberValue() {Number = Math.Abs(args[0].Number)};
        }
コード例 #14
0
 public void CreateVariable(string name, IQueryValue value)
 {
     Parent.CreateVariable(name, value);
 }
コード例 #15
0
 public void CreateParameter(string name, IQueryValue value)
 {
     throw new InvalidOperationException("Cannot create a parameter inside this context");
 }
コード例 #16
0
 public void SetVariable(string name, IQueryValue value)
 {
     if(_variables.ContainsKey(name))
         _variables[name] = value;
     else
         Parent.SetVariable(name, value);
 }
コード例 #17
0
ファイル: IndexedValue.cs プロジェクト: redxdev/ImageQuery-CS
        public IQueryValue Index(IQueryValue x, IQueryValue y)
        {
            if(IndexOperation == null)
                throw new InvalidOperationException("IndexOperation is not set for IndexedValue");

            return IndexOperation(x, y);
        }
コード例 #18
0
ファイル: Utility.cs プロジェクト: redxdev/ImageQuery-CS
 public static IQueryValue Null(IEnvironment env, IQueryValue[] args)
 {
     return new NullValue();
 }
コード例 #19
0
 // ??
 protected bool IsNullValue(IQueryValue value)
 {
     return ((value is QField) && ((QField)value).Name.ToLower()==nullField);
 }
コード例 #20
0
ファイル: ImageMath.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue Sin(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountEqual("sin", 1, args.Length);

            return new NumberValue() {Number = (float) Math.Sin(args[0].Number)};
        }
コード例 #21
0
 public abstract IQueryValue EvaluateOperator(IEnvironment env, IQueryValue left, IQueryValue right);
コード例 #22
0
 public void CreateParameter(string name, IQueryValue value)
 {
     Parent.CreateParameter(name, value);
 }
コード例 #23
0
 public void CreateParameter(string name, IQueryValue value)
 {
     _parameters.Add(name, value);
 }
コード例 #24
0
ファイル: ImageRandom.cs プロジェクト: redxdev/ImageQuery-CS
        public static IQueryValue Rand(IEnvironment env, IQueryValue[] args)
        {
            FunctionUtils.CheckArgumentCountEqual("rand", 0, args.Length);

            return new NumberValue() {Number = (float) random.NextDouble()};
        }
コード例 #25
0
        public void SetVariable(string name, IQueryValue value)
        {
            switch (name)
            {
                case "width":
                case "height":
                case "x":
                case "y":
                case "color":
                case "red":
                case "green":
                case "blue":
                case "alpha":
                case "r":
                case "g":
                case "b":
                case "a":
                    throw new ArgumentException(string.Format("Cannot set {0} as it is protected in this context", name), "name");

                default:
                    Parent.SetVariable(name, value);
                    break;
            }
        }
コード例 #26
0
        public virtual void SetVariable(string name, IQueryValue value)
        {
            switch (name)
            {
                case "r":
                case "red":
                case "g":
                case "green":
                case "b":
                case "blue":
                case "a":
                case "alpha":
                    throw new ArgumentException(string.Format("Cannot set {0} as it is protected in this context", name), "name");

                default:
                    throw new KeyNotFoundException(string.Format("Variable {0} does not exist in this context", name));
            }
        }
コード例 #27
0
ファイル: NumberValue.cs プロジェクト: redxdev/ImageQuery-CS
 public IQueryValue Index(IQueryValue x, IQueryValue y)
 {
     throw new InvalidOperationException("Cannot index object of type canvas");
 }
コード例 #28
0
 public void CreateVariable(string name, IQueryValue value)
 {
     throw new InvalidOperationException("Cannot create a variable inside this context");
 }
コード例 #29
0
 public void SetVariable(string name, IQueryValue value)
 {
     _variables[name] = value;
 }