/// <summary> /// Add a new edge to the list. /// </summary> /// <param name="tag">The type of edge tag, such as smooth or corner.</param> /// <param name="v0">First vertex.</param> /// <param name="v1">Second vertex.</param> /// <exception cref="ArgumentOutOfRangeException">If tag is unset or non-defined.</exception> /// <since>7.0</since> public SubDEdge Add(SubDEdgeTag tag, SubDVertex v0, SubDVertex v1) { if (!SubD.IsSubDEdgeTagDefined(tag)) { throw new ArgumentOutOfRangeException("tag"); } IntPtr ptr_subd = m_subd.NonConstPointer(); IntPtr v0_ptr = v0.NonConstPointer(); IntPtr v1_ptr = v1.NonConstPointer(); uint id = 0; IntPtr ptr_edge = UnsafeNativeMethods.ON_SubD_AddEdge(ptr_subd, tag, v0_ptr, v1_ptr, ref id); if (ptr_edge != IntPtr.Zero) { return(new SubDEdge(m_subd, ptr_edge, id)); } GC.KeepAlive(v0); GC.KeepAlive(v1); return(null); }
internal static bool IsSubDEdgeTagDefined(SubDEdgeTag tag) { return(tag > SubDEdgeTag.Unset && tag <= SubDEdgeTag.SmoothX); }