public void DuplicateSnapped(SnappedPrimitive primitiveData, out NewPrimitive newPrimitive, out NewPrimitive clone)
        {
            newPrimitive = primitivesConverter.SnappedToNew(primitiveData);
            newPrimitive.UpdateCurvesGeometry();

            sessionData.NewPrimitives.Add(newPrimitive);
            clone = primitivesConverter.NewToNew(newPrimitive, newPrimitive.GetType(), new Vector3D(0, 0, 0));
            SelectPrimitive(newPrimitive);
        }
        public void CycleDuplicates(NewPrimitive originalDuplicate, ref NewPrimitive currentDuplicate, Vector3D currentDragVector)
        {
            var targetTypes = primitivesConverter.GetTargetTypes(originalDuplicate);
            var currIndex   = Array.IndexOf(targetTypes, currentDuplicate.GetType());
            var nextIndex   = (currIndex + 1) % targetTypes.Length;

            sessionData.NewPrimitives.Remove(currentDuplicate);
            currentDuplicate = primitivesConverter.NewToNew(originalDuplicate, targetTypes[nextIndex], currentDragVector);

            currentDuplicate.UpdateCurvesGeometry();
            sessionData.NewPrimitives.Add(currentDuplicate);

            SelectPrimitive(currentDuplicate);
        }