public override void UpdatePointPosition(int index, Mouse3DPosition vertex)
        {
            var trsfInterpreter = Node.Set <TransformationInterpreter>();

            if (_initialDraggingPosition == null)
            {
                InitializeDragging(vertex, trsfInterpreter);
            }
            //Log.DebugFormat("@pivot {0} {1} {2}", trsfInterpreter.Pivot.X(), trsfInterpreter.Pivot.Y(), trsfInterpreter.Pivot.Z());

            var rotate = new gpPnt(0, 0, 0);
            var startDraggingVector = new gpVec(trsfInterpreter.Pivot, _initialDraggingPosition.Value.GpPnt);

            if (startDraggingVector.Magnitude <= gp.Resolution)
            {
                return;
            }
            var currentDraggingVector = new gpVec(trsfInterpreter.Pivot, vertex.Point.GpPnt);

            if (currentDraggingVector.Magnitude <= gp.Resolution)
            {
                return;
            }
            var currentGizmo = GetPointLocation(index);
            var rotationAxis = currentGizmo.Direction;

            if (rotationAxis.IsParallel(gp.OX.Direction, Precision.Angular))
            {
                var rotationAngle =
                    startDraggingVector.AngleWithRef(currentDraggingVector, new gpVec(gp.OX.Direction)) -
                    _previousAngle;
                _previousAngle = startDraggingVector.AngleWithRef(currentDraggingVector,
                                                                  new gpVec(gp.OX.Direction));
                rotate.X = GeomUtils.RadiansToDegrees(rotationAngle);
            }
            else if (rotationAxis.IsParallel(gp.OY.Direction, Precision.Angular))
            {
                var rotationAngle =
                    startDraggingVector.AngleWithRef(currentDraggingVector, new gpVec(gp.OY.Direction)) -
                    _previousAngle;
                _previousAngle = startDraggingVector.AngleWithRef(currentDraggingVector,
                                                                  new gpVec(gp.OY.Direction));
                rotate.Y = GeomUtils.RadiansToDegrees(rotationAngle);
            }
            else if (rotationAxis.IsParallel(gp.OZ.Direction, Precision.Angular))
            {
                var rotationAngle =
                    startDraggingVector.AngleWithRef(currentDraggingVector, new gpVec(gp.OZ.Direction)) -
                    _previousAngle;
                _previousAngle = startDraggingVector.AngleWithRef(currentDraggingVector,
                                                                  new gpVec(gp.OZ.Direction));
                rotate.Z = GeomUtils.RadiansToDegrees(rotationAngle);
            }
            //Log.DebugFormat("@rotation angle {0}", GeomUtils.RadiansToDegrees(rotationAngle));

            trsfInterpreter.Rotate = rotate;
        }