示例#1
0
        public void It_Should_Convert_Parameters_From_Multiple_Grouped_And_Delimitered_Values()
        {
            var parameters = ProjectionParams.FromValues(';', "A:abc,def;B:bcd;C(D:d,f,g;F:f)");

            Assert.Equal(4, parameters.Count);
            Assert.Equal("A:abc,def", parameters[0]);
            Assert.Equal("B:bcd", parameters[1]);
            Assert.Equal("C.D:d,f,g", parameters[2]);
            Assert.Equal("C.F:f", parameters[3]);
        }
示例#2
0
        public void It_Should_Convert_Parameters_From_Multiple_Grouped_Values2()
        {
            var parameters = ProjectionParams.FromValues("object1(field1, object2(field1), field3)", "field2");

            Assert.Equal(4, parameters.Count);
            Assert.Equal("object1.field1", parameters[0]);
            Assert.Equal("object1.object2.field1", parameters[1]);
            Assert.Equal("object1.field3", parameters[2]);
            Assert.Equal("field2", parameters[3]);
        }
        /// <inheritdoc />
        protected override float doScaling(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1,
                                           Vector2 newScreenPos2, ProjectionParams projectionParams)
        {
            var newVector = projectionParams.ProjectTo(newScreenPos2, TransformPlane) -
                            projectionParams.ProjectTo(newScreenPos1, TransformPlane);
            var oldVector = projectionParams.ProjectTo(oldScreenPos2, TransformPlane) -
                            projectionParams.ProjectTo(oldScreenPos1, TransformPlane);

            return(newVector.magnitude / oldVector.magnitude);
        }
示例#4
0
        public void It_Should_Create_Projection_Params_From_Object()
        {
            var parameters = ProjectionParams.FromValue(new List <object> {
                "field1", "field2", "field3"
            });

            Assert.Equal(3, parameters.Count);
            Assert.Equal("field1", parameters[0]);
            Assert.Equal("field2", parameters[1]);
            Assert.Equal("field3", parameters[2]);
        }
示例#5
0
        public RouteBuilder AddProjectionParams(ProjectionParams projection)
        {
            if (projection == null)
            {
                return(this);
            }

            _queryParameters["projection"] = projection.ToString();

            return(this);
        }
示例#6
0
        public void It_Should_Convert_Parameters_From_Multiple_Grouped_Values_And_Another_Delimiter()
        {
            var parameters = ProjectionParams.FromValues(';', "field1;object1(field1);object2(field1;field2);object3(field1);field2;field3");

            Assert.Equal(7, parameters.Count);
            Assert.Equal("field1", parameters[0]);
            Assert.Equal("object1.field1", parameters[1]);
            Assert.Equal("object2.field1", parameters[2]);
            Assert.Equal("object2.field2", parameters[3]);
            Assert.Equal("object3.field1", parameters[4]);
            Assert.Equal("field2", parameters[5]);
            Assert.Equal("field3", parameters[6]);
        }
示例#7
0
        public void It_Should_Return_Projected_Fields_For_Object()
        {
            dynamic obj = CreateExpandoObject();

            var projectionParams = ProjectionParams.FromValues("Id,Name");

            dynamic result = projectionParams.FromObject(obj as ExpandoObject);

            Assert.Equal(obj.Id, result.Id);
            Assert.Equal(obj.Name, result.Name);

            AssertProperties(result, "Id", "Name");
        }
示例#8
0
        public async Task TestGetByWrongIdAndProjection()
        {
            // arrange
            var dummy = await _persistence.CreateAsync(null, _dummy1);

            var projection = ProjectionParams.FromValues("inner_dummy.description", "content", "key");

            // act
            dynamic result = await _persistence.GetOneByIdAsync(null, "wrong_id", projection);

            // assert
            Assert.Null(result);
        }
示例#9
0
        private float doRotation(Vector3 center, Vector2 oldScreenPos, Vector2 newScreenPos,
                                 ProjectionParams projectionParams)
        {
            var newVector = projectionParams.ProjectTo(newScreenPos, TransformPlane) - center;
            var oldVector = projectionParams.ProjectTo(oldScreenPos, TransformPlane) - center;
            var angle     = Vector3.Angle(oldVector, newVector);

            if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0)
            {
                angle = -angle;
            }
            return(angle);
        }
        // Pointers pressed this frame
        protected override void pointersPressed(IList <Pointer> pointers)
        {
            if (State == GestureState.Idle)
            {
                primaryPointer = pointers[0];
                projection     = primaryPointer.GetPressData().Layer.GetProjectionParams(primaryPointer);
                plane          = new Plane(Vector3.up, transform.position);
                startPosition  = projection.ProjectTo(primaryPointer.Position, plane);

                // Start the gesture
                setState(GestureState.Began);
            }
        }
