/// <summary>
        /// Creates new extruded mesh. Returns true if any edges or faces were extruded.
        /// </summary>
        /// <param name="extrudedMeshOut">Extruded mesh</param>
        /// <param name="componentIndicesOut">Component indices of extruded faces and vertices</param>
        public bool ExtrudedMesh(out Mesh extrudedMeshOut, out List <ComponentIndex> componentIndicesOut)
        {
            extrudedMeshOut = new Mesh();
            var  internalComponentIndicesOut = new INTERNAL_ComponentIndexArray();
            bool ret = UnsafeNativeMethods.RHC_RhinoMeshExtruder_ExtrudedMeshComponentsOut(m_ptr, extrudedMeshOut.NonConstPointer(), internalComponentIndicesOut.NonConstPointer());

            componentIndicesOut = new List <ComponentIndex>();
            if (ret)
            {
                for (int i = 0; i < internalComponentIndicesOut.Count; i++)
                {
                    var ci = internalComponentIndicesOut.ToArray()[i];
                    componentIndicesOut.Add(new ComponentIndex(ci.ComponentIndexType, ci.Index));
                }
            }
            return(ret);
        }
        /// <summary>
        /// Construct object to extrude given mesh faces, edges and ngons.
        /// </summary>
        /// <param name="inputMesh">Mesh to use as starting point. Will not be modified.</param>
        /// <param name="componentIndices">Mesh faces, edges and ngons to extrude.</param>
        /// <since>6.3</since>
        public MeshExtruder(Mesh inputMesh, IEnumerable <ComponentIndex> componentIndices)
        {
            ComponentIndices = new INTERNAL_ComponentIndexArray();
            foreach (var ci in componentIndices)
            {
                ComponentIndices.Add(ci);
            }

            m_ptr = UnsafeNativeMethods.RHC_RhinoMeshExtruder_New(inputMesh.ConstPointer(), ComponentIndices.NonConstPointer());
        }