Beispiel #1
0
 public Quadrangle Transform(Matrix32 matrix)
 {
     return(new Quadrangle {
         V1 = matrix.TransformVector(V1),
         V2 = matrix.TransformVector(V2),
         V3 = matrix.TransformVector(V3),
         V4 = matrix.TransformVector(V4)
     });
 }
Beispiel #2
0
        private void SetValueFromCurrentMousePosition(bool draggingJustBegun)
        {
            if (Rail == null)
            {
                return;
            }
            float railLength = Rail.CalcPolylineLength();

            if (railLength <= 0)
            {
                return;
            }
            Matrix32 transform = Rail.LocalToWorldTransform.CalcInversed();
            Vector2  p         = transform.TransformVector(Input.MousePosition);
            float    offset    = Rail.CalcSplineLengthToNearestPoint(p) / railLength;

            if (RangeMax <= RangeMin)
            {
                return;
            }
            float v = offset * (RangeMax - RangeMin) + RangeMin;

            if (draggingJustBegun)
            {
                dragInitialDelta  = Value - v;
                dragInitialOffset = offset;
                return;
            }
            float prevValue = Value;

            if (offset > dragInitialOffset && dragInitialOffset < 1)
            {
                Value = v + dragInitialDelta * (1 - (offset - dragInitialOffset) / (1 - dragInitialOffset));
            }
            else if (offset < dragInitialOffset && dragInitialOffset > 0)
            {
                Value = v + dragInitialDelta * (1 - (dragInitialOffset - offset) / dragInitialOffset);
            }
            else
            {
                Value = v + dragInitialDelta;
            }
            if (Step > 0)
            {
                Value = (float)Math.Round(Value / Step) * Step;
            }
            if (Value != prevValue)
            {
                RaiseChanged();
            }
        }