示例#11
0
        public async Task TestGetByIdAndWrongProjection()
        {
            // arrange
            var dummy = await _persistence.CreateAsync(null, _dummy1);

            var projection = ProjectionParams.FromValues("Wrong_Key", "Wrong_Content");

            // act
            dynamic result = await _persistence.GetOneByIdAsync(null, dummy.Id, projection);

            // assert
            Assert.Null(result);
        }
示例#12
0
        protected Vector3 projectScaledRotated(Vector2 point, float dR, float dS, ProjectionParams projectionParams)
        {
            var delta = projectionParams.ProjectTo(point, transformPlane) - cachedTransform.position;

            if (dR != 0)
            {
                delta = Quaternion.AngleAxis(dR, RotationAxis) * delta;
            }
            if (dS != 0)
            {
                delta = delta * dS;
            }
            return(cachedTransform.position + delta);
        }
示例#13
0
        public async Task TestGetByIdAndIdProjection()
        {
            // arrange
            var dummy = await _persistence.CreateAsync(null, _dummy1);

            var projection = ProjectionParams.FromValues("id");

            // act
            dynamic result = await _persistence.GetOneByIdAsync(null, dummy.Id, projection);

            // assert
            Assert.NotNull(result);
            Assert.Equal(dummy.Id, result.id);
        }
        /// <inheritdoc />
        protected override float doRotation(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1,
                                            Vector2 newScreenPos2, ProjectionParams projectionParams)
        {
            var newVector = projectionParams.ProjectTo(newScreenPos2, TransformPlane) -
                            projectionParams.ProjectTo(newScreenPos1, TransformPlane);
            var oldVector = projectionParams.ProjectTo(oldScreenPos2, TransformPlane) -
                            projectionParams.ProjectTo(oldScreenPos1, TransformPlane);
            var angle = Vector3.Angle(oldVector, newVector);

            if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0)
            {
                angle = -angle;
            }
            return(angle);
        }
示例#15
0
        public async Task TestGetByIdAndProjectionFromArray()
        {
            // arrange
            var dummy = await _persistence.CreateAsync(null, _dummy1);

            var projection = ProjectionParams.FromValues("key", "inner_dummies(name, description)");

            // act
            dynamic result = await _persistence.GetOneByIdAsync(null, dummy.Id, projection);

            // assert
            Assert.NotNull(result);
            Assert.Equal(dummy.Key, result.key);
            Assert.Equal(dummy.InnerDummies[0].Name, result.inner_dummies[0].name);
            Assert.Equal(dummy.InnerDummies[1].Description, result.inner_dummies[1].description);
        }
示例#16
0
        public void It_Should_Return_Projected_Fields_For_Object_With_Nested_Properties()
        {
            dynamic obj = CreateExpandoObject();

            var projectionParams = ProjectionParams.FromValues("Id,Description,Data(Id,Amount)");

            dynamic result = projectionParams.FromObject(obj as ExpandoObject);

            Assert.Equal(obj.Id, result.Id);
            Assert.Equal(obj.Description, result.Description);
            Assert.Equal(obj.Data.Id, result.Data.Id);
            Assert.Equal(obj.Data.Amount, result.Data.Amount);

            AssertProperties(result, "Id", "Description", "Data");
            AssertProperties(result.Data, "Id", "Amount");
        }
示例#17
0
        /// <inheritdoc />
        protected override Vector3 doOnePointTranslation(Vector2 oldScreenPos, Vector2 newScreenPos,
                                                         ProjectionParams projectionParams)
        {
            if (isTransforming)
            {
                return(new Vector3(newScreenPos.x - oldScreenPos.x, newScreenPos.y - oldScreenPos.y, 0));
            }

            screenPixelTranslationBuffer += newScreenPos - oldScreenPos;
            if (screenPixelTranslationBuffer.sqrMagnitude > screenTransformPixelThresholdSquared)
            {
                isTransforming = true;
                return(screenPixelTranslationBuffer);
            }

            return(Vector3.zero);
        }
示例#18
0
        public async Task TestGetByIdAndProjection()
        {
            // arrange
            var dummy = await _persistence.CreateAsync(null, _dummy1);

            var projection = ProjectionParams.FromValues("inner_dummy.description", "content", "key", "create_time_utc", "dummy_type");

            // act
            dynamic result = await _persistence.GetOneByIdAsync(null, dummy.Id, projection);

            // assert
            Assert.NotNull(result);
            Assert.Equal(dummy.Key, result.key);
            Assert.Equal(dummy.Content, result.content);
            Assert.Equal(dummy.InnerDummy.Description, result.inner_dummy.description);
            Assert.Equal(dummy.CreateTimeUtc.ToString(), result.create_time_utc.ToString());
            Assert.Equal(dummy.DummyType.ToString(), result.dummy_type.ToString());
        }
