예제 #1
0
        public void DrawTranslated(Graphics g, uint id, float newLocX, float newLocY)
        {
            Matrix m = g.Transform;

            DesignInstance inst = instanceManager[id];

            using (Matrix mr = inst.GetMatrix().SysMatrix())
            {
                mr.Translate(newLocX - inst.Location.X, newLocY - inst.Location.Y, MatrixOrder.Append);
                mr.Multiply(m, MatrixOrder.Append);
                g.Transform = mr;
                inst.DrawOutlineIntoRaw(g, 0, 0);
            }

            g.Transform = m;
        }
예제 #2
0
        public void DrawRotated(Graphics g, float angle, Vex.Point center)
        {
            Matrix m = g.Transform;

            foreach (uint id in list)
            {
                DesignInstance inst = instanceManager[id];
                using (Matrix mr = inst.GetMatrix().SysMatrix())
                {
                    mr.RotateAt(angle, center.SysPointF(), MatrixOrder.Append);
                    mr.Multiply(m, MatrixOrder.Append);
                    g.Transform = mr;
                    inst.DrawOutlineIntoRaw(g, 0, 0);
                }
            }
            g.Transform = m;
        }
예제 #3
0
        public void DrawScaled(Graphics g, float scaleX, float scaleY, Vex.Point center)
        {
            Matrix m = g.Transform;

            scaleX = (Math.Abs(scaleX) < .01) ? .01f : scaleX;
            scaleY = (Math.Abs(scaleY) < .01) ? .01f : scaleY;

            Matrix tm = TransformMatrix.Clone();

            tm.Translate(-TransformMatrix.OffsetX, -TransformMatrix.OffsetY, MatrixOrder.Append);
            Matrix itm = tm.Clone();

            itm.Invert();

            foreach (uint id in list)
            {
                DesignInstance inst = instanceManager[id];

                using (Matrix ms = inst.GetMatrix().SysMatrix())
                {
                    ms.Translate(-center.X, -center.Y, MatrixOrder.Append);
                    ms.Multiply(itm, MatrixOrder.Append);
                    ms.Scale(scaleX, scaleY, MatrixOrder.Append);
                    ms.Multiply(tm, MatrixOrder.Append);
                    ms.Translate(center.X, center.Y, MatrixOrder.Append);

                    ms.Multiply(m, MatrixOrder.Append);
                    g.Transform = ms;
                    inst.DrawOutlineIntoRaw(g, 0, 0);
                }
            }

            tm.Dispose();
            itm.Dispose();

            g.Transform = m;
        }