Beispiel #1
0
        public static Vex.Point GetScalingOrigin(this ColorMask colorMask, Vex.Rectangle r)
        {
            Vex.Point result = r.Point;
            switch (colorMask)
            {
            case ColorMask.ScaleTopLeft:
            case ColorMask.ScaleLeftCenter:
            case ColorMask.ScaleTopCenter:
            case ColorMask.RulerSelLeft:
            case ColorMask.RulerSelTop:
                result = new Vex.Point(r.Right, r.Bottom);
                break;

            case ColorMask.ScaleTopRight:
                result = new Vex.Point(r.Left, r.Bottom);
                break;

            case ColorMask.ScaleBottomRight:
            case ColorMask.ScaleBottomCenter:
            case ColorMask.ScaleRightCenter:
            case ColorMask.RulerSelRight:
            case ColorMask.RulerSelBottom:
                result = r.Point;
                break;

            case ColorMask.ScaleBottomLeft:
                result = new Vex.Point(r.Right, r.Top);
                break;
            }
            return(result);
        }
Beispiel #2
0
 public PointF[] GetTransformedPoints()
 {
     Vex.Rectangle tb  = UntransformedBounds;//.TranslatedRectangle(StrokeBounds.Left, StrokeBounds.Top);
     PointF[]      pts = tb.SysPointFs();
     TransformMatrix.TransformPoints(pts);
     return(pts);
 }
Beispiel #3
0
        public void ResetTransform()
        {
            if (transformMatrix != null)
            {
                transformMatrix.Dispose();
            }

            if (list.Count == 1)
            {
                DesignInstance di = instanceManager[list[0]];
                transformMatrix     = di.GetMatrix().SysMatrix();
                center              = di.RotationCenter;
                untransformedBounds = di.Definition.StrokeBounds;//.TranslatedRectangle(-di.Location.X, -di.Location.Y);
            }
            else
            {
                transformMatrix = new Matrix();
                transformMatrix.Translate(StrokeBounds.Left, StrokeBounds.Top, MatrixOrder.Append);
                center = StrokeBounds.LocalCenter;
                //center = StrokeBounds.LocalCenter.Translate(StrokeBounds.Point);
                untransformedBounds = StrokeBounds.TranslatedRectangle(-StrokeBounds.Left, -StrokeBounds.Top);
            }

            isTransformDirty = false;
        }
Beispiel #4
0
 public void Clear()
 {
     list.Clear();
     strokeBounds      = Vex.Rectangle.Empty;
     isDirty           = true;
     isTransformDirty  = true;
     relatedAreInvalid = true;
     OnContentsChanged();
 }
Beispiel #5
0
 public PointF[] GetTransformedPoints(Matrix globalMatrix)
 {
     Vex.Rectangle tb  = UntransformedBounds;
     PointF[]      pts = tb.SysPointFs();
     using (Matrix m = TransformMatrix.Clone())
     {
         m.Multiply(globalMatrix, MatrixOrder.Append);
         m.TransformPoints(pts);
     }
     return(pts);
 }
Beispiel #6
0
        public void Set(uint[] ids)
        {
            if (!ArrayEquals(ids, list.ToArray()))
            {
                list.Clear();
                strokeBounds = Vex.Rectangle.Empty;
                foreach (uint id in ids)
                {
                    list.Add(id);
                }

                isDirty           = true;
                isTransformDirty  = true;
                relatedAreInvalid = true;
                OnContentsChanged();
            }
        }
Beispiel #7
0
        public static Vex.Point GetHandleOffset(this ColorMask colorMask, Vex.Rectangle r, Vex.Point mouseDownLocation)
        {
            Vex.Point result = Vex.Point.Zero;
            switch (colorMask)
            {
            case ColorMask.ScaleTopLeft:
            case ColorMask.RotateTopLeft:
                result = mouseDownLocation.Translate(new Vex.Point(-r.Left, -r.Top));
                break;

            case ColorMask.ScaleTopRight:
            case ColorMask.RotateTopRight:
                result = mouseDownLocation.Translate(new Vex.Point(-r.Right, -r.Top));
                break;

            case ColorMask.ScaleBottomRight:
            case ColorMask.RotateBottomRight:
                result = mouseDownLocation.Translate(new Vex.Point(-r.Right, -r.Bottom));
                break;

            case ColorMask.ScaleBottomLeft:
            case ColorMask.RotateBottomLeft:
                result = mouseDownLocation.Translate(new Vex.Point(-r.Left, -r.Bottom));
                break;

            case ColorMask.RulerSelLeft:
                result = mouseDownLocation.Translate(new Vex.Point(-r.Left, 0));
                break;

            case ColorMask.RulerSelTop:
                result = mouseDownLocation.Translate(new Vex.Point(0, -r.Top));
                break;

            case ColorMask.RulerSelRight:
                result = mouseDownLocation.Translate(new Vex.Point(-r.Right, 0));
                break;

            case ColorMask.RulerSelBottom:
                result = mouseDownLocation.Translate(new Vex.Point(0, -r.Bottom));
                break;
            }
            return(result);
        }
Beispiel #8
0
        public Vex.Rectangle CalculateBounds(uint[] instances, out Vex.Point topLeft)
        {
            Vex.Rectangle bounds = Vex.Rectangle.Empty;
            float         top    = int.MaxValue;
            float         left   = int.MaxValue;

            foreach (uint id in instances)
            {
                DesignInstance inst = instanceManager[id];
                if (bounds.IsEmpty)
                {
                    bounds = inst.StrokeBounds;
                }
                else
                {
                    bounds = inst.StrokeBounds.Union(bounds);// Rectangle.Union(bounds, inst.Bounds);
                }

                left = Math.Min(left, inst.Location.X);
                top  = Math.Min(top, inst.Location.Y);
            }
            topLeft = new Vex.Point(left, top);
            return(bounds);
        }
Beispiel #9
0
 private void CalculateBounds()
 {
     strokeBounds = CalculateBounds(list.ToArray(), out location);
     MainForm.CurrentStage.OnEdit();
 }