示例#19
0
        public async Task TestGetPageByWrongProjection()
        {
            // arrange
            var dummy1 = await _persistence.CreateAsync(null, _dummy1);

            var dummy2 = await _persistence.CreateAsync(null, _dummy2);

            var builder = Builders <Dummy> .Filter;
            var filter  = builder.Empty;

            var projection = ProjectionParams.FromValues("Wrong_InnerDummy.Description", "Wrong_Content", "Wrong_Key");

            // act
            dynamic result = await _persistence.GetPageByFilterAndProjectionAsync(null, filter, null, null, projection);

            // assert
            Assert.NotNull(result);
            Assert.Empty(result.Data);
        }
        /// <inheritdoc />
        protected override Vector3 doOnePointTranslation(Vector2 oldScreenPos, Vector2 newScreenPos,
                                                         ProjectionParams projectionParams)
        {
            if (isTransforming)
            {
                return(projectionParams.ProjectTo(newScreenPos, TransformPlane) -
                       projectionParams.ProjectTo(oldScreenPos, TransformPlane));
            }

            screenPixelTranslationBuffer += newScreenPos - oldScreenPos;
            if (screenPixelTranslationBuffer.sqrMagnitude > screenTransformPixelThresholdSquared)
            {
                isTransforming = true;
                return(projectionParams.ProjectTo(newScreenPos, TransformPlane) -
                       projectionParams.ProjectTo(newScreenPos - screenPixelTranslationBuffer, TransformPlane));
            }

            return(Vector3.zero);
        }
        /// <inheritdoc />
        protected override void touchBegan(TouchPoint touch)
        {
            base.touchBegan(touch);

            if (activeTouches.Count == 1)
            {
                projectionParams = activeTouches[0].ProjectionParams;
            }

            if (touchesNumState == TouchesNumState.PassedMaxThreshold ||
                touchesNumState == TouchesNumState.PassedMinMaxThreshold)
            {
                switch (State)
                {
                case GestureState.Began:
                case GestureState.Changed:
                    setState(GestureState.Ended);
                    break;
                }
            }
        }
 /// <summary>
 /// Calculated two finger translation with respect to rotation and scaling.
 /// </summary>
 /// <param name="oldScreenPos1"> Finger one old screen position. </param>
 /// <param name="oldScreenPos2"> Finger two old screen position. </param>
 /// <param name="newScreenPos1"> Finger one new screen position. </param>
 /// <param name="newScreenPos2"> Finger two new screen position. </param>
 /// <param name="dR"> Calculated delta rotation. </param>
 /// <param name="dS"> Calculated delta scaling. </param>
 /// <param name="projectionParams"> Layer projection parameters. </param>
 /// <returns> Delta translation vector. </returns>
 protected virtual Vector3 doTwoPointTranslation(Vector2 oldScreenPos1, Vector2 oldScreenPos2,
                                                 Vector2 newScreenPos1, Vector2 newScreenPos2, float dR, float dS, ProjectionParams projectionParams)
 {
     return(Vector3.zero);
 }
 /// <summary>
 /// Calculates single finger translation.
 /// </summary>
 /// <param name="oldScreenPos"> Finger old screen position. </param>
 /// <param name="newScreenPos"> Finger new screen position. </param>
 /// <param name="projectionParams"> Layer projection parameters. </param>
 /// <returns> Delta translation vector. </returns>
 protected virtual Vector3 doOnePointTranslation(Vector2 oldScreenPos, Vector2 newScreenPos,
                                                 ProjectionParams projectionParams)
 {
     return(Vector3.zero);
 }
 /// <summary>
 /// Calculates scaling.
 /// </summary>
 /// <param name="oldScreenPos1"> Finger one old screen position. </param>
 /// <param name="oldScreenPos2"> Finger two old screen position. </param>
 /// <param name="newScreenPos1"> Finger one new screen position. </param>
 /// <param name="newScreenPos2"> Finger two new screen position. </param>
 /// <param name="projectionParams"> Layer projection parameters. </param>
 /// <returns> Multiplicative delta scaling. </returns>
 protected virtual float doScaling(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1,
                                   Vector2 newScreenPos2, ProjectionParams projectionParams)
 {
     return(1);
 }
 /// <summary>
 /// Calculates rotation.
 /// </summary>
 /// <param name="oldScreenPos1"> Finger one old screen position. </param>
 /// <param name="oldScreenPos2"> Finger two old screen position. </param>
 /// <param name="newScreenPos1"> Finger one new screen position. </param>
 /// <param name="newScreenPos2"> Finger two new screen position. </param>
 /// <param name="projectionParams"> Layer projection parameters. </param>
 /// <returns> Angle in degrees. </returns>
 protected virtual float doRotation(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1,
                                    Vector2 newScreenPos2, ProjectionParams projectionParams)
 {
     return(0);
 }
        /// <inheritdoc />
        protected override Vector3 doTwoPointTranslation(Vector2 oldScreenPos1, Vector2 oldScreenPos2,
                                                         Vector2 newScreenPos1, Vector2 newScreenPos2, float dR, float dS, ProjectionParams projectionParams)
        {
            if (isTransforming)
            {
                return(projectionParams.ProjectTo(newScreenPos1, TransformPlane) - projectScaledRotated(oldScreenPos1, dR, dS, projectionParams));
            }

            screenPixelTranslationBuffer += newScreenPos1 - oldScreenPos1;
            if (screenPixelTranslationBuffer.sqrMagnitude > screenTransformPixelThresholdSquared)
            {
                isTransforming = true;
                return(projectionParams.ProjectTo(newScreenPos1, TransformPlane) -
                       projectScaledRotated(newScreenPos1 - screenPixelTranslationBuffer, dR, dS, projectionParams));
            }

            return(Vector3.zero);
        }
