Example #1
0
 public override State onMove(Vec pos)
 {
     mPos = pos;
     mOnMove(pos);
     mStateVar.logState("drag ", pos);
     return this;
 }
Example #2
0
 public Line(Vec pos0, Vec pos1, Color color)
 {
     mSeg = 3;
     mPos0 = pos0;
     mPos1 = pos1;
     mColor = color;
 }
Example #3
0
        public override State onDown(Vec pos, MouseButtons mb)
        {
            if (mb == mButton)
                return new ButtonStateDown(mStateVar, mb, pos);

            return this;
        }
Example #4
0
        public override State onMove(Vec pos)
        {
            if (mStateVar.mOnStartDrag != null)
            {
                ButtonStateVar.DragRezult rezult = mStateVar.mOnStartDrag(mPos);
                switch (rezult.mRezult)
                {
                    case ButtonStateVar.DragRezult.Rezult.Nodrag:
                        return new ButtonStateNone(mStateVar, mButton);

                    case ButtonStateVar.DragRezult.Rezult.Drag:
                        return new ButtonStateDrag(
                            mStateVar,
                            mButton,
                            rezult.mOnDrag,
                            rezult.mOnEndDrag,
                            rezult.mOnPaint);
                }
            }
            else
            {
                return new ButtonStateNone(mStateVar, mButton);
            }

            mStateVar.logState("down ", pos);
            return this;
        }
Example #5
0
 public double getInvariant(Vec p0, Vec p1)
 {
     Vec delta = p0.minus(p1);
     if (mEuklide)
         return delta.mX * delta.mX + delta.mY * delta.mY;
     else
         return -delta.mX * delta.mX + delta.mY * delta.mY;
 }
Example #6
0
 public void drawLine(Pen pen, Vec pos0, Vec pos1)
 {
     mGraphics.DrawLine(pen,
         (float)(mWidth + pos0.mX),
         (float)(mHeight + pos0.mY),
         (float)(mWidth + pos1.mX),
         (float)(mHeight + pos1.mY));
 }
Example #7
0
        public State onMove(Vec pos)
        {
            mPos = pos.minus(mShift);

            mLeft.onMove(mPos);
            mRight.onMove(mPos);

            return this;
        }
Example #8
0
        public override bool select(Vec pos)
        {
            Vec delta = pos.minus(mPos0);
            Vec len = mPos1.minus(mPos0);
            double proj1 = delta.dot(len) / len.lenghtSquare();
            double proj2 = delta.perp().dot(len) / len.lenghtSquare();

            return proj1 > 0 && proj1 < 1 && proj2 > -0.05 && proj2 < 0.05;
        }
Example #9
0
        public State onUp(Vec pos, MouseButtons button)
        {
            mPos = pos.minus(mShift);

            mLeft.onUp(mPos, button);
            mRight.onUp(mPos, button);

            return this;
        }
Example #10
0
 public void drawText(String text, Vec pos)
 {
     mGraphics.DrawString(text,
         new Font("Arial", 16),
         new SolidBrush(Color.Black),
         new PointF(
             (float)(mWidth + pos.mX),
             (float)(mHeight + pos.mY)));
 }
Example #11
0
        public override State onUp(Vec pos, MouseButtons mb)
        {
            if (mb == mButton)
            {
                if(mStateVar.mOnClick != null)
                    mStateVar.mOnClick(pos);
                return new ButtonStateNone(mStateVar, mb);
            }

            return this;
        }
Example #12
0
        public TimeSpace()
        {
            mEuklide = false;
            mObjectList = new List<Object>();
            mCenter = new Vec(0, 0);
            mSpeed = 0;
            mZoom = 1;
            mC = 1;

            updateMat();
            updateScale();
        }
Example #13
0
        public Mat(double speed, bool euklide)
        {
            if (euklide)
            {
                double sin = Math.Sin(speed);
                double cos = Math.Cos(speed);

                mAxisX = new Vec(cos, sin);
                mAxisY = new Vec(-sin, cos);
            }
            else
            {
                double sh = Math.Sinh(speed);
                double ch = Math.Cosh(speed);

                mAxisX = new Vec(ch, -sh);
                mAxisY = new Vec(-sh, ch);
            }
        }
Example #14
0
 public Vec scale(Vec vec)
 {
     return new Vec(vec.mX * mX, vec.mY * mY);
 }
Example #15
0
 public Vec scaleBack(Vec vec)
 {
     return new Vec(vec.mX / mX, vec.mY / mY);
 }
Example #16
0
 public Vec minus(Vec vec)
 {
     return new Vec(mX - vec.mX, mY - vec.mY);
 }
Example #17
0
 public Vec plus(Vec vec)
 {
     return new Vec(mX + vec.mX, mY + vec.mY);
 }
Example #18
0
 public abstract bool select(Vec pos);
