Example #1
0
        /// <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);
        }
Example #2
0
 internal static bool IsSubDEdgeTagDefined(SubDEdgeTag tag)
 {
     return(tag > SubDEdgeTag.Unset && tag <= SubDEdgeTag.SmoothX);
 }