public static ImplicitRouting Create(int toolId, Vector3d direction, double length, double radius)
        {
            ImplicitRouting result = null;

            if (IsZero(direction.x) && IsZero(direction.y))
            {
                result = new ImplicitRoutingZ(length, radius, toolId, direction.z > 0);
            }
            else if (IsZero(direction.z) && IsZero(direction.y))
            {
                result = new ImplicitRoutingX(length, radius, toolId, direction.x > 0);
            }
            else if (IsZero(direction.x) && IsZero(direction.z))
            {
                result = new ImplicitRoutingY(length, radius, toolId, direction.y > 0);
            }
            else
            {
                throw new NotImplementedException();
            }

            return(result);
        }
 public void UpdateBound(ref AxisAlignedBox3d box) => ImplicitRouting.UpdateBound(ref bound, ref box);