Ejemplo n.º 1
0
        /// <summary>
        /// Execute the operand
        /// </summary>
        public override void Execute(EpsInterpreter interpreter)
        {
            var operandStack = interpreter.OperandStack;

            interpreter.LeaveProcedureCreation();

            if (interpreter.ProcedureCreationLevel == 0)
            {
                ArrayOperand array = new ArrayOperand();
                array.IsExecutable = true;
                array.LineNumber   = LineNumber;

                var op = operandStack.Pop();
                var beginProcedureOperand = op as BeginProcedureOperand;

                while (beginProcedureOperand == null || beginProcedureOperand != null && beginProcedureOperand.Level > 1)
                {
                    var proxy = new OperandProxy(op);
                    array.Values.Add(proxy);
                    op = operandStack.Pop();
                    beginProcedureOperand = op as BeginProcedureOperand;
                }

                array.Values.Reverse();
                operandStack.Push(array);
            }
            else
            {
                operandStack.Push(this);
            }
        }
Ejemplo n.º 2
0
        public override void Execute(EpsInterpreter interpreter)
        {
            ArrayOperand array = new ArrayOperand();

            array.IsExecutable = true;
            interpreter.OperandStack.Push(array);
        }
Ejemplo n.º 3
0
        public override void Execute(EpsInterpreter interpreter)
        {
            var operandStack = interpreter.OperandStack;

            var count   = operandStack.PopIntegerValue();
            var index   = operandStack.PopIntegerValue();
            var operand = operandStack.Pop();

            switch (operand)
            {
            case ArrayOperand arrayOperand:
            {
                var subArray = new ArrayOperand();

                for (int i = index; i < index + count; i++)
                {
                    subArray.Values.Add(arrayOperand.Values[i]);
                }

                operandStack.Push(subArray);
                break;
            }

            case StringOperand stringOperand:
            {
                var str = new StringOperand(stringOperand, index, count);
                operandStack.Push(str);
                break;
            }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Create a colos space description
        /// </summary>
        public static ArrayOperand CreateColorSpaceDescription(string colorSpaceName)
        {
            var array = new ArrayOperand();

            var name  = colorSpaceName;
            var proxy = new OperandProxy(new NameOperand(name));

            array.Values.Add(proxy);

            return(array);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Get a matrix out of a sequence fof operands
        /// </summary>
        public static Matrix GetMatrix(ArrayOperand array)
        {
            var matrix = new Matrix(GetRealValue(array.Values[0].Operand),
                                    GetRealValue(array.Values[1].Operand),
                                    GetRealValue(array.Values[2].Operand),
                                    GetRealValue(array.Values[3].Operand),
                                    GetRealValue(array.Values[4].Operand),
                                    GetRealValue(array.Values[5].Operand));

            return(matrix);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Convert an array operand to a list of doubles
        /// </summary>
        /// <param name="array"></param>
        /// <returns></returns>
        public static List <double> GetRealValues(ArrayOperand array)
        {
            int           num    = array.Values.Count;
            List <double> values = new List <double>();

            for (int i = 0; i < num; i++)
            {
                values.Add(GetRealValue(array.Values[i].Operand));
            }

            return(values);
        }
Ejemplo n.º 7
0
        public override void Execute(EpsInterpreter interpreter)
        {
            var array = new ArrayOperand();

            array.Values.Add(new OperandProxy(new RealOperand(1.0)));
            array.Values.Add(new OperandProxy(new RealOperand(0.0)));
            array.Values.Add(new OperandProxy(new RealOperand(0.0)));
            array.Values.Add(new OperandProxy(new RealOperand(1.0)));
            array.Values.Add(new OperandProxy(new RealOperand(0.0)));
            array.Values.Add(new OperandProxy(new RealOperand(0.0)));

            interpreter.OperandStack.Push(array);
        }
Ejemplo n.º 8
0
        public override void Execute(EpsInterpreter interpreter)
        {
            var operandStack = interpreter.OperandStack;

            var          count = operandStack.PopIntegerValue();
            ArrayOperand array = new ArrayOperand();

            for (int i = 0; i < count; i++)
            {
                var proxy = new OperandProxy(new NullOperand());
                array.Values.Add(proxy);
            }

            operandStack.Push(array);
        }
Ejemplo n.º 9
0
        public override void Execute(EpsInterpreter interpreter)
        {
            var operandStack = interpreter.OperandStack;

            var op = operandStack.PopArray();

            var matrix = interpreter.GraphicState.TransformationMatrix;

            var array = new ArrayOperand();

            array.Values.Add(new OperandProxy(new RealOperand(matrix.M11)));
            array.Values.Add(new OperandProxy(new RealOperand(matrix.M12)));
            array.Values.Add(new OperandProxy(new RealOperand(matrix.M21)));
            array.Values.Add(new OperandProxy(new RealOperand(matrix.M22)));
            array.Values.Add(new OperandProxy(new RealOperand(matrix.OffsetX)));
            array.Values.Add(new OperandProxy(new RealOperand(matrix.OffsetY)));

            operandStack.Push(array);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Execute the operand
        /// </summary>
        public override void Execute(EpsInterpreter interpreter)
        {
            var operandStack = interpreter.OperandStack;

            ArrayOperand array = new ArrayOperand();

            array.LineNumber = LineNumber;

            var op = operandStack.Pop();

            while (!(op is MarkOperand))
            {
                var proxy = new OperandProxy(op);
                array.Values.Add(proxy);
                op = operandStack.Pop();
            }

            array.Values.Reverse();
            operandStack.Push(array);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Sets the dash pattern
        /// </summary>
        private void SetDashPattern(GraphicsState graphicState, double dashPhase, ArrayOperand dashArray)
        {
            if (dashArray.Values.Count == 0)
            {
                graphicState.Dashes     = null;
                graphicState.DashOffset = 0;
                return;
            }

            var dashes = new List <double>();

            foreach (var val in dashArray.Values)
            {
                var dbl = MatrixUtilities.TransformScale(OperandHelper.GetRealValue(val.Operand), graphicState.CurrentTransformationMatrix);
                dashes.Add(dbl);
            }

            graphicState.Dashes     = dashes;
            graphicState.DashOffset = dashPhase;
        }
Ejemplo n.º 12
0
        public override void Execute(EpsInterpreter interpreter)
        {
            var operandStack = interpreter.OperandStack;

            var op = operandStack.Pop();

            if (op is ArrayOperand arrayOperand)
            {
                var matrix = OperandHelper.GetMatrix(arrayOperand);
                var scaleY = operandStack.PopRealValue();
                var scaleX = operandStack.PopRealValue();

                matrix.Scale(scaleX, scaleY);

                var array = new ArrayOperand();
                array.Values.Add(new OperandProxy(new RealOperand(matrix.M11)));
                array.Values.Add(new OperandProxy(new RealOperand(matrix.M12)));
                array.Values.Add(new OperandProxy(new RealOperand(matrix.M21)));
                array.Values.Add(new OperandProxy(new RealOperand(matrix.M22)));
                array.Values.Add(new OperandProxy(new RealOperand(matrix.OffsetX)));
                array.Values.Add(new OperandProxy(new RealOperand(matrix.OffsetY)));

                operandStack.Push(array);
            }
            else
            {
                var scaleY = OperandHelper.GetRealValue(op);
                var scaleX = operandStack.PopRealValue();

                GraphicsState graphicState = interpreter.GraphicState;

                var ctm = graphicState.TransformationMatrix;
                ctm.Scale(scaleX, scaleY);
                graphicState.TransformationMatrix = ctm;
            }
        }