Example #19
0
 public double dot(Vec vec)
 {
     return mX * vec.mX + mY * vec.mY;
 }
Example #20
0
 public Vec getWorldFromScreen(Vec screen)
 {
     //			world = (mat-1) * (scale-1 * screen) + center
     return mMat.multBack(mScale.scaleBack(screen)).plus(mCenter);
 }
Example #21
0
 public Object selectObject(Vec screen)
 {
     Vec world = getWorldFromScreen(screen);
     foreach (Object obj in mObjectList)
         if (obj.select(world))
             return obj;
     return null;
 }
Example #22
0
 public abstract bool select(Vec pos);
Example #23
0
 public Mouse()
 {
     mShift = new Vec(0, 0);
     mPos   = new Vec(0, 0);
 }
Example #24
0
 public ButtonStateDown(ButtonStateVar stateVar, MouseButtons button, Vec pos)
     : base(stateVar)
 {
     mPos = pos;
     mButton = button;
 }
Example #25
0
 public void setCenter(Vec vec)
 {
     mCenter = vec;
 }
Example #26
0
 void updateScale()
 {
     mScale = new Vec(mZoom * mC, mZoom);
 }
Example #27
0
 public Vec mult(Vec pos)
 {
     return mAxisX.mult(pos.mX).plus(mAxisY.mult(pos.mY));
 }
Example #28
0
        ButtonStateVar.DragRezult onStartDragL(Vec posScreen)
        {
            switch (mInsert)
            {
            case Insert.Line:
            {
                Vec  world = mTimeSpace.getWorldFromScreen(posScreen);
                Line line  = new Line(world, world.plus(new Vec(20, 20)), Color.Black);
                insert(line);
                mInsert = Insert.None;

                return(new ButtonStateVar.DragRezult(
                           delegate(Vec posScreenNew)
                    {
                        Vec world2 = mTimeSpace.getWorldFromScreen(posScreenNew);
                        line.mPos1 = world2;
                        Invalidate();
                    },
                           null,
                           null));
            }

            case Insert.LineLight:
            {
                Vec  world = mTimeSpace.getWorldFromScreen(posScreen);
                Line line  = new Line(world, world.plus(new Vec(20, 20)), Color.Orange);
                mTimeSpace.add(line);
                mInsert = Insert.None;
                Invalidate();

                return(new ButtonStateVar.DragRezult(
                           delegate(Vec posScreenNew)
                    {
                        Vec delta = posScreenNew.minus(posScreen);
                        delta.lightCorect();
                        Vec world2 = mTimeSpace.getWorldFromScreen(posScreen.plus(delta));
                        line.mPos1 = world2;
                        Invalidate();
                    },
                           null,
                           null));
            }

            case Insert.Invariant:
            {
                mInsert = Insert.None;
                Invalidate();

                return(new ButtonStateVar.DragRezult(
                           delegate(Vec posScreenNew)
                    {
                        Invalidate();
                    },
                           delegate(Vec posScreenNew)
                    {
                        Invalidate();
                    },
                           delegate(Vec posScreenNew, DrawInfo di)
                    {
                        Pen pen = new Pen(Color.LimeGreen);
                        pen.Width = 1;
                        di.drawLine(pen, posScreen, posScreenNew);

                        Vec world = mTimeSpace.getWorldFromScreen(posScreen);
                        Vec worldNew = mTimeSpace.getWorldFromScreen(posScreenNew);
                        double invariant = mTimeSpace.getInvariant(world, worldNew) / (GRID * GRID);
                        di.drawText(invariant.ToString(), posScreenNew.plus(new Vec(10, -10)));
                    }));
            }

            default:
                return(new ButtonStateVar.DragRezult(true));
            }
        }
Example #29
0
 public void logState(String state, Vec pos)
 {
     if (mLabel != null)
         mLabel.Text = state + " " + pos.mX + "x" + pos.mY;
 }
Example #30
0
 public Vec getCenterFromScreenAndWorld(Vec screen, Vec world)
 {
     //			center = world - (mat-1) * (scale-1 * screen)
     return world.minus(mMat.multBack(mScale.scaleBack(screen)));
 }
Example #31
0
 Mat(Vec ax, Vec ay)
 {
     mAxisX = ax;
     mAxisY = ay;
 }
Example #32
0
 public Vec getScreenFromWorld(Vec world)
 {
     //			screen = scale * (mat * (world - center))
     return mScale.scale(mMat.mult(world.minus(mCenter)));
 }
Example #33
0
 public Vec multBack(Vec pos)
 {
     return new Mat(
         new Vec(+mAxisX.mX, -mAxisX.mY),
         new Vec(-mAxisY.mX, +mAxisY.mY)).mult(pos);
 }
Example #34
0
 override public State onMove(Vec pos)
 {
     mStateVar.logState("none ", pos);
     return(this);
 }