示例#27
0
 /// <inheritdoc />
 protected override float doScaling(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1,
                                    Vector2 newScreenPos2, ProjectionParams projectionParams)
 {
     return((newScreenPos2 - newScreenPos1).magnitude / (oldScreenPos2 - oldScreenPos1).magnitude);
 }
        public virtual async Task <object> GetByIdAsync(string correlationId, string id, ProjectionParams projection)
        {
            projection = projection ?? new ProjectionParams();

            T obj = null;

            lock (_lock)
            {
                _objects.TryGetValue(id, out obj);
            }

            if (obj != null)
            {
                if (projection.Count == 0)
                {
                    return(await Task.FromResult(obj));
                }

                dynamic customObject    = new ExpandoObject();
                var     customObjectMap = customObject as IDictionary <string, object>;

                foreach (var projectionField in projection)
                {
                    customObjectMap = GetCustomObjectMap(obj, customObjectMap, projectionField);
                }

                if (customObjectMap.Count > 0)
                {
                    return(await Task.FromResult(customObject));
                }
            }

            return(null);
        }
        public virtual async Task <DataPage <object> > GetAsync(string correlationId, FilterParams filter, PagingParams paging, ProjectionParams projection)
        {
            projection = projection ?? new ProjectionParams();

            var objectsResult = await GetAsync(correlationId, filter, paging);

            var result = new DataPage <object>()
            {
                Data  = new List <object>(),
                Total = objectsResult.Total
            };

            foreach (var order in objectsResult.Data)
            {
                if (projection.Count == 0)
                {
                    result.Data.Add(order);
                }
                else
                {
                    dynamic customObject    = new ExpandoObject();
                    var     customObjectMap = customObject as IDictionary <string, object>;

                    foreach (var projectionField in projection)
                    {
                        customObjectMap = GetCustomObjectMap(order, customObjectMap, projectionField);
                    }

                    if (customObjectMap.Count > 0)
                    {
                        result.Data.Add(customObject);
                    }
                }
            }

            return(result);
        }
示例#30
0
        /// <inheritdoc />
        protected override Vector3 doTwoPointTranslation(Vector2 oldScreenPos1, Vector2 oldScreenPos2,
                                                         Vector2 newScreenPos1, Vector2 newScreenPos2, float dR, float dS, ProjectionParams projectionParams)
        {
            if (isTransforming)
            {
                var transformedPoint = scaleAndRotate(oldScreenPos1, (oldScreenPos1 + oldScreenPos2) * .5f, dR, dS);
                return(new Vector3(newScreenPos1.x - transformedPoint.x, newScreenPos1.y - transformedPoint.y, 0));
            }

            screenPixelTranslationBuffer += newScreenPos1 - oldScreenPos1;
            if (screenPixelTranslationBuffer.sqrMagnitude > screenTransformPixelThresholdSquared)
            {
                isTransforming = true;
                oldScreenPos1  = newScreenPos1 - screenPixelTranslationBuffer;
                var transformedPoint = scaleAndRotate(oldScreenPos1, (oldScreenPos1 + oldScreenPos2) * .5f, dR, dS);
                return(new Vector3(newScreenPos1.x - transformedPoint.x, newScreenPos1.y - transformedPoint.y, 0));
            }

            return(Vector3.zero);
        }