Rhino C++ API  8.14
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Friends | List of all members
ON_SubD Class Reference

#include <opennurbs_subd.h>

Inheritance diagram for ON_SubD:
ON_Geometry ON_Object

Public Types

enum  : unsigned int { maximum_subd_level = 128 }
 
enum  : unsigned int { TextureImageSuggestedMinimumSize = 1024 }
 
enum  AutomaticMeshToSubDContext : unsigned char { AutomaticMeshToSubDContext::Unset = 0, AutomaticMeshToSubDContext::Rhino5BoxModeTSpline = 1, AutomaticMeshToSubDContext::FBXMeshWithDivisionLevels = 2 }
 ON_SubD::AutomaticMeshToSubDContext identifies a context where meshes can automatically be converted to subds. More...
 
enum  ChainType : unsigned char {
  ChainType::Unset = 0, ChainType::MixedTag = 1, ChainType::EqualEdgeTag = 2, ChainType::EqualEdgeAndVertexTag = 3,
  ChainType::EqualEdgeTagAndOrdinary = 4, ChainType::EqualEdgeAndVertexTagAndOrdinary = 5
}
 SubD::ChainType specifies what edge and vertex tag tests are used when creating edge chains. More...
 
enum  NurbsSurfaceType : unsigned char {
  NurbsSurfaceType::Unset = 0, NurbsSurfaceType::Large = 1, NurbsSurfaceType::Medium = 2, NurbsSurfaceType::Small = 3,
  NurbsSurfaceType::Unprocessed = 4
}
 ON_SubD::NurbsSurfaceType specifies what type of NURBS surfaces are returned by ON_SubD.GetSurfaceNurbsFragments() More...
 
enum  PatchStyle : unsigned char {
  PatchStyle::Unset = 0, PatchStyle::Automatic = 1, PatchStyle::SingleFace = 2, PatchStyle::TriangleFan = 3,
  PatchStyle::QuadOrTriangleFan = 4, PatchStyle::Triangulated = 5
}
 SubD::PatchStyle identifies the style of patch used to fill holes. More...
 
enum  SubDFriendlyKnotType : unsigned char {
  SubDFriendlyKnotType::Unset = 0, SubDFriendlyKnotType::UnclampedUniform = 1, SubDFriendlyKnotType::ClampedUniform = 2, SubDFriendlyKnotType::ClampedPiecewiseUniform = 4,
  SubDFriendlyKnotType::Unfriendly = 127
}
 ON_SubD::SubDFriendlyKnotType identifies the types of subd friendly NURBS knot vectors. SubD friendly NURBS curves and surfacaes are always cubic and nonrational. Any time there is a multiple knot, the 2nd derivative is zero at the corresponding parameter. SubD friendly NURBS curves are either periodic or have zero 2nd derivative at the ends. More...
 
enum  VertexFacetType : unsigned char {
  VertexFacetType::Unset = 0, VertexFacetType::Tri = 3, VertexFacetType::Quad = 4, VertexFacetType::Ngon = 5,
  VertexFacetType::Mixed = 0xFF
}
 Summarizes the number of edges in faces in the whole object. More...
 
- Public Types inherited from ON_Object
enum  UserDataConflictResolution : unsigned char {
  UserDataConflictResolution::destination_object = 0, UserDataConflictResolution::source_object = 1, UserDataConflictResolution::source_copycount_gt = 2, UserDataConflictResolution::source_copycount_ge = 3,
  UserDataConflictResolution::destination_copycount_gt = 4, UserDataConflictResolution::destination_copycount_ge = 5, UserDataConflictResolution::delete_item = 6
}
 

Public Member Functions

 ON_SubD () ON_NOEXCEPT
 
 ON_SubD (const ON_SubD &src)
 
virtual ~ON_SubD ()
 
const class ON_SubDLevel & ActiveLevel () const
 
unsigned int ActiveLevelIndex () const
 
class ON_SubDEdgeAddEdge (class ON_SubDVertex *v0, class ON_SubDVertex *v1)
 
class ON_SubDEdgeAddEdge (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, class ON_SubDVertex *v1)
 
class ON_SubDEdgeAddEdge (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, class ON_SubDVertex *v1, ON_SubDEdgeSharpness sharpness)
 
class ON_SubDEdgeAddEdgeForExperts (unsigned int candidate_edge_id, ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, double v0_sector_coefficient, class ON_SubDVertex *v1, double v1_sector_coefficient, ON_SubDEdgeSharpness sharpness, unsigned int initial_face_capacity)
 
class ON_SubDEdgeAddEdgeForExperts (unsigned int candidate_edge_id, ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, double v0_sector_coefficient, class ON_SubDVertex *v1, double v1_sector_coefficient, unsigned int initial_face_capacity)
 
class ON_SubDEdgeAddEdgeWithSectorCoefficients (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, double v0_sector_coefficient, class ON_SubDVertex *v1, double v1_sector_coefficient)
 
class ON_SubDEdgeAddEdgeWithSectorCoefficients (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, double v0_sector_coefficient, class ON_SubDVertex *v1, double v1_sector_coefficient, ON_SubDEdgeSharpness sharpness)
 
class ON_SubDFaceAddFace (class ON_SubDEdge *const *edges, unsigned int edge_count)
 
class ON_SubDFaceAddFace (const class ON_SubDEdgePtr *edges, unsigned int edge_count)
 
class ON_SubDFaceAddFace (const ON_SimpleArray< ON_SubDEdge * > &edges)
 
class ON_SubDFaceAddFace (const ON_SimpleArray< ON_SubDEdgePtr > &edges)
 
bool AddFaceEdgeConnection (ON_SubDFace *face, unsigned int i, ON_SubDEdge *edge, ON__UINT_PTR edge_direction)
 
bool AddFaceEdgeConnection (ON_SubDFace *face, unsigned int i, ON_SubDEdgePtr eptr)
 
bool AddFaceEdgeConnection (ON_SubDFace *face, unsigned int i, ON_SubDEdgePtr eptr, bool bAddbAddFaceToRelativeVertex0, bool bAddbAddFaceToRelativeVertex1)
 
class ON_SubDFaceAddFaceForExperts (unsigned candidate_face_id, const class ON_SubDEdgePtr *edge, unsigned int edge_count)
 
bool AddFaceTexturePoints (const class ON_SubDFace *face, const class ON_3dPoint *texture_points, size_t texture_points_count) const
 
class ON_SubDFaceAddQuadFace (class ON_SubDEdge *edge0, class ON_SubDEdge *edge1, class ON_SubDEdge *edge2, class ON_SubDEdge *edge3)
 
class ON_SubDFaceAddQuadFace (ON_SubDEdgePtr edge0, ON_SubDEdgePtr edge1, ON_SubDEdgePtr edge2, ON_SubDEdgePtr edge3)
 
unsigned AddSymmetrySetsToComponentList (bool bAddVertexSymmetrySets, bool bAddEdgeSymmetrySets, bool bAddFaceSymmetrySets, ON_SimpleArray< ON_COMPONENT_INDEX > &component_list) const
 
unsigned AddSymmetrySetsToComponentList (bool bAddVertexSymmetrySets, bool bAddEdgeSymmetrySets, bool bAddFaceSymmetrySets, ON_SimpleArray< ON_SubDComponentPtr > &component_list) const
 
class ON_SubDFaceAddTriangleFace (class ON_SubDEdge *edge0, class ON_SubDEdge *edge1, class ON_SubDEdge *edge2)
 
class ON_SubDFaceAddTriangleFace (ON_SubDEdgePtr edge0, ON_SubDEdgePtr edge1, ON_SubDEdgePtr edge2)
 
class ON_SubDVertexAddVertex (const double *P)
 
class ON_SubDVertexAddVertex (ON_SubDVertexTag vertex_tag, const double *P)
 
class ON_SubDVertexAddVertexForExperts (unsigned int candidate_vertex_id, ON_SubDVertexTag vertex_tag, const double *P, unsigned int initial_edge_capacity, unsigned int initial_face_capacity)
 
ON_AggregateComponentStatus AggregateComponentStatus () const override
 virtual More...
 
unsigned int AggregateEdgeAttributes () const
 
unsigned int AllocateFaceTexturePoints (const class ON_SubDFace *face) const
 
unsigned int Append (const ON_SubD &subd, double tolerance, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, bool bMarkMergedComponents, bool bMarkAddedComponents)
 
unsigned int Append (const ON_SubD &subd, double tolerance, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, bool bMarkMergedComponents, bool bMarkAddedComponents, bool bPermitDisjointAppend, ON_SimpleArray< ON_SubDComponentPtrPair > *merge_map)
 
unsigned int Append (const ON_SubD &subd, double tolerance, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, const ON_SubDComponentTest &this_vertex_filter, const ON_SubDComponentTest &subd_vertex_filter, bool bMarkMergedComponents, bool bMarkAddedComponents, bool bPermitDisjointAppend, ON_SimpleArray< ON_SubDComponentPtrPair > *merge_map)
 
unsigned int AppendDisjoint (const ON_SubD &disjoint_subd, bool bMarkOriginalComponents, bool bMarkAddedComponents)
 
unsigned int AppendDisjoint (const ON_SubD &disjoint_subd, bool bMarkOriginalComponents, bool bMarkAddedComponents, ON_SimpleArray< ON_SubDComponentPtrPair > *merge_map)
 
unsigned int AutoBridge (ON_SubDEdgeTag bridge_boundary_edge_tag, const ON_SubDEdgePtr *start_edges, const ON_SubDEdgePtr *end_edges, unsigned int edge_count, bool bMarkNewFaces)
 
unsigned int AutoBridge (ON_SubDEdgeTag bridge_boundary_edge_tag, const ON_SubDEdgePtr start_edge, const ON_SubDEdgePtr end_edge, bool bMarkNewFaces)
 
unsigned int AutoMultiPatch (ON_SubD::PatchStyle patch_style, ON_SubDEdgeTag patch_boundary_edge_tag, const ON_SimpleArray< const ON_SubDEdge * > &unsorted_edges, bool bMarkNewFaces)
 
unsigned int AutoMultiPatch (ON_SubD::PatchStyle patch_style, ON_SubDEdgeTag patch_edge_tag, const ON_SimpleArray< ON_SubDEdgePtr > &unsorted_edges, bool bMarkNewFaces)
 
const ON_SubDComponentPtr AutoPatch (ON_SubD::PatchStyle patch_style, ON_SubDEdgeTag patch_boundary_edge_tag, const ON_SimpleArray< ON_SubDEdgePtr > &edges, bool bMarkNewFaces)
 
ON_BrepBrepForm (ON_Brep *brep=nullptr) const override
 virtual More...
 
ON__UINT64 ChangeGeometryContentSerialNumberForExperts (bool bChangePreservesSymmetry)
 
ON__UINT64 ChangeRenderContentSerialNumber () const
 
void Clear ()
 
void ClearBoundingBox () override
 virtual More...
 
unsigned int ClearComponentGroupIds (bool bClearVertexGroupIds, bool bClearEdgeGroupIds, bool bClearFaceGroupIds) const
 
unsigned int ClearComponentMarkBits (bool bClearVertexMarkBits, bool bClearEdgeMarkBits, bool bClearFaceMarkBits) const
 
unsigned int ClearComponentMarks () const
 
unsigned int ClearComponentMarks (bool bClearVertexMarks, bool bClearEdgeMarks, bool bClearFaceMarks, ON_SimpleArray< const class ON_SubDComponentBase * > *marked_component_list) const
 
unsigned int ClearComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_clear) const override
 virtual More...
 
unsigned int ClearComponentStates (ON_ComponentStatus states_to_clear) const override
 virtual More...
 
unsigned int ClearComponentStates (ON_SubDComponentPtr component_ptr, ON_ComponentStatus states_to_clear) const
 
**void ClearControlNetComponentTree ()
 
unsigned int ClearEdgeGroupIds () const
 
unsigned int ClearEdgeMarkBits () const
 
unsigned int ClearEdgeMarks () const
 
unsigned int ClearEdgeSharpness ()
 Converts all sharp edges to smooth edges. See ON_SubDEdge::IsSharp() for more information about sharp edges. More...
 
void ClearEvaluationCache () const
 
unsigned int ClearFaceGroupIds () const
 
unsigned int ClearFaceMarkBits () const
 
unsigned int ClearFaceMarks () const
 
void ClearFacePackIds ()
 
void ClearFacePackingTopologyHashForExperts () const
 
void ClearFragmentColors (bool bClearFragmentColorsMappingTag)
 
void ClearFragmentTextureCoordinatesTextureSettingsHash () const
 
**void ClearFragmentTree ()
 
unsigned int ClearGroupIds () const
 
unsigned int ClearHigherSubdivisionLevels (unsigned int max_level_index)
 
unsigned ClearInactiveLevels ()
 
unsigned int ClearLowerSubdivisionLevels (unsigned int min_level_index)
 
unsigned int ClearMarkBits () const
 
unsigned int ClearPerFaceColors () const
 
unsigned int ClearPerFaceMaterialChannelIndices ()
 
void ClearSymmetry ()
 
unsigned ClearSymmetrySetForExperts (const ON_SubDEdge *edge)
 
unsigned ClearSymmetrySetForExperts (const ON_SubDFace *face)
 
unsigned ClearSymmetrySetForExperts (const ON_SubDVertex *vertex)
 
unsigned ClearSymmetrySetForExperts (ON_SubDComponentPtr cptr)
 
void ClearSymmetrySetNextForExperts (const ON_SubDEdge *edge)
 
void ClearSymmetrySetNextForExperts (const ON_SubDFace *face)
 
void ClearSymmetrySetNextForExperts (const ON_SubDVertex *vertex)
 
void ClearSymmetrySetNextForExperts (ON_SubDComponentPtr component)
 
void ClearSymmetrySetsForExperts ()
 
unsigned int ClearTexturePoints () const
 
unsigned int ClearVertexGroupIds () const
 
unsigned int ClearVertexMarkBits () const
 
unsigned int ClearVertexMarks () const
 
const ON_MappingTag ColorsMappingTag () const
 
unsigned int CombineBoundaryEdgeChains (const ON_SimpleArray< const ON_SubDEdge * > &edge_chain0, const ON_SimpleArray< const ON_SubDEdge * > &edge_chain1, double combined_edge_location, ON_SubDEdgeTag combined_edge_tag)
 
unsigned int CombineBoundaryEdgeChains (const ON_SimpleArray< ON_COMPONENT_INDEX > &edge_chain0, const ON_SimpleArray< ON_COMPONENT_INDEX > &edge_chain1, double combined_edge_location, ON_SubDEdgeTag combined_edge_tag)
 
unsigned int CombineBoundaryEdgeChains (const ON_SimpleArray< ON_SubDComponentPtr > &edge_chain0, const ON_SimpleArray< ON_SubDComponentPtr > &edge_chain1, double combined_edge_location, ON_SubDEdgeTag combined_edge_tag)
 
unsigned int CombineBoundaryEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain0, const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain1, double combined_edge_location, ON_SubDEdgeTag combined_edge_tag)
 
bool CombineBoundaryEdges (const ON_SubDEdge *edge0, const ON_SubDEdge *edge1, double merged_edge_location, ON_SubDEdgeTag merged_edge_tag)
 
bool CombineBoundaryEdges (const ON_SubDEdgePtr edge0, const ON_SubDEdgePtr edge1, double merged_edge_location, ON_SubDEdgeTag merged_edge_tag)
 
unsigned int CombineBoundaryVertices (const ON_SimpleArray< const ON_SubDVertex * > &ci_list, ON_SubDVertexTag combined_vertex_tag)
 
unsigned int CombineBoundaryVertices (const ON_SimpleArray< ON_COMPONENT_INDEX > &vertex_list, ON_SubDVertexTag combined_vertex_tag)
 
bool CombineBoundaryVertices (const ON_SubDVertex *vertex0, const ON_SubDVertex *vertex1, ON_3dPoint combined_vertex_control_net_point, ON_SubDVertexTag combined_vertex_tag)
 
unsigned ComponentCount (ON_SubDComponentPtr::Type component_type) const
 ON_SubD::VertexCount(), ON_SubD::EdgeCount(), or ON_SubD::FaceCount() is returned, depending on the value of component_type. More...
 
ON_COMPONENT_INDEX ComponentIndex () const override
 virtual More...
 
unsigned int ComponentPtrFromComponentIndex (const ON_COMPONENT_INDEX *ci_list, size_t ci_count, bool bIncludeVertices, bool bIncludeEdges, bool bIncludeFaces, ON_SimpleArray< ON_SubDComponentPtr > &cptr_list) const
 
unsigned int ComponentPtrFromComponentIndex (const ON_COMPONENT_INDEX *ci_list, size_t ci_count, ON_SimpleArray< ON_SubDComponentPtr > &cptr_list) const
 
const ON_SubDComponentPtr ComponentPtrFromComponentIndex (ON_COMPONENT_INDEX component_index) const
 
ON__UINT64 ComponentStatusSerialNumber () const
 
bool ContentIsSymmetric () const
 
bool CopyEvaluationCacheForExperts (const ON_SubD &src)
 
const ON_Symmetry CreateRotateSymmetryFromTwoFacesAndAxis (unsigned primary_face_id, unsigned secondary_face_id, ON_Line rotation_axis, double cleanup_tolerance) const
 
ON_SubDCreateSymmetryPrimaryMotif (ON_Symmetry symmetry, ON_SubDComponentIdList &motif_outer_vertex_list, ON_SubD *destination_subd) const
 
ON__UINT32 DataCRC (ON__UINT32 current_remainder) const override
 virtual More...
 
bool DeleteComponents (const ON_COMPONENT_INDEX *ci_list, size_t ci_count) override
 virtual More...
 
bool DeleteComponents (const ON_SimpleArray< ON_SubDComponentPtr > &cptr_list, bool bMarkDeletedFaceEdges)
 
bool DeleteComponents (const ON_SubDComponentPtr *cptr_list, size_t cptr_count, bool bMarkDeletedFaceEdges)
 
bool DeleteComponentsForExperts (const ON_SubDComponentPtr *cptr_list, size_t cptr_count, bool bDeleteIsolatedEdges, bool bUpdateTagsAndCoefficients, bool bMarkDeletedFaceEdges)
 
unsigned int DeleteFacesOnPlane (ON_PlaneEquation plane_equation, double distance_tolerance)
 
bool DeleteMarkedComponents (bool bDeleteMarkedComponents, ON__UINT8 mark_bits, bool bMarkDeletedFaceEdges)
 
bool DeleteMarkedComponentsForExperts (bool bDeleteMarkedComponents, ON__UINT8 mark_bits, bool bDeleteIsolatedEdges, bool bUpdateTagsAndCoefficients, bool bMarkDeletedFaceEdges)
 
void Destroy ()
 
void DestroyRuntimeCache (bool bDelete=true) override
 virtual More...
 
int Dimension () const override
 virtual More...
 
unsigned int DissolveOrDelete (const ON_SimpleArray< ON_COMPONENT_INDEX > &ci_list)
 
unsigned int DissolveOrDelete (const ON_SimpleArray< ON_SubDComponentPtr > &cptr_list)
 
void Dump (ON_TextLog &) const override
 virtual More...
 
unsigned int DumpTopology (ON_2udex vertex_id_range, ON_2udex edge_id_range, ON_2udex face_id_range, ON_TextLog &) const
 
unsigned int DumpTopology (ON_TextLog &) const
 
class ON_SubDEdgeArray EdgeArray () const
 
unsigned int EdgeCount () const
 
const class ON_SubDEdgeEdgeFromComponentIndex (ON_COMPONENT_INDEX component_index) const
 
const class ON_SubDEdgeEdgeFromId (unsigned int edge_id) const
 
const ON_SHA1_Hash EdgeHash (ON_SubDHashType hash_type) const
 
class ON_SubDEdgeIterator EdgeIterator () const
 
bool EvaluatePoint (const class ON_ObjRef &objref, ON_3dPoint &P) const override
 virtual More...
 
ON_WIP_SDK bool ExpandEdges (const ON_SimpleArray< const ON_SubDEdge * > &unsorted_edges, ON_SubDExpandEdgesParameters parameters)
 
ON_WIP_SDK bool ExpandEdges (const ON_SimpleArray< ON_COMPONENT_INDEX > &unsorted_edges, ON_SubDExpandEdgesParameters parameters)
 
ON_WIP_SDK bool ExpandEdges (const ON_SimpleArray< ON_SubDEdgePtr > &edges, ON_SubDExpandEdgesParameters parameters)
 
ON_SubDExtractMarkedComponents (ON__UINT8 mark_bits, ON_SubD *destination_subd) const
 
unsigned int Extrude (const ON_Xform &xform)
 
unsigned int ExtrudeComponents (const ON_Xform &xform, const ON_COMPONENT_INDEX *ci_list, size_t ci_count)
 
unsigned int ExtrudeComponents (const ON_Xform &xform, const ON_COMPONENT_INDEX *ci_list, size_t ci_count, bool bExtrudeBoundaries, bool bPermitNonManifoldEdgeCreation)
 
unsigned int ExtrudeComponents (const ON_Xform &xform, const ON_SubDComponentPtr *cptr_list, size_t cptr_count)
 
unsigned int ExtrudeComponents (const ON_Xform &xform, const ON_SubDComponentPtr *cptr_list, size_t cptr_count, bool bExtrudeBoundaries, bool bPermitNonManifoldEdgeCreation)
 
class ON_SubDFaceArray FaceArray () const
 
unsigned int FaceCount () const
 
const class ON_SubDFaceFaceFromComponentIndex (ON_COMPONENT_INDEX component_index) const
 
const class ON_SubDFaceFaceFromId (unsigned int face_id) const
 
const ON_SHA1_Hash FaceHash (ON_SubDHashType hash_type) const
 
class ON_SubDFaceIterator FaceIterator () const
 
const ON_UUID FacePackingId () const
 
bool FacePackingIsValid (bool bIfValidThenUpdateFacePackingTopologyHash) const
 
const ON_SubDHash FacePackingTopologyHash () const
 
bool FacesArePacked () const
 
const ON_SubDEdgePtr FindEdge (const class ON_SubDVertex *v0, const class ON_SubDVertex *v1) const
 
const ON_SubDEdgePtr FindOrAddEdge (class ON_SubDVertex *v0, class ON_SubDVertex *v1)
 
class ON_SubDFaceFindOrAddFace (ON_SubDEdgeTag new_edge_tag, const class ON_SubDVertex *face_vertices[], size_t face_vertex_count)
 
const class ON_SubDVertexFindOrAddVertex (const double *control_net_point, double distance_tolerance)
 
const class ON_SubDVertexFindVertex (const double *control_net_point, double distance_tolerance) const
 
const ON_SubDComponentPtr FirstComponent (ON_SubDComponentPtr::Type component_type) const
 ON_SubD::FirstVertex(), ON_SubD::FirstEdge(), or ON_SubD::FirstFace() is returned, depending on the value of component_type. More...
 
const class ON_SubDEdgeFirstEdge () const
 
const class ON_SubDFaceFirstFace () const
 
const class ON_SubDVertexFirstVertex () const
 
const ON_MappingTag FragmentColorsMappingTag () const
 
const ON_SHA1_Hash FragmentColorsSettingsHash () const
 
const ON_SHA1_Hash FragmentTextureCoordinatesTextureSettingsHash () const
 
*ON_RTreeRef FragmentTree () const
 
ON__UINT64 GeometryContentSerialNumber () const
 
const ON_SHA1_Hash GeometryHash () const
 
bool GetBBox (double *boxmin, double *boxmax, bool bGrowBox=false) const override
 virtual ON_Geometry GetBBox override
More...
 
unsigned int GetBoundaryEdgeChains (unsigned int minimum_face_count, unsigned int maximum_face_count, ON_SimpleArray< ON_SubDEdgePtr > &boundary_edge_chains) const
 
unsigned int GetComponentStatus (bool bGetVertexStatus, bool bGetEdgeStatus, bool bGetFaceStatus, bool bClearStatus, ON_ComponentStatus status_mask, ON_SimpleArray< const class ON_SubDComponentBase * > &component_list, ON_SimpleArray< ON_ComponentStatus > &status_list) const
 
unsigned int GetComponentsWithSetStates (ON_ComponentStatus states_filter, bool bAllEqualStates, ON_SimpleArray< ON_COMPONENT_INDEX > &components) const override
 virtual More...
 
unsigned int GetComponentsWithSetStates (ON_ComponentStatus states_filter, bool bAllEqualStates, ON_SimpleArray< ON_SubDComponentPtr > &components_with_set_states) const
 
unsigned int GetConnectedRegions (bool bManifoldRegions, ON_SimpleArray< ON_SubD * > &connected_regions) const
 
class ON_MeshGetControlNetMesh (class ON_Mesh *mesh, ON_SubDGetControlNetMeshPriority priority) const
 
unsigned int GetMarkedComponents (bool bAddMarkedComponents, ON__UINT8 mark_bits, bool bIncludeVertices, bool bIncludeEdges, bool bIncludeFaces, ON_SimpleArray< class ON_SubDComponentPtr > &component_list) const
 
unsigned int GetMarkedComponents (bool bIncludeVertices, bool bIncludeEdges, bool bIncludeFaces, ON_SimpleArray< const class ON_SubDComponentBase * > &marked_component_list) const
 
unsigned int GetMeshFragments (const class ON_SubDDisplayParameters &display_parameters, ON__UINT_PTR fragment_callback_context, bool(*fragment_callback_function)(ON__UINT_PTR, const class ON_SubDMeshFragment *)) const
 
ON_BrepGetSurfaceBrep (const ON_SubDToBrepParameters &brep_parameters, ON_Brep *destination_brep) const
 
class ON_MeshGetSurfaceMesh (const class ON_SubDDisplayParameters &display_parameters, class ON_Mesh *mesh) const
 
unsigned int GetSurfaceMeshWireframe (ON__UINT_PTR curve_callback_context, bool(*curve_callback_function)(ON__UINT_PTR, const ON_SubDEdgePtr *, unsigned int, const class ON_NurbsCurve &)) const
 
unsigned int GetSurfaceNurbs (ON_SubD::NurbsSurfaceType nurbs_surface_type, ON__UINT_PTR callback_context, bool(*nurbs_callback_function)(ON__UINT_PTR, const class ON_SubDFaceRegion &, class ON_NurbsSurface *)) const
 
unsigned int GetSurfaceNurbs (ON_SubD::NurbsSurfaceType nurbs_surface_type, ON_SimpleArray< ON_NurbsSurface * > &patches) const
 
unsigned int GetSurfaceNurbs (ON_SubD::NurbsSurfaceType nurbs_surface_type, ON_SimpleArray< ON_SubDFaceRegionAndNurbs > &patches) const
 
unsigned int GetSurfaceNurbsFragments (const class ON_SubDDisplayParameters &display_parameters, ON__UINT_PTR callback_context, bool(*begin_face_callback_function)(ON__UINT_PTR, const class ON_SubDFaceRegion &), bool(*fragment_callback_function)(ON__UINT_PTR, const class ON_SubDSurfaceNurbsFragment *)) const
 
bool GetSurfacePointLinearSystem (ON_Matrix &m, ON_SimpleArray< const ON_SubDVertex * > &v) const
 
bool GetSurfacePointLinearSystem (ON_SimpleArray< ON_SubDVertexSurfacePointCoefficient > &coefficients, ON_2udex *coefficient_matrix_size) const
 
unsigned int GetSurfaceWireframe (ON_SubDEdgeTag edge_tag, unsigned int minimum_face_count, unsigned int maximum_face_count, ON_SubD::ChainType chain_type, ON__UINT_PTR curve_callback_context, bool(*curve_callback_function)(ON__UINT_PTR, const ON_SubDEdgePtr *, unsigned int, const class ON_NurbsCurve &)) const
 
unsigned int GetSurfaceWireframe (ON_SubDEdgeTag edge_tag, unsigned int minimum_face_count, unsigned int maximum_face_count, ON_SubD::ChainType chain_type, ON_SimpleArray< ON_NurbsCurve * > &nurbs_curves) const
 
unsigned GetSymmetrySet (const ON_SubDComponentPtr cptr, bool bMotifFirst, ON_SimpleArray< ON_SubDComponentPtr > &component_symmetry_set) const
 
unsigned GetSymmetrySet (const ON_SubDEdge *edge, bool bPrimaryMotifFirst, ON_SimpleArray< const ON_SubDEdge * > &edge_symmetry_set) const
 
unsigned GetSymmetrySet (const ON_SubDFace *face, bool bPrimaryMotifFirst, ON_SimpleArray< const ON_SubDFace * > &face_symmetry_set) const
 
unsigned GetSymmetrySet (const ON_SubDVertex *vertex, bool bPrimaryMotifFirst, ON_SimpleArray< const ON_SubDVertex * > &vertex_symmetry_set) const
 
bool GetTightBoundingBox (class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const override
 virtual ON_Geometry GetTightBoundingBox override
More...
 
unsigned int GetWireframeEdgeChains (ON_SubDEdgeTag edge_tag, unsigned int minimum_face_count, unsigned int maximum_face_count, ON_SubD::ChainType chain_type, ON__UINT_PTR edge_chain_callback_context, bool(*edge_chain_callback_function)(ON__UINT_PTR, const ON_SubDEdgePtr *, unsigned int)) const
 
bool GlobalSubdivide ()
 
bool GlobalSubdivide (unsigned int count)
 
unsigned int GlobalSubdivideQuadCount () const
 
unsigned int GlobalSubdivideQuadCount (unsigned int subdivision_count) const
 
unsigned int GroupConnectedRegions (bool bManifoldRegions) const
 
bool GrowEdgeFaceArray (ON_SubDEdge *e, size_t capacity)
 
bool GrowFaceEdgeArray (ON_SubDFace *f, size_t capacity)
 
bool GrowVertexEdgeArray (ON_SubDVertex *v, size_t capacity)
 
bool GrowVertexFaceArray (ON_SubDVertex *v, size_t capacity)
 
bool HasBrepForm () const override
 virtual More...
 
bool HasFragmentColors () const
 Determing if this SubD's mesh fragments have per vertex color settings. More...
 
bool HasFragmentColors (ON_MappingTag color_mapping_tag) const
 
bool HasFragmentColors (ON_SHA1_Hash color_settings_hash) const
 
bool HasFragmentColors (ON_SHA1_Hash color_settings_hash, ON_MappingTag color_mapping_tag) const
 
bool HasFragmentTextureCoordinates () const
 Determing if this SubD's mesh fragments have per vertex texture coordinates. More...
 
bool HasFragmentTextureCoordinates (ON_MappingTag texture_mapping_tag) const
 
bool HasFragmentTextureCoordinates (ON_SHA1_Hash texture_settings_hash) const
 
bool HasFragmentTextureCoordinates (ON_SHA1_Hash texture_settings_hash, ON_MappingTag texture_mapping_tag) const
 
bool HasPerFaceColors () const
 
bool HasPerFaceColorsFromPackId () const
 
bool HasPerFaceColorsFromSymmetryMotif () const
 
bool HasPerFaceMaterialChannelIndices () const
 
bool HasSharpEdges () const
 Determine if this SubD has sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges. More...
 
const ON_SubDComponentPtr InSubD (const class ON_SubDComponentBase *b) const
 
bool InSubD (const class ON_SubDEdge *edge) const
 
bool InSubD (const class ON_SubDFace *face) const
 
bool InSubD (const class ON_SubDVertex *vertex) const
 
bool InSubD (ON_SubDComponentPtr cptr) const
 
bool InterpolateControlNet ()
 
bool InterpolateSurfacePoints (const ON_SimpleArray< const ON_SubDVertex * > &vertices, const ON_SimpleArray< ON_3dPoint > &surface_points)
 
bool InterpolateSurfacePoints (const ON_SimpleArray< ON_3dPoint > &surface_points)
 
bool InterpolateSurfacePoints (const ON_SimpleArray< ON_COMPONENT_INDEX > &vertices, const ON_SimpleArray< ON_3dPoint > &surface_points)
 
bool InterpolateSurfacePoints (const ON_SimpleArray< ON_SubDComponentPtr > &vertices, const ON_SimpleArray< ON_3dPoint > &surface_points)
 
bool InterpolateSurfacePoints (const ON_SimpleArray< ON_SubDVertexPtr > &vertices, const ON_SimpleArray< ON_3dPoint > &surface_points)
 
bool IsDeformable () const override
 virtual More...
 
bool IsEmpty () const
 
bool IsManifold () const
 
bool IsManifold (bool &bIsOriented, bool &bHasBoundary) const
 
bool IsMorphable () const override
 virtual More...
 
bool IsNotEmpty () const
 
bool IsOriented () const
 returns true if all facets are consistently oriented More...
 
bool IsSolid () const
 
bool IsValid (class ON_TextLog *text_log=nullptr) const override
 virtual More...
 
const class ON_SubDEdgeLastEdge () const
 
const class ON_SubDFaceLastFace () const
 
const class ON_SubDVertexLastVertex () const
 
unsigned int LevelCount () const
 
const class ON_SubDLevel & LevelForExperts (unsigned int level_index) const
 If a level exists, get it More...
 
bool LocalSubdivide (class ON_SubDFace const *const *face_list, size_t face_count)
 
bool LocalSubdivide (const ON_SimpleArray< const class ON_SubDFace * > &face_list)
 
bool LocalSubdivide (const ON_SimpleArray< ON_COMPONENT_INDEX > &face_list)
 
bool MakeDeformable () override
 virtual More...
 
bool MakeReflectSymmetric (ON_Symmetry symmetry)
 
bool MakeSymmetric (ON_Symmetry symmetry)
 
bool MakeSymmetric (ON_Symmetry symmetry, bool bIgnoredParameter1, bool bIgnoredParameter2)
 
void MarkAggregateComponentStatusAsNotCurrent () const override
 virtual More...
 
unsigned int MarkConnectedRegion (const ON_SubDComponentPtr seed_component, bool bManifoldRegions) const
 
void MemoryRelocate () override
 virtual More...
 
unsigned int Merge (const ON_SubD &subd, const class ON_SubDComponentPtrPair *vertex_pairs, size_t vertex_pairs_count, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, bool bMarkMergedComponents, bool bMarkAddedComponents)
 
unsigned int Merge (const ON_SubD &subd, const class ON_SubDComponentPtrPair *vertex_pairs, size_t vertex_pairs_count, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, const ON_SubDComponentTest &this_vertex_filter, const ON_SubDComponentTest &subd_vertex_filter, bool bMarkMergedComponents, bool bMarkAddedComponents)
 
unsigned int Merge (const ON_SubD &subd, const ON_SimpleArray< ON_SubDComponentPtrPair > &vertex_pairs, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, bool bMarkMergedComponents, bool bMarkAddedComponents)
 
unsigned int Merge (const ON_SubD &subd, const ON_SimpleArray< ON_SubDComponentPtrPair > &vertex_pairs, ON_SubDEdgeTag prefered_merged_edge_tag, bool bMergeAllCoincidentVertices, const ON_SubDComponentTest &this_vertex_filter, const ON_SubDComponentTest &subd_vertex_filter, bool bMarkMergedComponents, bool bMarkAddedComponents)
 
unsigned int MergeColinearEdges (bool bMergeBoundaryEdges, bool bMergeInteriorCreaseEdges, bool bMergeInteriorSmoothEdges, double distance_tolerance, double maximum_aspect, double sin_angle_tolerance)
 
ON_SubDEdgePtr MergeConsecutiveEdges (ON_SubDEdgePtr eptr0, ON_SubDEdgePtr eptr1)
 
const class ON_SubDFaceMergeFaces (const class ON_SubDEdge *edge)
 
const class ON_SubDFaceMergeFaces (const class ON_SubDVertex *vertex)
 
const class ON_SubDFaceMergeFaces (const ON_SimpleArray< const ON_SubDFace * > &face_list, bool bFaceListMayBeInvalid)
 
const class ON_SubDFaceMergeFaces (const ON_SubDFacePtr *face_list, size_t face_count, bool bFaceListMayBeInvalid)
 
const class ON_SubDFaceMergeFaces (ON_SubDFace const *const *face_list, size_t face_count, bool bFaceListMayBeInvalid)
 
unsigned int MergeFaceSets (const ON_SimpleArray< const ON_SubDFace * > &face_list)
 
unsigned int MergeFaceSets (const ON_SimpleArray< ON_COMPONENT_INDEX > &ci_list, bool bMergeSharedEdges)
 
unsigned int MergeFaceSets (const ON_SimpleArray< ON_SubDComponentPtr > &cptr_list, bool bMergeSharedEdges)
 
unsigned int MergeFaceSets (const ON_SubDComponentPtr *cptr_list, size_t cptr_count, bool bMergeSharedEdges)
 
unsigned int MeshFragmentCount () const
 
bool Morph (const ON_SpaceMorph &morph) override
 virtual More...
 
ON::object_type ObjectType () const override
 virtual More...
 
ON_SubDOffset (double offset_distance, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, bool bPreserveSymmetry, ON_SubD *destination_subd) const
 
ON_SubDOffset (double offset_distance, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, ON_SubD *destination_subd) const
 
ON_SubDOffset (ON_3dVector offset_direction, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, bool bPreserveSymmetry, ON_SubD *destination_subd) const
 
ON_SubDOffset (ON_3dVector offset_direction, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, ON_SubD *destination_subd) const
 
ON_SubDoperator= (const ON_SubD &src)
 
bool Orient () const
 Attempts to orient all facet to match the first facet. More...
 
unsigned int PackFaces ()
 
unsigned int PackFaces (ON_UUID face_packing_id)
 
unsigned int ProjectVerticesToPlane (ON_PlaneEquation plane_equation, double distance_tolerance)
 
class ON_BrepProxyBrep (ON_Brep *destination_brep) const
 SubD proxy brep interface. More...
 
const class ON_BrepEdgeProxyBrepEdge (const ON_Brep *proxy_brep, unsigned subd_edge_id, const class ON_BrepEdge *prev_proxy_edge) const
 
const class ON_BrepFaceProxyBrepFace (const ON_Brep *proxy_brep, unsigned subd_face_id, const class ON_BrepFace *prev_proxy_face) const
 
const class ON_BrepVertexProxyBrepVertex (const ON_Brep *proxy_brep, unsigned subd_vertex_id) const
 
bool Read (ON_BinaryArchive &archive) override
 virtual More...
 
unsigned int RemoveAllCreases ()
 
bool RemoveEdgeVertexConnection (ON_SubDEdge *e, ON_SubDVertex *v)
 
ON_SubDVertexRemoveEdgeVertexConnection (ON_SubDEdge *e, unsigned evi)
 
bool RemoveFaceConnections (ON_SubDFace *face)
 
bool RemoveFaceEdgeConnection (ON_SubDFace *face, ON_SubDEdge *edge)
 
bool RemoveFaceEdgeConnection (ON_SubDFace *face, unsigned int i)
 
bool RemoveFaceEdgeConnection (ON_SubDFace *face, unsigned int i, ON_SubDEdgePtr &removed_edge)
 
unsigned int RemoveZeroLengthEdges ()
 
ON__UINT64 RenderContentSerialNumber () const
 
unsigned int ReplaceFaceWithTrianglation (class ON_SubDFace *face, ON_3dVector triangluation_plane_normal, bool bMarkFaces)
 
const class ON_SubDVertexReplaceFaceWithTriangleFan (class ON_SubDFace *face, ON_3dPoint fan_center_point, bool bMarkFaces)
 
bool ReturnEdgeForExperts (ON_SubDEdge *e)
 
bool ReturnFaceForExperts (ON_SubDFace *f)
 
bool ReturnVertexForExperts (ON_SubDVertex *v)
 
bool ReverseOrientation () const
 reverses the orientation of all facets More...
 
ON__UINT64 RuntimeSerialNumber () const
 
ON_SubDComponentPtrPair SeparateInteriorEdge (ON_SubDEdgePtr interior_edge, const ON_SubDEdge *separator0, const ON_SubDEdge *separator1)
 
unsigned int SeparateInteriorEdgeChains (const ON_SimpleArray< const ON_SubDEdge * > &edge_chains, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdgeChains (const ON_SimpleArray< ON_COMPONENT_INDEX > &edge_chains, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdgeChains (const ON_SimpleArray< ON_SubDComponentPtr > &edge_chains, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chains, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdges (const ON_SimpleArray< const ON_SubDEdge * > &edges, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdges (const ON_SimpleArray< ON_COMPONENT_INDEX > &edges, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdges (const ON_SimpleArray< ON_SubDComponentPtr > &edges, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
unsigned int SeparateInteriorEdges (const ON_SimpleArray< ON_SubDEdgePtr > &edges, ON_SimpleArray< ON_SubDComponentPtrPair > *separated_edges)
 
const ON_SimpleArray< const ON_SubDVertex * > SeparateVertex (ON_SubDVertex *vertex, bool bApplyCreaseBias)
 
const ON_SimpleArray< const ON_SubDVertex * > SeparateVertex (ON_SubDVertex *vertex, const ON_SubDEdge *separator0, const ON_SubDEdge *separator1)
 
void SetColorsMappingTag (const class ON_MappingTag &) const
 
void SetComponentMarkBitsFromSymmetryMotif () const
 
unsigned int SetComponentMarks (bool bClearBeforeSet, const ON_SimpleArray< const class ON_SubDComponentBase * > &marked_component_list) const
 
unsigned int SetComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_set) const override
 virtual More...
 
unsigned int SetComponentStates (ON_SubDComponentPtr component_ptr, ON_ComponentStatus states_to_set) const
 
unsigned int SetComponentStatus (ON_COMPONENT_INDEX component_index, ON_ComponentStatus status_to_copy) const override
 virtual More...
 
unsigned int SetComponentStatus (ON_ComponentStatus status_mask, const ON_SimpleArray< const class ON_SubDComponentBase * > &component_list, const ON_SimpleArray< ON_ComponentStatus > &status_list) const
 
unsigned int SetComponentStatus (ON_SubDComponentPtr component_ptr, ON_ComponentStatus status_to_copy) const
 
void SetContentIsSymmetricForExperts (bool bContentIsSymmetric) const
 
bool SetCurvatureColorAnalysisColors (bool bUpdateSurfaceMeshCache, bool bLazyColorSet, ON_SurfaceCurvatureColorMapping kappa_colors) const
 Set the SubD's mesh fragment colors from the principal surface curvatures. The color ON_MappingTag::CurvatureAnalysisColor(kappa_style,kappa_range) is assigned to the fragments's vertex color setting. More...
 
bool SetDraftAngleColorAnalysisColors (bool bUpdateSurfaceMeshCache, bool bLazyColorSet, ON_SurfaceDraftAngleColorMapping draft_angle_colors) const
 Set the SubD's mesh fragment colors from the draft angle of the surface normals. More...
 
unsigned int SetEdgeSharpness (const class ON_SubDEdgeChain &edge_chain, ON_SubDEdgeSharpness edge_chain_sharpness, bool bPreserveSymmetry)
 Set or change edge sharpness. More...
 
unsigned int SetEdgeSharpness (const ON_SimpleArray< ON_SubDEdgePtr > &edge_ptrs, const ON_SimpleArray< ON_SubDEdgeSharpness > &edge_sharpness, bool bPreserveSymmetry)
 Set or change edge sharpness. More...
 
unsigned int SetEdgeSharpness (const ON_SimpleArray< ON_SubDEdgePtr > &edge_ptrs, ON_SubDEdgeSharpness sharpness, bool bPreserveSymmetry)
 Set or change edge sharpness. More...
 
unsigned int SetEdgeSharpness (size_t edge_count, const ON_SubDEdgePtr *edge_ptrs, const ON_SubDEdgeSharpness *edge_sharpness, size_t edge_sharpness_stride, bool bPreserveSymmetry)
 Set or change edge sharpness. More...
 
unsigned int SetEdgeSharpness (size_t edge_count, const ON_SubDEdgePtr *edge_ptrs, ON_SubDEdgeSharpness sharpness, bool bPreserveSymmetry)
 Set or change edge sharpness. More...
 
unsigned int SetEdgeTags (const ON_COMPONENT_INDEX *ci_list, size_t ci_count, ON_SubDEdgeTag edge_tag)
 
unsigned int SetEdgeTags (const ON_SimpleArray< ON_SubDComponentPtr > &cptr_list, ON_SubDEdgeTag edge_tag)
 
unsigned int SetEdgeTags (const ON_SubDComponentPtr *cptr_list, size_t cptr_count, ON_SubDEdgeTag edge_tag)
 
bool SetFaceBoundary (ON_SubDFace *face, const ON_SimpleArray< ON_SubDEdgePtr > &edges)
 
bool SetFaceBoundary (ON_SubDFace *face, const ON_SubDEdgePtr *edges, size_t edge_count)
 
bool SetFacePackingIdForExperts (ON_UUID custom_packing_id)
 
bool SetFragmentColorsFromCallback (bool bLazySet, ON_SHA1_Hash fragment_colors_settings_hash, ON_MappingTag fragment_colors_mapping_tag, ON__UINT_PTR callback_context, const ON_Color(*color_callback)(ON__UINT_PTR callback_context, const ON_MappingTag &mapping_tag, const ON_SubD &subd, ON_SubDComponentPtr cptr, const ON_3dPoint &P, const ON_3dVector &N, const ON_3dPoint &T, const ON_SurfaceCurvature &K)) const
 
void SetFragmentColorsMappingTag (const class ON_MappingTag &) const
 
bool SetFragmentTextureCoordinates (const class ON_TextureMapping &mapping, bool bLazy) const
 
void SetPerFaceColorsFromPackId () const
 
void SetPerFaceColorsFromSymmetryMotif () const
 
void SetSubDAppearance (ON_SubDComponentLocation subd_appearance) const
 
void SetSymmetryForExperts (const class ON_Symmetry &symmetry, bool SetContentSerialNumber)
 
bool SetSymmetrySet (const ON_SimpleArray< const ON_SubDEdge * > &edge_symmetry_set, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SimpleArray< const ON_SubDFace * > &face_symmetry_set, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SimpleArray< const ON_SubDVertex * > &vertex_symmetry_set, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SimpleArray< ON_SubDComponentPtr > &component_symmetry_set, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SubDComponentPtr *component_symmetry_set, size_t component_symmetry_set_count, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SubDEdge *const *edge_symmetry_set, size_t edge_symmetry_set_count, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SubDFace *const *face_symmetry_set, size_t face_symmetry_set_count, unsigned primary_motif_index)
 
bool SetSymmetrySet (const ON_SubDVertex *const *vertex_symmetry_set, size_t vertex_symmetry_set_count, unsigned primary_motif_index)
 
bool SetSymmetrySetNextForExperts (bool bComponentIsPrimaryMotif, ON_SubDComponentPtr component, ON_SubDComponentPtr next_component)
 
bool SetSymmetrySetNextForExperts (bool bEdgeIsPrimaryMotif, const ON_SubDEdge *edge, const ON_SubDEdge *next_edge)
 
bool SetSymmetrySetNextForExperts (bool bFaceIsPrimaryMotif, const ON_SubDFace *face, const ON_SubDFace *next_face)
 
bool SetSymmetrySetNextForExperts (bool bVertexIsPrimaryMotif, const ON_SubDVertex *vertex, const ON_SubDVertex *next_vertex)
 
bool SetSymmetrySetsForExperts (bool bUseCleanupTolerance)
 
void SetTextureCoordinateType (ON_SubDTextureCoordinateType texture_coordinate_type) const
 
void SetTextureMappingTag (const class ON_MappingTag &) const
 
bool SetVertexSurfacePoint (unsigned int vertex_id, ON_3dPoint vertex_surface_point)
 Set the location of a single vertex surface point. This function is not suitable for setting the locations of multiple vertex surface points that are topologically near to each other. More...
 
unsigned int SetVertexTags (const ON_COMPONENT_INDEX *ci_list, size_t ci_count, ON_SubDVertexTag vertex_tag)
 
unsigned int SetVertexTags (const ON_SubDComponentPtr *cptr_list, size_t cptr_count, ON_SubDVertexTag vertex_tag)
 
void ShareContentsFrom (ON_SubD &subd)
 
void ShareDimple (const class ON_SubDMeshImpl &)
 
void ShareDimple (const ON_SubD &)
 
unsigned int SharpEdgeCount () const
 Number of sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges. More...
 
unsigned int SharpEdgeCount (ON_SubDEdgeSharpness &sharpness_range) const
 Get the range of sharpness values assigned to sharp edges and return the number of sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges. More...
 
unsigned int SizeOf () const override
 virtual More...
 
size_t SizeOfActiveElements () const
 
size_t SizeOfActiveMeshFragments () const
 
size_t SizeOfAllElements () const
 
size_t SizeOfAllMeshFragments () const
 
size_t SizeOfUnusedElements () const
 
size_t SizeOfUnusedMeshFragments () const
 
unsigned int SnapPointsToPlane (ON_PlaneEquation plane_equation, double distance_tolerance)
 
*int SolidOrientation () const
 
const class ON_SubDEdgeSpinEdge (class ON_SubDEdge *edge, bool spin_clockwise=false)
 
const ON_SubDEdgePtr SpinEdge (ON_SubDEdgePtr eptr, bool spin_clockwise=false)
 
const class ON_SubDEdgeSplitEdge (class ON_SubDEdge *edge, ON_3dPoint vertex_location)
 
const ON_SubDEdgePtr SplitEdge (ON_SubDEdgePtr eptr, ON_3dPoint vertex_location, unsigned new_edge_end)
 
const class ON_SubDEdgeSplitFace (class ON_SubDFace *face, const class ON_SubDVertex *v0, const class ON_SubDVertex *v1)
 
const ON_SubDEdgePtr SplitFace (class ON_SubDFace *face, const class ON_SubDVertex *v0, const class ON_SubDVertex *v1, unsigned new_face_side)
 
const class ON_SubDEdgeSplitFace (class ON_SubDFace *face, unsigned int fvi0, unsigned int fvi1)
 
const ON_SubDEdgePtr SplitFace (class ON_SubDFace *face, unsigned int fvi0, unsigned int fvi1, unsigned new_face_side)
 
ON_SubDComponentLocation SubDAppearance () const
 
class ON_SubDMesh SubDControlNetMesh () const
 
const ON_SubDHash SubDHash (ON_SubDHashType hash_type, bool bForceUpdate) const
 
const class ON_SubDimple * SubDimple () const
 
unsigned int SubDimpleUseCount () const
 
void SubDModifiedNofification ()
 
class ON_SubDMesh SubDSurfaceMesh () const
 
bool SurfaceMeshCacheExists (bool bTextureCoordinatesExist, bool bCurvaturesExist, bool bColorsExist) const
 Determine if the limit surface mesh fragments exist. More...
 
bool SwapCoordinates (int i, int j) override
 virtual More...
 
void SwapDimple (class ON_SubDMeshImpl &)
 
void SwapDimple (ON_SubD &)
 
const class ON_SymmetrySymmetry () const
 
unsigned SymmetrySetCount (const ON_SubDEdge *edge) const
 
unsigned SymmetrySetCount (const ON_SubDFace *face) const
 
unsigned SymmetrySetCount (const ON_SubDVertex *vertex) const
 
unsigned SymmetrySetCount (ON_SubDComponentPtr cptr) const
 
const ON_SubDEdgeSymmetrySetNext (const ON_SubDEdge *edge) const
 
const ON_SubDEdgePtr SymmetrySetNext (const ON_SubDEdgePtr edge_ptr) const
 
const ON_SubDFaceSymmetrySetNext (const ON_SubDFace *face) const
 
const ON_SubDVertexSymmetrySetNext (const ON_SubDVertex *vertex) const
 
const ON_SubDComponentPtr SymmetrySetNext (ON_SubDComponentPtr cptr) const
 
const ON_SubDEdgeSymmetrySetPrimaryMotif (const ON_SubDEdge *edge) const
 
const ON_SubDFaceSymmetrySetPrimaryMotif (const ON_SubDFace *face) const
 
const ON_SubDVertexSymmetrySetPrimaryMotif (const ON_SubDVertex *vertex) const
 
const ON_SubDComponentPtr SymmetrySetPrimaryMotif (ON_SubDComponentPtr cptr) const
 
ON_SubDTextureCoordinateType TextureCoordinateType () const
 
bool TextureMappingRequired () const
 
const ON_MappingTag TextureMappingTag (bool bIgnoreTextureCoordinateType) const
 
unsigned int TexturePointsAreSet () const
 
const ON_SHA1_Hash TextureSettingsHash () const
 
const ON_SHA1_Hash TopologyHash () const
 
bool Transform (const ON_Xform &xform) override
 virtual More...
 
unsigned int TransformComponents (const ON_Xform &xform, const ON_COMPONENT_INDEX *ci_list, size_t ci_count, ON_SubDComponentLocation component_location)
 
unsigned int TransformComponents (const ON_Xform &xform, const ON_SubDComponentPtr *cptr_list, size_t cptr_count, ON_SubDComponentLocation component_location)
 
unsigned int UnselectComponents (bool bUnselectAllVertices, bool bUnselectAllEdges, bool bUnselectAllFaces) const
 
unsigned int UpdateAllTagsAndSectorCoefficients (bool bUnsetValuesOnly)
 
unsigned int UpdateEdgeSectorCoefficients (bool bUnsetSectorCoefficientsOnly) const
 
unsigned int UpdateEdgeTags (bool bUnsetEdgeTagsOnly)
 
unsigned int UpdateSurfaceMeshCache (bool bLazyUpdate)
 
unsigned int UpdateSurfaceMeshCache (bool bLazyUpdate, bool bComputeCurvature)
 
unsigned int UpdateSurfaceMeshCache (bool bLazyUpdate, bool bComputeCurvature, bool bSetUnchangedFaceColor, ON_Color unchanged_face_color, bool bSetUpdatedFaceColor, ON_Color updated_face_color)
 
unsigned int UpdateSurfaceMeshCache (bool bLazyUpdate, bool bSetUnchangedFaceColor, ON_Color unchanged_face_color, bool bSetUpdatedFaceColor, ON_Color updated_face_color)
 
bool UpdateSymmetry (const ON_SimpleArray< unsigned int > &moved_vertices, bool bPermitTopologyChange)
 
unsigned int UpdateVertexTags (bool bUnsetVertexTagsOnly)
 
class ON_SubDVertexArray VertexArray () const
 
unsigned int VertexCount () const
 
const class ON_SubDVertexVertexFromComponentIndex (ON_COMPONENT_INDEX component_index) const
 
const class ON_SubDVertexVertexFromId (unsigned int vertex_id) const
 
const ON_SHA1_Hash VertexHash (ON_SubDHashType hash_type) const
 
class ON_SubDVertexIterator VertexIterator () const
 
bool Write (ON_BinaryArchive &archive) const override
 virtual More...
 
- Public Member Functions inherited from ON_Geometry
 ON_Geometry ()=default
 
 ON_Geometry (const ON_Geometry &)=default
 
 ~ON_Geometry ()=default
 
ON_BoundingBox BoundingBox () const
 
bool GetBoundingBox (ON_3dPoint &bbox_min, ON_3dPoint &bbox_max, bool bGrowBox=false) const
 
bool GetBoundingBox (ON_BoundingBox &bbox, bool bGrowBox=false) const
 
virtual bool Morph (const class ON_SpaceMorph &morph)
 
ON_Geometryoperator= (const ON_Geometry &)=default
 
bool Rotate (double rotation_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center)
 
bool Rotate (double sin_angle, double cos_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center)
 
bool Scale (double scale_factor)
 
const ON_BoundingBox TightBoundingBox () const
 
bool Translate (const ON_3dVector &translation_vector)
 
- Public Member Functions inherited from ON_Object
 ON_Object () ON_NOEXCEPT
 
 ON_Object (const ON_Object &)
 
virtual ~ON_Object ()
 
bool AttachUserData (class ON_UserData *pUserData)
 
unsigned int ClearAllComponentStates () const
 
void CopyUserData (const ON_Object &source_object)
 
unsigned int CopyUserData (const ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution)
 
bool DetachUserData (class ON_UserData *pUserData)
 
void EmergencyDestroy ()
 
class ON_UserDataFirstUserData () const
 
class ON_UserDataGetUserData (const ON_UUID &userdata_uuid) const
 
bool GetUserString (const wchar_t *key, ON_wString &string_value) const
 
int GetUserStringKeys (ON_ClassArray< ON_wString > &user_string_keys) const
 
int GetUserStrings (ON_ClassArray< ON_UserString > &user_strings) const
 
bool IsCorrupt (bool bRepair, bool bSilentError, class ON_TextLog *text_log) const
 
bool IsKindOf (const ON_ClassId *pClassId) const
 
virtual ON_UUID ModelObjectId () const
 
void MoveUserData (ON_Object &source_object)
 
unsigned int MoveUserData (ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution, bool bDeleteAllSourceItems)
 
ON_Objectoperator= (const ON_Object &)
 
void PurgeUserData ()
 
bool SetUserString (const wchar_t *key, const wchar_t *string_value)
 
int SetUserStrings (int count, const ON_UserString *user_strings, bool bReplace)
 
bool ThisIsNullptr (bool bSilentError) const
 
void TransformUserData (const class ON_Xform &xform)
 
virtual bool UpdateReferencedComponents (const class ON_ComponentManifest &source_manifest, const class ON_ComponentManifest &destination_manifest, const class ON_ManifestMap &manifest_map)
 
int UserStringCount () const
 

Static Public Member Functions

static bool AutomaticMeshToSubD (ON_SubD::AutomaticMeshToSubDContext context)
 
static void AutomaticMeshToSubDRestoreDefaults (ON_SubD::AutomaticMeshToSubDContext context)
 
static unsigned int ComponentRingEdgeCount (size_t component_ring_count)
 
static unsigned int ComponentRingFaceCount (size_t component_ring_count)
 
static bool ComponentRingIsValid (const ON_SubDComponentPtr *component_ring, size_t component_ring_count)
 
static double ControlPointRadiusFromSurfacePointRadius (unsigned int point_count, double surface_point_radius)
 
static ON_SubDCreateControlNetFromNurbsCurves (const ON_ClassArray< ON_NurbsCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromNurbsCurves (const ON_ObjectArray< ON_NurbsCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromNurbsCurves (const ON_SimpleArray< const ON_NurbsCurve * > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromPolylines (const ON_ClassArray< ON_Polyline > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromPolylines (const ON_ClassArray< ON_PolylineCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromPolylines (const ON_ObjectArray< ON_PolylineCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromPolylines (const ON_SimpleArray< const ON_Polyline * > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateControlNetFromPolylines (const ON_SimpleArray< const ON_PolylineCurve * > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateCylinder (const class ON_Cylinder &cylinder, unsigned circumference_face_count, unsigned height_face_count, ON_SubDEndCapStyle end_cap_style, ON_SubDEdgeTag end_cap_edge_tag, ON_SubDComponentLocation radius_location, ON_SubD *destination_subd)
 
static ON_SubDCreateFromBoundary (const class ON_Curve &curve, ON_SubD *destination_subd)
 
static ON_SubDCreateFromBoundaryControlPoints (const class ON_SimpleArray< ON_3dPoint > &boundary_control_points, ON_SubD *destination_subd)
 
static ON_SubDCreateFromLoftCurves (const ON_ClassArray< ON_NurbsCurve > &curves, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateFromLoftCurves (const ON_ObjectArray< ON_NurbsCurve > &curves, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateFromLoftCurves (const ON_SimpleArray< const ON_NurbsCurve * > &curves, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd)
 
static ON_SubDCreateFromMesh (const class ON_Mesh *level_zero_mesh, const class ON_SubDFromMeshParameters *from_mesh_parameters, ON_SubD *subd)
 
static ON_SubDCreateFromSurface (const class ON_Surface &surface, const ON_SubDFromSurfaceParameters *from_surface_parameters, ON_SubD *destination_subd)
 
static ON_SubDCreateSubDBox (const ON_3dPoint corners[8], double edge_sharpness, unsigned int facecount_x, unsigned int facecount_y, unsigned int facecount_z, ON_SubD *destination_subd)
 
static ON_SubDCreateSubDBox (const ON_3dPoint corners[8], ON_SubDEdgeTag edge_tag, unsigned int facecount_x, unsigned int facecount_y, unsigned int facecount_z, ON_SubD *destination_subd)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const class ON_Curve &curve, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const class ON_Curve &curve, int cv_count, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const class ON_Curve &curve, int cv_count, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const double *points, size_t point_count, int point_stride, bool bInterpolatePoints, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const double *points, size_t point_count, int point_stride, bool bInterpolatePoints, bool bPeriodicClosedCurve, const bool *creases, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const ON_3dPoint *points, size_t point_count, bool bInterpolatePoints, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const ON_SimpleArray< ON_3dPoint > &points, bool bInterpolatePoints, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (const ON_SubDEdgePtr *edge_chain, size_t edge_count, class ON_NurbsCurve *destination_curve)
 
static class ON_NurbsCurveCreateSubDFriendlyCurve (ON_SimpleArray< ON_SubDEdgePtr > &edge_chain, class ON_NurbsCurve *destination_curve)
 
static bool CreateSubDFriendlyIsoCurves (const class ON_Surface &surface, int iso_dir, ON_ClassArray< ON_NurbsCurve > &loft_curves, bool &bPeriodicClosedLoft, ON_SimpleArray< bool > &loft_creases, ON_SimpleArray< double > &loft_parameters)
 
static class ON_NurbsSurfaceCreateSubDFriendlySurface (const class ON_Surface &surface, class ON_NurbsSurface *destination_surface)
 
static class ON_NurbsSurfaceCreateSubDFriendlySurface (const ON_ClassArray< ON_NurbsCurve > &cubic_curves, bool bPeriodicClosedLoft, class ON_NurbsSurface *destination_surface)
 
static class ON_NurbsSurfaceCreateSubDFriendlySurface (const ON_ObjectArray< ON_NurbsCurve > &cubic_curves, bool bPeriodicClosedLoft, class ON_NurbsSurface *destination_surface)
 
static class ON_NurbsSurfaceCreateSubDFriendlySurface (const ON_SimpleArray< const ON_NurbsCurve * > &cubic_curves, bool bPeriodicClosedLoft, class ON_NurbsSurface *destination_surface)
 
static class ON_NurbsSurfaceCreateSubDFriendlySurface (const ON_SimpleArray< const ON_NurbsCurve * > &cubic_curves, bool bPeriodicClosedLoft, const bool *creases, class ON_NurbsSurface *destination_surface)
 
static ON_SubDCreateSubDGlobeSphere (const ON_Sphere sphere, ON_SubDComponentLocation vertex_location, unsigned axial_face_count, unsigned equatorial_face_count, ON_SubD *destination_subd)
 Creates a SubD sphere made from polar triangle fans and bands of quads. The result resembles a globe with triangle fans at the poles and the edges forming latitude parallels and longitude meridians. More...
 
static ON_SubDCreateSubDIcosahedron (const ON_Sphere sphere, ON_SubDComponentLocation vertex_location, ON_SubD *destination_subd)
 Creates a SubD sphere based on an icosohedron (20 triangular faces and 5 valent vertices). This is a goofy topology for a Catmull Clark subdivision surface (all triangles, all vertices have 5 edges). You may want to consider using the much behaved result from ON_SubD::CreateSubDQuadSphere(sphere, vertex_location, 1, destination_subd) or even the result from ON_SubD::CreateSubDGlobeSphere(). More...
 
static ON_SubDCreateSubDQuadSphere (const ON_Sphere sphere, ON_SubDComponentLocation vertex_location, unsigned quad_subdivision_level, ON_SubD *destination_subd)
 Creates a SubD sphere made from quad faces. More...
 
static ON_SubDCreateSubDTriSphere (const ON_Sphere sphere, ON_SubDComponentLocation vertex_location, unsigned tri_subdivision_level, ON_SubD *destination_subd)
 Creates a SubD sphere made from triangular faces. This is a goofy topology for a Catmull Clark subdivision surface (all triangles and all vertices have 5 or 6 edges). You may want to consider using the much behaved result from ON_SubD::CreateSubDQuadSphere() or even the result from ON_SubD::CreateSubDGlobeSphere(). More...
 
static bool EdgesAreConsecutive (ON_SubDEdgePtr eptr0, ON_SubDEdgePtr eptr1)
 
static ON_SubDEdgeTag EdgeTagFromContext (unsigned int edge_face_count, const ON_SubDVertex *v0, const ON_SubDVertex *v1)
 
static ON_SubDEdgeTag EdgeTagFromContext (unsigned int edge_face_count, const ON_SubDVertexTag v0_tag, const ON_SubDVertexTag v1_tag)
 
static ON_SubDEdgeTag EdgeTagFromUnsigned (unsigned int edge_tag_as_unsigned)
 
static bool EdgeTagIsSet (ON_SubDEdgeTag edge_tag)
 
static const ON_wString EdgeTagToString (ON_SubDEdgeTag edge_tag, bool bVertose)
 
static bool GetBoundaryEdgeChain (ON_SubDEdgePtr first_edge, bool bUseEdgeMarks, ON_SimpleArray< ON_SubDEdgePtr > &boundary_edge_chain)
 
static unsigned int GetQuadSectorPointRing (bool bPermitNoSubdivisions, bool bObsoleteAndIgnoredParameter, const class ON_SubDVertex *obsolete_and_ignored_parameter, const class ON_SubDComponentPtr *component_ring, size_t component_ring_count, double *point_ring, size_t point_ring_stride)
 
static unsigned int GetQuadSectorPointRing (bool bPermitNoSubdivisions, const class ON_SubDComponentPtr *component_ring, size_t component_ring_count, unsigned int &subdivision_count, double *point_ring, size_t point_ring_stride)
 Get a ring of points that can be mulitplied by subdivsion and limit point matrices to calculate the subdivision point and limit point for the central vertex in component_ring[0]. No input validation is performed. This function will crash if the input is not valid. Call GetSubdivisionPointRing() if you want a crash proof call. More...
 
static unsigned int GetSectorComponentRing (const class ON_SubDSectorIterator &sit, ON_SimpleArray< ON_SubDComponentPtr > &component_ring)
 
static unsigned int GetSectorComponentRing (const class ON_SubDSectorIterator &sit, ON_SubDComponentPtr *component_ring, size_t component_ring_capacity)
 
static unsigned int GetSectorPointRing (bool bSubdivideIfNeeded, const class ON_SubDSectorIterator &sit, double *point_ring, size_t point_ring_capacity, size_t point_ring_stride)
 
static unsigned int GetSectorPointRing (bool bSubdivideIfNeeded, const class ON_SubDSectorIterator &sit, ON_SimpleArray< ON_3dPoint > &point_ring)
 
static unsigned int GetSectorPointRing (bool bSubdivideIfNeeded, const ON_SubDComponentPtr *component_ring, size_t component_ring_count, double *subd_point_ring, size_t subd_point_ring_capacity, size_t subd_point_ring_stride)
 
static unsigned int GetSectorPointRing (bool bSubdivideIfNeeded, size_t component_ring_count, const ON_SubDComponentPtr *component_ring, ON_SimpleArray< ON_3dPoint > &point_ring)
 
static unsigned int GetSectorPointRing (const class ON_SubDSectorIterator &sit, unsigned &subdivision_count, double *point_ring, size_t point_ring_capacity, size_t point_ring_stride)
 
static unsigned int GetSectorPointRing (const class ON_SubDSectorIterator &sit, unsigned &subdivision_count, ON_SimpleArray< ON_3dPoint > &point_ring)
 Get a ring of points that can be used to calculate the subdivision and limit points of sit.CenterVertex(). More...
 
static unsigned int GetSectorSubdivisionPointRing (const ON_SubDComponentPtr *component_ring, size_t component_ring_count, ON_SimpleArray< ON_3dPoint > &subd_point_ring)
 
static unsigned int GetSectorSubdivsionPointRing (const ON_SubDComponentPtr *component_ring, size_t component_ring_count, double *point_ring, size_t point_ring_capacity, size_t point_ring_stride)
 
static bool IsBuiltInFacePackingId (ON_UUID candidate_id)
 
static bool IsSubDFriendlyCurve (const ON_Curve *curve)
 
static bool IsSubDFriendlySurface (const ON_Surface *surface)
 
static bool IsValidSectorEdgeCount (ON_SubDVertexTag vertex_tag, unsigned int sector_edge_count)
 
static bool IsValidSectorFaceCount (ON_SubDVertexTag vertex_tag, unsigned int sector_face_count)
 
static ON_SubD::SubDFriendlyKnotType NurbsKnotType (int order, int cv_count, const double *knots)
 
static ON_SubD::SubDFriendlyKnotType NurbsKnotType (int order, int cv_count, const double *knots, ON_SimpleArray< double > *triple_knots)
 
static unsigned char ObsoleteTextureDomainTypeFromTextureCoordinateType (ON_SubDTextureCoordinateType texture_coordinate_type)
 
static void SetAutomaticMeshToSubD (ON_SubD::AutomaticMeshToSubDContext context, bool bAutomaticallyCreateSubD)
 
static const class ON_SubDVertexSubdivideSector (const class ON_SubDVertex *center_vertex, const class ON_SubDComponentPtr *component_ring, size_t component_ring_count, class ON_SubD_FixedSizeHeap &fsh)
 
static double SurfacePointRadiusFromControlPointRadius (unsigned int point_count, double control_point_radius)
 
static void SwapContents (ON_SubD &a, ON_SubD &b)
 
static ON_SubDTextureCoordinateType TextureCoordinateTypeFromObsoleteTextureDomainType (unsigned int obsolete_texture_domain_type_as_unsigned)
 
static ON_SubDTextureCoordinateType TextureCoordinateTypeFromUnsigned (unsigned int texture_coordinate_type_as_unsigned)
 
static const ON_wString TextureCoordinateTypeToString (ON_SubDTextureCoordinateType texture_domain_type)
 
static const ON_2udex TextureDomainGridSize (unsigned minimum_rectangle_count, double image_width, double image_height)
 
static const ON_SHA1_Hash TextureSettingsHash (ON_SubDTextureCoordinateType texture_coordinate_type, const class ON_MappingTag &texture_mapping_tag)
 
static ON_SubDComponentLocation ToggleSubDAppearanceValue (ON_SubDComponentLocation subd_appearance)
 
static ON_SubDToSubD (const class ON_Geometry *geometry, const class ON_SubDFromMeshParameters *from_mesh_parameters, const class ON_SubDFromSurfaceParameters *from_surface_parameters, ON_SubD *destination_subd)
 
static ON_SubD::VertexFacetType VertexFacetTypeFromUnsigned (unsigned int vertex_facet_type_as_unsigned)
 
static ON_SubDVertexTag VertexTagFromUnsigned (unsigned int vertex_tag_as_unsigned)
 
static bool VertexTagIsSet (ON_SubDVertexTag vertex_tag)
 
static const ON_wString VertexTagToString (ON_SubDVertexTag vertex_tag, bool bVertose)
 

Public Attributes

**ON_RTreeRef ControlNetComponentTree bool const
 

Static Public Attributes

static const ON_UUID CustomFacePackingId
 The custom face packing is typically used when a subd creation function sets a custom face packing different from the default. Typically this happens when there are quad packs that align well with the overall geometry or to reduce texture distortion. It is used to indicate the built-in automatic face packing was not applied. {91FD7018-8BBE-4492-8D2E-E8761C505ACF} More...
 
static const ON_UUID DefaultFacePackingId
 ADD NEW PackFaces ids above this comment and below FastAndSimplePackFacesId. More...
 
static const ON_SubDComponentLocation DefaultSubDAppearance
 = ON_SubDComponentLocation::Surface More...
 
static const ON_SubDTextureCoordinateType DefaultTextureCoordinateType
 = ON_SubDTextureCoordinateType::Packed More...
 
static const ON_SubD Empty
 
static unsigned int ErrorCount
 
static const ON_UUID FastAndSimpleFacePackingId
 The fast and simple face packing uses topology, vertex tags, and edge tags to group quads into rectangular grids. It does not perform geometric feature analysis. {C3D8DD54-F8C8-4455-BB0E-2A2F4988EC81} More...
 
static const ON_UUID GlobeSphereFacePackingId
 The globe sphere face packing is used by ON_SubD::CreateSubDGlobeSphere. The equatorial band of quads is assigned a central horizontal strip of texture space while the polar triangle fans are assigned horizontal strips from the bottom and top of texture space. The heights of the horizontal strips of texture space are chosen to minimize distortion as latitude varies. {63CA2FC1-8F6C-4EFC-9A07-C6A26A8C93FB} More...
 
static const ON_UUID QuadSphereFacePackingId
 The quad sphere face packing is used by ON_SubD::CreateSubDQuadSphere. It divides the quad sphere into two similar sets (like a baseball cover) and assigns the bottom third of texture space to the first region and the top third to the second region. The middle third is unmapped so that texture distortion is uniform for each quad. {9C491E5C-2B46-48AA-BD43-7B18FDC52D58} More...
 
- Static Public Attributes inherited from ON_Geometry
const static ON_Geometry Unset
 

Friends

class ON_SubDRef
 

Detailed Description

ON_SubD

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : unsigned int
Enumerator
maximum_subd_level 

uses as a sanity check on input parameters

◆ anonymous enum

anonymous enum : unsigned int
Enumerator
TextureImageSuggestedMinimumSize 

ON_SUbDFace packing rectangle information is calculated so that there is at least one unused pixel between adjacent packing rectangles when a texture image size is TextureImageSuggestedMinimumSize x TextureImageSuggestedMinimumSize pixels or larger. Core subd code assumes TextureImageSuggestedMinimumSize is a power of 2 and >= 512.

◆ AutomaticMeshToSubDContext

enum ON_SubD::AutomaticMeshToSubDContext : unsigned char
strong

ON_SubD::AutomaticMeshToSubDContext identifies a context where meshes can automatically be converted to subds.

Enumerator
Unset 

summary> Indicates the context has not been initialized. /summary> summary> A mesh in a Rhino 5 3dm file that is a representation of a box mode T-spline. By default, these meshes are automatically converted to subds. /summary>

Rhino5BoxModeTSpline 

summary> A mesh in an FBX file that has nonzero values for either preview division levels or render division levels. Some FBX files created by Maya save subdivision objects as meshes with nonzero division level values. By default, FBX division levels are ignored. /summary>

FBXMeshWithDivisionLevels 

◆ ChainType

enum ON_SubD::ChainType : unsigned char
strong

SubD::ChainType specifies what edge and vertex tag tests are used when creating edge chains.

Enumerator
Unset 

summary> Unset. /summary> summary> All types of edges and vertices can be in the chain. /summary>

MixedTag 

summary> Every edge in an edge chain has the same smooth/crease property. /summary>

EqualEdgeTag 

summary> Every edge in an edge chain has the same smooth/crease edge tag and interior vertices have the corresponding smooth/crease vertex tag. /summary>

EqualEdgeAndVertexTag 

summary> Every edge in an edge chain has the same smooth/crease property and every edge has the same number of faces. If the edges have 1 face, then interior vertices have valence = 3. If the edges have 2 faces, then interior vertices have valence = 4. /summary>

EqualEdgeTagAndOrdinary 

summary> Every edge in an edge chain has the same smooth/crease edge tag, every edge has the same number of faces, and interior vertices have the corresponding smooth/crease vertex tag. If the edges have 1 face, then interior vertices have valence = 3. If the edges have 2 faces, then interior vertices have valence = 4. /summary>

EqualEdgeAndVertexTagAndOrdinary 

◆ NurbsSurfaceType

enum ON_SubD::NurbsSurfaceType : unsigned char
strong

ON_SubD::NurbsSurfaceType specifies what type of NURBS surfaces are returned by ON_SubD.GetSurfaceNurbsFragments()

Enumerator
Unset 

summary> Not a valid type. Used to indicate the type has not been set and to encourage developers to explicitly specify a type. When in doubt, specify NurbsSurfaceType::Large. /summary> summary> Onee NURBS surface will be generated for each SubD quad. N NURBS surfaces will be generated for each SubD N-gon (N = 3, 5 or more). ON_Brepface may cover multiple Near extraordinary vertices, the surfaces may have lots of knots. /summary>

Large 

summary> NURBS surfaces will be as large as possible without the addition of extra knots. Near extraordinary vertices, the surfaces may have lots of knots. This option is preferred when a user wants larger NURBS surfaces but not at the cost of additional NURBS control points. /summary>

Medium 

summary> NURBS surfaces will not be merged and will have clamped knots. /summary>

Small 

summary> NURBS surfaces will not be merged and will have unclamped uniform knots. This is useful as a starting point for customized merging and modifying continuity at extraordinary vertices. /summary>

Unprocessed 

◆ PatchStyle

enum ON_SubD::PatchStyle : unsigned char
strong

SubD::PatchStyle identifies the style of patch used to fill holes.

Enumerator
Unset 

summary> Not a valid style. This encourages developers to thoughtfully select a patch style and can be used to indicate a UI control is not initialized. /summary> summary> Automatically choose a patch style that will generally create a good looking result. If a hole boundary is not convex, it is triangulated. Otherwise: If a hole has 3 edges, a single triangle face is used. If a hole has 4 edges, a single quad face is used. If a hole has 5 or more edges and an odd number of edges, a triangle fan is used. If a hole has 6 or more edges and an even number of edges, a quad fan is used. /summary>

Automatic 

summary> A single face is used under all conditions. /summary>

SingleFace 

summary> A triangle fan used under all conditions. The center of the fan is the average of the hole boundary vertex control net points. /summary>

TriangleFan 

summary> If the hole boundary has an even number of edges, a quad fan is used. Otherwise a triangle fan is used. The center of the fan is the average of the hole boundary vertex control net points. /summary>

QuadOrTriangleFan 

summary> The hole boundary is triangluated. Typically this style is selected when a boundary not convex and the other styles produce faces with overlapping regions. /summary>

Triangulated 

◆ SubDFriendlyKnotType

enum ON_SubD::SubDFriendlyKnotType : unsigned char
strong

ON_SubD::SubDFriendlyKnotType identifies the types of subd friendly NURBS knot vectors. SubD friendly NURBS curves and surfacaes are always cubic and nonrational. Any time there is a multiple knot, the 2nd derivative is zero at the corresponding parameter. SubD friendly NURBS curves are either periodic or have zero 2nd derivative at the ends.


Enumerator
Unset 

summary> Not a valid type. Used to indicate the type has not been set and to encourage developers to explicitly specify a type. /summary> summary> NURBS knot vector is an unclamped uniform cubic knot vector. Every knot interval has the same length. Every knot has multiplicity 1. /summary>

UnclampedUniform 

summary> NURBS knot vector is a clamped uniform cubic knot vector. Every interior knot interval has the same length. End knots have multiplicity 3 and interior knots have multiplicity 1. /summary>

ClampedUniform 

summary> NURBS knot vector is a clamped piecewise uniform cubic knot vector. All nonzero knot intervals have the same length. End knots have multiplicity 3 and interior knots have multiplicity 1 or 3. Interior knots with multiplicity 3 correspond to interior SubD creases. /summary>

ClampedPiecewiseUniform 

summary> NURBS knot vector is not subd friendly. /summary>

Unfriendly 

◆ VertexFacetType

enum ON_SubD::VertexFacetType : unsigned char
strong

Summarizes the number of edges in faces in the whole object.

enum class VertexEdgeOrder : unsigned char { unset = 0, radial, ///< The ON_SubDVertex edge and face information satisfies: ///< 1) m_face_count = m_edge_count or m_face_count+1 == m_edge_count ///< 2) m_faces[i] is between m_edges[i] and m_edges[(i+1)m_edge_count] ///< 3) When 0 < i < m_edge_count-1, m_edges[i].m_edge_count = 2 ///< and m_edges[i].m_face2[] references m_faces[i-1] and m_faces[i] ///< in an unspecified order. notradial ///< one of the conditions conditions for radial is not satisfied. }; static ON_SubD::VertexEdgeOrder VertexEdgeOrderFromUnsigned( unsigned int vertex_edge_order_as_unsigned );

Enumerator
Unset 

summary>Not a valid vertex face type.

summary>All faces are triangular.

Tri 

summary>All faces are quads.

Quad 

summary>Edge count of faces is constant and > 4.

Ngon 

summary>Edge count of faces is not constant.

Mixed 

Constructor & Destructor Documentation

◆ ON_SubD() [1/2]

ON_SubD::ON_SubD ( )

◆ ~ON_SubD()

virtual ON_SubD::~ON_SubD ( )
virtual

◆ ON_SubD() [2/2]

ON_SubD::ON_SubD ( const ON_SubD src)

Description: Creates an independent copy of src.

Member Function Documentation

◆ ActiveLevel()

const class ON_SubDLevel& ON_SubD::ActiveLevel ( ) const

◆ ActiveLevelIndex()

unsigned int ON_SubD::ActiveLevelIndex ( ) const

Returns: If the SubD is not empty, then the index of the active level is returned. This value will be < LevelCount(). If the SubD is empty, then ON_UNSET_UINT_INDEX is returned.

◆ AddEdge() [1/3]

class ON_SubDEdge* ON_SubD::AddEdge ( class ON_SubDVertex v0,
class ON_SubDVertex v1 
)

Description: Add an edge with tag = ON_SubDEdgeTag::Unset to the subd. Parameters: v0 - [in] v1 - [in] The edge begins at v0 and ends at v1. The edge will be on the same level as the vertices. Returns: Pointer to the allocated edge. Remarks: ON_SubD::EdgeTagFromContext() can be used to determine edge tag values in simple situations.

◆ AddEdge() [2/3]

class ON_SubDEdge* ON_SubD::AddEdge ( ON_SubDEdgeTag  edge_tag,
class ON_SubDVertex v0,
class ON_SubDVertex v1 
)

Description: Add an edge to the subd. Parameters: edge_tag - [in] ON_SubDEdgeTag::Unset Edge tag is not known at this time. ON_SubDEdgeTag::Smooth Smooth edge. If both vertices are tagged as not smooth, the tag on the returned edge will be ON_SubDEdgeTag::SmoothX. This tag is changed to ON_SubDEdgeTag::Smooth on the first subdivision step. ON_SubDEdgeTag::Crease. Crease edge. Both vertices must be tagged as not smooth. v0 - [in] v1 - [in] The edge begins at v0 and ends at v1. The edge will be on the same level as the vertices. Returns: Pointer to the allocated edge. Remarks: ON_SubD::EdgeTagFromContext() can be used to determine edge tag values in simple situations.

◆ AddEdge() [3/3]

class ON_SubDEdge* ON_SubD::AddEdge ( ON_SubDEdgeTag  edge_tag,
class ON_SubDVertex v0,
class ON_SubDVertex v1,
ON_SubDEdgeSharpness  sharpness 
)

Description: Add an edge to the subd. Parameters: edge_tag - [in] ON_SubDEdgeTag::Unset Edge tag is not known at this time. ON_SubDEdgeTag::Smooth Smooth edge. If both vertices are tagged as not smooth, the tag on the returned edge will be ON_SubDEdgeTag::SmoothX. This tag is changed to ON_SubDEdgeTag::Smooth on the first subdivision step. ON_SubDEdgeTag::Crease. Crease edge. Both vertices must be tagged as not smooth. v0 - [in] v1 - [in] The edge begins at v0 and ends at v1. The edge will be on the same level as the vertices. sharpness - [in] If edge_tag is ON_SubDEdge::Smooth or ON_SubDEdge::SmoothX, then the the edge's sharpness is set to sharpness. Otherwise, the sharpness parameter is ignored. Returns: Pointer to the allocated edge. Remarks: ON_SubD::EdgeTagFromContext() can be used to determine edge tag values in simple situations.

◆ AddEdgeForExperts() [1/2]

class ON_SubDEdge* ON_SubD::AddEdgeForExperts ( unsigned int  candidate_edge_id,
ON_SubDEdgeTag  edge_tag,
class ON_SubDVertex v0,
double  v0_sector_coefficient,
class ON_SubDVertex v1,
double  v1_sector_coefficient,
ON_SubDEdgeSharpness  sharpness,
unsigned int  initial_face_capacity 
)

◆ AddEdgeForExperts() [2/2]

class ON_SubDEdge* ON_SubD::AddEdgeForExperts ( unsigned int  candidate_edge_id,
ON_SubDEdgeTag  edge_tag,
class ON_SubDVertex v0,
double  v0_sector_coefficient,
class ON_SubDVertex v1,
double  v1_sector_coefficient,
unsigned int  initial_face_capacity 
)

Description: Expert user tool to add an edge with specified information. This function is useful when copying portions of an existing SubD to a new SubD. Parameters: candidate_edge_id - [in] If candidate_edge_id is > 0 and is available, the returned edge with have id = candidate_edge_id. Otherwise a new id will be assigned. edge_tag - [in] Pass ON_SubDEdgeTag::Unset if not known. v0 - [in] The edge begins at v0 and ends at v1. v0_sector_coefficient - [in] Pass ON_SubDSectorType::UnsetSectorCoefficient if unknown. v1 - [in] The edge begins at v0 and ends at v1. v1_sector_coefficient - [in] Pass ON_SubDSectorType::UnsetSectorCoefficient if unknown. initial_face_capacity - [in] Initial face capacity. Pass 0 if unknown.

◆ AddEdgeWithSectorCoefficients() [1/2]

class ON_SubDEdge* ON_SubD::AddEdgeWithSectorCoefficients ( ON_SubDEdgeTag  edge_tag,
class ON_SubDVertex v0,
double  v0_sector_coefficient,
class ON_SubDVertex v1,
double  v1_sector_coefficient 
)

Description: Expert use tool to add an edge with precomputed sector coefficients. Parameters: edge_tag - [in] This expert user function does not automatically set the edge tag. v0 - [in] The edge begins at v0 and ends at v1. v0_sector_coefficient - [in] Pass ON_SubDSectorType::UnsetSectorCoefficient if unknown. v1 - [in] The edge begins at v0 and ends at v1. v1_sector_coefficient - [in] Pass ON_SubDSectorType::UnsetSectorCoefficient if unknown.

◆ AddEdgeWithSectorCoefficients() [2/2]

class ON_SubDEdge* ON_SubD::AddEdgeWithSectorCoefficients ( ON_SubDEdgeTag  edge_tag,
class ON_SubDVertex v0,
double  v0_sector_coefficient,
class ON_SubDVertex v1,
double  v1_sector_coefficient,
ON_SubDEdgeSharpness  sharpness 
)

◆ AddFace() [1/4]

class ON_SubDFace* ON_SubD::AddFace ( class ON_SubDEdge *const edges,
unsigned int  edge_count 
)

Parameters: edge_count - [in] Must be >= 3. edges[] - [in] edges[i] and edges[(i+1)edge_count] must have a single common vertex. The face will be oriented so the boundary has the edges in the order (edges[0], edges[1], ..., edges[edge_count-1]). The orientations of the ON_SubDEdgePtr elements in the face's edge list are automatically calculated. Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddFace() [2/4]

class ON_SubDFace* ON_SubD::AddFace ( const class ON_SubDEdgePtr edges,
unsigned int  edge_count 
)

Parameters: edge_count - [in] Must be >= 3. edges[] - [in] The ON_SubDEdgePtr parameters must be oriented so that edges[i].RelativeVertex(1) and edges[(i+1)edge_count].RelativeVertex(0) are the same vertex. The face will be oriented so the boundary has the edges in the order (edges[0], edges[1], ..., edges[edge_count-1]). Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddFace() [3/4]

class ON_SubDFace* ON_SubD::AddFace ( const ON_SimpleArray< ON_SubDEdge * > &  edges)

Parameters: edges[] - [in] edges[] must have 3 or more elements. edges[i] and edges[(i+1)edge_count] must have a single common vertex. The face will be oriented so the boundary has the edges in the order (edges[0], edges[1], ..., edges[edge_count-1]). The orientations of the ON_SubDEdgePtr elements in the face's edge list are automatically calculated. Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddFace() [4/4]

class ON_SubDFace* ON_SubD::AddFace ( const ON_SimpleArray< ON_SubDEdgePtr > &  edges)

Parameters: edges[] - [in] edges[] must have 3 or more elements. The ON_SubDEdgePtr parameters must be oriented so that edges[i].RelativeVertex(1) and edges[(i+1)edge_count].RelativeVertex(0) are the same vertex. The face will be oriented so the boundary has the edges in the order (edges[0], edges[1], ..., edges[edge_count-1]). Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddFaceEdgeConnection() [1/3]

bool ON_SubD::AddFaceEdgeConnection ( ON_SubDFace face,
unsigned int  i,
ON_SubDEdge edge,
ON__UINT_PTR  edge_direction 
)

Description: Expert user tool to insert an edge in the face's edge array. Parameters: face - [in] edge - [in] edge_direction -[in] i - [in] index where the edge should be inserted. Returns: true if successful. Remarks: This tool is used during construction or editing of a SubD and the connection is added even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ AddFaceEdgeConnection() [2/3]

bool ON_SubD::AddFaceEdgeConnection ( ON_SubDFace face,
unsigned int  i,
ON_SubDEdgePtr  eptr 
)

Description: Expert user tool to insert an edge in the face's edge array. Parameters: face - [in] eptr - [in] direction must be set correctly i - [in] index where the edge should be inserted. Returns: true if successful. Remarks: This tool is used during construction or editing of a SubD and the connection is added even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ AddFaceEdgeConnection() [3/3]

bool ON_SubD::AddFaceEdgeConnection ( ON_SubDFace face,
unsigned int  i,
ON_SubDEdgePtr  eptr,
bool  bAddbAddFaceToRelativeVertex0,
bool  bAddbAddFaceToRelativeVertex1 
)

Description: Expert user tool to insert an edge in the face's edge array. Parameters: face - [in] i - [in] index where the edge should be inserted. eptr - [in] direction must be set correctly bAddFaceToRelativeVertex0 - [in] If true, face is appended to the eptr.RelativeVertex(0)'s face array. bAddFaceToRelativeVertex1 - [in] If true, face is appended to the eptr.RelativeVertex(0)'s face array. Returns: true if successful. Remarks: This tool is used during construction or editing of a SubD and the connection is added even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ AddFaceForExperts()

class ON_SubDFace* ON_SubD::AddFaceForExperts ( unsigned  candidate_face_id,
const class ON_SubDEdgePtr edge,
unsigned int  edge_count 
)

Parameters: candidate_face_id - [in] If candidate_face_id is > 0 and is available, the returned face with have id = candidate_face_id. Otherwise a new id will be assigned. edge[] - [in] The edge[] array must be sorted and correct oriented (edge[i].RelativeVertex(1) == edge[(i+1)edge_count].RelativeVertex(0)). edge_count - [in] Must be >= 3.

◆ AddFaceTexturePoints()

bool ON_SubD::AddFaceTexturePoints ( const class ON_SubDFace face,
const class ON_3dPoint texture_points,
size_t  texture_points_count 
) const

Description: Add texture points to a face. Parameters: texture_points - [in] An array of face->EdgeCount() points. texture_points_count - [in] number of elements in texture_points[]. Must be >= face->EdgeCount(). Returns: True if texture points were set. Remarks: This function automatically handles the management of face texture point storage. Texture points are a mutable property on ON_SubDFace.

◆ AddQuadFace() [1/2]

class ON_SubDFace* ON_SubD::AddQuadFace ( class ON_SubDEdge edge0,
class ON_SubDEdge edge1,
class ON_SubDEdge edge2,
class ON_SubDEdge edge3 
)

Parameters: edge0 - [in] edge1 - [in] edge2 - [in] edge3 - [in] The face will be oriented so the boundary has the edges in the order (edge0, edge1, edge2. edge3). Consecutive edges must have a single common vertex. The orientations of the ON_SubDEdgePtr elements in the face's edge list are automatically calculated. Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddQuadFace() [2/2]

class ON_SubDFace* ON_SubD::AddQuadFace ( ON_SubDEdgePtr  edge0,
ON_SubDEdgePtr  edge1,
ON_SubDEdgePtr  edge2,
ON_SubDEdgePtr  edge3 
)

Parameters: edge_count - [in] Must be >= 3. edge0 - [in] edge1 - [in] edge2 - [in] edge3 - [in] The ON_SubDEdgePtr parameters must be oriented so that for consecutive pairs of edges, edge0.RelativeVertex(1) and edges1.RelativeVertex(0) are same vertex. The face will be oriented so the boundary has the edges in the order (edge0, edge1, edge2,edge3). Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddSymmetrySetsToComponentList() [1/2]

unsigned ON_SubD::AddSymmetrySetsToComponentList ( bool  bAddVertexSymmetrySets,
bool  bAddEdgeSymmetrySets,
bool  bAddFaceSymmetrySets,
ON_SimpleArray< ON_COMPONENT_INDEX > &  component_list 
) const

Description: If this SubD is symmetric (this->ContentIsSymmetric() is true), and a component is referenced in the input component_list[], then every element in that component's symmetry set will be in the returned component_list[]. component_list - [in/out] Returns: Number of components added to component_list[].

◆ AddSymmetrySetsToComponentList() [2/2]

unsigned ON_SubD::AddSymmetrySetsToComponentList ( bool  bAddVertexSymmetrySets,
bool  bAddEdgeSymmetrySets,
bool  bAddFaceSymmetrySets,
ON_SimpleArray< ON_SubDComponentPtr > &  component_list 
) const

Description: If this SubD is symmetric (this->ContentIsSymmetric() is true), and a component is referenced in the input component_list[], then every element in that component's symmetry set will be in the returned component_list[]. component_list - [in/out] Returns: Number of components added to component_list[].

◆ AddTriangleFace() [1/2]

class ON_SubDFace* ON_SubD::AddTriangleFace ( class ON_SubDEdge edge0,
class ON_SubDEdge edge1,
class ON_SubDEdge edge2 
)

Parameters: edge0 - [in] edge1 - [in] edge2 - [in] The face will be oriented so the boundary has the edges in the order (edge0, edge1, edge2). Consecutive edges must have a single common vertex. The orientations of the ON_SubDEdgePtr elements in the face's edge list are automatically calculated. Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddTriangleFace() [2/2]

class ON_SubDFace* ON_SubD::AddTriangleFace ( ON_SubDEdgePtr  edge0,
ON_SubDEdgePtr  edge1,
ON_SubDEdgePtr  edge2 
)

Parameters: edge_count - [in] Must be >= 3. edge0 - [in] edge1 - [in] edge2 - [in] The ON_SubDEdgePtr parameters must be oriented so that for consecutive pairs of edges, edge0.RelativeVertex(1) and edges1.RelativeVertex(0) are same vertex. The face will be oriented so the boundary has the edges in the order (edge0, edge1, edge2). Returns: A pointer to the added face. The returned face is managed by the subd.

◆ AddVertex() [1/2]

class ON_SubDVertex* ON_SubD::AddVertex ( const double *  P)

Description: Adds a vertex with tag = ON_SubDVertexTag::Unset.

◆ AddVertex() [2/2]

class ON_SubDVertex* ON_SubD::AddVertex ( ON_SubDVertexTag  vertex_tag,
const double *  P 
)

Description: Adds a vertex with specified tag.

◆ AddVertexForExperts()

class ON_SubDVertex* ON_SubD::AddVertexForExperts ( unsigned int  candidate_vertex_id,
ON_SubDVertexTag  vertex_tag,
const double *  P,
unsigned int  initial_edge_capacity,
unsigned int  initial_face_capacity 
)

Description: Expert user tool to add a vertex with specified information. This function is useful when copying portions of an existing SubD to a new SubD. Parameters: candidate_vertex_id - [in] If candidate_vertex_id is > 0 and is available, the returned value with have id = candidate_vertex_id. Otherwise a new id will be assigned. vertex_tag - [in] Pass ON_SubDVertexTag::Unset if not known. P - [in] nullptr or a 3d point. initial_edge_capacity - [in] Initial capacity of the m_edges[] array. Pass 0 if unknown. initial_face_capacity - [in] Initial capacity of the m_faces[] array. Pass 0 if unknown.

◆ AggregateComponentStatus()

ON_AggregateComponentStatus ON_SubD::AggregateComponentStatus ( ) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ AggregateEdgeAttributes()

unsigned int ON_SubD::AggregateEdgeAttributes ( ) const

Description: Get aggregate edge demographics for the subd. Returns: Bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the subd.

◆ AllocateFaceTexturePoints()

unsigned int ON_SubD::AllocateFaceTexturePoints ( const class ON_SubDFace face) const

Description: Add texture point storage capacity to a face. Parameters: face - [in] The ability to store at least face->EdgeCount() texture points will be added to this face. Returns: Number of texture points that can be set (>= face->EdgeCount()).

◆ Append() [1/3]

unsigned int ON_SubD::Append ( const ON_SubD subd,
double  tolerance,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents 
)

Description: Appends a copy of subd to this and updates Coincident vertices and edges are merged.

Parameters: subd - [in] SubD to append to this.

tolerance - [in] When in doubt, pass 0. Distance tolerance used to consider which vertices in to merge.

prefered_merged_edge_tag - [in] This parameter controls what edge tag is assigned when two boundary edges are merged into a single interior edge. In this case the default is smooth but can be overridden by setting prefered_merged_edge_tag to ON_SubDEdgeTag::Crease.

bMergeAllCoincidentVertices - [in] When in doubt, pass false. If true, all coincident vertices will be merged. If false, only coincident corner vertices and conindident crease edges with at most one face will be merged.

bMarkMergedComponents - [in] If true, then merged components have RuntimeMark() set to true.

bMarkAddedComponents - [in] If true, then added components have RuntimeMark() set to true.

Returns: Number of components (vertices, edges, and faces) added to this.

Remarks: Existing compenent marks on this are erased. Then bMarkMergedComponents and bMarkAddedComponents determine which components get marked.

◆ Append() [2/3]

unsigned int ON_SubD::Append ( const ON_SubD subd,
double  tolerance,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents,
bool  bPermitDisjointAppend,
ON_SimpleArray< ON_SubDComponentPtrPair > *  merge_map 
)

Description: Appends a copy of subd to this and updates Coincident vertices and edges are merged.

Parameters: subd - [in] SubD to append to this.

tolerance - [in] When in doubt, pass 0. Distance tolerance used to consider which vertices in to merge.

prefered_merged_edge_tag - [in] This parameter controls what edge tag is assigned when two boundary edges are merged into a single interior edge. In this case the default is smooth but can be overridden by setting prefered_merged_edge_tag to ON_SubDEdgeTag::Crease.

bMergeAllCoincidentVertices - [in] When in doubt, pass false. If true, all coincident vertices will be merged. If false, only coincident corner vertices and conindident crease edges with at most one face will be merged.

bMarkMergedComponents - [in] If true, then merged components have RuntimeMark() set to true.

bMarkAddedComponents - [in] If true, then added components have RuntimeMark() set to true.

bPermitDisjointAppend - [in] If true, subd is always appended. If false, subd is appended only when there are vertices that can be merged.

merge_map - [out] If not nullptr, merge_map[] is a list of (vertex in this,vertex from subd) pairs.

Returns: Number of components (vertices, edges, and faces) added to this.

Remarks: Existing compenent marks on this are erased. Then bMarkMergedComponents and bMarkAddedComponents determine which components get marked.

◆ Append() [3/3]

unsigned int ON_SubD::Append ( const ON_SubD subd,
double  tolerance,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
const ON_SubDComponentTest this_vertex_filter,
const ON_SubDComponentTest subd_vertex_filter,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents,
bool  bPermitDisjointAppend,
ON_SimpleArray< ON_SubDComponentPtrPair > *  merge_map 
)

Description: Appends a copy of subd to this and updates Coincident vertices and edges are merged.

Parameters: subd - [in] SubD to append to this.

tolerance - [in] When in doubt, pass 0. Distance tolerance used to consider which vertices in to merge.

prefered_merged_edge_tag - [in] This parameter controls what edge tag is assigned when two boundary edges are merged into a single interior edge. In this case the default is smooth but can be overridden by setting prefered_merged_edge_tag to ON_SubDEdgeTag::Crease.

bMergeAllCoincidentVertices - [in] When in doubt, pass false. If true, all coincident vertices will be merged. If false, only coincident corner vertices and conindident crease edges with at most one face will be merged.

this_vertex_filter - [in] When in doubt, pass ON_SubDComponentTest::AllPass. If this_vertex_filter::Passes(v)==false for a vertex in this, then v will not be merged with any vertex from subd.

subd_vertex_filter - [in] When in doubt, pass ON_SubDComponentTester::AllPass. If subd_vertex_filter::Passes(v)==false for a vertex in subd, then v will not be merged with any vertex from this.

bMarkMergedComponents - [in] If true, then merged components have RuntimeMark() set to true.

bMarkAddedComponents - [in] If true, then added components have RuntimeMark() set to true.

bPermitDisjointAppend - [in] If true, subd is always appended. If false, subd is appended only when there are vertices that can be merged.

merge_map - [out] If not nullptr, merge_map[] is a list of (vertex in this,vertex from subd) pairs.

Returns: Number of components (vertices, edges, and faces) added to this.

Remarks: Existing compenent marks on this are erased. Then bMarkMergedComponents and bMarkAddedComponents determine which components get marked.

◆ AppendDisjoint() [1/2]

unsigned int ON_SubD::AppendDisjoint ( const ON_SubD disjoint_subd,
bool  bMarkOriginalComponents,
bool  bMarkAddedComponents 
)

Description: Appends a copy of disjoint_subd to this. No coincidence checking or merging is performed.

Parameters: disjoint_subd - [in] SubD to append to this.

bMarkAddedComponents - [in] If true, then added components have RuntimeMark() set to true.

bMarkOriginalComponents - [in] If true, then the original components have RuntimeMark() set to true.

Returns: Number of components (vertices, edges, and faces) added to this.

Remarks: Existing compenent marks on this are erased. Then bMarkMergedComponents and bMarkAddedComponents determine which components get marked.

◆ AppendDisjoint() [2/2]

unsigned int ON_SubD::AppendDisjoint ( const ON_SubD disjoint_subd,
bool  bMarkOriginalComponents,
bool  bMarkAddedComponents,
ON_SimpleArray< ON_SubDComponentPtrPair > *  merge_map 
)

◆ AutoBridge() [1/2]

unsigned int ON_SubD::AutoBridge ( ON_SubDEdgeTag  bridge_boundary_edge_tag,
const ON_SubDEdgePtr start_edges,
const ON_SubDEdgePtr end_edges,
unsigned int  edge_count,
bool  bMarkNewFaces 
)

Description: Automatically add a collection of faces that patches a hole. Parameters: bridge_boundary_edge_tag - [in] If ON_SubDEdgeTag::Crease, the bridge boundary edges will be creased whenever possible. Otherwise, the patch boundary edges will be smooth whenever possible.
edge_count - [in] Number of edges in the start_edges[] and end_edges[] arrays. start_edges - [in] end_edges - [in] bMarkNewFaces - [in] If true, new faces have their runtime mark set to true. Otherwise new faces are not marked. In all cases, the runtime marks of input faces are not changed. Returns: The number of added faces.

◆ AutoBridge() [2/2]

unsigned int ON_SubD::AutoBridge ( ON_SubDEdgeTag  bridge_boundary_edge_tag,
const ON_SubDEdgePtr  start_edge,
const ON_SubDEdgePtr  end_edge,
bool  bMarkNewFaces 
)

◆ AutomaticMeshToSubD()

static bool ON_SubD::AutomaticMeshToSubD ( ON_SubD::AutomaticMeshToSubDContext  context)
static

Returns: true if SubDs are automatically created when an ON_Mesh is found in the specified context. false otherwise.

◆ AutomaticMeshToSubDRestoreDefaults()

static void ON_SubD::AutomaticMeshToSubDRestoreDefaults ( ON_SubD::AutomaticMeshToSubDContext  context)
static

Parameters: context - [in] If context is ON_SubD::AutomaticMeshToSubDContext::Unset, all defaults will be restored. Otherwise, the default for the specific context will be restored.

◆ AutoMultiPatch() [1/2]

unsigned int ON_SubD::AutoMultiPatch ( ON_SubD::PatchStyle  patch_style,
ON_SubDEdgeTag  patch_boundary_edge_tag,
const ON_SimpleArray< const ON_SubDEdge * > &  unsorted_edges,
bool  bMarkNewFaces 
)

Description: Automatically add a collection of faces that patches a hole. Parameters: patch_style - [in] patch_boundary_edge_tag - [in] If ON_SubDEdgeTag::Crease, the patch boundary edges will be creased whenever possible. Otherwise, the patch boundary edges will be smooth whenever possible.
unsorted_edges[] - [in] An unsorted collection of edges that will be used to generate patch boundaries. bMarkNewFaces - [in] If true, new faces have their runtime mark set to true. Otherwise new faces are not marked. In all cases, the runtime marks of input faces are not changed. Returns: Number of patches added.

◆ AutoMultiPatch() [2/2]

unsigned int ON_SubD::AutoMultiPatch ( ON_SubD::PatchStyle  patch_style,
ON_SubDEdgeTag  patch_edge_tag,
const ON_SimpleArray< ON_SubDEdgePtr > &  unsorted_edges,
bool  bMarkNewFaces 
)

◆ AutoPatch()

const ON_SubDComponentPtr ON_SubD::AutoPatch ( ON_SubD::PatchStyle  patch_style,
ON_SubDEdgeTag  patch_boundary_edge_tag,
const ON_SimpleArray< ON_SubDEdgePtr > &  edges,
bool  bMarkNewFaces 
)

Description: Automatically add a collection of faces that patches a hole. Parameters: patch_style - [in] patch_boundary_edge_tag - [in] If ON_SubDEdgeTag::Crease, the patch boundary edges will be creased whenever possible. Otherwise, the patch boundary edges will be smooth whenever possible.
edges[] - [in] A closed loop of edges that wil become the patch boundary. bMarkNewFaces - [in] If true, new faces have their runtime mark set to true. Otherwise new faces are not marked. In all cases, the runtime marks of input faces are not changed. Returns: If the patch is a single face, the face is returned. If the patch is a ring of quads or triangles around a central vertex, the central vertex is returned. If the patch is a set of faces in some other configuration, a face from that set is returned. If no patch was added, ON_SubDComponentPtr::Null is returned.

◆ BrepForm()

ON_Brep* ON_SubD::BrepForm ( ON_Brep brep = nullptr) const
overridevirtual

virtual

Returns: GetSurfaceBrep( ON_SubDToBrepParameters::Default, nullptr );

Reimplemented from ON_Geometry.

◆ ChangeGeometryContentSerialNumberForExperts()

ON__UINT64 ON_SubD::ChangeGeometryContentSerialNumberForExperts ( bool  bChangePreservesSymmetry)

Description: Change the geometry content serial number to indicate something affecting the geometric shape of the subd has changed. This includes topologial changes, vertex and edge tag changes, and changes to vertex control net locations. Parameters: bChangePreservesSymmetry - [in] When in doubt, pass false. If the change preserves global symmtery, then pass true. (For example, a global subdivide preserves all types of symmetry.) Note well: Transformations do not preserve symmetries that are set with respect to world coordinate systems. Returns: The new value of GeometryConentSerialNumber(). Remarks: The value can change by any amount. Changing the geometry content serial number automatically changes the render content serial number.

◆ ChangeRenderContentSerialNumber()

ON__UINT64 ON_SubD::ChangeRenderContentSerialNumber ( ) const

Description: Change the render content serial number to indicate something affecting only rendered appearance has changed. This includes changes to per face colors, per face materials, texture coordinates, and texture mappings. Remarks: Changing the geometry content serial number automatically changes the render content serial number. If you call ChangeGeometryContentSerialNumberForExperts(), there is no need to also call ChangeRenderContentSerialNumber().

◆ Clear()

void ON_SubD::Clear ( )

Description: Discard all contents of this ON_SubD. Remarks: More efficient than Destroy() if this ON_SubD will be reused soon.

◆ ClearBoundingBox()

void ON_SubD::ClearBoundingBox ( )
overridevirtual

virtual

Description: Clears all saved information that depends on vertex locations, subdivision algorithms, vertex or edge tags, or control net topology.
If you modify any of the above, then call ClearBoundingBox(). Remarks: For ON_SubD objects, ClearBoundingBox() and DestroyRuntimeCache() are identical.

Reimplemented from ON_Geometry.

◆ ClearComponentGroupIds()

unsigned int ON_SubD::ClearComponentGroupIds ( bool  bClearVertexGroupIds,
bool  bClearEdgeGroupIds,
bool  bClearFaceGroupIds 
) const

Descripiton: Sets the m_group_id value to 0 for the specified components. Parameters: bClearVertexGroupIds - [in] If true, m_group_id for every vertex is set to zero. bClearEdgeGroupIds - [in] If true, m_group_id for every edge is set to zero. bClearFaceGroupIds - [in] If true, m_group_id for every face is set to zero. Returns: Number of group id values that were changed.

◆ ClearComponentMarkBits()

unsigned int ON_SubD::ClearComponentMarkBits ( bool  bClearVertexMarkBits,
bool  bClearEdgeMarkBits,
bool  bClearFaceMarkBits 
) const

Descripiton: Sets the m_status.MarkBits() value to 0 for the specified components. Parameters: bClearVertexMarkBits - [in] If true, m_status.MarkBits() for every vertex is set to zero. bClearEdgeMarkBits - [in] If true, m_status.MarkBits() for every edge is set to zero. bClearFaceMarkBits - [in] If true, m_status.MarkBits() for every face is set to zero. Returns: Number of group id values that were changed.

◆ ClearComponentMarks() [1/2]

unsigned int ON_SubD::ClearComponentMarks ( ) const

Descripiton: Clears the m_status.RuntimeMark() for every vertex, edge and face. Returns: Number of marks that were cleared.

◆ ClearComponentMarks() [2/2]

unsigned int ON_SubD::ClearComponentMarks ( bool  bClearVertexMarks,
bool  bClearEdgeMarks,
bool  bClearFaceMarks,
ON_SimpleArray< const class ON_SubDComponentBase * > *  marked_component_list 
) const

Descripiton: Selectively clear m_status.RuntimeMark() Parameters: bClearVertexMarks - [in] If true, m_status.ClearRuntimeMark() is called for every vertex. bClearEdgeMarks - [in] If true, m_status.ClearRuntimeMark() is called for every edge. bClearFaceMarks - [in] If true, m_status.ClearRuntimeMark() is called for every face. marked_component_list - [out] If not nullptr, then pointer to components that were marked are returned in this marked_component_list[] Returns: Number of marks that were cleared.

◆ ClearComponentStates() [1/3]

unsigned int ON_SubD::ClearComponentStates ( ON_COMPONENT_INDEX  component_index,
ON_ComponentStatus  states_to_clear 
) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ ClearComponentStates() [2/3]

unsigned int ON_SubD::ClearComponentStates ( ON_ComponentStatus  states_to_clear) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ ClearComponentStates() [3/3]

unsigned int ON_SubD::ClearComponentStates ( ON_SubDComponentPtr  component_ptr,
ON_ComponentStatus  states_to_clear 
) const

Description: Clear states on an individual component. Parameters: component_ptr - [in] The states will be cleared on this component. states_to_clear - [in] If a state is set in the states_to_clear parameter, the same state will be cleared on the component.
Returns: 0: no state settings changed on the component. 1: some state setting changed on the component.

◆ ClearControlNetComponentTree()

* * void ON_SubD::ClearControlNetComponentTree ( )

◆ ClearEdgeGroupIds()

unsigned int ON_SubD::ClearEdgeGroupIds ( ) const

Descripiton: Sets the m_group_id value to 0 for every edge. Returns: Number of group id values that were changed.

◆ ClearEdgeMarkBits()

unsigned int ON_SubD::ClearEdgeMarkBits ( ) const

Descripiton: Sets the m_status.MarkBits() value to 0 for every edge. Returns: Number of group id values that were changed.

◆ ClearEdgeMarks()

unsigned int ON_SubD::ClearEdgeMarks ( ) const

Descripiton: Clears the m_status.RuntimeMark() for every edge. Returns: Number of marks that were cleared.

◆ ClearEdgeSharpness()

unsigned int ON_SubD::ClearEdgeSharpness ( )

Converts all sharp edges to smooth edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.

Returns
Number of sharp edges that were converted to smooth edges.

◆ ClearEvaluationCache()

void ON_SubD::ClearEvaluationCache ( ) const

Description: Clear all cached evaluation information (meshes, surface points, bounding boxes, ...) that depends on edge tags, vertex tags, and the location of vertex control points.

◆ ClearFaceGroupIds()

unsigned int ON_SubD::ClearFaceGroupIds ( ) const

Descripiton: Sets the m_group_id value to 0 for every face. Returns: Number of group id values that were changed.

◆ ClearFaceMarkBits()

unsigned int ON_SubD::ClearFaceMarkBits ( ) const

Descripiton: Sets the m_status.MarkBits() value to 0 for every face. Returns: Number of group id values that were changed.

◆ ClearFaceMarks()

unsigned int ON_SubD::ClearFaceMarks ( ) const

Descripiton: Clears the m_status.RuntimeMark() for every face. Returns: Number of marks that were cleared.

◆ ClearFacePackIds()

void ON_SubD::ClearFacePackIds ( )

Description: Clear all face pack ids and related information.

◆ ClearFacePackingTopologyHashForExperts()

void ON_SubD::ClearFacePackingTopologyHashForExperts ( ) const

Description: Sets the FacePackingTopologyHash() property to Empty. Experts may need to do this when modifying a face packing. After calling ClearFacePackingTopologyHashForExperts(), call FacePackingIsValid(true) to make sure the modified packing was actually valid and update the FacePackingTopologyHash().

◆ ClearFragmentColors()

void ON_SubD::ClearFragmentColors ( bool  bClearFragmentColorsMappingTag)

Description: Clear all fragment vertex colors Parameters: bClearFragmentColorsMappingTag - [in] When in doubt, pass true. If true, the mapping tag and hash associated with the fragment vertex colors are unset as well.

◆ ClearFragmentTextureCoordinatesTextureSettingsHash()

void ON_SubD::ClearFragmentTextureCoordinatesTextureSettingsHash ( ) const

Description: If a change requires existing fragment texture coordinates to be recalculated, then call ClearFragmentTextureCoordinatesTextureSettingsHash().

◆ ClearFragmentTree()

* * void ON_SubD::ClearFragmentTree ( )

◆ ClearGroupIds()

unsigned int ON_SubD::ClearGroupIds ( ) const

Descripiton: Sets the m_group_id value to 0 for every vertex, edge and face. Returns: Number of marks that were cleared.

◆ ClearHigherSubdivisionLevels()

unsigned int ON_SubD::ClearHigherSubdivisionLevels ( unsigned int  max_level_index)

Description: Remove subdivision levels Parameters: max_level_index - [in] Remove all levels after max_level_index Returns: Number of removed levels.

◆ ClearInactiveLevels()

unsigned ON_SubD::ClearInactiveLevels ( )

Description: Remove all levels except the active level. Returns: Number of removed levels.

◆ ClearLowerSubdivisionLevels()

unsigned int ON_SubD::ClearLowerSubdivisionLevels ( unsigned int  min_level_index)

Description: Remove subdivision levels Parameters: min_level_index - [in] Remove all levels before min_level_index Returns: Number of removed levels.

◆ ClearMarkBits()

unsigned int ON_SubD::ClearMarkBits ( ) const

Descripiton: Sets the m_status.MarkBits() value to 0 for every vertex, edge and face. Returns: Number of marks that were cleared.

◆ ClearPerFaceColors()

unsigned int ON_SubD::ClearPerFaceColors ( ) const

Description: Removes all per face color overrides on the active level. Returns: Number of changed faces. Remarks: Per face colors are a mutable property on ON_SubDFace and are set with ON_SubDFace.SetPerFaceColor().

◆ ClearPerFaceMaterialChannelIndices()

unsigned int ON_SubD::ClearPerFaceMaterialChannelIndices ( )

Description: Removes all per face material channel index overrides on the active level. Returns: Number of changed faces. Remarks: Per face material channel indices are a mutable property on ON_SubDFace and are set with ON_SubDFace.SetMaterialChannelIndex().

◆ ClearSymmetry()

void ON_SubD::ClearSymmetry ( )

Description: Removes all symmetry and component symmetry set information from this subd.

◆ ClearSymmetrySetForExperts() [1/4]

unsigned ON_SubD::ClearSymmetrySetForExperts ( const ON_SubDEdge edge)

Description: Deletes the symmetry set the edge belongs to. Returns: The number of elements in the deleted symmetry set.

◆ ClearSymmetrySetForExperts() [2/4]

unsigned ON_SubD::ClearSymmetrySetForExperts ( const ON_SubDFace face)

Description: Deletes the symmetry set the face belongs to. Returns: The number of elements in the deleted symmetry set.

◆ ClearSymmetrySetForExperts() [3/4]

unsigned ON_SubD::ClearSymmetrySetForExperts ( const ON_SubDVertex vertex)

Description: Deletes the symmetry set the vertex belongs to. Returns: The number of elements in the deleted symmetry set.

◆ ClearSymmetrySetForExperts() [4/4]

unsigned ON_SubD::ClearSymmetrySetForExperts ( ON_SubDComponentPtr  cptr)

Description: Deletes the symmetry set the component belongs to. Returns: The number of elements in the deleted symmetry set.

◆ ClearSymmetrySetNextForExperts() [1/4]

void ON_SubD::ClearSymmetrySetNextForExperts ( const ON_SubDEdge edge)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use ClearSymmetrySet() to delete symmetry sets. Parameters: edge - [in] The edge to unconditionally modify. Returns: True if input was valid. False if input was not valid (see description above).

◆ ClearSymmetrySetNextForExperts() [2/4]

void ON_SubD::ClearSymmetrySetNextForExperts ( const ON_SubDFace face)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use ClearSymmetrySet() to delete symmetry sets. Parameters: face - [in] The face to unconditionally modify. Returns: True if input was valid. False if input was not valid (see description above).

◆ ClearSymmetrySetNextForExperts() [3/4]

void ON_SubD::ClearSymmetrySetNextForExperts ( const ON_SubDVertex vertex)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use ClearSymmetrySet() to delete symmetry sets. Parameters: vertex - [in] The vertex to unconditionally modify. Returns: True if input was valid. False if input was not valid (see description above).

◆ ClearSymmetrySetNextForExperts() [4/4]

void ON_SubD::ClearSymmetrySetNextForExperts ( ON_SubDComponentPtr  component)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use ClearSymmetrySet() to delete symmetry sets. Parameters: component - [in] The component to unconditionally modify. Returns: True if input was valid. False if input was not valid (see description above).

◆ ClearSymmetrySetsForExperts()

void ON_SubD::ClearSymmetrySetsForExperts ( )

Description: Removes the component symmetry set information. The Symmetry() property is not changed.

◆ ClearTexturePoints()

unsigned int ON_SubD::ClearTexturePoints ( ) const

Description: Delete texture points from faces. Returns: Number of faces that had texture points.

◆ ClearVertexGroupIds()

unsigned int ON_SubD::ClearVertexGroupIds ( ) const

Descripiton: Sets the m_group_id value to 0 for every vertex. Returns: Number of group id values that were changed.

◆ ClearVertexMarkBits()

unsigned int ON_SubD::ClearVertexMarkBits ( ) const

Descripiton: Sets the m_status.MarkBits() value to 0 for every vertex. Returns: Number of group id values that were changed.

◆ ClearVertexMarks()

unsigned int ON_SubD::ClearVertexMarks ( ) const

Descripiton: Clears the m_status.RuntimeMark() for every vertex. Returns: Number of marks that were cleared.

◆ ColorsMappingTag()

const ON_MappingTag ON_SubD::ColorsMappingTag ( ) const

Returns: This mapping tag ideitifies the color mapping used to set fragment per vertex colors.

◆ CombineBoundaryEdgeChains() [1/4]

unsigned int ON_SubD::CombineBoundaryEdgeChains ( const ON_SimpleArray< const ON_SubDEdge * > &  edge_chain0,
const ON_SimpleArray< const ON_SubDEdge * > &  edge_chain1,
double  combined_edge_location,
ON_SubDEdgeTag  combined_edge_tag 
)

Description: Combine (merge / weld) two boundary edges in this subd into a single edge. Parameters: edge_chain0 - [in] A chain of boundary edges. These will survive as the combined edges. edge_chain1 - [in] A chain of boundary edges. These edges will be deleted. edge_chain1 and edge_chain2 must have the same number of edges. combined_edge_location - [in] a value between 0 and 1. 0 = combined edge location = edge0 1 = combined edge location = edge1 combined_edge_tag - [in] Preferred tag for the combined edge Returns: Number of combined edges.

◆ CombineBoundaryEdgeChains() [2/4]

unsigned int ON_SubD::CombineBoundaryEdgeChains ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  edge_chain0,
const ON_SimpleArray< ON_COMPONENT_INDEX > &  edge_chain1,
double  combined_edge_location,
ON_SubDEdgeTag  combined_edge_tag 
)

Description: Combine (merge / weld) two boundary edges in this subd into a single edge. Parameters: edge_chain0 - [in] A chain of boundary edges. These will survive as the combined edges. edge_chain1 - [in] A chain of boundary edges. These edges will be deleted. edge_chain1 and edge_chain2 must have the same number of edges. combined_edge_location - [in] a value between 0 and 1. 0 = combined edge location = edge0 1 = combined edge location = edge1 combined_edge_tag - [in] Preferred tag for the combined edge Returns: Number of combined edges.

◆ CombineBoundaryEdgeChains() [3/4]

unsigned int ON_SubD::CombineBoundaryEdgeChains ( const ON_SimpleArray< ON_SubDComponentPtr > &  edge_chain0,
const ON_SimpleArray< ON_SubDComponentPtr > &  edge_chain1,
double  combined_edge_location,
ON_SubDEdgeTag  combined_edge_tag 
)

Description: Combine (merge / weld) two boundary edges in this subd into a single edge. Parameters: edge_chain0 - [in] A chain of boundary edges. These will survive as the combined edges. edge_chain1 - [in] A chain of boundary edges. These edges will be deleted. edge_chain1 and edge_chain2 must have the same number of edges. combined_edge_location - [in] a value between 0 and 1. 0 = combined edge location = edge0 1 = combined edge location = edge1 combined_edge_tag - [in] Preferred tag for the combined edge Returns: Number of combined edges.

◆ CombineBoundaryEdgeChains() [4/4]

unsigned int ON_SubD::CombineBoundaryEdgeChains ( const ON_SimpleArray< ON_SubDEdgePtr > &  edge_chain0,
const ON_SimpleArray< ON_SubDEdgePtr > &  edge_chain1,
double  combined_edge_location,
ON_SubDEdgeTag  combined_edge_tag 
)

Description: Combine (merge / weld) two boundary edges in this subd into a single edge. Parameters: edge_chain0 - [in] A chain of boundary edges. These will survive as the combined edges. edge_chain1 - [in] A chain of boundary edges. These edges will be deleted. edge_chain1 and edge_chain2 must have the same number of edges. combined_edge_location - [in] a value between 0 and 1. 0 = combined edge location = edge0 1 = combined edge location = edge1 combined_edge_tag - [in] Preferred tag for the combined edge Returns: Number of combined edges.

◆ CombineBoundaryEdges() [1/2]

bool ON_SubD::CombineBoundaryEdges ( const ON_SubDEdge edge0,
const ON_SubDEdge edge1,
double  merged_edge_location,
ON_SubDEdgeTag  merged_edge_tag 
)

Description: Combine (merge / weld) two boundary edges in this subd into a single edge. Parameters: edge0 - [in] A boundary edge. This edge will become the combined edge. edge1 - [in] A boundary edge. This edge will be deleted. combined_edge_location - [in] a value between 0 and 1. 0 = combined edge location = edge0 1 = combined edge location = edge1 combined_edge_tag - [in] Preferred tag for the combined edge Returns: If successful, true is returned. Remarks: The relative orientation of the edges is determined by inspecting the topology and control net directions. If you want more control over edge orientation, the use the version that has ON_SubDEdgePtr parameters.

◆ CombineBoundaryEdges() [2/2]

bool ON_SubD::CombineBoundaryEdges ( const ON_SubDEdgePtr  edge0,
const ON_SubDEdgePtr  edge1,
double  merged_edge_location,
ON_SubDEdgeTag  merged_edge_tag 
)

Description: Combine (merge / weld) two boundary edges in this subd into a single edge. Parameters: edge0 - [in] A boundary edge. This edge will become the combined edge. edge1 - [in] A boundary edge. This edge will be deleted. combined_edge_location - [in] a value between 0 and 1. 0 = combined edge location = edge0 1 = combined edge location = edge1 combined_edge_tag - [in] Preferred tag for the combined edge Returns: If successful, true is returned.

◆ CombineBoundaryVertices() [1/3]

unsigned int ON_SubD::CombineBoundaryVertices ( const ON_SimpleArray< const ON_SubDVertex * > &  ci_list,
ON_SubDVertexTag  combined_vertex_tag 
)

Description: Combine (merge / weld) coincident vertices into single vertex. Parameters: ci_list - [in] A list of vertices to consider for combining. combined_vertex_tag - [in] Suggested vertex tag for combined vertices. Returns: Number of combined vertices that were created.

◆ CombineBoundaryVertices() [2/3]

unsigned int ON_SubD::CombineBoundaryVertices ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  vertex_list,
ON_SubDVertexTag  combined_vertex_tag 
)

Description: Combine (merge / weld) coincident vertices into single vertices. Parameters: vertex_list - [in] A list of vertices to consider for combining. combined_vertex_tag - [in] Suggested vertex tag for combined vertices. Returns: Number of merges performed.

◆ CombineBoundaryVertices() [3/3]

bool ON_SubD::CombineBoundaryVertices ( const ON_SubDVertex vertex0,
const ON_SubDVertex vertex1,
ON_3dPoint  combined_vertex_control_net_point,
ON_SubDVertexTag  combined_vertex_tag 
)

Description: Combine (merge / weld) two boundary vertices in this subd into a single vertex. Parameters: vertex0 - [in] A boundary vertex - will survive as the merged vertex vertex1 - [in] A boundary vertex - will be deleted combined_vertex_control_net_point - [in] combined vertex's control net point Pass ON_3dPoint::UnsetPoint to use the average of the input control net points. combined_vertex_tag - [in] Suggested vertex tag. Returns: If the vertices are combined, true is returned. Othwise, false is returned.

◆ ComponentCount()

unsigned ON_SubD::ComponentCount ( ON_SubDComponentPtr::Type  component_type) const

ON_SubD::VertexCount(), ON_SubD::EdgeCount(), or ON_SubD::FaceCount() is returned, depending on the value of component_type.

Parameters
component_type
Returns
The first component of the specified type.

◆ ComponentIndex()

ON_COMPONENT_INDEX ON_SubD::ComponentIndex ( ) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ ComponentPtrFromComponentIndex() [1/3]

unsigned int ON_SubD::ComponentPtrFromComponentIndex ( const ON_COMPONENT_INDEX ci_list,
size_t  ci_count,
bool  bIncludeVertices,
bool  bIncludeEdges,
bool  bIncludeFaces,
ON_SimpleArray< ON_SubDComponentPtr > &  cptr_list 
) const

◆ ComponentPtrFromComponentIndex() [2/3]

unsigned int ON_SubD::ComponentPtrFromComponentIndex ( const ON_COMPONENT_INDEX ci_list,
size_t  ci_count,
ON_SimpleArray< ON_SubDComponentPtr > &  cptr_list 
) const

◆ ComponentPtrFromComponentIndex() [3/3]

const ON_SubDComponentPtr ON_SubD::ComponentPtrFromComponentIndex ( ON_COMPONENT_INDEX  component_index) const

Component (Vertex, Edge, Face) access

◆ ComponentRingEdgeCount()

static unsigned int ON_SubD::ComponentRingEdgeCount ( size_t  component_ring_count)
static

Returns: Number of edges in an component ring returned by ON_SubD::GetVertexComponentRing();

◆ ComponentRingFaceCount()

static unsigned int ON_SubD::ComponentRingFaceCount ( size_t  component_ring_count)
static

Returns: Number of faces in an component ring returned by ON_SubD::GetVertexComponentRing();

◆ ComponentRingIsValid()

static bool ON_SubD::ComponentRingIsValid ( const ON_SubDComponentPtr component_ring,
size_t  component_ring_count 
)
static

◆ ComponentStatusSerialNumber()

ON__UINT64 ON_SubD::ComponentStatusSerialNumber ( ) const

Returns: A runtime serial number that is incremented every time a component status (locked, hidden, selected, highlighted, ...) is changed.

◆ ContentIsSymmetric()

bool ON_SubD::ContentIsSymmetric ( ) const

Returns: True if this subd has the symmetry specified by this->Symmetry().

◆ ControlPointRadiusFromSurfacePointRadius()

static double ON_SubD::ControlPointRadiusFromSurfacePointRadius ( unsigned int  point_count,
double  surface_point_radius 
)
static

Parameters: point_count - [in] >= 3 Number of control points in a regular planar SubD ngon with creased edges. surface_radius - [in] Distance from an ngon surface point to the ngon center. Returns: Distance from an ngon control point to the ngon center. See Also: ON_SubD::ControlPointRadiusFromSurfacePointRadius()

◆ CopyEvaluationCacheForExperts()

bool ON_SubD::CopyEvaluationCacheForExperts ( const ON_SubD src)

Description: This function copies cached evaluations of component subdivision points and limit surface information from src to this. Typically this is done for performance critical situations like control point editing.

◆ CreateControlNetFromNurbsCurves() [1/3]

static ON_SubD* ON_SubD::CreateControlNetFromNurbsCurves ( const ON_ClassArray< ON_NurbsCurve > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of nurbs curve control nets.

◆ CreateControlNetFromNurbsCurves() [2/3]

static ON_SubD* ON_SubD::CreateControlNetFromNurbsCurves ( const ON_ObjectArray< ON_NurbsCurve > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of nurbs curve control nets.

◆ CreateControlNetFromNurbsCurves() [3/3]

static ON_SubD* ON_SubD::CreateControlNetFromNurbsCurves ( const ON_SimpleArray< const ON_NurbsCurve * > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of nurbs curve control nets.

◆ CreateControlNetFromPolylines() [1/5]

static ON_SubD* ON_SubD::CreateControlNetFromPolylines ( const ON_ClassArray< ON_Polyline > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of polylines.

◆ CreateControlNetFromPolylines() [2/5]

static ON_SubD* ON_SubD::CreateControlNetFromPolylines ( const ON_ClassArray< ON_PolylineCurve > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of polylines.

◆ CreateControlNetFromPolylines() [3/5]

static ON_SubD* ON_SubD::CreateControlNetFromPolylines ( const ON_ObjectArray< ON_PolylineCurve > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of polylines.

◆ CreateControlNetFromPolylines() [4/5]

static ON_SubD* ON_SubD::CreateControlNetFromPolylines ( const ON_SimpleArray< const ON_Polyline * > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of polylines.

◆ CreateControlNetFromPolylines() [5/5]

static ON_SubD* ON_SubD::CreateControlNetFromPolylines ( const ON_SimpleArray< const ON_PolylineCurve * > &  polylines,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd control net through a list of polylines.

◆ CreateCylinder()

static ON_SubD* ON_SubD::CreateCylinder ( const class ON_Cylinder cylinder,
unsigned  circumference_face_count,
unsigned  height_face_count,
ON_SubDEndCapStyle  end_cap_style,
ON_SubDEdgeTag  end_cap_edge_tag,
ON_SubDComponentLocation  radius_location,
ON_SubD destination_subd 
)
static

◆ CreateFromBoundary()

static ON_SubD* ON_SubD::CreateFromBoundary ( const class ON_Curve curve,
ON_SubD destination_subd 
)
static

Description: Uses the input surface to define a SubD. Parameters: curve - [in] A closed curve. If the closed curve is a uniform cubic periodic NURBS curve, then the boundary of the returned SubD will exactly match that curve. Otherwise, ON_SubD::CreateSubDFriendlyCurve(curve) will be the boundary. destination_subd - [in] Can be nullptr Returns: SubD with specified boundary or nullptr if input is not valid.

◆ CreateFromBoundaryControlPoints()

static ON_SubD* ON_SubD::CreateFromBoundaryControlPoints ( const class ON_SimpleArray< ON_3dPoint > &  boundary_control_points,
ON_SubD destination_subd 
)
static

Description: Uses the input surface to define a SubD. Parameters: boundary_control_points - [in] Boundary control points. destination_subd - [in] Can be nullptr Returns: SubD with specified boundary or nullptr if input is not valid.

◆ CreateFromLoftCurves() [1/3]

static ON_SubD* ON_SubD::CreateFromLoftCurves ( const ON_ClassArray< ON_NurbsCurve > &  curves,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

◆ CreateFromLoftCurves() [2/3]

static ON_SubD* ON_SubD::CreateFromLoftCurves ( const ON_ObjectArray< ON_NurbsCurve > &  curves,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

◆ CreateFromLoftCurves() [3/3]

static ON_SubD* ON_SubD::CreateFromLoftCurves ( const ON_SimpleArray< const ON_NurbsCurve * > &  curves,
bool  bPeriodicClosedLoft,
bool  bCorners,
unsigned int  span_divisions,
ON_SubD destination_subd 
)
static

Description: Loft a subd through curves Parameters: curves - [in] A list of compatible SubD-friendly NURBS curves. bPeriodicClosedLoft - [in] bCorners - [in] If true, and bPeriodicClosedLoft is false, and the curves are open, then the 4 corners will will be tagged ON_SubDVertexTag::Corner. span_divisions - [in] number of subd divisions between input shape locations

◆ CreateFromMesh()

static ON_SubD* ON_SubD::CreateFromMesh ( const class ON_Mesh level_zero_mesh,
const class ON_SubDFromMeshParameters from_mesh_parameters,
ON_SubD subd 
)
static

Description: Uses the input mesh to define the level zero control polygon. Parameters: level_zero_mesh - [in] from_mesh_parameters - [in] To get the smoothest possible result, pass nullptr or ON_SubDFromMeshParameters::Smooth. To get a sub-D with interior creases use other static ON_SubDFromMeshParameters values or create one with custom settings.

◆ CreateFromSurface()

static ON_SubD* ON_SubD::CreateFromSurface ( const class ON_Surface surface,
const ON_SubDFromSurfaceParameters from_surface_parameters,
ON_SubD destination_subd 
)
static

Description: Create a subd that approximates the surface. If the surface is a subd friendly NURBS surface and bCorners is true, then the subd and input surface will have the same geometry. Parameters: surface - [in] method - [in] Selects the method used to calculate the subd. bCorners - [in] If the surface is open, then the corner vertices with be tagged as ON_SubD::VertexTagCorner. This makes the resulting subd have sharp corners to match the appearance of the input surface.

◆ CreateRotateSymmetryFromTwoFacesAndAxis()

const ON_Symmetry ON_SubD::CreateRotateSymmetryFromTwoFacesAndAxis ( unsigned  primary_face_id,
unsigned  secondary_face_id,
ON_Line  rotation_axis,
double  cleanup_tolerance 
) const

Description: Make the primary motif from this and a symmetry. Parameters: first_face_id - [in] Id of a face in the primary motif. secondary_face_id - [in] Id of the face that that primary_face rotates to or that rotates to primary face. rotate_axis - [in] Axis for the rotate symmetry cleanup_tolerance - [in] Symmetric object cleanup tolerance. When in doubt, pass 0. Returns: If successful, a symmetry with type ON_Symmetry::Type::NewRotate is returned and the faces in the primary motif have Mark() = true. Otherwise, ON_Symmetry::Unset is returned and all components have Mark() = false.

◆ CreateSubDBox() [1/2]

static ON_SubD* ON_SubD::CreateSubDBox ( const ON_3dPoint  corners[8],
double  edge_sharpness,
unsigned int  facecount_x,
unsigned int  facecount_y,
unsigned int  facecount_z,
ON_SubD destination_subd 
)
static

Description: Creates a SubD box Parameters: corners - [in] Box corners. The bottom quad is specified by the first 4 points and the top quad specified by the last 4 points. edge_sharpness - [in] If edge_sharpness = ON_SubDEdgeSharpness::SmoothValue, the edges where box sides meet will be smooth. If ON_SubDEdgeSharpness::SmoothValue < edge_sharpness <= ON_SubDEdgeSharpenss::MaximumValue, the edges where box sides meet will have the specified sharpness. If edge_sharpness = ON_SubDEdgeSharpenss::CreaseValue, the edges where box sides meet will be creases. facecount_x - [in] Number of faces in x direction facecount_y - [in] Number of faces in y direction facecount_z - [in] Number of faces in z direction destination_subd [out] - If destination_subd is not null, the SubD box is saved in this instance. Returns: Pointer to the resulting SubD if successful Null for error

◆ CreateSubDBox() [2/2]

static ON_SubD* ON_SubD::CreateSubDBox ( const ON_3dPoint  corners[8],
ON_SubDEdgeTag  edge_tag,
unsigned int  facecount_x,
unsigned int  facecount_y,
unsigned int  facecount_z,
ON_SubD destination_subd 
)
static

Description: Creates a SubD box Parameters: corners - [in] Box corners. The bottom quad is specified by the first 4 points and the top quad specified by the last 4 points. edge_tag - [in] If edge_tag = ON_SubDEdgeTag::Crease, then the box will have creases and corners. Otherwise the box will be smooth. facecount_x - [in] Number of faces in x direction facecount_y - [in] Number of faces in y direction facecount_z - [in] Number of faces in z direction destination_subd [out] - If destination_subd is not null, make the SubD box there Returns: Pointer to the resulting SubD if successful Null for error

◆ CreateSubDFriendlyCurve() [1/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const class ON_Curve curve,
class ON_NurbsCurve destination_curve 
)
static

◆ CreateSubDFriendlyCurve() [2/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const class ON_Curve curve,
int  cv_count,
bool  bPeriodicClosedCurve,
class ON_NurbsCurve destination_curve 
)
static

Description:

Parameters: curve - [in] curve to rebuild as a SubD friendly curve. cv_count - [in] Desired number of control points. 0: automatic >0: Number of control points in the SubD friendly curve. If bPeriodicClosedCurve is true, the number must be >= 6, otherwise the number must be >= 4. bPeriodicClosedCurve - [in] True if the SubD friendly curve should be closed and periodic. False in all other cases. destination_curve - [in] If destination_curve is not nullptr, the SubD friendly curve is created in destination_curve. Otherwise the SubD friendly curve is allocated on heap. Returns: A pointer to the SubD friendly curve. Remarks: A "natural" spline has zero 2nd derivatives (and hence zero curvature) at the start and end. A "periodic" spline has unclampled periodic knots and periodic control points.

◆ CreateSubDFriendlyCurve() [3/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const class ON_Curve curve,
int  cv_count,
class ON_NurbsCurve destination_curve 
)
static

◆ CreateSubDFriendlyCurve() [4/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const double *  points,
size_t  point_count,
int  point_stride,
bool  bInterpolatePoints,
bool  bPeriodicClosedCurve,
class ON_NurbsCurve destination_curve 
)
static

Description: Expert user tool to create a NURBS curve that is suitable for calculations like lofting SubD objects through a sequence of curves. Parameters: point_count - [in] >= 2 point_stride - [in] abs(point_stride) >= 3 points[] - [in] Adjacent points must not be equal. If bPeriodicClosedCurve is false, there must be at least two points. If bPeriodicClosedCurve is true, there must be at least three points and it is not necessary to duplicate the first and last points. When bPeriodicClosedCurve is true and the first and last points are equal, the duplicate last point is automatically ignored. bInterpolatePoints -[in] True if the curve should interpolate the points. False if points[] specify control point locations. In either case, the curve will begin at the first point and end at the last point. bPeriodicClosedCurve - [in] true to create a periodic closed curve. Do not duplicate the start/end point in the point[] input. destination_curve - [in] If destination_curve is not nullptr, then the resulting curve will be created in destination_curve. Returns: If the input is valid, then a uniform cubic NURBS curve with point_count+2 control points and unclamped knots is returned. If the input is not valid, nullptr is returned. Remarks: When destination_curve is nullptr, the returned curve is on the heap and the caller must manage it.

◆ CreateSubDFriendlyCurve() [5/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const double *  points,
size_t  point_count,
int  point_stride,
bool  bInterpolatePoints,
bool  bPeriodicClosedCurve,
const bool *  creases,
class ON_NurbsCurve destination_curve 
)
static

Description: Expert user tool to create a NURBS curve that is suitable for calculations like lofting SubD objects through a sequence of curves. Parameters: point_count - [in] >= 2 point_stride - [in] abs(point_stride) >= 3 points[] - [in] Adjacent points must not be equal. If bPeriodicClosedCurve is false, there must be at least two points. If bPeriodicClosedCurve is true, there must be at least three points and it is not necessary to duplicate the first and last points. When bPeriodicClosedCurve is true and the first and last points are equal, the duplicate last point is automatically ignored. bInterpolatePoints -[in] True if the curve should interpolate the points. False if points[] specify control point locations. In either case, the curve will begin at the first point and end at the last point. bPeriodicClosedCurve - [in] true to create a periodic closed curve. Do not duplicate the start/end point in the point[] input. creases[] - [in] If creases is nullptr, this parameter is ignored. If bPeriodicClosedCurve is true, this parameter is ignored. Otherwise creases[] is an array of point_count bools and when creases[i] is true there will be a natural crease/kink at the corresponding point. The values of creases[0] and creases[point_count-1] are ignored. destination_curve - [in] If destination_curve is not nullptr, then the resulting curve will be created in destination_curve. Returns: If the input is valid, then a uniform cubic NURBS curve with point_count+2 control points and unclamped knots is returned. If the input is not valid, nullptr is returned. Remarks: When destination_curve is nullptr, the returned curve is on the heap and the caller must manage it.

◆ CreateSubDFriendlyCurve() [6/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const ON_3dPoint points,
size_t  point_count,
bool  bInterpolatePoints,
bool  bPeriodicClosedCurve,
class ON_NurbsCurve destination_curve 
)
static

Description: Create a NURBS curve that is suitable for calculations like lofting SubD objects through a sequence of curves. Parameters: point_count - [in] Must be >= 2. points[] - [in] Adjacent points must not be equal. If bPeriodicClosedCurve is false, there must be at least two points. If bPeriodicClosedCurve is true, there must be at least three points and it is not necessary to duplicate the first and last points. When bPeriodicClosedCurve is true and the first and last points are equal, the duplicate last point is automatically ignored. bInterpolatePoints -[in] True if the curve should interpolate the points. False if points[] specify control point locations. In either case, the curve will begin at the first point and end at the last point. bPeriodicClosedCurve - [in] true to create a periodic closed curve. Do not duplicate the start/end point in the point[] input. destination_curve - [in] If destination_curve is not nullptr, then the resulting curve will be created in destination_curve. Returns: If the input is valid, then a uniform cubic NURBS curve with unclamped knots is returned. If the input is not valid, nullptr is returned. Remarks: When destination_curve is nullptr, the returned curve is on the heap and the caller must manage it.

◆ CreateSubDFriendlyCurve() [7/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const ON_SimpleArray< ON_3dPoint > &  points,
bool  bInterpolatePoints,
bool  bPeriodicClosedCurve,
class ON_NurbsCurve destination_curve 
)
static

Description: Create a NURBS curve that is suitable for calculations like lofting SubD objects through a sequence of curves. Parameters: points[] - [in] Adjacent points must not be equal. If bPeriodicClosedCurve is false, there must be at least two points. If bPeriodicClosedCurve is true, there must be at least three points and it is not necessary to duplicate the first and last points. When bPeriodicClosedCurve is true and the first and last points are equal, the duplicate last point is automatically ignored. bInterpolatePoints -[in] True if the curve should interpolate the points. False if points[] specify control point locations. In either case, the curve will begin at the first point and end at the last point. bPeriodicClosedCurve - [in] true to create a periodic closed curve. destination_curve - [in] If destination_curve is not nullptr, then the resulting curve will be created in destination_curve. Returns: If the input is valid, then a uniform cubic NURBS curve with unclamped knots is returned. If the input is not valid, nullptr is returned. Remarks: When destination_curve is nullptr, the returned curve is on the heap and the caller must manage it.

◆ CreateSubDFriendlyCurve() [8/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( const ON_SubDEdgePtr edge_chain,
size_t  edge_count,
class ON_NurbsCurve destination_curve 
)
static

Description: Create a NURBS curve that close to being on the SubD surface. Parameters: edge_count edge_chain[] - [in] An edge chain. edge[i].RelativeVertex(1) == edge[i+1].RelativeVertex(0). destination_curve - [in] If destination_curve is not nullptr, then the resulting curve will be created in destination_curve. Returns: If the input is valid, then a cubic NURBS curve is returned. Any time there is a vertex that is a crease with a smooth edge or any type of corner, then corresponding location on the curve will have a triple knot. If the input is not valid, nullptr is returned. Remarks: When destination_curve is nullptr, the returned curve is on the heap and the caller must manage it.

◆ CreateSubDFriendlyCurve() [9/9]

static class ON_NurbsCurve* ON_SubD::CreateSubDFriendlyCurve ( ON_SimpleArray< ON_SubDEdgePtr > &  edge_chain,
class ON_NurbsCurve destination_curve 
)
static

◆ CreateSubDFriendlyIsoCurves()

static bool ON_SubD::CreateSubDFriendlyIsoCurves ( const class ON_Surface surface,
int  iso_dir,
ON_ClassArray< ON_NurbsCurve > &  loft_curves,
bool &  bPeriodicClosedLoft,
ON_SimpleArray< bool > &  loft_creases,
ON_SimpleArray< double > &  loft_parameters 
)
static

Description: Creates a list of SubD friendly nurbs curves that can be used to loft a SubD fit to the input surface. Parameters: surface - [in] iso_dir - [in] surface parameter direction for the loft_curves[] loft_curves - [out] A list of non-rational NURBS curves that can be lofted into a SubD friendly surface. Each curve must be either a degree 3 subd-friendly curve or a degree 1 polyline. bPeriodicClosedLoft - [out] True if a closed periodic lofted surface should be created throught loft_curves[]. In this case loft_creases.Count() = 0. loft_creases -[out] If the surface has creases, then a loft_creases.Count() = loft_curves.Count() and loft_curves[i] is a crease when loft_crease[i] is true. Otherwise loft_creases.Count() = 0. loft_parameters - [out] The curve loft_curves[i] is a SubD friendly fit to the curve surface.IsoCurve(iso_dir, loft_parameters[i]); These values are for use to build a correspondence between surface and any resulting loft. Up to an domain change, the SubD friendly loft will have its parameters completely determined by loft_creases.Count(), loft_creases[], and bPeriodicClosedLoft. Returns: true if loft_curves[] and related information was successfully calculated.

◆ CreateSubDFriendlySurface() [1/5]

static class ON_NurbsSurface* ON_SubD::CreateSubDFriendlySurface ( const class ON_Surface surface,
class ON_NurbsSurface destination_surface 
)
static

Description: Create a bicubic subd friendly surface by lofting through subd friendly cubic curves. Parameters: cubic_curves - [in] SubD friendly cubic curves. bPeriodicClosedLoft - [in] If true, the returned surface will be a periodic loft through the curves. destination_surface - [in] If not nullptr, the SubD friendly surface will be created in destination_surface

◆ CreateSubDFriendlySurface() [2/5]

static class ON_NurbsSurface* ON_SubD::CreateSubDFriendlySurface ( const ON_ClassArray< ON_NurbsCurve > &  cubic_curves,
bool  bPeriodicClosedLoft,
class ON_NurbsSurface destination_surface 
)
static

Description: Create a bicubic subd friendly surface by lofting through subd friendly cubic curves. Parameters: cubic_curves - [in] SubD friendly cubic curves. bPeriodicClosedLoft - [in] If true, the returned surface will be a periodic loft through the curves. destination_surface - [in] If not nullptr, the SubD friendly surface will be created in destination_surface

◆ CreateSubDFriendlySurface() [3/5]

static class ON_NurbsSurface* ON_SubD::CreateSubDFriendlySurface ( const ON_ObjectArray< ON_NurbsCurve > &  cubic_curves,
bool  bPeriodicClosedLoft,
class ON_NurbsSurface destination_surface 
)
static

Description: Create a bicubic subd friendly surface by lofting through subd friendly cubic curves. Parameters: cubic_curves - [in] SubD friendly cubic curves. bPeriodicClosedLoft - [in] If true, the returned surface will be a periodic loft through the curves. destination_surface - [in] If not nullptr, the SubD friendly surface will be created in destination_surface

◆ CreateSubDFriendlySurface() [4/5]

static class ON_NurbsSurface* ON_SubD::CreateSubDFriendlySurface ( const ON_SimpleArray< const ON_NurbsCurve * > &  cubic_curves,
bool  bPeriodicClosedLoft,
class ON_NurbsSurface destination_surface 
)
static

Description: Create a bicubic subd friendly surface by lofting through subd friendly cubic curves. Parameters: cubic_curves - [in] SubD friendly cubic curves. bPeriodicClosedLoft - [in] If true, the returned surface will be a periodic loft through the curves. destination_surface - [in] If not nullptr, the SubD friendly surface will be created in destination_surface

◆ CreateSubDFriendlySurface() [5/5]

static class ON_NurbsSurface* ON_SubD::CreateSubDFriendlySurface ( const ON_SimpleArray< const ON_NurbsCurve * > &  cubic_curves,
bool  bPeriodicClosedLoft,
const bool *  creases,
class ON_NurbsSurface destination_surface 
)
static

Description: Create a bicubic subd friendly surface by lofting through subd friendly cubic curves. Parameters: cubic_curves - [in] SubD friendly cubic curves. bPeriodicClosedLoft - [in] If true, the returned surface will be a periodic loft through the curves. creases - [in] If bPeriodicClosedLoft is false and creases is not nullptr, then it must be an array of cubic_curves.Count() bools. In this case, if creases[i] is true, then the returned surface will have a crease along cubic_curves[i]. destination_surface - [in] If not nullptr, the SubD friendly surface will be created in destination_surface

◆ CreateSubDGlobeSphere()

static ON_SubD* ON_SubD::CreateSubDGlobeSphere ( const ON_Sphere  sphere,
ON_SubDComponentLocation  vertex_location,
unsigned  axial_face_count,
unsigned  equatorial_face_count,
ON_SubD destination_subd 
)
static

Creates a SubD sphere made from polar triangle fans and bands of quads. The result resembles a globe with triangle fans at the poles and the edges forming latitude parallels and longitude meridians.

Parameters
sphere
vertex_locationIf vertex_location = ON_SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
axial_face_countNumber of faces along the sphere's meridians. (axial_face_count >= 2) For example, if you wanted each face to span 30 degrees of latitude, you would pass 6 (=180 degrees/30 degrees) for axial_face_count.
equatorial_face_countNumber of faces around the sphere's parallels. (equatorial_face_count >= 3) For example, if you wanted each face to span 30 degrees of longitude, you would pass 12 (=360 degrees/30 degrees) for equatorial_face_count.
destination_subdIf this pointer is not nullptr, the SubD globe is saved in this instance. Otherwise a new SubD is created.
Returns
If the input is valid, pointer to the SubD globe sphere is returned. Otherwise nullptr is returned.

◆ CreateSubDIcosahedron()

static ON_SubD* ON_SubD::CreateSubDIcosahedron ( const ON_Sphere  sphere,
ON_SubDComponentLocation  vertex_location,
ON_SubD destination_subd 
)
static

Creates a SubD sphere based on an icosohedron (20 triangular faces and 5 valent vertices). This is a goofy topology for a Catmull Clark subdivision surface (all triangles, all vertices have 5 edges). You may want to consider using the much behaved result from ON_SubD::CreateSubDQuadSphere(sphere, vertex_location, 1, destination_subd) or even the result from ON_SubD::CreateSubDGlobeSphere().

Parameters
sphereLocation, size and orientation of the sphere that circumscribes the icosahedron.
vertex_locationIf vertex_location = ON_SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
destination_subdIf this pointer is not nullptr, the SubD icosahedron is saved in this instance. Otherwise a new SubD is created.
Returns
If the input is valid, pointer to the SubD icosahedron is returned. Otherwise nullptr is returned.

◆ CreateSubDQuadSphere()

static ON_SubD* ON_SubD::CreateSubDQuadSphere ( const ON_Sphere  sphere,
ON_SubDComponentLocation  vertex_location,
unsigned  quad_subdivision_level,
ON_SubD destination_subd 
)
static

Creates a SubD sphere made from quad faces.

Parameters
sphereLocation, size and orientation of the sphere.
vertex_locationIf vertex_location = ON_SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere.Otherwise the limit surface points will be on the sphere.
quad_subdivision_levelThe resulting sphere will have 6*4^subdivision_level quads. (0 for 6 quads, 1 for 24 quads, 2 for 96 quads, ...).
destination_subdIf destination_subd is not null, the SubD sphere is saved in this instance.
Returns
If the input parameters are valid, a pointer to the SubD quad sphere is returned. Otherwise nullptr is returned.

◆ CreateSubDTriSphere()

static ON_SubD* ON_SubD::CreateSubDTriSphere ( const ON_Sphere  sphere,
ON_SubDComponentLocation  vertex_location,
unsigned  tri_subdivision_level,
ON_SubD destination_subd 
)
static

Creates a SubD sphere made from triangular faces. This is a goofy topology for a Catmull Clark subdivision surface (all triangles and all vertices have 5 or 6 edges). You may want to consider using the much behaved result from ON_SubD::CreateSubDQuadSphere() or even the result from ON_SubD::CreateSubDGlobeSphere().

Parameters
sphereLocation, size and orientation of the sphere.
vertex_locationIf vertex_location = ON_SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
tri_subdivision_levelThe resulting sphere will have 20*4^subdivision_level triangles. (0 for 20 triangles, 1 for 80 triangles, 2 for 320 triangles, ...).
destination_subdIf this pointer is not nullptr, the SubD tri sphere is saved in this instance. Otherwise a new SubD is created.
Returns
If the input is valid, pointer to the SubD tri sphere is returned. Otherwise nullptr is returned.

◆ CreateSymmetryPrimaryMotif()

ON_SubD* ON_SubD::CreateSymmetryPrimaryMotif ( ON_Symmetry  symmetry,
ON_SubDComponentIdList motif_outer_vertex_list,
ON_SubD destination_subd 
) const

Description: Make the primary motif from this and a symmetry. Parameters: symmetry - [in] desired symmetry. motif_outer_vertex_list - [out] motif_outer_vertex_list.InList() and motif_outer_vertex_list.Passes() is true if a motif vertex is on the outer region of the motif and it is eligible to be merged with another vertex when a symmetric SubD is made from the motif. Returns: If successful, a pointer to the primary motif is returned. If the primary motif is symmetric (see Remarks below for examples), then then ContentIsSymmetric() will be true on the returned primary motif. Otherwise ContentIsSymmetric() will be false and transformed copies of the primary motif need to be joined to create a symmetric SubD.

The components on the primary motif that can be merged are returned with Mark() = true. When a motif isn't fully symmetric and copies will be transformed and appended, it is a good idea to exclude unmarked vertice from being merged. Passing an override of ON_SubDComponentTest to append that looks at a sorted list of ids is one way to accomplish this. Remarks: For example a quad face centered at the origin is symmetric under 4 reflections, symmetric under 90 and 180 degree rotations about the origin, and reflect and rotate symmetric under 4 reflection with a 180 degree rotation.

◆ DataCRC()

ON__UINT32 ON_SubD::DataCRC ( ON__UINT32  current_remainder) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ DeleteComponents() [1/3]

bool ON_SubD::DeleteComponents ( const ON_COMPONENT_INDEX ci_list,
size_t  ci_count 
)
overridevirtual

virtual

Reimplemented from ON_Object.

◆ DeleteComponents() [2/3]

bool ON_SubD::DeleteComponents ( const ON_SimpleArray< ON_SubDComponentPtr > &  cptr_list,
bool  bMarkDeletedFaceEdges 
)

◆ DeleteComponents() [3/3]

bool ON_SubD::DeleteComponents ( const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
bool  bMarkDeletedFaceEdges 
)

Description: Delete components in cptr_list[]. If a vertex is in cptr_list[], the vertex and every edge and face attached to the vertex are deleted. If an edge is in cptr_list[], the edge and every face attached to the edge are deleted. If a face is in cptr_list[], the face is deleted. Parameters: cptr_list - [in] cptr_count - [in] length of cptr_list[] array. bMarkDeletedFaceEdges - [in] If true, surviving edges attached to delete faces have their runtmime mark set. Returns: 1: some state settings changed on the component. 1: some state setting changed on the component.

◆ DeleteComponentsForExperts()

bool ON_SubD::DeleteComponentsForExperts ( const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
bool  bDeleteIsolatedEdges,
bool  bUpdateTagsAndCoefficients,
bool  bMarkDeletedFaceEdges 
)

◆ DeleteFacesOnPlane()

unsigned int ON_SubD::DeleteFacesOnPlane ( ON_PlaneEquation  plane_equation,
double  distance_tolerance 
)

Description: Delete faces that are on a plane in preparation for mirroring the subd or joining to somethinng across the plane Parameters: plane_equation - [in] distance_tolerance - [in] If the maximum distance from a face's control points to the plane is <= distance_tolerance, then that face is deleted. Returns: number of faces deleted

◆ DeleteMarkedComponents()

bool ON_SubD::DeleteMarkedComponents ( bool  bDeleteMarkedComponents,
ON__UINT8  mark_bits,
bool  bMarkDeletedFaceEdges 
)

Description: Delete marked components. Parameters: bDeleteMarkedComponents - [in] If true, marked components are deleted. If false, unmarked components are deleted.
mark_bits - [in] A component is marked if component.m_status.IsMarked(mark_bits) is true.

◆ DeleteMarkedComponentsForExperts()

bool ON_SubD::DeleteMarkedComponentsForExperts ( bool  bDeleteMarkedComponents,
ON__UINT8  mark_bits,
bool  bDeleteIsolatedEdges,
bool  bUpdateTagsAndCoefficients,
bool  bMarkDeletedFaceEdges 
)

Description: Delete marked components. Parameters: bDeleteMarkedComponents - [in] If true, marked components are deleted. If false, unmarked components are deleted. mark_bits - [in] A component is marked if component.m_status.IsMarked(mark_bits) is true.

◆ Destroy()

void ON_SubD::Destroy ( )

Description: Delete all contents release all memory used by this ON_SubD.

◆ DestroyRuntimeCache()

void ON_SubD::DestroyRuntimeCache ( bool  bDelete = true)
overridevirtual

virtual

Remarks: For ON_SubD objects, ClearBoundingBox() and DestroyRuntimeCache() are identical.

Reimplemented from ON_Object.

◆ Dimension()

int ON_SubD::Dimension ( ) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ DissolveOrDelete() [1/2]

unsigned int ON_SubD::DissolveOrDelete ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  ci_list)

Description: Use MergeFaceSets to dissolve edges and vertices and use DeleteComponents to delete faces. Parameters: ci_list - [in] Vertices, edges, and faces. Returns: Number of merged faces created by dissolving edges and vertices.

◆ DissolveOrDelete() [2/2]

unsigned int ON_SubD::DissolveOrDelete ( const ON_SimpleArray< ON_SubDComponentPtr > &  cptr_list)

Description: Use MergeFaceSets to dissolve edges and vertices and use DeleteComponents to delete faces. Parameters: cptr_list - [in] Vertices, edges, and faces. Returns: Number of merged faces created by dissolving edges and vertices. Runtime mark is set on merged faces and edges that were a boundary of a deleted face.

◆ Dump()

void ON_SubD::Dump ( ON_TextLog ) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ DumpTopology() [1/2]

unsigned int ON_SubD::DumpTopology ( ON_2udex  vertex_id_range,
ON_2udex  edge_id_range,
ON_2udex  face_id_range,
ON_TextLog  
) const

◆ DumpTopology() [2/2]

unsigned int ON_SubD::DumpTopology ( ON_TextLog ) const

Description: Creates a SubD cylinder Parameters: box - [in] Location, size and orientation of the cylinder facecount_around - [in] Number of faces around the cylinder facecount_length - [in] Number of faces in the axis direction facecouont_z - [in] Number of faces in z direction destination_subd [out] - If destination_subd is not null, make the SubD box there Returns: Pointer to the resulting SubD if successful Null for error static ON_SubD* CreateSubDCylinder( const ON_Cylinder cylinder, ON_SubDComponentLocation vertex_location, unsigned int facecount_around, unsigned int facecount_length, ON_SubD* destination_subd); Description: Creates a SubD cone Parameters: cone - [in] Location, size and orientation of the cone facecount_around - [in] Number of faces around the cone facecount_length - [in] Number of faces in the axis direction destination_subd [out] - If destination_subd is not null, make the SubD cone there Returns: Pointer to the resulting SubD if successful Null for error static ON_SubD* CreateSubDCone( const ON_Cone& cone, unsigned int facecount_around, unsigned int facecount_length, ON_SubD* destination_subd); Description: Creates a SubD truncated cone Parameters: cone - [in] Location, size and orientation of the cone truncate_param - [in] 0.0 < truncate_param <= 1.0 Normalized parameter for truncation 0.0: Base of cone 1.0: Tip of cone facecount_around - [in] Number of faces around the cone facecount_length - [in] Number of faces in the axis direction destination_subd [out] - If destination_subd is not null, make the SubD cone there Returns: Pointer to the resulting SubD if successful Null for error static ON_SubD* CreateSubDTruncatedCone( const ON_Cone& cone, const double truncate_param, unsigned int facecount_around, unsigned int facecount_length, ON_SubD* destination_subd); Description: Creates a SubD torus Parameters: torus - [in] Location, size and orientation of the torus major_facecount - [in] Number of faces around the major axis minor_facecount - [in] Number of faces around the minor axis destination_subd [out] - If destination_subd is not null, make the SubD torus there Returns: Pointer to the resulting SubD if successful Null for error static ON_SubD* CreaptSubDTorus( ON_Torus& torus, unsigned int major_facecount, unsigned int minor_facecount, ON_SubD* destination_subd);

◆ EdgeArray()

class ON_SubDEdgeArray ON_SubD::EdgeArray ( ) const

Description: Avoid using this class. It is more efficient to use an ON_SubDEdgeIterator returned by EdgeIterator().

◆ EdgeCount()

unsigned int ON_SubD::EdgeCount ( ) const

Edge access Returns: Number of edges in the active level.

◆ EdgeFromComponentIndex()

const class ON_SubDEdge* ON_SubD::EdgeFromComponentIndex ( ON_COMPONENT_INDEX  component_index) const

◆ EdgeFromId()

const class ON_SubDEdge* ON_SubD::EdgeFromId ( unsigned int  edge_id) const

Parameters: edge_id - [in] Returns: If edge_id identifies a valid edge in this ON_SubD, then a pointer to that edge is returned. Otherwise, nullptr is returned.

◆ EdgeHash()

const ON_SHA1_Hash ON_SubD::EdgeHash ( ON_SubDHashType  hash_type) const

Parameters: hash_type - [in] All hashes include edge id, edge vertex ids in order, the edge crease/smooth attribute. Geometry hashes include edge displacements. Returns: A SHA1 hash of the SubD's edges.

◆ EdgeIterator()

class ON_SubDEdgeIterator ON_SubD::EdgeIterator ( ) const

Example: ON_SubDEdgeIterator eit = subd.EdgeIterator(); for ( const ON_SubDEdge* e = eit.FirstEdge(); nullptr != e; e = eit.NextEdge()) { ... }

◆ EdgesAreConsecutive()

static bool ON_SubD::EdgesAreConsecutive ( ON_SubDEdgePtr  eptr0,
ON_SubDEdgePtr  eptr1 
)
static

Returns: True if eptr0.RelativeVetex(1) == eptr1.RelativeVetex(0) and both edges have the same set of faces.

◆ EdgeTagFromContext() [1/2]

static ON_SubDEdgeTag ON_SubD::EdgeTagFromContext ( unsigned int  edge_face_count,
const ON_SubDVertex v0,
const ON_SubDVertex v1 
)
static

◆ EdgeTagFromContext() [2/2]

static ON_SubDEdgeTag ON_SubD::EdgeTagFromContext ( unsigned int  edge_face_count,
const ON_SubDVertexTag  v0_tag,
const ON_SubDVertexTag  v1_tag 
)
static

Parameters: edge_face_count - [in] Number of faces the edge will eventually have. Pass 0 if the value is not known. v0 - [in] starting vertex v1 - [in] ending vertex Returns: If edge_face_count > 0x7FFFU, then ON_SubDEdgeTag::Unset is returned.

If edge_face_count is 1 or >= 3, then ON_SubDEdgeTag::Crease is returned.

If both vertex tags are ON_SubDVertexTag::Smooth, then ON_SubDEdgeTag::Smooth is returned.

If edge_face_count is 1 and both vertex tags are ON_SubDVertexTag::Crease or ON_SubDVertexTag::Corner, then ON_SubDEdgeTag::Crease is returned.

If edge_face_count is 2 and both vertex tags are set and both are not ON_SubDVertexTag::Smooth, then ON_SubDEdgeTag::SmoothX is returned.

Otherwise, ON_SubDEdgeTag::Unset is returned.

◆ EdgeTagFromUnsigned()

static ON_SubDEdgeTag ON_SubD::EdgeTagFromUnsigned ( unsigned int  edge_tag_as_unsigned)
static

◆ EdgeTagIsSet()

static bool ON_SubD::EdgeTagIsSet ( ON_SubDEdgeTag  edge_tag)
static

Parameters: edge_tag - [in] Returns: True if edge_tag is Smooth, Crease, or SmoothX. False otherwise.

◆ EdgeTagToString()

static const ON_wString ON_SubD::EdgeTagToString ( ON_SubDEdgeTag  edge_tag,
bool  bVertose 
)
static

Parameters: edge_tag - [in] bVerbose - [in] If verbose, the tag name is preceded with "ON_SubDEdgeTag::". Returns: edge_tag as a string.

◆ EvaluatePoint()

bool ON_SubD::EvaluatePoint ( const class ON_ObjRef objref,
ON_3dPoint P 
) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ ExpandEdges() [1/3]

ON_WIP_SDK bool ON_SubD::ExpandEdges ( const ON_SimpleArray< const ON_SubDEdge * > &  unsorted_edges,
ON_SubDExpandEdgesParameters  parameters 
)

Description: Typically, quads are inserted adjacent to input edges. Areas where three or more input edges meet get specialzed treatment. Useful for creating fillet and bevel like features. Parameters: unsorted_edges - [in] An unsorted set of edges. parameters - [in]

◆ ExpandEdges() [2/3]

ON_WIP_SDK bool ON_SubD::ExpandEdges ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  unsorted_edges,
ON_SubDExpandEdgesParameters  parameters 
)

Description: Typically, quads are inserted adjacent to input edges. Areas where three or more input edges meet get specialzed treatment. Useful for creating fillet and bevel like features. Parameters: unsorted_edges - [in] An unsorted set of edges. parameters - [in]

◆ ExpandEdges() [3/3]

ON_WIP_SDK bool ON_SubD::ExpandEdges ( const ON_SimpleArray< ON_SubDEdgePtr > &  edges,
ON_SubDExpandEdgesParameters  parameters 
)

Description: Typically, quads are inserted adjacent to input edges. Areas where three or more input edges meet get specialzed treatment. Useful for creating fillet and bevel like features. Parameters: edges - [in] If pararameters.FaceStyle() is HalfLeft or HalfRight, then the set of edges must form a single edge chain of interior manifold edges and be correctly oriented. Otherwise edges[] is treated as an unsorted set of edges and the orientations are ignored. parameters - [in]

◆ ExtractMarkedComponents()

ON_SubD* ON_SubD::ExtractMarkedComponents ( ON__UINT8  mark_bits,
ON_SubD destination_subd 
) const

◆ Extrude()

unsigned int ON_SubD::Extrude ( const ON_Xform xform)

Description: Extrude entire subd bay adding a ring of faces around the boundary and moving the original subd.

◆ ExtrudeComponents() [1/4]

unsigned int ON_SubD::ExtrudeComponents ( const ON_Xform xform,
const ON_COMPONENT_INDEX ci_list,
size_t  ci_count 
)

◆ ExtrudeComponents() [2/4]

unsigned int ON_SubD::ExtrudeComponents ( const ON_Xform xform,
const ON_COMPONENT_INDEX ci_list,
size_t  ci_count,
bool  bExtrudeBoundaries,
bool  bPermitNonManifoldEdgeCreation 
)

◆ ExtrudeComponents() [3/4]

unsigned int ON_SubD::ExtrudeComponents ( const ON_Xform xform,
const ON_SubDComponentPtr cptr_list,
size_t  cptr_count 
)

◆ ExtrudeComponents() [4/4]

unsigned int ON_SubD::ExtrudeComponents ( const ON_Xform xform,
const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
bool  bExtrudeBoundaries,
bool  bPermitNonManifoldEdgeCreation 
)

◆ FaceArray()

class ON_SubDFaceArray ON_SubD::FaceArray ( ) const

Description: Avoid using this class. It is more efficient to use an ON_SubDFaceIterator returned by FaceIterator().

◆ FaceCount()

unsigned int ON_SubD::FaceCount ( ) const

Face access Returns: Number of faces in the active level.

◆ FaceFromComponentIndex()

const class ON_SubDFace* ON_SubD::FaceFromComponentIndex ( ON_COMPONENT_INDEX  component_index) const

◆ FaceFromId()

const class ON_SubDFace* ON_SubD::FaceFromId ( unsigned int  face_id) const

Parameters: face_id - [in] Returns: If face_id identifies a valid face in this ON_SubD, then a pointer to that face is returned. Otherwise, nullptr is returned.

◆ FaceHash()

const ON_SHA1_Hash ON_SubD::FaceHash ( ON_SubDHashType  hash_type) const

Parameters: hash_type - [in] Returns: A SHA1 hash of the SubD's faces.

◆ FaceIterator()

class ON_SubDFaceIterator ON_SubD::FaceIterator ( ) const

Example: ON_SubDFaceIterator fit = subd.FaceIterator(); for ( const ON_SubDFace* f = fit.FirstFace(); nullptr != f; f = fit.NextFace()) { ... }

◆ FacePackingId()

const ON_UUID ON_SubD::FacePackingId ( ) const

Returns: An id that identifies the algorithm used to pack the faces in this subd.

◆ FacePackingIsValid()

bool ON_SubD::FacePackingIsValid ( bool  bIfValidThenUpdateFacePackingTopologyHash) const

Description: Validates the face packing.

If a face pack contains more than one face, then all of the following are required for that face pack to be valid.

  • Every face in the pack is a quad.
  • The quads form a rectangular grid.
  • All faces in the rectangular grid are quads.
  • All interior edges in the rectangular grid are smooth.
  • All interior vertices in the rectangular grid are smooth and have 4 edge and 4 faces.
  • All edges on the sides of the rectangular grid are either creases or are attached to exactly one face in the rectangular grid.

Parameters: bPermitWrapping - [in] If true, then the face pack is allowed to wrap. For example, if bPermitWrapping is true, then a SubD cylinder that is a regular quad grid can have a single face pack. bIfValidThenUpdateFacePackingTopologyHash - [in] When in doubt, pass false to test if all of the current face packing information is completely valid.

If you are using an add/remove creases edit approach to modify an initially valid packing, then pass true. Otherwise pass false.

If this parameter is true, the packing is valid, and this->FacePackingSubDTopologyHash() does not match this->SubDTopologyHash(), then this->FacePackingSubDTopologyHash() is updated to the current value of this->SubDTopologyHash().

If this parameter is false and and this->FacePackingSubDTopologyHash() does not match this->SubDTopologyHash(), then the function returns false. Returns: True if FacesArePacked() is true, the quad grids meet all the conditions described above, this->FacePackingId() is not nil, and either this->FacePackingSubDTopologyHash() is equal to this->SubDTopologyHash() or bIfValidThenUpdateFacePackingTopologyHash is true.

◆ FacePackingTopologyHash()

const ON_SubDHash ON_SubD::FacePackingTopologyHash ( ) const

Returns: The value of ON_SubDHash::Create(ON_SubDHashType::TopologyAndEdgeCrease, *this) when the faces were packed.

◆ FacesArePacked()

bool ON_SubD::FacesArePacked ( ) const

Returns: True if every face has a nonzero PackId and a set PackRect.

◆ FindEdge()

const ON_SubDEdgePtr ON_SubD::FindEdge ( const class ON_SubDVertex v0,
const class ON_SubDVertex v1 
) const

Description: Search for an edge connecting v0 and v1. Parameters: v0 - [in] v1 - [in] The edge begins at v0 and ends at v1. The edge will be on the same level as the vertices. Returns: An ON_SubDEdgePtr to a connecting edge or ON_SubDEdgePtr::Null if none exists.

◆ FindOrAddEdge()

const ON_SubDEdgePtr ON_SubD::FindOrAddEdge ( class ON_SubDVertex v0,
class ON_SubDVertex v1 
)

Description: Search for an edge connecting v0 and v1. If none exists, then add one. Parameters: v0 - [in] v1 - [in] The edge begins at v0 and ends at v1. The edge will be on the same level as the vertices. Returns: An ON_SubDEdgePtr to a connecting edge or ON_SubDEdgePtr::Null if none exists.

◆ FindOrAddFace()

class ON_SubDFace* ON_SubD::FindOrAddFace ( ON_SubDEdgeTag  new_edge_tag,
const class ON_SubDVertex face_vertices[],
size_t  face_vertex_count 
)

Description: Finds an existing face or adds a new face with corners at face_vertices[]. Parameters: new_edge_tag - [in] If an edge needs to be added, this tag is assigned to the new edge. When in doubt, pass ON_SubDEdgeTag::Unset and call this->UpdateAllTagsAndSectorCoefficients(true) after you are finished modifying the SubD. face_vertices - [in] Array of vertices at the face corners in counter-clockwise order. face_vertex_count - [in] Number of vertices in face_vertices[] Returns: If the input is not valid, nullptr is returned. If there is a face with the specified corners exists, then it is returned. Otherwise a new face is added and returned.

◆ FindOrAddVertex()

const class ON_SubDVertex* ON_SubD::FindOrAddVertex ( const double *  control_net_point,
double  distance_tolerance 
)

Description: Search for a vertex with a specified control net point. If one does not exist, add a new one. Parameters: control_net_point - [in] Look for a vertex with this value for ControlNetPoint(). tolerance - [in] Use 0.0 when in doubt. If > 0.0, then the vertex closest to control_net_point will be returned if the distance from that vertex to control_net_point is <= distance_tolerance. Returns: An ON_SubDVertex pointer or nullptr if none exists.

◆ FindVertex()

const class ON_SubDVertex* ON_SubD::FindVertex ( const double *  control_net_point,
double  distance_tolerance 
) const

Description: Search for a vertex with a specified control net point. Parameters: control_net_point - [in] Look for a vertex with this value for ControlNetPoint(). tolerance - [in] Use 0.0 when in doubt. If > 0.0, then the vertex closest to control_net_point will be returned if the distance from that vertex to control_net_point is <= distance_tolerance. Returns: An ON_SubDVertex pointer or nullptr if none exists.

◆ FirstComponent()

const ON_SubDComponentPtr ON_SubD::FirstComponent ( ON_SubDComponentPtr::Type  component_type) const

ON_SubD::FirstVertex(), ON_SubD::FirstEdge(), or ON_SubD::FirstFace() is returned, depending on the value of component_type.

Parameters
component_type
Returns
The first component of the specified type.

◆ FirstEdge()

const class ON_SubDEdge* ON_SubD::FirstEdge ( ) const

◆ FirstFace()

const class ON_SubDFace* ON_SubD::FirstFace ( ) const

◆ FirstVertex()

const class ON_SubDVertex* ON_SubD::FirstVertex ( ) const

◆ FragmentColorsMappingTag()

const ON_MappingTag ON_SubD::FragmentColorsMappingTag ( ) const

◆ FragmentColorsSettingsHash()

const ON_SHA1_Hash ON_SubD::FragmentColorsSettingsHash ( ) const

Returns: hash identifying the way the fragment vertex colors were set.

◆ FragmentTextureCoordinatesTextureSettingsHash()

const ON_SHA1_Hash ON_SubD::FragmentTextureCoordinatesTextureSettingsHash ( ) const

Returns: The value of ON_SubD::TextureSettingsHash(texture_coordinate_type,texture_mapping_tag) for the texture_coordinate_type and texture_mapping_tag used to set the current fragment texture coordinates. If no fragments exist or the coordinates are not set, then ON_SHA1_Hash::EmptyContentHash is returned.

◆ FragmentTree()

* ON_RTreeRef ON_SubD::FragmentTree ( ) const

◆ GeometryContentSerialNumber()

ON__UINT64 ON_SubD::GeometryContentSerialNumber ( ) const

Returns: A runtime serial number that is changed every time a the active level, vertex location, vertex or edge flag, or subd topology is changed.

◆ GeometryHash()

const ON_SHA1_Hash ON_SubD::GeometryHash ( ) const

Description: If two SubDs have identical values of GeometryHash(), then they have identical surface geometry. Returns: this->SubDHash(ON_SubDHashType::Geometry,false).SubDHash(). Remarks: If the geometry hashes are equal, the topology hashes are equal.

◆ GetBBox()

bool ON_SubD::GetBBox ( double *  boxmin,
double *  boxmax,
bool  bGrowBox = false 
) const
overridevirtual

virtual ON_Geometry GetBBox override

Reimplemented from ON_Geometry.

◆ GetBoundaryEdgeChain()

static bool ON_SubD::GetBoundaryEdgeChain ( ON_SubDEdgePtr  first_edge,
bool  bUseEdgeMarks,
ON_SimpleArray< ON_SubDEdgePtr > &  boundary_edge_chain 
)
static

Description: Automatically get a boundary from a seed edge. Parameters: first_edge - [in] An edge with FaceCount() <= 1. The search for the second edge occurs and first_edge.RelativeVertex(1) and all edges added to boundary_edge_chain[] have FaceCount() = first_edge.Edge()->FaceCount(). bUseEdgeMarks -[in] If true, only unmarked edges will be added to boundary_edge_chain[] and they will be marked when added to boundary_edge_chain[]. boundary_edge_chain - [out] Edge chain beginning with first_edge. When true is returned, boundary_edge_chain[] has 3 or more edges and is a closed loop. When false is returned, boundary_edge_chain[] will contain an open chain with 0 or more edges. Returns: true if boundary_edge_chain[] is a closed loop of 3 or more boundary edges.

◆ GetBoundaryEdgeChains()

unsigned int ON_SubD::GetBoundaryEdgeChains ( unsigned int  minimum_face_count,
unsigned int  maximum_face_count,
ON_SimpleArray< ON_SubDEdgePtr > &  boundary_edge_chains 
) const

Parameters: minimum_face_count - [in] maximum_face_count - [in] Only edges with edge->FaceCount() >= minimum_face_count and edge->FaceCount() <= maximum_face_count will be converted into curves. Pass 0, ON_SubDEdge::MaximumFaceCount if you want all possible boundary edge chains. boundary_edge_chains - [out] The boundary_edge_chains[] array is sorted into edge chains. Returns: Number of chains embedded in boundary_edge_chains[]

◆ GetComponentStatus()

unsigned int ON_SubD::GetComponentStatus ( bool  bGetVertexStatus,
bool  bGetEdgeStatus,
bool  bGetFaceStatus,
bool  bClearStatus,
ON_ComponentStatus  status_mask,
ON_SimpleArray< const class ON_SubDComponentBase * > &  component_list,
ON_SimpleArray< ON_ComponentStatus > &  status_list 
) const

Description: Save the current component status of the indictated subd components. Parameters: bGetVertexStatus - [in] bGetEdgeStatus - [in] bGetFaceStatus - [in] bClearStatus - [in] If true, the bits in status_mask will also be cleared for the components. status_mask - [in] Status bits to save. component_list - [out] status_list - [out] component_list[] and status_list[] are parallel arrays for components with a matching status bit set.

◆ GetComponentsWithSetStates() [1/2]

unsigned int ON_SubD::GetComponentsWithSetStates ( ON_ComponentStatus  states_filter,
bool  bAllEqualStates,
ON_SimpleArray< ON_COMPONENT_INDEX > &  components 
) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ GetComponentsWithSetStates() [2/2]

unsigned int ON_SubD::GetComponentsWithSetStates ( ON_ComponentStatus  states_filter,
bool  bAllEqualStates,
ON_SimpleArray< ON_SubDComponentPtr > &  components_with_set_states 
) const

Component (vertex, edge, face) state ( selected, highlighted, ... ) tools NOTE: All component status settings are mutable All are copied. None are saved. Parameters: states_filter - [in] bAllEqualStates - [in] If a state is set in states_filter, all active level components with the same state set will be included in the components_with_set_states[] array.
If bAllEqualStates is true, then ON_ComponentStatus::AllEqualStates() is used to test for inclusion.
If bAllEqualStates is false, then ON_ComponentStatus::SomeEqualStates() is used to test for inclusion. components_with_set_states - [out] Returns: Number of returned components.

◆ GetConnectedRegions()

unsigned int ON_SubD::GetConnectedRegions ( bool  bManifoldRegions,
ON_SimpleArray< ON_SubD * > &  connected_regions 
) const

Description: If this subd has two or more connected regions, create a new subd for each connected region. Parameters: bManifoldRegions - [in] If true, the connected regions will stop at nonmanifold vertices and nonmanifold edges. connected_components - [out] If there are two or more connected regions, they are appended to connected_regions[] Returns: Number of connected components appended to connected_components[].

◆ GetControlNetMesh()

class ON_Mesh* ON_SubD::GetControlNetMesh ( class ON_Mesh mesh,
ON_SubDGetControlNetMeshPriority  priority 
) const

Description: Get a mesh representation of the ON_SubD control net. Parameters: mesh - [in] If not null, the returned mesh will be stored on the input class.

priority - [in] Specifies what type of SubD information is most important to transfer to the mesh. For more details, see the comments for ON_SubDGetControlNetMeshPriority.

Returns: A mesh representation of the ON_SubD control net.

◆ GetMarkedComponents() [1/2]

unsigned int ON_SubD::GetMarkedComponents ( bool  bAddMarkedComponents,
ON__UINT8  mark_bits,
bool  bIncludeVertices,
bool  bIncludeEdges,
bool  bIncludeFaces,
ON_SimpleArray< class ON_SubDComponentPtr > &  component_list 
) const

Parameters: bAddMarkedComponents - [in] If true, marked components are added to component_list[]. If false, unmarked components are added to component_list[]. mark_bits - [in] If mark_bits is zero, then a component is "marked" if component.Mark() is true. Otherwise a component is "marked" if mark_bits = component.MarkBits().

◆ GetMarkedComponents() [2/2]

unsigned int ON_SubD::GetMarkedComponents ( bool  bIncludeVertices,
bool  bIncludeEdges,
bool  bIncludeFaces,
ON_SimpleArray< const class ON_SubDComponentBase * > &  marked_component_list 
) const

◆ GetMeshFragments()

unsigned int ON_SubD::GetMeshFragments ( const class ON_SubDDisplayParameters display_parameters,
ON__UINT_PTR  fragment_callback_context,
bool(*)(ON__UINT_PTR, const class ON_SubDMeshFragment *)  fragment_callback_function 
) const

Description: Get the limit surface mesh as a set of fragments. Parameters: display_parameters - [in]

fragment_callback_context - [in] first parameter for the FragmentCallback function

fragment_callback_function - [in] A function pointer with prototype:

bool fragment_callback_function( void fragment_callback_context, const class ON_SubDMeshFragment fragment );

For each fragment that is produced, fragment_callback_function() is called. You must copy the returned fragment if you want to keep it for future use. If fragment_callback_function returns false, the calculation is canceled. Returns: Number of fragments produced.

◆ GetQuadSectorPointRing() [1/2]

static unsigned int ON_SubD::GetQuadSectorPointRing ( bool  bPermitNoSubdivisions,
bool  bObsoleteAndIgnoredParameter,
const class ON_SubDVertex obsolete_and_ignored_parameter,
const class ON_SubDComponentPtr component_ring,
size_t  component_ring_count,
double *  point_ring,
size_t  point_ring_stride 
)
static

Parameters: bPermitNoSubdivisions - [in] When in doubt, pass false. If bPermitNoSubdivisions is true and no extraordinary components are in the ring, then locations of the input component control net are returned. Otherwise at one or more subdivisions are applied to obtain the output ring points. bObsoleteAndIgnoredParameter - [in] Obsolete and ignored parameter. Pass false. obsolete_and_ignored_parameter - [in] Obsolete and ignored parameter. Pass nullptr. component_ring_count - [in] component_ring_count specifies the number of components in the component_ring[] array. component_ring[] - [in] component_ring[0] is the central vertex, component_ring[1] and subsequent components with odd indices are sector edges. sorted radially. component_ring[2] and subsequent components with even indices are sector faces. The edges and faces are sorted radially (component_ring[1] and component_ring[3] are edges of component_ring[2], etc). point_ring_stride - [in] point_ring - [out] point locations are returned here. Returns: Number of points in the subdivision ring or 0 if the call fails. The number of points is 1 + ON_SubD::ComponentRingEdgeCount(component_ring_count) + ON_SubD::ComponentRingFaceCount(component_ring_count). Remarks: No validation checking is performed. This function will crash if the input is not valid. Call GetSubdivisionPointRing() if you want a crash proof call.

◆ GetQuadSectorPointRing() [2/2]

static unsigned int ON_SubD::GetQuadSectorPointRing ( bool  bPermitNoSubdivisions,
const class ON_SubDComponentPtr component_ring,
size_t  component_ring_count,
unsigned int &  subdivision_count,
double *  point_ring,
size_t  point_ring_stride 
)
static

Get a ring of points that can be mulitplied by subdivsion and limit point matrices to calculate the subdivision point and limit point for the central vertex in component_ring[0]. No input validation is performed. This function will crash if the input is not valid. Call GetSubdivisionPointRing() if you want a crash proof call.

Parameters
bPermitNoSubdivisionsWhen in doubt, pass false. If bPermitNoSubdivisions is true and no extraordinary components or sharp edges are in the ring, then locations of the input component_ring[] control net points are returned. Otherwise one or more subdivisions are applied to obtain the output ring points.
component_ringcomponent_ring[0] is the central vertex. component_ring[1] and subsequent components with odd indices are sector edges. component_ring[2] and subsequent components with even indices are sector faces. The edges and faces are sorted radially(component_ring[1] and component_ring[3] are edges of component_ring[2], etc).
component_ring_countNumber of components in the component_ring[] array.
subdivision_countThe number of subdivisions used to calculate point_ring[] is returned in subdivision_count.
point_ringThe point ring points are returned in point_ring[]
point_ring_strideNumber of doubles between subsequent points in point_ring[].
Returns
If successful, component_ring_count is returned which is the number of points set in point_ring[]. Otherwise 0 is returned.

◆ GetSectorComponentRing() [1/2]

static unsigned int ON_SubD::GetSectorComponentRing ( const class ON_SubDSectorIterator sit,
ON_SimpleArray< ON_SubDComponentPtr > &  component_ring 
)
static

Parameters: sit - [in] vertex sector iterator component_ring - [out] A sorted listof ON_SubDComponentPtr values are returned in component_ring[]

Returns: Number of components set in component_ring[].

0: failure

>= 4 and even: component_ring[0] = vit.CenterVertex() component_ring[1] = starting crease edge component_ring[2] = starting face ... zero or more interior smooth edge, face pairs ... component_ring[component_count-1] = ending crease edge

>= 5 and odd: component_ring[0] = center vertex component_ring[1] = first edge (smooth) component_ring[2] = first face ... zero or more smooth edge, face, pairs ... component_ring[component_count-2] = last edge (smooth) component_ring[component_count-1] = last face

Example: unsigned int component_ring_count = GetVertexComponentRing(vit,component_ring); unsigned int N = component_ring_count/2; ///< number of edges in ring const bool bSectorHasCreaseBoundary = (0 == (component_ring_count % 2));

◆ GetSectorComponentRing() [2/2]

static unsigned int ON_SubD::GetSectorComponentRing ( const class ON_SubDSectorIterator sit,
ON_SubDComponentPtr component_ring,
size_t  component_ring_capacity 
)
static

Parameters: sit - [in] vertex sector iterator component_ring - [out] A sorted list of ON_SubDComponentPtr values are returned in component_ring[] component_ring[0] is the central vertex. component_ring[1] and subsequent components with odd indices are sector edges. component_ring[2] and subsequent components with even indices are sector faces. For edge components (i is odd), component_ring[i].ComponentMark() is the index of the center vertex in ON_SubDEge.m_vertex[]. component_ring_capacity - [in] capacity of component_ring[] array 1 + center_vertex.m_edge_count + center_vertex.m_face_count will be large enough. Returns: Number of components set in component_ring[].

0: failure

>= 4 and even: component_ring[0] = center vertex component_ring[1] = starting crease edge component_ring[2] = starting face ... zero or more interior smooth edge, face pairs ... component_ring[component_count-1] = ending crease edge

>= 5 and odd: component_ring[0] = vit.CenterVertex() component_ring[1] = first edge (smooth) component_ring[2] = first face ... zero or more smooth edge, face, pairs ... component_ring[component_count-2] = last edge (smooth) component_ring[component_count-1] = last face

Example: unsigned int component_ring_count = GetVertexComponentRing(vit,component_ring); unsigned int N = component_ring_count/2; ///< number of edges in ring const bool bSectorHasCreaseBoundary = (0 == (component_ring_count % 2));

◆ GetSectorPointRing() [1/6]

static unsigned int ON_SubD::GetSectorPointRing ( bool  bSubdivideIfNeeded,
const class ON_SubDSectorIterator sit,
double *  point_ring,
size_t  point_ring_capacity,
size_t  point_ring_stride 
)
static

◆ GetSectorPointRing() [2/6]

static unsigned int ON_SubD::GetSectorPointRing ( bool  bSubdivideIfNeeded,
const class ON_SubDSectorIterator sit,
ON_SimpleArray< ON_3dPoint > &  point_ring 
)
static

◆ GetSectorPointRing() [3/6]

static unsigned int ON_SubD::GetSectorPointRing ( bool  bSubdivideIfNeeded,
const ON_SubDComponentPtr component_ring,
size_t  component_ring_count,
double *  subd_point_ring,
size_t  subd_point_ring_capacity,
size_t  subd_point_ring_stride 
)
static

◆ GetSectorPointRing() [4/6]

static unsigned int ON_SubD::GetSectorPointRing ( bool  bSubdivideIfNeeded,
size_t  component_ring_count,
const ON_SubDComponentPtr component_ring,
ON_SimpleArray< ON_3dPoint > &  point_ring 
)
static

◆ GetSectorPointRing() [5/6]

static unsigned int ON_SubD::GetSectorPointRing ( const class ON_SubDSectorIterator sit,
unsigned &  subdivision_count,
double *  point_ring,
size_t  point_ring_capacity,
size_t  point_ring_stride 
)
static

◆ GetSectorPointRing() [6/6]

static unsigned int ON_SubD::GetSectorPointRing ( const class ON_SubDSectorIterator sit,
unsigned &  subdivision_count,
ON_SimpleArray< ON_3dPoint > &  point_ring 
)
static

Get a ring of points that can be used to calculate the subdivision and limit points of sit.CenterVertex().

Parameters
sitInitialized sector iterator.
subdivision_countTNumber of subdivisions performed to get point_ring[] is returned in subdivision_count.
point_ringThe points are returned in point_ring[]
Returns
Number of points in point_ring[]

◆ GetSectorSubdivisionPointRing()

static unsigned int ON_SubD::GetSectorSubdivisionPointRing ( const ON_SubDComponentPtr component_ring,
size_t  component_ring_count,
ON_SimpleArray< ON_3dPoint > &  subd_point_ring 
)
static

◆ GetSectorSubdivsionPointRing()

static unsigned int ON_SubD::GetSectorSubdivsionPointRing ( const ON_SubDComponentPtr component_ring,
size_t  component_ring_count,
double *  point_ring,
size_t  point_ring_capacity,
size_t  point_ring_stride 
)
static

Returns: Number of points in the subdivision ring or 0 if the call fails.

◆ GetSurfaceBrep()

ON_Brep* ON_SubD::GetSurfaceBrep ( const ON_SubDToBrepParameters brep_parameters,
ON_Brep destination_brep 
) const

Description: Get a brep representation of the SubD. Parameters: brep_parameters - [in]

◆ GetSurfaceMesh()

class ON_Mesh* ON_SubD::GetSurfaceMesh ( const class ON_SubDDisplayParameters display_parameters,
class ON_Mesh mesh 
) const

Description: Get an ON_Mesh of the subdivision limit surface Parameters: display_parameters - [in] mesh - [in] If not null, the returned mesh will be stored on the input class. Returns: A mesh of the subdivision limit surface.

◆ GetSurfaceMeshWireframe()

unsigned int ON_SubD::GetSurfaceMeshWireframe ( ON__UINT_PTR  curve_callback_context,
bool(*)(ON__UINT_PTR, const ON_SubDEdgePtr *, unsigned int, const class ON_NurbsCurve &)  curve_callback_function 
) const

Description: For each SubD edge, get a degree 1 piecewise linear NURBS curve on the limit surface mesh that can be used to display that edge. Parameters: curve_callback_context - [in] curve_callback_function - [in] Each curve is returned by calling curve_callback_function(curve_callback_context,edge_chain,edge_chain_count,nurbs_curve). The function curve_callback_function() must copy any information it wants to reference later. The callback function returns true to continue and false to terminate GetSurfaceMeshWireframe(). Returns: Number of curves generated.

◆ GetSurfaceNurbs() [1/3]

unsigned int ON_SubD::GetSurfaceNurbs ( ON_SubD::NurbsSurfaceType  nurbs_surface_type,
ON__UINT_PTR  callback_context,
bool(*)(ON__UINT_PTR, const class ON_SubDFaceRegion &, class ON_NurbsSurface *)  nurbs_callback_function 
) const

Description: Get the SubD limit surface as bicubic NURBS surfaces.

Parameters: nurbs_surface_type - [in] Controls the size and knot properties of the returned NURBS surfaces.

callback_context - [in] first parameter for the callback functions

nurbs_callback_function - [in] nullptr or a function pointer with prototype:

bool nurbs_callback_function( ON__UINT_PTR callback_context, const ON_SubDComponentRegion& subd_face_region, const ON_SubDComponentRegion subd_edge_region[4], const class ON_NurbsSurface*& nurbs_surface );

For each NURBS surface that is produced, nurbs_callback_function() is called.

subd_face_region identifies the region of the SubD that this NURBS surface models.

subd_edge_region[4] identifies the edges the NURBS surface abuts in the order South,East,North,West.

When an edge is a subdivision edge, then subd_edge_region[i].m_level0_component.ComponentType() is ON_SubDComponentPtr::Type::Edge, subd_edge_region[i].m_level0_component.ComponentBase() is nullptr, and ON_SubDComponentRegion::IsTransientId(subd_edge_region[i].m_level0_component_id) is true

The nurbs_surface pointer points to an ON_NurbsSurface on the heap. You must take responsibility for managing this surface and deleting it at the appropriate time.

Returns: Number of NURBS surfaces returned.

◆ GetSurfaceNurbs() [2/3]

unsigned int ON_SubD::GetSurfaceNurbs ( ON_SubD::NurbsSurfaceType  nurbs_surface_type,
ON_SimpleArray< ON_NurbsSurface * > &  patches 
) const

Description: Get the SubD limit surface as a list of bicubic NURBS patches. Parameters: nurbs_surface_type - [in] Controls the size and knot properties of the returned NURBS surfaces. patches - [out] The bicubic NURBS patches are appended to this array. Returns: Number of patches appended to patches[]

◆ GetSurfaceNurbs() [3/3]

unsigned int ON_SubD::GetSurfaceNurbs ( ON_SubD::NurbsSurfaceType  nurbs_surface_type,
ON_SimpleArray< ON_SubDFaceRegionAndNurbs > &  patches 
) const

◆ GetSurfaceNurbsFragments()

unsigned int ON_SubD::GetSurfaceNurbsFragments ( const class ON_SubDDisplayParameters display_parameters,
ON__UINT_PTR  callback_context,
bool(*)(ON__UINT_PTR, const class ON_SubDFaceRegion &)  begin_face_callback_function,
bool(*)(ON__UINT_PTR, const class ON_SubDSurfaceNurbsFragment *)  fragment_callback_function 
) const

Description: Get the limit surface as a set of bicubic patch fragments. Parameters: display_parameters - [in]

callback_context - [in] first parameter for the callback functions

begin_face_callback_function - [in] nullptr or a function pointer with prototype:

bool begin_face_callback_function( void *fragment_callback_context, const class ON_SubDFaceRegion& face_region, );

At the beginning of each quad face, this function is called. If the original SubD face is a quad, then face_region identifies that quad. If the original SubD face is not a quad, then face_region identifies the level 1 subdivision quad. The face region information is useful in building a correspondence between the original SubD and the Nurbs patches. If begin_face_callback_function returns false, the calculation is canceled.

fragment_callback_function - [in] A function pointer with prototype:

bool fragment_callback_function( void fragment_callback_context, const class ON_SubDSurfaceNurbsFragment fragment );

For each fragment that is produced, fragment_callback_function() is called. You must copy the returned fragment if you want to keep it for future use. If fragment_callback_function returns false, the calculation is canceled. Returns: Number of fragments produced.

◆ GetSurfacePointLinearSystem() [1/2]

bool ON_SubD::GetSurfacePointLinearSystem ( ON_Matrix m,
ON_SimpleArray< const ON_SubDVertex * > &  v 
) const

Description: Get the system of linear equations that calculate vertex limit point locations from the corresponding ring vertices's control net points in matrix form. Parameters: m - [out] v - [out] v[i] limit point = sum( 0 <= j < v.Count() of m[i][j]*v[j]->ContolNetPoint() ) Returns: True if the linear system could be calculated and is square.

◆ GetSurfacePointLinearSystem() [2/2]

bool ON_SubD::GetSurfacePointLinearSystem ( ON_SimpleArray< ON_SubDVertexSurfacePointCoefficient > &  coefficients,
ON_2udex coefficient_matrix_size 
) const

Description: Get the system of linear equations that calculate vertex limit point locations from the corresponding ring vertices's control net points. This information is useful when solving location interpolation problems. Parameters: coefficients - [out] The returned array is sorted by ON_SubDVertexSurfacePointCoefficient::CompareSurfacePointAndRingVertexId(). If (coefficients[i0],....,coefficients[i1]) is the set of all coefficients with the same value of ON_SubDVertexSurfacePointCoefficient.m_limit_point_vertex, then the location of the limit point for that vertex is the sum of coefficients[i].m_c*coefficients[i].m_ring_vertex->ControlNetPoint() where (i0 <= i <= i1). coefficient_matrix_size - [out] If not nullptr, then coefficient_matrix_size->i = number of unique m_limit_point_vertex values in coefficients[] and coefficient_matrix_size->j = number of unique m_ring_vertex values in coefficients[]. If this SubD is valid, then both of these numbers are this->VertexCount(). Put another way, if this SubD is valid, the linear system of equations can be represented by an NxN matrix where N = this->VertexCount(). Returns: True if the linear system could be calculated.

◆ GetSurfaceWireframe() [1/2]

unsigned int ON_SubD::GetSurfaceWireframe ( ON_SubDEdgeTag  edge_tag,
unsigned int  minimum_face_count,
unsigned int  maximum_face_count,
ON_SubD::ChainType  chain_type,
ON__UINT_PTR  curve_callback_context,
bool(*)(ON__UINT_PTR, const ON_SubDEdgePtr *, unsigned int, const class ON_NurbsCurve &)  curve_callback_function 
) const

Description: Get a collection of NURBS curves that lie on the SubD limit surface edges. Parameters: edge_tag - [in] If edge_tag is not ON_SubDEdgeTag::Unset, then only edges with a matching tag will be converted to curves. minimum_face_count - [in] maximum_face_count - [in] Only edges with edge->FaceCount() >= minimum_face_count and edge->FaceCount() <= maximum_face_count will be converted into curves. Pass 0, ON_SubDEdge::MaximumFaceCount if you want all possible face counts. chain_type - [in] Controls which edges joined into a single curves. ON_SubD::ChainType::Unset will create one curve per edge. curve_callback_context - [in] curve_callback_function - [in] Each curve is returned by calling curve_callback_function(curve_callback_context,edge_chain,edge_chain_count,nurbs_curve). The function curve_callback_function() must copy any information it wants to reference later. It returns true to continue, false to terminate GetSurfaceWireframe(). edge_chain[] reports which edges are represented byt nurbs_curve Returns: Number of curves generated.

◆ GetSurfaceWireframe() [2/2]

unsigned int ON_SubD::GetSurfaceWireframe ( ON_SubDEdgeTag  edge_tag,
unsigned int  minimum_face_count,
unsigned int  maximum_face_count,
ON_SubD::ChainType  chain_type,
ON_SimpleArray< ON_NurbsCurve * > &  nurbs_curves 
) const

Description: Get a collection of NURBS curves that lie on the SubD limit surface edges. Parameters: edge_tag - [in] If edge_tag is not ON_SubDEdgeTag::Unset, then only edges with a matching tag will be converted to curves. minimum_face_count - [in] maximum_face_count - [in] Only edges with edge->FaceCount() >= minimum_face_count and edge->FaceCount() <= maximum_face_count will be converted into curves. Pass 0, ON_SubDEdge::MaximumFaceCount if you want all possible face counts. chain_type - [in] Controls which edges joined into a single curves. ON_SubD::ChainType::Unset will create one curve per edge. curves - [out] The wireframe curves are appended to curves[]. The caller is responsible for deleting them. Returns: Number of curves appended to nurbs_curves.

◆ GetSymmetrySet() [1/4]

unsigned ON_SubD::GetSymmetrySet ( const ON_SubDComponentPtr  cptr,
bool  bMotifFirst,
ON_SimpleArray< ON_SubDComponentPtr > &  component_symmetry_set 
) const

Description: Get the component's symmetry set. Parameters: component - [in] bMotifFirst - [in] If true, component_symmetry_set[0] will be the primary motif component. Otherwise, component_symmetry_set[0] will point to cptr.ComponentBase(). component_symmetry_set - [out] The symmetry set containing the component. The motif component has 1 = ON_SubDComponentPtr.ComponentDirection(). The other components have 0 = ON_SubDComponentPtr.ComponentDirection(). Returns: Number of vertices in the symmetry set.

◆ GetSymmetrySet() [2/4]

unsigned ON_SubD::GetSymmetrySet ( const ON_SubDEdge edge,
bool  bPrimaryMotifFirst,
ON_SimpleArray< const ON_SubDEdge * > &  edge_symmetry_set 
) const

Description: Get the edge's symmetry set. Parameters: edge - [in] edge_symmetry_set - [out] The symmetry set containing the edge. bPrimaryMotifFirst - [in] If true, edge_symmetry_set[0] will be the primary motif edge. Otherwise, edge_symmetry_set[0] will be edge. Returns: Number of vertices in the symmetry set.

◆ GetSymmetrySet() [3/4]

unsigned ON_SubD::GetSymmetrySet ( const ON_SubDFace face,
bool  bPrimaryMotifFirst,
ON_SimpleArray< const ON_SubDFace * > &  face_symmetry_set 
) const

Description: Get the face's symmetry set. Parameters: face - [in] face_symmetry_set - [out] The symmetry set containing the face. bPrimaryMotifFirst - [in] If true, face_symmetry_set[0] will be the primary motif face. Otherwise, face_symmetry_set[0] will be face. Returns: Number of vertices in the symmetry set.

◆ GetSymmetrySet() [4/4]

unsigned ON_SubD::GetSymmetrySet ( const ON_SubDVertex vertex,
bool  bPrimaryMotifFirst,
ON_SimpleArray< const ON_SubDVertex * > &  vertex_symmetry_set 
) const

Description: Get the vertex's symmetry set. Parameters: vertex - [in] bPrimary MotifFirst - [in] If true, vertex_symmetry_set[0] will be the primary motif vertex. Otherwise, vertex_symmetry_set[0] will be vertex. vertex_symmetry_set - [out] The symmetry set containing the vertex. Returns: Number of vertices in the symmetry set.

◆ GetTightBoundingBox()

bool ON_SubD::GetTightBoundingBox ( class ON_BoundingBox tight_bbox,
bool  bGrowBox = false,
const class ON_Xform xform = nullptr 
) const
overridevirtual

virtual ON_Geometry GetTightBoundingBox override

Reimplemented from ON_Geometry.

◆ GetWireframeEdgeChains()

unsigned int ON_SubD::GetWireframeEdgeChains ( ON_SubDEdgeTag  edge_tag,
unsigned int  minimum_face_count,
unsigned int  maximum_face_count,
ON_SubD::ChainType  chain_type,
ON__UINT_PTR  edge_chain_callback_context,
bool(*)(ON__UINT_PTR, const ON_SubDEdgePtr *, unsigned int)  edge_chain_callback_function 
) const

Description: Get a collection of NURBS curves that lie on the SubD limit surface edges. Parameters: edge_tag - [in] If edge_tag is not ON_SubDEdgeTag::Unset, then only edges with a matching tag will be converted to curves. minimum_face_count - [in] maximum_face_count - [in] Only edges with edge->FaceCount() >= minimum_face_count and edge->FaceCount() <= maximum_face_count will be converted into curves. Pass 0, ON_SubDEdge::MaximumFaceCount if you want all possible face counts. chain_type - [in] Controls which edges joined into a single curves. ON_SubD::ChainType::Unset will create one curve per edge. edge_chain_callback_context - [in] edge_chain_callback_function - [in] Each edge chain is returned by calling edge_chain_callback_function(edge_chain_callback_context,edge_chain,edge_chain_count). The function edge_chain_callback_function() must copy any information it wants to reference later. It returns true to continue, false to terminate GetWireframeEdgeChains(). edge_chain[] reports which edges are represented byt nurbs_curve Returns: Number of curves generated.

◆ GlobalSubdivide() [1/2]

bool ON_SubD::GlobalSubdivide ( )

◆ GlobalSubdivide() [2/2]

bool ON_SubD::GlobalSubdivide ( unsigned int  count)

Description: Apply the Catmull-Clark subdivision algorithm and save the results in this ON_SubD. Parameters: level_index - [in] Level where subdivision starts count - [in] > 0 Number of times to subdivide. Returns: Number of subdivision steps that succeeded. (= count when everything works, < count when input is not valid)

◆ GlobalSubdivideQuadCount() [1/2]

unsigned int ON_SubD::GlobalSubdivideQuadCount ( ) const
Returns
The number of quads a call to GlobalSubdivide() will create. / returns>

◆ GlobalSubdivideQuadCount() [2/2]

unsigned int ON_SubD::GlobalSubdivideQuadCount ( unsigned int  subdivision_count) const
Returns
The number of quads a call to GlobalSubdivide(subdivision_count) will create. / returns>

◆ GroupConnectedRegions()

unsigned int ON_SubD::GroupConnectedRegions ( bool  bManifoldRegions) const

Description: Assign group ids to sets vertices, edges, and faces in the connected regions. Parameters: bManifoldRegions - [in] If true, groups will stop at nonmanifold vertices and nonmanifold edges. Returns: Number of connected regions. The assigned group ids will run from 1 to the returned value. If bManifoldRegions is true and a nonmanifold component is on the boundary between two or more connected regions, then that component will have m_group_id = 0.

◆ GrowEdgeFaceArray()

bool ON_SubD::GrowEdgeFaceArray ( ON_SubDEdge e,
size_t  capacity 
)

◆ GrowFaceEdgeArray()

bool ON_SubD::GrowFaceEdgeArray ( ON_SubDFace f,
size_t  capacity 
)

◆ GrowVertexEdgeArray()

bool ON_SubD::GrowVertexEdgeArray ( ON_SubDVertex v,
size_t  capacity 
)

◆ GrowVertexFaceArray()

bool ON_SubD::GrowVertexFaceArray ( ON_SubDVertex v,
size_t  capacity 
)

◆ HasBrepForm()

bool ON_SubD::HasBrepForm ( ) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ HasFragmentColors() [1/4]

bool ON_SubD::HasFragmentColors ( ) const

Determing if this SubD's mesh fragments have per vertex color settings.

Returns
If this SubD has mesh fragments with per vertex colors, then true is returned. Otherwise false is returned.

◆ HasFragmentColors() [2/4]

bool ON_SubD::HasFragmentColors ( ON_MappingTag  color_mapping_tag) const
Parameters
color_mapping_tagThis tag identifies the method and computation used to set the per vertex colors on the fragments. The tag is persistent so that the colors can be recomputed from the id in situations where fragments need to be recalculated.
Returns
If this SubD has mesh fragments with per vertex colors and color_tag = FragmentColorsMappingTag(), then true is returned. Otherwise false is returned.

◆ HasFragmentColors() [3/4]

bool ON_SubD::HasFragmentColors ( ON_SHA1_Hash  color_settings_hash) const
Parameters
color_settings_hashThis hash uniquely identifies the method and computation used to set the per vertex colors on the fragments. The has is a runtime value that has meaning only when fragments with per vertex colors exist.
Returns
If this SubD has mesh fragments with per vertex colors and color_settings_hash = FragmentColorsSettingsHash(), then true is returned. Otherwise false is returned.

◆ HasFragmentColors() [4/4]

bool ON_SubD::HasFragmentColors ( ON_SHA1_Hash  color_settings_hash,
ON_MappingTag  color_mapping_tag 
) const
Parameters
color_settings_hashThis hash uniquely identifies the method and computation used to set the per vertex colors on the fragments. The has is a runtime value that has meaning only when fragments with per vertex colors exist.
color_mapping_tagThis tag identifies the method and computation used to set the per vertex colors on the fragments. The tag is persistent so that the colors can be recomputed from the id in situations where fragments need to be recalculated.
Returns
If this SubD has mesh fragments with per vertex colors and color_settings_hash = FragmentColorsSettingsHash() and color_mapping_tag = ColorsMappingTag(), then true is returned. Otherwise false is returned.

◆ HasFragmentTextureCoordinates() [1/4]

bool ON_SubD::HasFragmentTextureCoordinates ( ) const

Determing if this SubD's mesh fragments have per vertex texture coordinates.

Returns
If this SubD has mesh fragments with per vertex texture coordinates, then true is returned. Otherwise false is returned.

◆ HasFragmentTextureCoordinates() [2/4]

bool ON_SubD::HasFragmentTextureCoordinates ( ON_MappingTag  texture_mapping_tag) const
Parameters
texture_mapping_tagThis tag identifies the method and computation used to set the per vertex texture coordinates on the fragments. The tag is persistent so that the texture coordinates can be recomputed from the id in situations where fragments need to be recalculated.
Returns
If this SubD has mesh fragments with per vertex texture coordinates and texture_mapping_tag = TextureMappingTag(), then true is returned. Otherwise false is returned.

◆ HasFragmentTextureCoordinates() [3/4]

bool ON_SubD::HasFragmentTextureCoordinates ( ON_SHA1_Hash  texture_settings_hash) const
Parameters
texture_settings_hashThis hash uniquely identifies the method and computation used to set the per vertex texture coordinates on the fragments. The hash is a runtime value that has meaning only when fragments with per vertex texture coordinates exist.
Returns
If this SubD has mesh fragments with per vertex texture coordinates and texture_settings_hash = TextureSettingsHash(), then true is returned. Otherwise false is returned.

◆ HasFragmentTextureCoordinates() [4/4]

bool ON_SubD::HasFragmentTextureCoordinates ( ON_SHA1_Hash  texture_settings_hash,
ON_MappingTag  texture_mapping_tag 
) const
Parameters
texture_settings_hashThis hash uniquely identifies the method and computation used to set the per vertex texture coordinates on the fragments. The hash is a runtime value that has meaning only when fragments with per vertex texture coordinates exist.
texture_mapping_tagThis tag identifies the method and computation used to set the per vertex texture coordinates on the fragments. The tag is persistent so that the texture coordinates can be recomputed from the id in situations where fragments need to be recalculated.
Returns
If this SubD has mesh fragments with per vertex texture coordinates and texture_settings_hash = TextureSettingsHash() and texture_mapping_tag = TextureMappingTag(), then true is returned. Otherwise false is returned.

◆ HasPerFaceColors()

bool ON_SubD::HasPerFaceColors ( ) const

Returns: True if one or more faces on the active level have per face color overrides. Remarks: Per face colors are a mutable property on ON_SubDFace and are set with ON_SubDFace.SetPerFaceColor().

◆ HasPerFaceColorsFromPackId()

bool ON_SubD::HasPerFaceColorsFromPackId ( ) const

Returns: True if per face colors were set by SetPerFaceColorsFromPackId().

◆ HasPerFaceColorsFromSymmetryMotif()

bool ON_SubD::HasPerFaceColorsFromSymmetryMotif ( ) const

Returns: True if per face colors were set by SetPerFaceColorsFromSymmetryMotif().

◆ HasPerFaceMaterialChannelIndices()

bool ON_SubD::HasPerFaceMaterialChannelIndices ( ) const

Returns: True if one or more faces on the active level have per face material channel index overrides. Remarks: Per face material channel indices are a mutable property on ON_SubDFace and are set with ON_SubDFace.SetMaterialChannelIndex().

◆ HasSharpEdges()

bool ON_SubD::HasSharpEdges ( ) const

Determine if this SubD has sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.

Returns
True if the SubD has at lease one sharp edge.

◆ InSubD() [1/5]

const ON_SubDComponentPtr ON_SubD::InSubD ( const class ON_SubDComponentBase b) const

Returns: If b is in this SubD, a ON_SubDComponentPtr to b is returned. Otherwise ON_SubDComponentPtr::Null is returned. Remarks: This function is the slowest of the InSubD() overrides. When b is an unknown component type, this function can be used to safely determine what type of component (vertex/edge/face).

◆ InSubD() [2/5]

bool ON_SubD::InSubD ( const class ON_SubDEdge edge) const

◆ InSubD() [3/5]

bool ON_SubD::InSubD ( const class ON_SubDFace face) const

◆ InSubD() [4/5]

bool ON_SubD::InSubD ( const class ON_SubDVertex vertex) const

Membership query

◆ InSubD() [5/5]

bool ON_SubD::InSubD ( ON_SubDComponentPtr  cptr) const

Returns: ON_SubDComponentPtr::Type::Unset if b is not in this SubD. Otherwise the type of the component is returned.

◆ InterpolateControlNet()

bool ON_SubD::InterpolateControlNet ( )

Description: Modifies the SubD so that the SubD vertex limit points are equal to input control net locations.

◆ InterpolateSurfacePoints() [1/5]

bool ON_SubD::InterpolateSurfacePoints ( const ON_SimpleArray< const ON_SubDVertex * > &  vertices,
const ON_SimpleArray< ON_3dPoint > &  surface_points 
)

Description: Modifies the SubD so that the SubD vertex limit surface points are equal to vertex_surface_points[] Parameters: vertices - [in] free vertices surface_points - [in] surface_points[i] is the desired location for vertices[i].SurfacePoint().

◆ InterpolateSurfacePoints() [2/5]

bool ON_SubD::InterpolateSurfacePoints ( const ON_SimpleArray< ON_3dPoint > &  surface_points)

Description: Modifies the SubD so that the SubD vertex limit surface points are equal to surface_points[] Parameters: surface_points - [in] point for limit surface to interpolate. surface_points[i] is the location for the i-th vertex returned by ON_SubVertexIterator vit(*this).

◆ InterpolateSurfacePoints() [3/5]

bool ON_SubD::InterpolateSurfacePoints ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  vertices,
const ON_SimpleArray< ON_3dPoint > &  surface_points 
)

◆ InterpolateSurfacePoints() [4/5]

bool ON_SubD::InterpolateSurfacePoints ( const ON_SimpleArray< ON_SubDComponentPtr > &  vertices,
const ON_SimpleArray< ON_3dPoint > &  surface_points 
)

◆ InterpolateSurfacePoints() [5/5]

bool ON_SubD::InterpolateSurfacePoints ( const ON_SimpleArray< ON_SubDVertexPtr > &  vertices,
const ON_SimpleArray< ON_3dPoint > &  surface_points 
)

◆ IsBuiltInFacePackingId()

static bool ON_SubD::IsBuiltInFacePackingId ( ON_UUID  candidate_id)
static

◆ IsDeformable()

bool ON_SubD::IsDeformable ( ) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ IsEmpty()

bool ON_SubD::IsEmpty ( ) const

◆ IsManifold() [1/2]

bool ON_SubD::IsManifold ( ) const

◆ IsManifold() [2/2]

bool ON_SubD::IsManifold ( bool &  bIsOriented,
bool &  bHasBoundary 
) const

Description: Test subd to see if the active level is an oriented manifold. Parameters: bIsOriented - [out] True if every edge that has two faces is oriented. Note that non-manifold edges are ignored. bHasBoundary - [in] True if there is at least one edge with a single face. Returns: True if the subd is a manifold (has at lease one face and every edge has 1 or 2 faces). False if the subd is not a manifold (has no faces or at least one edge with 0 or 3 or more faces) See Also: ON_SubDp::IsSolid

◆ IsMorphable()

bool ON_SubD::IsMorphable ( ) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ IsNotEmpty()

bool ON_SubD::IsNotEmpty ( ) const

◆ IsOriented()

bool ON_SubD::IsOriented ( ) const

returns true if all facets are consistently oriented

◆ IsSolid()

bool ON_SubD::IsSolid ( ) const

Description: Test subd to see if the active level is a solid.
A "solid" is a closed oriented manifold. Returns: true subd is a solid fals subd is not a solid See Also: ON_SubDp::SolidOrientation ON_SubDp::IsManifold

◆ IsSubDFriendlyCurve()

static bool ON_SubD::IsSubDFriendlyCurve ( const ON_Curve curve)
static

Parameters: curve - [in] curve to test. Returns: True if the curve is a cubic, nonrational, uniform NURBS curve that is either periodic or has natural end contitions. Otherwise, false is returned. Remarks: A "natural" spline has zero 2nd derivatives (and hence zero curvature) at the start and end. A "periodic" spline has unclampled periodic knots and periodic control points.

◆ IsSubDFriendlySurface()

static bool ON_SubD::IsSubDFriendlySurface ( const ON_Surface surface)
static

Parameters: curve - [in] curve to test. Returns: True if the curve is a nonrational, uniform, natural or periodic, cubic NURBS curve. Otherwise, 0 is returned. Remarks: A "natural" spline has zero 2nd derivatives (and hence zero curvature) at the start and end. A "periodic" spline has unclampled periodic knots and periodic control points.

◆ IsValid()

bool ON_SubD::IsValid ( class ON_TextLog text_log = nullptr) const
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ IsValidSectorEdgeCount()

static bool ON_SubD::IsValidSectorEdgeCount ( ON_SubDVertexTag  vertex_tag,
unsigned int  sector_edge_count 
)
static

Returns: true if sector_edge_count is valid for the vertex type

◆ IsValidSectorFaceCount()

static bool ON_SubD::IsValidSectorFaceCount ( ON_SubDVertexTag  vertex_tag,
unsigned int  sector_face_count 
)
static

◆ LastEdge()

const class ON_SubDEdge* ON_SubD::LastEdge ( ) const

◆ LastFace()

const class ON_SubDFace* ON_SubD::LastFace ( ) const

◆ LastVertex()

const class ON_SubDVertex* ON_SubD::LastVertex ( ) const

◆ LevelCount()

unsigned int ON_SubD::LevelCount ( ) const

Returns: The number of explicitly computed levels that are currently available. A value of 0 indicates this SubD is empty.

◆ LevelForExperts()

const class ON_SubDLevel& ON_SubD::LevelForExperts ( unsigned int  level_index) const

If a level exists, get it

Parameters
level_index
Returns
If the specified level exists, it is returned. Otherwise ON_SubDLevel::Empty is returned.

◆ LocalSubdivide() [1/3]

bool ON_SubD::LocalSubdivide ( class ON_SubDFace const *const face_list,
size_t  face_count 
)

Description: Apply the Catmull-Clark subdivision algorithm to the faces in face_list[]. Parameters: face_list - [in] faces to subdivide face_count - [in] number of components. Returns: true if successful.

◆ LocalSubdivide() [2/3]

bool ON_SubD::LocalSubdivide ( const ON_SimpleArray< const class ON_SubDFace * > &  face_list)

◆ LocalSubdivide() [3/3]

bool ON_SubD::LocalSubdivide ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  face_list)

◆ MakeDeformable()

bool ON_SubD::MakeDeformable ( )
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ MakeReflectSymmetric()

bool ON_SubD::MakeReflectSymmetric ( ON_Symmetry  symmetry)

Description: Apply reflection symmetry

Deprecated:
Call ON_SubD::MakeSymmetric(symmetry);

◆ MakeSymmetric() [1/2]

bool ON_SubD::MakeSymmetric ( ON_Symmetry  symmetry)

Description: Make this subd symmetric. Parameters: symmetry - [in] desired symmetry. Returns: True if successful

◆ MakeSymmetric() [2/2]

bool ON_SubD::MakeSymmetric ( ON_Symmetry  symmetry,
bool  bIgnoredParameter1,
bool  bIgnoredParameter2 
)

◆ MarkAggregateComponentStatusAsNotCurrent()

void ON_SubD::MarkAggregateComponentStatusAsNotCurrent ( ) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ MarkConnectedRegion()

unsigned int ON_SubD::MarkConnectedRegion ( const ON_SubDComponentPtr  seed_component,
bool  bManifoldRegions 
) const

Description: Mark all vertices, edges, and faces in the connected region containing seed_component by setting ON_SubDComponentBase.Mark() to true. Parameters: seed_component - [in] bManifoldRegions - [in] If true, marking will stop at nonmanifold vertices and nonmanifold edges. Returns: Number of marked components.

◆ MemoryRelocate()

void ON_SubD::MemoryRelocate ( )
overridevirtual

virtual

Reimplemented from ON_Object.

◆ Merge() [1/4]

unsigned int ON_SubD::Merge ( const ON_SubD subd,
const class ON_SubDComponentPtrPair vertex_pairs,
size_t  vertex_pairs_count,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents 
)

Description: Merge a copy of subd into this. Parameters:

Parameters: subd - [in] SubD to append to this.

vertex_pairs_count - [in] vertex_pairs - [in] Pairs of vertices to to merge. The first pair component (vertex_pairs[i][0]) must be a vertex in this and the second pair component (vertex_pairs[i][1]) must be the corresponding vertex in subd.
Vertices in subd that are not identified in vertex_pairs[] will be added to this as new vertices. When possible, invalid elements in vertex_pairs[] are silently ignored, but garbage in will often result in garbage out.

prefered_merged_edge_tag - [in] This parameter controls what edge tag is assigned when two boundary edges are merged into a single interior edge. In this case the default is smooth but can be overridden by setting prefered_merged_edge_tag to ON_SubDEdgeTag::Crease.

bMergeAllCoincidentVertices - [in] When in doubt, pass false. If true, all coincident vertices will be merged. If false, only coincident corner vertices and conindident crease edges with at most one face will be merged.

bMarkMergedComponents - [in] If true, then merged components have RuntimeMark() set to true.

bMarkAddedComponents - [in] If true, then added components have RuntimeMark() set to true.

Returns: Number of components (vertices, edges, and faces) added to this.

Remarks: Existing compenent marks on this are erased. Then bMarkMergedComponents and bMarkAddedComponents determine which components get marked.

◆ Merge() [2/4]

unsigned int ON_SubD::Merge ( const ON_SubD subd,
const class ON_SubDComponentPtrPair vertex_pairs,
size_t  vertex_pairs_count,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
const ON_SubDComponentTest this_vertex_filter,
const ON_SubDComponentTest subd_vertex_filter,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents 
)

◆ Merge() [3/4]

unsigned int ON_SubD::Merge ( const ON_SubD subd,
const ON_SimpleArray< ON_SubDComponentPtrPair > &  vertex_pairs,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents 
)

Description: Merge a copy of subd into this.

Parameters: subd - [in] SubD to append to this.

vertex_pairs - [in] Pairs of vertices to to merge. The first pair component (vertex_pairs[i][0]) must be a vertex in this and the second pair component (vertex_pairs[i][1]) must be the corresponding vertex in subd.
Vertices in subd that are not identified in vertex_pairs[] will be added to this as new vertices. When possible, invalid elements in vertex_pairs[] are silently ignored, but garbage in will often result in garbage out.

prefered_merged_edge_tag - [in] This parameter controls what edge tag is assigned when two boundary edges are merged into a single interior edge. In this case the default is smooth but can be overridden by setting prefered_merged_edge_tag to ON_SubDEdgeTag::Crease.

bMergeAllCoincidentVertices - [in] When in doubt, pass false. If true, all coincident vertices will be merged. If false, only coincident corner vertices and conindident crease edges with at most one face will be merged.

bMarkMergedComponents - [in] If true, then merged components have RuntimeMark() set to true.

bMarkAddedComponents - [in] If true, then added components have RuntimeMark() set to true.

Returns: Number of components (vertices, edges, and faces) added to this.

Remarks: Existing compenent marks on this are erased. Then bMarkMergedComponents and bMarkAddedComponents determine which components get marked.

◆ Merge() [4/4]

unsigned int ON_SubD::Merge ( const ON_SubD subd,
const ON_SimpleArray< ON_SubDComponentPtrPair > &  vertex_pairs,
ON_SubDEdgeTag  prefered_merged_edge_tag,
bool  bMergeAllCoincidentVertices,
const ON_SubDComponentTest this_vertex_filter,
const ON_SubDComponentTest subd_vertex_filter,
bool  bMarkMergedComponents,
bool  bMarkAddedComponents 
)

◆ MergeColinearEdges()

unsigned int ON_SubD::MergeColinearEdges ( bool  bMergeBoundaryEdges,
bool  bMergeInteriorCreaseEdges,
bool  bMergeInteriorSmoothEdges,
double  distance_tolerance,
double  maximum_aspect,
double  sin_angle_tolerance 
)

Editing tools

◆ MergeConsecutiveEdges()

ON_SubDEdgePtr ON_SubD::MergeConsecutiveEdges ( ON_SubDEdgePtr  eptr0,
ON_SubDEdgePtr  eptr1 
)

Description: Merge consecutive edges into a single edge. eptr0 - [in] first edge (will not be deleted) eptr1 - [in] second edge (will be deleted if edges can be merged) Returns: Merged edge (eptr0) or ON_SubDEdgePtr::Null if edges could not be merged

◆ MergeFaces() [1/5]

const class ON_SubDFace* ON_SubD::MergeFaces ( const class ON_SubDEdge edge)

Description: Merge the edge's faces into a single face. Parameters: edge - [in] An edge with two attached faces. Returns: A pointer to the merged face or nullptr if the input was not valid.

◆ MergeFaces() [2/5]

const class ON_SubDFace* ON_SubD::MergeFaces ( const class ON_SubDVertex vertex)

Description: Merge the faces attached to a vertex into a single face. Parameters: vertex - [in] An vertex with no nonmanifold edges and that has zero or two boundary edges.
Returns: A pointer to the merged face or nullptr if the input was not valid.

◆ MergeFaces() [3/5]

const class ON_SubDFace* ON_SubD::MergeFaces ( const ON_SimpleArray< const ON_SubDFace * > &  face_list,
bool  bFaceListMayBeInvalid 
)

Description: Merge a set of faces into a single face. Parameters: face_list - [in] A list of faces that can be merged into a single face. bFaceListMayBeInvalid - [in] True indicates that it is possible the set of faces in face_list may not be contiguous with a single boundary component. Returns: A pointer to the merged face or nullptr if the input was not valid.

◆ MergeFaces() [4/5]

const class ON_SubDFace* ON_SubD::MergeFaces ( const ON_SubDFacePtr face_list,
size_t  face_count,
bool  bFaceListMayBeInvalid 
)

Description: Merge a set of faces into a single face. Parameters: face_list - [in] A list of faces that can be merged into a single face. size_t face_count - [in] bFaceListMayBeInvalid - [in] True indicates that it is possible the set of faces in face_list may not be contiguous with a single boundary component. Returns: A pointer to the merged face or nullptr if the input was not valid.

◆ MergeFaces() [5/5]

const class ON_SubDFace* ON_SubD::MergeFaces ( ON_SubDFace const *const face_list,
size_t  face_count,
bool  bFaceListMayBeInvalid 
)

Description: Merge a set of faces into a single face. Parameters: face_list - [in] A list of faces that can be merged into a single face. bFaceListMayBeInvalid - [in] True indicates that it is possible the set of faces in face_list may not be contiguous with a single boundary component. Returns: A pointer to the merged face or nullptr if the input was not valid.

◆ MergeFaceSets() [1/4]

unsigned int ON_SubD::MergeFaceSets ( const ON_SimpleArray< const ON_SubDFace * > &  face_list)

Description: The collection of faces in face_list[] is partitioned into subsets that can be merged into a single face. Parameters: face_list - [in] A list of faces. Returns: Number of merged faces, all of which have m_status.RuntimeMark() set to true.

◆ MergeFaceSets() [2/4]

unsigned int ON_SubD::MergeFaceSets ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  ci_list,
bool  bMergeSharedEdges 
)

Description: The collection of components in faces in cptr_list[] is used to generate subsets or faces that can be merged into a single face. Parameters: ci_list - [in] A list of components. bMergeSharedEdges - [in] When in doubt, pass true. If true, contiguous edges on the boundary of a merged face will be merged into a single edge when possible. Returns: Number of merged faces, all of which have m_status.RuntimeMark() set to true. Remarks: If an edge in cptr_list[] is part of a boundary of a face in cptr_list[], then that edge is ignored. If an vertex in cptr_list[] is attached to a face in cptr_list[] or attached to a face that is attached to an edge in cptr_list[], then that vertex is ignored.

◆ MergeFaceSets() [3/4]

unsigned int ON_SubD::MergeFaceSets ( const ON_SimpleArray< ON_SubDComponentPtr > &  cptr_list,
bool  bMergeSharedEdges 
)

Description: The collection of components in faces in cptr_list[] is used to generate subsets or faces that can be merged into a single face. Parameters: cptr_list - [in] A list of components. bMergeSharedEdges - [in] When in doubt, pass true. If true, contiguous edges on the boundary of a merged face will be merged into a single edge when possible. Returns: Number of merged faces, all of which have m_status.RuntimeMark() set to true. Remarks: If an edge in cptr_list[] is part of a boundary of a face in cptr_list[], then that edge is ignored. If an vertex in cptr_list[] is attached to a face in cptr_list[] or attached to a face that is attached to an edge in cptr_list[], then that vertex is ignored.

◆ MergeFaceSets() [4/4]

unsigned int ON_SubD::MergeFaceSets ( const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
bool  bMergeSharedEdges 
)

Description: The collection of components in faces in cptr_list[] is used to generate subsets or faces that can be merged into a single face. Parameters: cptr_list - [in] A list of components. cptr_count - [in] number of components bMergeSharedEdges - [in] When in doubt, pass true. If true, contiguous edges on the boundary of a merged face will be merged into a single edge when possible. Returns: Number of merged faces, all of which have m_status.RuntimeMark() set to true. Remarks: If an edge in cptr_list[] is part of a boundary of a face in cptr_list[], then that edge is ignored. If an vertex in cptr_list[] is attached to a face in cptr_list[] or attached to a face that is attached to an edge in cptr_list[], then that vertex is ignored.

◆ MeshFragmentCount()

unsigned int ON_SubD::MeshFragmentCount ( ) const

Returns: The number of limit surface mesh fragments (ON_SubDMeshFragment) that GetMeshFragments() will produce.

◆ Morph()

bool ON_SubD::Morph ( const ON_SpaceMorph morph)
override

virtual

◆ NurbsKnotType() [1/2]

static ON_SubD::SubDFriendlyKnotType ON_SubD::NurbsKnotType ( int  order,
int  cv_count,
const double *  knots 
)
static

Parameters: order - [in] NURBS knot vector order. cv_count - [in] Number of NURBS knot vector control points. knots - [in] NURBS knot vector. This is an array of (cv_count+2) knot values. Returns: SubD friendly knot vector type. Remarks: If order is not 4, cv_count is not valid, or knot is nullptr, then ON_SubD::SubDFriendlyKnotType::Unfriendly is returned.

◆ NurbsKnotType() [2/2]

static ON_SubD::SubDFriendlyKnotType ON_SubD::NurbsKnotType ( int  order,
int  cv_count,
const double *  knots,
ON_SimpleArray< double > *  triple_knots 
)
static

◆ ObjectType()

ON::object_type ON_SubD::ObjectType ( ) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ ObsoleteTextureDomainTypeFromTextureCoordinateType()

static unsigned char ON_SubD::ObsoleteTextureDomainTypeFromTextureCoordinateType ( ON_SubDTextureCoordinateType  texture_coordinate_type)
static

◆ Offset() [1/4]

ON_SubD* ON_SubD::Offset ( double  offset_distance,
bool  bOffsetSurface,
bool  bBothSides,
bool  bMakeSolid,
bool  bPreserveSymmetry,
ON_SubD destination_subd 
) const

Parameters: offset_distance - [in] A valid nonzero value . bOffsetSurface - [in] If true, the offset is calculated by interpolating offet surface points. Otherwise the offset is calculated by offsetting the control net. Using interpolation is slower and typiclly produces less pleasing appearance. Using the control net typically means the surface offset distance is not exactly offset_distance. bBothSides - [in] If true, the input subd is offset both directions. bMakeSolid - [in] If true, the result is a solid made by adding quads connecting corresponding boundary edges the input subd and the offset or both sides of the offset. bPreserveSymmetry - [in] If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the returned sub will attempt to preserve the symmetry. destination_subd - [in] If not nullptr, the result will be created in this subd. If this and destination_subd are the same, the subd is offset in place. If nullptr is passed, the returned ON_SubD is on the heap and the caller is responsible for managing it. Returns: If successful, the offset is returned. Otherwise nullptr is returned.

◆ Offset() [2/4]

ON_SubD* ON_SubD::Offset ( double  offset_distance,
bool  bOffsetSurface,
bool  bBothSides,
bool  bMakeSolid,
ON_SubD destination_subd 
) const

Parameters: offset_distance - [in] A valid nonzero value . bOffsetSurface - [in] If true, the offset is calculated by interpolating offet surface points. Otherwise the offset is calculated by offsetting the control net. Using interpolation is slower and typiclly produces less pleasing appearance. Using the control net typically means the surface offset distance is not exactly offset_distance. bBothSides - [in] If true, the input subd is offset both directions. bMakeSolid - [in] If true, the result is a solid made by adding quads connecting corresponding boundary edges the input subd and the offset or both sides of the offset. destination_subd - [in] If not nullptr, the result will be created in this subd. If this and destination_subd are the same, the subd is offset in place. If nullptr is passed, the returned ON_SubD is on the heap and the caller is responsible for managing it. Returns: If successful, the offset is returned. Otherwise nullptr is returned.

◆ Offset() [3/4]

ON_SubD* ON_SubD::Offset ( ON_3dVector  offset_direction,
bool  bOffsetSurface,
bool  bBothSides,
bool  bMakeSolid,
bool  bPreserveSymmetry,
ON_SubD destination_subd 
) const

Parameters: offset_direction - [in] non zero vector bOffsetSurface - [in] If true, the offset is calculated by interpolating offet surface points. Otherwise the offset is calculated by offsetting the control net. Using interpolation is slower and typiclly produces less pleasing appearance. Using the control net typically means the surface offset distance is not exactly offset_distance. bBothSides - [in] If true, the input subd is offset both directions. bMakeSolid - [in] If true, the result is a solid made by adding quads connecting corresponding boundary edges the input subd and the offset or both sides of the offset. bPreserveSymmetry - [in] If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the returned sub will attempt to preserve the symmetry. destination_subd - [in] If not nullptr, the result will be created in this subd. If this and destination_subd are the same, the subd is offset in place. If nullptr is passed, the returned ON_SubD is on the heap and the caller is responsible for managing it. Returns: If successful, the offset is returned. Otherwise nullptr is returned.

◆ Offset() [4/4]

ON_SubD* ON_SubD::Offset ( ON_3dVector  offset_direction,
bool  bOffsetSurface,
bool  bBothSides,
bool  bMakeSolid,
ON_SubD destination_subd 
) const

Parameters: offset_direction - [in] non zero vector bOffsetSurface - [in] If true, the offset is calculated by interpolating offet surface points. Otherwise the offset is calculated by offsetting the control net. Using interpolation is slower and typiclly produces less pleasing appearance. Using the control net typically means the surface offset distance is not exactly offset_distance. bBothSides - [in] If true, the input subd is offset both directions. bMakeSolid - [in] If true, the result is a solid made by adding quads connecting corresponding boundary edges the input subd and the offset or both sides of the offset. destination_subd - [in] If not nullptr, the result will be created in this subd. If this and destination_subd are the same, the subd is offset in place. If nullptr is passed, the returned ON_SubD is on the heap and the caller is responsible for managing it. Returns: If successful, the offset is returned. Otherwise nullptr is returned.

◆ operator=()

ON_SubD& ON_SubD::operator= ( const ON_SubD src)

Description: Creates an independent copy of src.

◆ Orient()

bool ON_SubD::Orient ( ) const

Attempts to orient all facet to match the first facet.

◆ PackFaces() [1/2]

unsigned int ON_SubD::PackFaces ( )

Description: Calls this->PackFaces(ON_SubD::DefaultPackFacesId). Returns: Number of face packs.

◆ PackFaces() [2/2]

unsigned int ON_SubD::PackFaces ( ON_UUID  face_packing_id)

Description: Applies one of the built in face packings. Quad faces are divided into rectangular grids and every face in the rectangular grid is assigned the same PackId. In addition, every face is assigned a distinct PackRect which is a sub-rectangle in (0,1)x(0,1). If quad faces are adjacent and have the same PackId, then their PactRects are also adjacent. Parameters: face_packing_id - [in] An id for one of the built-in face packings. Code that wants to use the built-in face packing that is currently the best option for general use, will specify ON_SubD::DefaultFacePackingId or call PackFaces(). Returns: Number of face packs.

◆ ProjectVerticesToPlane()

unsigned int ON_SubD::ProjectVerticesToPlane ( ON_PlaneEquation  plane_equation,
double  distance_tolerance 
)

Description: Projects vertices's control points that are near a plane to the plane. Parameters: plane_equation - [in] distance_tolerance - [in] If the distance from a vertex's control net point is <= distance_tolerance, that control net point is projected to the plane. Returns: number of vertices whose control points where projected.

◆ ProxyBrep()

class ON_Brep* ON_SubD::ProxyBrep ( ON_Brep destination_brep) const

SubD proxy brep interface.

Returns: GetSurfaceBrep( ON_SubDToBrepParameters::Default, destination_brep );

◆ ProxyBrepEdge()

const class ON_BrepEdge* ON_SubD::ProxyBrepEdge ( const ON_Brep proxy_brep,
unsigned  subd_edge_id,
const class ON_BrepEdge prev_proxy_edge 
) const

Parameters: proxy_brep - [in] Brep created on this->ProxyBrep() subd_edge_id - [in] Returns: A proxy_brep edge corresponding to some part of the subd edge.

◆ ProxyBrepFace()

const class ON_BrepFace* ON_SubD::ProxyBrepFace ( const ON_Brep proxy_brep,
unsigned  subd_face_id,
const class ON_BrepFace prev_proxy_face 
) const

Parameters: proxy_brep - [in] Brep created on this->ProxyBrep() subd_face_id - [in] Returns: A proxy_brep face corresponding to some part of the subd face.

◆ ProxyBrepVertex()

const class ON_BrepVertex* ON_SubD::ProxyBrepVertex ( const ON_Brep proxy_brep,
unsigned  subd_vertex_id 
) const

Parameters: proxy_brep - [in] Brep created on this->ProxyBrep() subd_vertex_id - [in]
Returns: The proxy_brep vertex corresponding to the subd vertex.

◆ Read()

bool ON_SubD::Read ( ON_BinaryArchive archive)
overridevirtual

virtual

Reimplemented from ON_Object.

◆ RemoveAllCreases()

unsigned int ON_SubD::RemoveAllCreases ( )

Description: Remove all interior creases. Returns: Number of edges converted from crease to smooth.

◆ RemoveEdgeVertexConnection() [1/2]

bool ON_SubD::RemoveEdgeVertexConnection ( ON_SubDEdge e,
ON_SubDVertex v 
)

Description: Expert user tool to remove a connection between an edge and vertex Parameters: e - [in] An edge with zero attached faces. v - [in] A vertex attached to the e. Returns: If successful, true is returned. Otherwise false is returned.

◆ RemoveEdgeVertexConnection() [2/2]

ON_SubDVertex* ON_SubD::RemoveEdgeVertexConnection ( ON_SubDEdge e,
unsigned  evi 
)

Description: Expert user tool to remove a connection between an edge and edge->vertex[evi] Parameters: e - [in] An edge with zero attached faces. evi - [in] 0 or 1 specifying which vertex to remove. Returns: If successful, a pointer to the removed vertex is returned. Otherwise nullptr is returned.

◆ RemoveFaceConnections()

bool ON_SubD::RemoveFaceConnections ( ON_SubDFace face)

Description: Expert user tool to remove all edge and vertex connections from a face Parameters: face - [in] Remarks: This tool is used during editing of a SubD and the connections are removed even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ RemoveFaceEdgeConnection() [1/3]

bool ON_SubD::RemoveFaceEdgeConnection ( ON_SubDFace face,
ON_SubDEdge edge 
)

Description: Expert user tool to insert an edge in the face's edge array. Parameters: face - [in] edge - [in] edge to remove Returns: true if successful. Remarks: This tool is used during construction or editing of a SubD and the connection is removed even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ RemoveFaceEdgeConnection() [2/3]

bool ON_SubD::RemoveFaceEdgeConnection ( ON_SubDFace face,
unsigned int  i 
)

Description: Expert user tool to remove the connection between and edge and face. Parameters: face - [in] i - [in] index where the edge should be removed. 0 <= i < face->EdgeCount() removed_edge - [out] removed edge Remarks: This tool is used during construction or editing of a SubD and the connection is removed even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ RemoveFaceEdgeConnection() [3/3]

bool ON_SubD::RemoveFaceEdgeConnection ( ON_SubDFace face,
unsigned int  i,
ON_SubDEdgePtr removed_edge 
)

Description: Expert user tool to remove the connection between and edge and face. Parameters: face - [in] i - [in] index where the edge should be removed. removed_edge - [out] removed edge Remarks: This tool is used during construction or editing of a SubD and the connection is removed even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ RemoveZeroLengthEdges()

unsigned int ON_SubD::RemoveZeroLengthEdges ( )

Description: Remove all zero length edges. When an edge is removed, the edge vertex with the smallest id survives. Returns: Number of edges that were removed. Remarks: If a faces end up with < 3 edges, they are removed as well.

◆ RenderContentSerialNumber()

ON__UINT64 ON_SubD::RenderContentSerialNumber ( ) const

Description: The render content serial number changes whenever a change the might effect rendered appearance changes. This includes both geometry changes and changes that affect rendered appeance including changes to per face colors, per face materials, texture coordinates, and texture mappings.

◆ ReplaceFaceWithTrianglation()

unsigned int ON_SubD::ReplaceFaceWithTrianglation ( class ON_SubDFace face,
ON_3dVector  triangluation_plane_normal,
bool  bMarkFaces 
)

Description: Replace a face by trangulating its boundary into with (face->EdgeCount()-2) triangles. No new vertices are added. Parameters: face - [in] This face is replaced with a trianglulation of its boundary and becomes the first triangle in the triangulation. triangluation_plane_normal - [in] If valid and nonzero, this vector is used as the normal of the plane for calculating the boundary triangulation. Otherwise, the plane normal is calculated from the boundary vertices. When in doubt, pass ON_3dVector::ZeroVector. bMarkFaces - [in] If true, face and new triangles are marked. Existing marks are not modified. Returns: Number of triangles.

◆ ReplaceFaceWithTriangleFan()

const class ON_SubDVertex* ON_SubD::ReplaceFaceWithTriangleFan ( class ON_SubDFace face,
ON_3dPoint  fan_center_point,
bool  bMarkFaces 
)

Description: Replace a face with a triangle fan by adding a single new vertex at fan_center_point and adding tringle made from the face's edes to the center point. Parameters: face - [in] This face is replaced with a triangle fan and becomes the first triangle in the fan. fan_center_point - [in] If valid, this point is used as the fan's center. Otherwise the centriod of the face's vertices is used s the fan's center. When in doubt, pass ON_3dPoint::UnsetPoint. bMarkFaces - [in] If true, face and new triangles are marked. Existing marks are not modified. Returns: If successful, the new vertex at the center of the triangle fan. Otherwise, nullptr is returned.

◆ ReturnEdgeForExperts()

bool ON_SubD::ReturnEdgeForExperts ( ON_SubDEdge e)

Parameters: e - [in] An edge in this subd with no vertices or faces.

◆ ReturnFaceForExperts()

bool ON_SubD::ReturnFaceForExperts ( ON_SubDFace f)

Parameters: f - [in] A face with zero edges

◆ ReturnVertexForExperts()

bool ON_SubD::ReturnVertexForExperts ( ON_SubDVertex v)

Parameters: v - [in] A vertex with zero edge and zero faces.

◆ ReverseOrientation()

bool ON_SubD::ReverseOrientation ( ) const

reverses the orientation of all facets

◆ RuntimeSerialNumber()

ON__UINT64 ON_SubD::RuntimeSerialNumber ( ) const

Returns: A runtime serial number identifying this subd. Remarks: ON_SubD is a shared pointer to an implementation. As such, there can be multiple ON_SubD instances that reference the same implementation. The runtime serial number uniquely identifies a particular instance of an implementation. The empty subd has runtime serial number = 0.

◆ SeparateInteriorEdge()

ON_SubDComponentPtrPair ON_SubD::SeparateInteriorEdge ( ON_SubDEdgePtr  interior_edge,
const ON_SubDEdge separator0,
const ON_SubDEdge separator1 
)

Description: Separate (unweld) an interior edge into two coincident boundary edges. Parameters: edge - [in] Interior edge to separate. separator0 - [in] If interior_edge.RelativeVertex(0) is an interior vertex, then a separator0 may be included to specify how the vertex faces should be divided into two sectors. If interior_edge.RelativeVertex(0) is a boundary vertex, separator0 is ignored. If separator0 is not included, an automatic choice is made. separator1 - [in] If interior_edge.RelativeVertex(1) is an interior vertex, then a separator1 may be included to specify how the vertex faces should be divided into two sectors. If interior_edge.RelativeVertex(1) is a boundary vertex, separator1 is ignored. If separator0 is not included, an automatic choice is made. Returns: If successful, the separated edges are returned as a pair with the original edge in pair.First().EdgePtr() and the new edge in pair.Second().EdgePtr(). Otherwise, ON_SubDComponentPtrPair::Null is returned.

◆ SeparateInteriorEdgeChains() [1/4]

unsigned int ON_SubD::SeparateInteriorEdgeChains ( const ON_SimpleArray< const ON_SubDEdge * > &  edge_chains,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edge_chains - [in] edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdgeChains() [2/4]

unsigned int ON_SubD::SeparateInteriorEdgeChains ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  edge_chains,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edge_chains - [in] edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdgeChains() [3/4]

unsigned int ON_SubD::SeparateInteriorEdgeChains ( const ON_SimpleArray< ON_SubDComponentPtr > &  edge_chains,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edge_chains - [in] edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdgeChains() [4/4]

unsigned int ON_SubD::SeparateInteriorEdgeChains ( const ON_SimpleArray< ON_SubDEdgePtr > &  edge_chains,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edge_chains - [in] edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdges() [1/4]

unsigned int ON_SubD::SeparateInteriorEdges ( const ON_SimpleArray< const ON_SubDEdge * > &  edges,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edges - [in] edges that will be sorted into edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdges() [2/4]

unsigned int ON_SubD::SeparateInteriorEdges ( const ON_SimpleArray< ON_COMPONENT_INDEX > &  edges,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edges - [in] edges that will be sorted into edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdges() [3/4]

unsigned int ON_SubD::SeparateInteriorEdges ( const ON_SimpleArray< ON_SubDComponentPtr > &  edges,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edges - [in] edges that will be sorted into edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateInteriorEdges() [4/4]

unsigned int ON_SubD::SeparateInteriorEdges ( const ON_SimpleArray< ON_SubDEdgePtr > &  edges,
ON_SimpleArray< ON_SubDComponentPtrPair > *  separated_edges 
)

Description: Separate (unweld) interior edges. Parameters: edges - [in] edges that will be sorted into edge chains that will be separated into coincident boundary edges. separated_edges - [out] If not null, the pairs of separated edges are returned here. separated_edges[].First().EdgePtr() will be an original edge. separated_edges[].Second().EdgePtr() will be a new edge edge. Returns: Number of separated edges.

◆ SeparateVertex() [1/2]

const ON_SimpleArray<const ON_SubDVertex*> ON_SubD::SeparateVertex ( ON_SubDVertex vertex,
bool  bApplyCreaseBias 
)

Description: Separate (unweld) a vertex into the default number of sectors. Parameters: vertex - [in] If the vertex is a nonmanifold vertex with multiple manifold sectors, it is separated into manifold sectors. bApplyCreaseBias - [in] If the vertex has a single sector and the topology and creases clearly create two sectors, then the separation will be performed along the creases. Returns: If separation occurred, then an array of the separated vertices is returned with the original vertex is the first element in the array. Otherwise an empty array is returned.

◆ SeparateVertex() [2/2]

const ON_SimpleArray<const ON_SubDVertex*> ON_SubD::SeparateVertex ( ON_SubDVertex vertex,
const ON_SubDEdge separator0,
const ON_SubDEdge separator1 
)

Description: Separate (unweld) a vertex into two vertices. Parameters: vertex - [in] If the vertex is a nonmanifold vertex with multiple manifold sectors, it is separated into manifold sectors. If vertex is an interior vertex with 3 or more edges and optional_separator0 and optional_separator1 point to two of these edges, then the vertex is separated into 2 sectors along thos edges. If vertex is a boundary vertex with 4 or more edges and optional_separator0 or optional_separator1 point to an interior edge, then the vertex is separated into 2 sectors along that edge. Otherwise the vertex is separated into single face sectors. separator0 - [in] separator1 - [in] Returns: If separation occurred, then an array of the separated vertices is returned with the original vertex is the first element in the array. Otherwise an empty array is returned.

◆ SetAutomaticMeshToSubD()

static void ON_SubD::SetAutomaticMeshToSubD ( ON_SubD::AutomaticMeshToSubDContext  context,
bool  bAutomaticallyCreateSubD 
)
static

Parameters: context - [in] Situation where an ON_Mesh can automatically be converted into a subd. bAutomaticallyCreateSubD - [in] true if SubDs are automatically created when an ON_Mesh is found in the specified context. false otherwise.

◆ SetColorsMappingTag()

void ON_SubD::SetColorsMappingTag ( const class ON_MappingTag ) const

Description: Set the colors mapping tag. Remarks: Calling this->SetColorsMappingTag() does not change existing cached fragment vertex colors. At an appropriate time, call this->SetFragmentColorsFromCallback() to update fragment vertex colors on any cached fragments.

The color mapping tag and per vertex colors are mutable properties. They can be changed by rendering applications as needed.

◆ SetComponentMarkBitsFromSymmetryMotif()

void ON_SubD::SetComponentMarkBitsFromSymmetryMotif ( ) const

Description: Sets ON_SubDComponent MarkBits() to 0: component is not in a symmetry set motif n>=1: The component is the the n-th element in the symmetry set with n=1 indicating the component in the primary motif.

◆ SetComponentMarks()

unsigned int ON_SubD::SetComponentMarks ( bool  bClearBeforeSet,
const ON_SimpleArray< const class ON_SubDComponentBase * > &  marked_component_list 
) const

◆ SetComponentStates() [1/2]

unsigned int ON_SubD::SetComponentStates ( ON_COMPONENT_INDEX  component_index,
ON_ComponentStatus  states_to_set 
) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ SetComponentStates() [2/2]

unsigned int ON_SubD::SetComponentStates ( ON_SubDComponentPtr  component_ptr,
ON_ComponentStatus  states_to_set 
) const

Description: Set states on an individual component. Parameters: component_ptr - [in] The states will be set on this component. states_to_set - [in] If a state is set in the states_to_set parameter, the same state will be set on the component.
Returns: 0: no state settings changed on the component. 1: some state setting changed on the component.

◆ SetComponentStatus() [1/3]

unsigned int ON_SubD::SetComponentStatus ( ON_COMPONENT_INDEX  component_index,
ON_ComponentStatus  status_to_copy 
) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ SetComponentStatus() [2/3]

unsigned int ON_SubD::SetComponentStatus ( ON_ComponentStatus  status_mask,
const ON_SimpleArray< const class ON_SubDComponentBase * > &  component_list,
const ON_SimpleArray< ON_ComponentStatus > &  status_list 
) const

◆ SetComponentStatus() [3/3]

unsigned int ON_SubD::SetComponentStatus ( ON_SubDComponentPtr  component_ptr,
ON_ComponentStatus  status_to_copy 
) const

Description: Copy status settings to an individual component. Parameters: component_ptr - [in] The states will be copied to this component. status_to_copy - [in] Returns: 1: some state settings changed on the component. 1: some state setting changed on the component.

◆ SetContentIsSymmetricForExperts()

void ON_SubD::SetContentIsSymmetricForExperts ( bool  bContentIsSymmetric) const

Description: If this SubD has the symmetry specified by this->Symmetry(), then call SetContentIsSymmetricForExperts(true). If this SubD does not have the symmetry specified by this->Symmetry(), then call SetContentIsSymmetricForExperts(false). Remarks: This is used internally by SubD modification code and you should probably pretend it does not exist.

◆ SetCurvatureColorAnalysisColors()

bool ON_SubD::SetCurvatureColorAnalysisColors ( bool  bUpdateSurfaceMeshCache,
bool  bLazyColorSet,
ON_SurfaceCurvatureColorMapping  kappa_colors 
) const

Set the SubD's mesh fragment colors from the principal surface curvatures. The color ON_MappingTag::CurvatureAnalysisColor(kappa_style,kappa_range) is assigned to the fragments's vertex color setting.

The SHA1 hash ON_MappingTag::CurvatureColorAnalysisParametersHash(kappa_style,kappa_range) is used to identify this method of setting the fragments' vertex colors when SHA1 hashes are used.

The mapping tag ON_MappingTag::CurvatureAnalysisMappingTag(kappa_style,kappa_range) is used to identify this method of setting the fragments' vertex colors when mapping tags are used.

See ON_SurfaceCurvature::KappaValue()

Parameters
bUpdateSurfaceMeshCacheIf bUpdateSurfaceMeshCache is true, this->UpdateSurfaceMeshCache(true) is called before the curvatures and colors are set. If you have moved control net points or changed tags and not updated the surface mesh cache, then pass true.


Parameters
bLazyColorSetIf bLazyColorSet and a fragment has a matching tag, hash, and set vertex colors, the the existing colors are assumed to be correctly set. When in doubt, pass true.
kappa_colors
kappa_rangekappa_colors.Color(K) is used to assigned a color to surface principal curvatures K.
Returns

◆ SetDraftAngleColorAnalysisColors()

bool ON_SubD::SetDraftAngleColorAnalysisColors ( bool  bUpdateSurfaceMeshCache,
bool  bLazyColorSet,
ON_SurfaceDraftAngleColorMapping  draft_angle_colors 
) const

Set the SubD's mesh fragment colors from the draft angle of the surface normals.

Parameters
bUpdateSurfaceMeshCacheIf bUpdateSurfaceMeshCache is true, this->UpdateSurfaceMeshCache(true) is called before the curvatures and colors are set. If you have moved control net points or changed tags and not updated the surface mesh cache, then pass true.


Parameters
bLazyColorSetIf bLazyColorSet and a fragment has a matching tag, hash, and set vertex colors, then the existing colors are assumed to be correctly set. When in doubt, pass true.
draft_angle_colors
Returns

◆ SetEdgeSharpness() [1/5]

unsigned int ON_SubD::SetEdgeSharpness ( const class ON_SubDEdgeChain edge_chain,
ON_SubDEdgeSharpness  edge_chain_sharpness,
bool  bPreserveSymmetry 
)

Set or change edge sharpness.

Parameters
edge_chain
edge_chain_sharpnessSharpness along the entire edge chain.
bPreserveSymmetryIf both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry.
Returns
The number of edges that were modified.

◆ SetEdgeSharpness() [2/5]

unsigned int ON_SubD::SetEdgeSharpness ( const ON_SimpleArray< ON_SubDEdgePtr > &  edge_ptrs,
const ON_SimpleArray< ON_SubDEdgeSharpness > &  edge_sharpness,
bool  bPreserveSymmetry 
)

Set or change edge sharpness.

Parameters
edge_ptrsEdges
edge_sharpnessedge_sharpness[] is parallel to edge_ptrs[]
bPreserveSymmetryIf both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry.
Returns
The number of edges that were modified.

◆ SetEdgeSharpness() [3/5]

unsigned int ON_SubD::SetEdgeSharpness ( const ON_SimpleArray< ON_SubDEdgePtr > &  edge_ptrs,
ON_SubDEdgeSharpness  sharpness,
bool  bPreserveSymmetry 
)

Set or change edge sharpness.

Parameters
edge_count
edge_ptrsArray of edge_count edges.
sharpnesssharpness to apply to every edge.
bPreserveSymmetryIf both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry.
Returns
The number of edges that were modified.

◆ SetEdgeSharpness() [4/5]

unsigned int ON_SubD::SetEdgeSharpness ( size_t  edge_count,
const ON_SubDEdgePtr edge_ptrs,
const ON_SubDEdgeSharpness edge_sharpness,
size_t  edge_sharpness_stride,
bool  bPreserveSymmetry 
)

Set or change edge sharpness.

Parameters
edge_count
edge_ptrsEdges
edge_sharpness
edge_sharpness_stride0 to apply *edge_sharpness to all edges. 1 if edge_sharpness[] and edge_ptrs[] are parallel arrays. >1 if you are doing something fancier with interleaved attributes.
bPreserveSymmetryIf both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry.
Returns
The number of edges that were modified.

◆ SetEdgeSharpness() [5/5]

unsigned int ON_SubD::SetEdgeSharpness ( size_t  edge_count,
const ON_SubDEdgePtr edge_ptrs,
ON_SubDEdgeSharpness  sharpness,
bool  bPreserveSymmetry 
)

Set or change edge sharpness.

Parameters
edge_count
edge_ptrsArray of edge_count edges.
sharpnesssharpness to apply to every edge.
bPreserveSymmetryIf both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry.
Returns
The number of edges that were modified.

◆ SetEdgeTags() [1/3]

unsigned int ON_SubD::SetEdgeTags ( const ON_COMPONENT_INDEX ci_list,
size_t  ci_count,
ON_SubDEdgeTag  edge_tag 
)

Returns: number of tags that were changed.

◆ SetEdgeTags() [2/3]

unsigned int ON_SubD::SetEdgeTags ( const ON_SimpleArray< ON_SubDComponentPtr > &  cptr_list,
ON_SubDEdgeTag  edge_tag 
)

Returns: number of tags that were changed.

◆ SetEdgeTags() [3/3]

unsigned int ON_SubD::SetEdgeTags ( const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
ON_SubDEdgeTag  edge_tag 
)

Returns: number of tags that were changed.

◆ SetFaceBoundary() [1/2]

bool ON_SubD::SetFaceBoundary ( ON_SubDFace face,
const ON_SimpleArray< ON_SubDEdgePtr > &  edges 
)

◆ SetFaceBoundary() [2/2]

bool ON_SubD::SetFaceBoundary ( ON_SubDFace face,
const ON_SubDEdgePtr edges,
size_t  edge_count 
)

Description: Expert user tool to set a face's boundary. Parameters: face - [in] Face that is in the subd with no edges. edges - [in] Array of edge_count pointers that form a loop. Caller is responsible for insuring edges and vertices appear only one time in the loop. edge_count - [in] Number of edges in the boundary.
Returns: True if successful (all edge-face and vertex-face connections are set). False otherwise. Remarks: This tool is used during construction or editing of a SubD and the connection is added even if the result is an invalid face or edge. It is up to the expert user to make enough changes to create a valid SubD.

◆ SetFacePackingIdForExperts()

bool ON_SubD::SetFacePackingIdForExperts ( ON_UUID  custom_packing_id)

Description: When a custom algorithm that is not built into ON_SubD is used to pack the faces, this function must be called with an id that uniquely identifies the custom algorithm. The present SubD geometry will be used to set the value of FacePackingTopologyHash(). Returns: True if faces are properly packed and custom_packing_id is not nil and unique. Otherwise the packing is reset to the default and false is returned.

◆ SetFragmentColorsFromCallback()

bool ON_SubD::SetFragmentColorsFromCallback ( bool  bLazySet,
ON_SHA1_Hash  fragment_colors_settings_hash,
ON_MappingTag  fragment_colors_mapping_tag,
ON__UINT_PTR  callback_context,
const ON_Color(*)(ON__UINT_PTR callback_context, const ON_MappingTag &mapping_tag, const ON_SubD &subd, ON_SubDComponentPtr cptr, const ON_3dPoint &P, const ON_3dVector &N, const ON_3dPoint &T, const ON_SurfaceCurvature &K)  color_callback 
) const

Description: Use a callback to set the vertex colros in m_C[]. Parameters: bLazySet - [in] If bLazySet is true and fragment_colors_settings_hash and the current FragmentColorsSettingsHash() are equal, then nothing is changed. fragment_colors_settings_hash - [in] A that uniquely identifies the method and parameters being used to set the fragment vertex colors. In general this hash should depend on the value of this->GeometryContentSerialNumber(), color_callback, and all values in the callback_context that determine vertex colors. Under no circumstances should this hash depend on this->RenderContentSerialNumber(). fragment_colors_mapping_tag - [in] If not applicable, pass ON_MappingTag::Unset. A mapping tag identifying what is setting the fragment colors. This is the only property that persists in SubD copies and saves in 3dm archives. Typically: m_mapping_id is an id you make up that identifies what is setting the colors (thickness, curvature, ...). m_mapping_type will be ON_TextureMapping::TYPE::false_colors. m_mapping_crc is a field from the 1990s that the SHA1 hash handles better now and setting m_mapping_crc = ON_CRC32(0, sizeof(fragment_colors_settings_hash), &fragment_colors_settings_hash) works well. works well. Typically, m_mapping_type = TYPE::false_colors. callback_context - [in] first parameter passed to color_callback() color_callback - [i] A callback function used to set the fragment vertex colors.

◆ SetFragmentColorsMappingTag()

void ON_SubD::SetFragmentColorsMappingTag ( const class ON_MappingTag ) const

◆ SetFragmentTextureCoordinates()

bool ON_SubD::SetFragmentTextureCoordinates ( const class ON_TextureMapping mapping,
bool  bLazy 
) const

Description: If needed, set the fragment texture coordinates. Parameters: mapping - [in] If ON_SubD::TextureMappingRequired() is true, then you must pass a mapping with a tag that matches ON_SubDTextureMappingTag(). Otherwise, mapping is ignored and you may pass ON_TextureMapping::Unset. bLazy - [in] If true and the m_T[] values were set using the same mapping parameters, then no calculation is performed. Returns: True if successful. Remarks: SubD texture domains and coordinates are a mutable property. They can be changed by rendering applications as needed. Call SetTextureCoordinatesFromFaceDomains() to restore them to the default values.

◆ SetPerFaceColorsFromPackId()

void ON_SubD::SetPerFaceColorsFromPackId ( ) const

Description: If a face has a nonzero PackId(), then its per face color is set to ON_Color::RandomColor(f->PackId()). Otherwise, its per face color is cleared.

◆ SetPerFaceColorsFromSymmetryMotif()

void ON_SubD::SetPerFaceColorsFromSymmetryMotif ( ) const

Description: If a SubD is symmetric and a face belongs to a symmetry set, then per face color is set according to the motif the face belongs to. Otherwise, its per face color is cleared.

◆ SetSubDAppearance()

void ON_SubD::SetSubDAppearance ( ON_SubDComponentLocation  subd_appearance) const

Description: Set the SubD appearance (surface or control net). Parameters: subd_appearance - [in] ON_SubDComponentLocation::Surface or ON_SubDComponentLocation::ControlNet. Remarks: This makes no changes to the information that defines the SubD. It does not require regeneration of the ON_SubDMeshFragments. Application display will need to be updated.

◆ SetSymmetryForExperts()

void ON_SubD::SetSymmetryForExperts ( const class ON_Symmetry symmetry,
bool  SetContentSerialNumber 
)

Description: Sets the symmetry properties. Does not modify the subd geometry. Parameters: symmetry - [in] desired symmetry SetContentSerialNumber - [in] IF true, the current content serial number will be set on symmetry information saved on the subd. Returns: True if successful

◆ SetSymmetrySet() [1/8]

bool ON_SubD::SetSymmetrySet ( const ON_SimpleArray< const ON_SubDEdge * > &  edge_symmetry_set,
unsigned  primary_motif_index 
)

Description: Create a edge symmetry set. Parameters: edge_symmetry_set - [in] Ordered symmetry set for this edge (no dupicates). (symmetry(edge_symmetry_set[i]) = edge_symmetry_set[i][(i+1)count]). primary_motif_index - [in] primary_motif_index < edge_symmetry_set.UnsignedCount() specifies the primary motif edge in the set. Returns: If input is not valid or any edge in edge_symmetry_set[] is in an existing symmetry set, then 0 is returned and no changes are made. Otherwise the number of vertices in the edge_symmetry_set.UnsignedCount() is returned.

◆ SetSymmetrySet() [2/8]

bool ON_SubD::SetSymmetrySet ( const ON_SimpleArray< const ON_SubDFace * > &  face_symmetry_set,
unsigned  primary_motif_index 
)

Description: Create a face symmetry set. Parameters: face_symmetry_set - [in] Ordered symmetry set for this face (no dupicates). (symmetry(face_symmetry_set[i]) = face_symmetry_set[i][(i+1)count]). primary_motif_index - [in] primary_motif_index < face_symmetry_set.UnsignedCount() specifies the primary motif face in the set. Returns: If input is not valid or any face in face_symmetry_set[] is in an existing symmetry set, then 0 is returned and no changes are made. Otherwise the number of vertices in the face_symmetry_set.UnsignedCount() is returned.

◆ SetSymmetrySet() [3/8]

bool ON_SubD::SetSymmetrySet ( const ON_SimpleArray< const ON_SubDVertex * > &  vertex_symmetry_set,
unsigned  primary_motif_index 
)

Description: Create a vertex symmetry set. Parameters: vertex_symmetry_set - [in] Ordered symmetry set for this vertex (no dupicates). (symmetry(vertex_symmetry_set[i]) = vertex_symmetry_set[i][(i+1)count]). primary_motif_index - [in] primary_motif_index < vertex_symmetry_set.UnsignedCount() specifies the primary motif vertex in the set. Returns: If input is not valid or any vertex in vertex_symmetry_set[] is in an existing symmetry set, then 0 is returned and no changes are made. Otherwise the number of vertices in the vertex_symmetry_set.UnsignedCount() is returned.

◆ SetSymmetrySet() [4/8]

bool ON_SubD::SetSymmetrySet ( const ON_SimpleArray< ON_SubDComponentPtr > &  component_symmetry_set,
unsigned  primary_motif_index 
)

Description: Create a component symmetry set. Parameters: component_symmetry_set - [in] Ordered symmetry set for this component (no dupicates). (symmetry(component_symmetry_set[i]) = component_symmetry_set[i][(i+1)count]). primary_motif_index - [in] primary_motif_index < component_symmetry_set.UnsignedCount() specifies the primary motif component in the set. Returns: If input is not valid or any component in component_symmetry_set[] is in an existing symmetry set, then 0 is returned and no changes are made. Otherwise the number of vertices in the component_symmetry_set.UnsignedCount() is returned.

◆ SetSymmetrySet() [5/8]

bool ON_SubD::SetSymmetrySet ( const ON_SubDComponentPtr component_symmetry_set,
size_t  component_symmetry_set_count,
unsigned  primary_motif_index 
)

◆ SetSymmetrySet() [6/8]

bool ON_SubD::SetSymmetrySet ( const ON_SubDEdge *const edge_symmetry_set,
size_t  edge_symmetry_set_count,
unsigned  primary_motif_index 
)

◆ SetSymmetrySet() [7/8]

bool ON_SubD::SetSymmetrySet ( const ON_SubDFace *const face_symmetry_set,
size_t  face_symmetry_set_count,
unsigned  primary_motif_index 
)

◆ SetSymmetrySet() [8/8]

bool ON_SubD::SetSymmetrySet ( const ON_SubDVertex *const vertex_symmetry_set,
size_t  vertex_symmetry_set_count,
unsigned  primary_motif_index 
)

◆ SetSymmetrySetNextForExperts() [1/4]

bool ON_SubD::SetSymmetrySetNextForExperts ( bool  bComponentIsPrimaryMotif,
ON_SubDComponentPtr  component,
ON_SubDComponentPtr  next_component 
)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use SetSymmetrySet() to create symmetry sets. Parameters: component - [in] The component to unconditionally modify. bComponentIsPrimaryMotif - [in] True if component is the primary motif in the set. There is exactly one primary motif in each symmetry set. next_component - [in] The next component in the symmetry set. If the symmetry set is a singleton (the symmetry fixes component), then next_component = component. Returns: True if input was valid and component symmetry set information was set as specified. False if input was not valid (see description above) and the component symmetry set information was removed. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SetSymmetrySetNextForExperts() [2/4]

bool ON_SubD::SetSymmetrySetNextForExperts ( bool  bEdgeIsPrimaryMotif,
const ON_SubDEdge edge,
const ON_SubDEdge next_edge 
)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use SetSymmetrySet() to create symmetry sets. Parameters: edge - [in] The edge to unconditionally modify. bEdgeIsPrimaryMotif - [in] True if edge is the primary motif in the set. There is exactly one primary motif in each symmetry set. next_edge - [in] The next edge in the symmetry set. If the symmetry set is a singleton (the symmetry fixes edge), then next_edge = edge. Returns: True if input was valid and edge symmetry set information was set as specified. False if input was not valid (see description above) and the edge symmetry set information was removed. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SetSymmetrySetNextForExperts() [3/4]

bool ON_SubD::SetSymmetrySetNextForExperts ( bool  bFaceIsPrimaryMotif,
const ON_SubDFace face,
const ON_SubDFace next_face 
)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use SetSymmetrySet() to create symmetry sets. Parameters: face - [in] The face to unconditionally modify. bFaceIsPrimaryMotif - [in] True if face is the primary motif in the set. There is exactly one primary motif in each symmetry set. next_face - [in] The next face in the symmetry set. If the symmetry set is a singleton (the symmetry fixes face), then next_face = face. Returns: True if input was valid and face symmetry set information was set as specified. False if input was not valid (see description above) and the face symmetry set information was removed. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SetSymmetrySetNextForExperts() [4/4]

bool ON_SubD::SetSymmetrySetNextForExperts ( bool  bVertexIsPrimaryMotif,
const ON_SubDVertex vertex,
const ON_SubDVertex next_vertex 
)

Description: This tool is for expert users with a complete and detailed understanding of creating valid symmetry sets and who carefully and thoroughly test every line of code. If that is not the case, use SetSymmetrySet() to create symmetry sets. Parameters: vertex - [in] The vertex to unconditionally modify. bVertexIsPrimaryMotif - [in] True if vertex is the primary motif in the set. There is exactly one primary motif in each symmetry set. next_vertex - [in] The next vertex in the symmetry set. If the symmetry set is a singleton (the symmetry fixes vertex), then next_vertex = vertex. Returns: True if input was valid and vertex symmetry set information was set as specified. False if input was not valid (see description above) and the vertex symmetry set information was removed. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SetSymmetrySetsForExperts()

bool ON_SubD::SetSymmetrySetsForExperts ( bool  bUseCleanupTolerance)

Description: Sets the symmetry sets. Does not modify the subd geometry or the Symmetry property. The subd must statisfiy these conditions:

  1. The Symmetry property must be correctly set.
  2. This subd must be symmetric
  3. The subd components that generate the motif must be first in the vertex, edge, and face iterators. Parameters: bUseCleanupTolerance - [in] true to use symmetry.CleanupTolrance() false to use ON_Symmetry::Zerotolerance. Returns: True if successful

◆ SetTextureCoordinateType()

void ON_SubD::SetTextureCoordinateType ( ON_SubDTextureCoordinateType  texture_coordinate_type) const

Description: Set the texture coordinate type. Parameters: texture_coordinate_type - [in] Type of texture coordinates. If ON_SubDTextureCoordinateType::Unset or ON_SubDTextureCoordinateType::Custom, is passed, the type setting is changed but no changes are made to texture coordinates. Remarks: Call SetTextureCoordinates() to restore them to the default values.

If texture_coordinate_type is ON_SubDTextureCoordinateType::FromMapping, then the mapping this->TextureCoordinateMapping() is used. You may call this->SetTextureCoordinateMapping() to set the mapping.

Calling this->SetTextureCoordinateType() does not change existing cached texture coordinates. At an appropriate time, call SetFragmentTextureCoordinates() to update texture coordinates on any cached fragments.

SubD texture coordinate type and fragment texture coordinates are a mutable property. They can be changed by rendering applications as needed.

◆ SetTextureMappingTag()

void ON_SubD::SetTextureMappingTag ( const class ON_MappingTag ) const

Description: Set the texture mapping tag. Remarks: The texture mapping tag should be applied only when this->TextureCoordinateType() is ON_SubDTextureCoordinateType::FromMapping.

Calling this->SetTextureMappingTag() does not change existing cached texture coordinates. At an appropriate time, call this->SetFragmentTextureCoordinates() to update texture coordinates on any cached fragments.

SubD texture domains and coordinates are a mutable property. They can be changed by rendering applications as needed.

◆ SetVertexSurfacePoint()

bool ON_SubD::SetVertexSurfacePoint ( unsigned int  vertex_id,
ON_3dPoint  vertex_surface_point 
)

Set the location of a single vertex surface point. This function is not suitable for setting the locations of multiple vertex surface points that are topologically near to each other.

Parameters
vertex_id
vertex_surface_point
Returns

◆ SetVertexTags() [1/2]

unsigned int ON_SubD::SetVertexTags ( const ON_COMPONENT_INDEX ci_list,
size_t  ci_count,
ON_SubDVertexTag  vertex_tag 
)

Parameters: ci_list - [in] Array of ci_count ON_COMPONENT_INDEX values that identify the vertices. Elements that do not identify a SubD vertex are ignored. ci_count - [in] Number of elements in the ci_list[] array. vertex_tag - [in] Desired tag. If a vertex has the desired tag or cannot accept the desired tag, then that vertex is skipped. If vertex_tag is ON_SubDVertexTag::Corner, then every edge touching that vertex is converted to a crease. Returns: number of vertex tags that were changed.

◆ SetVertexTags() [2/2]

unsigned int ON_SubD::SetVertexTags ( const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
ON_SubDVertexTag  vertex_tag 
)

Parameters: ci_list - [in] Array of ci_count ON_COMPONENT_INDEX values that identify the vertices. Elements that do not identify a SubD vertex are ignored. ci_count - [in] Number of elements in the ci_list[] array. vertex_tag - [in] Desired tag. If a vertex has the desired tag or cannot accept the desired tag, then that vertex is skipped. If vertex_tag is ON_SubDVertexTag::Corner, then every edge touching that vertex is converted to a crease. Returns: number of vertex tags that were changed.

◆ ShareContentsFrom()

void ON_SubD::ShareContentsFrom ( ON_SubD subd)

Description: The subdivision information referenced by src_subd will be shared with this Remarks: ON_Geometry base class information, like ON_UserData, is not copied or shared.

◆ ShareDimple() [1/2]

void ON_SubD::ShareDimple ( const class ON_SubDMeshImpl &  )

◆ ShareDimple() [2/2]

void ON_SubD::ShareDimple ( const ON_SubD )

◆ SharpEdgeCount() [1/2]

unsigned int ON_SubD::SharpEdgeCount ( ) const

Number of sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.

Returns
Number of sharp edges.

◆ SharpEdgeCount() [2/2]

unsigned int ON_SubD::SharpEdgeCount ( ON_SubDEdgeSharpness sharpness_range) const

Get the range of sharpness values assigned to sharp edges and return the number of sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.

Parameters
sharpness_rangeThe range of sharpness values is returned here. (0,0) is returned if there are no sharp edges.
Returns
Number of sharp edges.

◆ SizeOf()

unsigned int ON_SubD::SizeOf ( ) const
overridevirtual

virtual

Reimplemented from ON_Object.

◆ SizeOfActiveElements()

size_t ON_SubD::SizeOfActiveElements ( ) const

Description: This is a debugging too used to study how efficiently SubDs are using memory. Returns: Total operating system heap (in bytes) of memory in this SubD's ON_FixedSizePools that is currently used by active elements, including active mesh fragments. Remarks: SizeOfAllElements() = SizeOfActiveElements() + SizeOfUnusedElements().

◆ SizeOfActiveMeshFragments()

size_t ON_SubD::SizeOfActiveMeshFragments ( ) const

Description: Tool for debugging mesh fragments memory use. Returns: Operating system heap memory (in bytes) that are used by active mesh fragments. Remarks: SizeOfAllMeshFragments() = SizeOfActiveMeshFragments() + SizeOfUnusedMeshFragments().

◆ SizeOfAllElements()

size_t ON_SubD::SizeOfAllElements ( ) const

Description: This is a debugging too used to study how efficiently SubDs are using memory. Returns: Total operating system heap (in bytes) used by this SubD's ON_FixedSizePools, include the mesh fragments pool. Remarks: SizeOfAllElements() = SizeOfActiveElements() + SizeOfUnusedElements().

◆ SizeOfAllMeshFragments()

size_t ON_SubD::SizeOfAllMeshFragments ( ) const

Description: Tool for debugging mesh fragments memory use. Returns: Total operating system heap memory (in bytes) used by the mesh fragments pool. Remarks: SizeOfAllMeshFragments() = SizeOfActiveMeshFragments() + SizeOfUnusedMeshFragments().

◆ SizeOfUnusedElements()

size_t ON_SubD::SizeOfUnusedElements ( ) const

Description: This is a debugging too used to study how efficiently SubDs are using memory. Returns: Total operating system heap (in bytes) of memory in this SubD's ON_FixedSizePools that is reserved but not currently used, including unused mesh fragments. Remarks: SizeOfAllElements() = SizeOfActiveElements() + SizeOfUnusedElements().

◆ SizeOfUnusedMeshFragments()

size_t ON_SubD::SizeOfUnusedMeshFragments ( ) const

Description: Tool for debugging mesh fragments memory use. Returns: Operating system heap memory (in bytes) that has been reserved for mesh fragments but is not currently used by active mesh fragments. Remarks: SizeOfAllMeshFragments() = SizeOfActiveMeshFragments() + SizeOfUnusedMeshFragments().

◆ SnapPointsToPlane()

unsigned int ON_SubD::SnapPointsToPlane ( ON_PlaneEquation  plane_equation,
double  distance_tolerance 
)
Deprecated:
Obsolete - use ProjectVerticesToPlane

◆ SolidOrientation()

* int ON_SubD::SolidOrientation ( ) const

Topology Queries Description: Determine solid orientation of the active level. Returns: +2 subd is a solid but orientation cannot be computed +1 subd is a solid with outward facing normals -1 subd is a solid with inward facing normals 0 subd is not a solid See Also: ON_SubD::IsSolid

◆ SpinEdge() [1/2]

const class ON_SubDEdge* ON_SubD::SpinEdge ( class ON_SubDEdge edge,
bool  spin_clockwise = false 
)

Description: Spin an edge's endpoints around the boundary of its neighboring faces. In a counter-clockwise spin (looking at faces from their shared up orientation): The edge's start vertex is moved to the next vertex in the boundary of the face on the right-hand side of the edge. The edge's end vertex is moved to the next vertex in the boundary of the face on the left-hand side of the edge. Note that reversing the input edge does not change the result. Parameters: edge - [in] edge to spin. spin_clockwise - [in] false spins the edge counter-clockwise, true spins the edge clockwise in the adjacent faces. Returns: A pointer to the spun edge or nullptr if the input is not valid.

◆ SpinEdge() [2/2]

const ON_SubDEdgePtr ON_SubD::SpinEdge ( ON_SubDEdgePtr  eptr,
bool  spin_clockwise = false 
)

Description: Spin an edge's endpoints around the boundary of its neighboring faces. In a counter-clockwise spin (looking at faces from their shared up orientation): The edge's start vertex is moved to the next vertex in the boundary of the face on the right-hand side of the edge. The edge's end vertex is moved to the next vertex in the boundary of the face on the left-hand side of the edge. Note that reversing the input edge does not change the result. Parameters: edge - [in] edge to spin. spin_clockwise - [in] false spins the edge counter-clockwise, true spins the edge clockwise in the adjacent faces. Returns: A pointer to the spun edge or nullptr if the input is not valid.

◆ SplitEdge() [1/2]

const class ON_SubDEdge* ON_SubD::SplitEdge ( class ON_SubDEdge edge,
ON_3dPoint  vertex_location 
)

Description: Divide an edge into two contiguous edges. The input edge is modified to terminate at the new vertex. The new edge begins at the new vertex and ends at the original edge's m_vertex[1]. edge - [in] edge to split. vertex_location - [in] location of the new vertex vertex. If vertex_location == ON_ON_3dPoint::UnsetPoint, then the edge's midpoint is used. Returns: A pointer to the new edge or nullptr if the input is not valid. Remarks: After all editing operations are completed, you must call this->UpdateEdgeSectorCoefficients(true) before evaluation.

◆ SplitEdge() [2/2]

const ON_SubDEdgePtr ON_SubD::SplitEdge ( ON_SubDEdgePtr  eptr,
ON_3dPoint  vertex_location,
unsigned  new_edge_end 
)

Description: Divide an edge into two contiguous edges. edge - [in] edge to split. vertex_location - [in] location of the new vertex vertex. If vertex_location == ON_ON_3dPoint::UnsetPoint, then the edge's midpoint is used. new_edge_end - [in] This paratmer is 0 or 1 and dtermines where the new edge is inserted. Below v0 = input eptr.RelativeVertex(0), v1 = new vertex, v2 = input eptr.RelativeVertex(1), and new_eptr = returned edge pointer. If edge_end is 0, new_eptr is first: v0 = new_eptr.RelativeVertex(0), v1 = new_eptr.RelativeVertex(1)=eptr.RelativeVertex(0), v2 = eptr.RelativeVertex(1). If edge_end is 1, new_eptr is last: v0 = eptr.RelativeVertex(0), v1 = eptr.RelativeVertex(1)=new_eptr.RelativeVertex(0), v2 = new_eptr.RelativeVertex(1). Returns: A pointer to the new edge or ON_SubDEdgePtr::Null if the input is not valid. Remarks: After all editing operations are completed, you must clear the evaluation cache and call this->UpdateEdgeSectorCoefficients(true).

◆ SplitFace() [1/4]

const class ON_SubDEdge* ON_SubD::SplitFace ( class ON_SubDFace face,
const class ON_SubDVertex v0,
const class ON_SubDVertex v1 
)

Description: Divide a face into two faces by inserting an edge connecting the specified vertices. Parameters: face - [in] A face with at least four edges. v0 - [in] v1 - [in] Face vertices of the inserted edge's ends. Returns: A pointer to the inserted edge. The inserted edge runs from v0 to v1. ON_SubDEdge.Face(0) is the original face and ON_SubDEdge::Face(1) is the added face. The first edge of the input face remains the first edge of face.
The inserted edge is the first edge of the added face.

◆ SplitFace() [2/4]

const ON_SubDEdgePtr ON_SubD::SplitFace ( class ON_SubDFace face,
const class ON_SubDVertex v0,
const class ON_SubDVertex v1,
unsigned  new_face_side 
)

Description: Divide a face into two faces by inserting an edge connecting the specified vertices. Parameters: face - [in] A face with at least four edges. v0 - [in] v1 - [in] Face vertices of the inserted edge's ends. new_face_side - [in] 0: The new face will be on the left side of the inserted edge. 0: The new face will be on the right side of the inserted edge. Returns: The edge and edgeptr are both being af both oriented The inserted edge and returned edge ptr runs from face->Vertex(fvi0) to face->Vertex(fvi1). the new face is SplitFace(...).RelativeFace(new_face_side) and the original face is SplitFace(...).RelativeFace(new_face_side).

◆ SplitFace() [3/4]

const class ON_SubDEdge* ON_SubD::SplitFace ( class ON_SubDFace face,
unsigned int  fvi0,
unsigned int  fvi1 
)

Description: Divide a face into two faces by inserting an edge connecting the specified vertices. Parameters: face - [in] A face with at least four edges. fvi0 - [in] fvi1 - [in] Face vertex indices of the inserted edge's ends. Returns: A pointer to the inserted edge. The inserted edge runs from face->Vertex(fvi0) to face->Vertex(fvi1). ON_SubDEdge.Face(0) is the original face and ON_SubDEdge::Face(1) is the added face. The first edge of both faces is the inserted edge.

◆ SplitFace() [4/4]

const ON_SubDEdgePtr ON_SubD::SplitFace ( class ON_SubDFace face,
unsigned int  fvi0,
unsigned int  fvi1,
unsigned  new_face_side 
)

Description: Divide a face into two faces by inserting an edge connecting the specified vertices. Parameters: face - [in] A face with at least four edges. fvi0 - [in] fvi1 - [in] Face vertex indices of the inserted edge's ends. new_face_side - [in] 0: The new face will be on the left side of the inserted edge. 0: The new face will be on the right side of the inserted edge. Returns: The edge and edgeptr are both being af both oriented The inserted edge and returned edge ptr runs from face->Vertex(fvi0) to face->Vertex(fvi1). the new face is SplitFace(...).RelativeFace(new_face_side) and the original face is SplitFace(...).RelativeFace(new_face_side).

◆ SubDAppearance()

ON_SubDComponentLocation ON_SubD::SubDAppearance ( ) const

Description: Get the SubD appearance (surface or control net); Returns: ON_SubDComponentLocation::Surface or ON_SubDComponentLocation::ControlNet.

◆ SubDControlNetMesh()

class ON_SubDMesh ON_SubD::SubDControlNetMesh ( ) const

Description: Get the cached control net mesh for this subD. Returns: A mesh of the SubD control net. Remarks: The mesh is a reference counted mesh managed by this ON_SubD.

◆ SubDHash()

const ON_SubDHash ON_SubD::SubDHash ( ON_SubDHashType  hash_type,
bool  bForceUpdate 
) const

Description: Get a hash that uniquely identifies the topology or geometry of this SubD. Parameters: hash_type - [in] To see what is included in the various hashes, read the documentation for the ON_SubDHashType enum. bForceUpdate - [in] When in doubt pass false. The SubD hashes are mutable and cached. When code properly manages GeometryContentSerialNumber(), then SubDHash(hash_type,false) will always return the correct answer. This is the expected behavior. If code directly modifies SubD components and fails to call ChangeGeometryContentSerialNumberForExperts(), then it is possible a stale hash will be returned. Setting bForceUpdate = true forces the SHA1 values to be recalculated from scratch. For extremely large SubDs, this recalculation can be time consuming.

◆ SubDimple()

const class ON_SubDimple* ON_SubD::SubDimple ( ) const

Description: Pretend this function and ON_SubDimple do not exist. Returns: Something that you are pretending does not exist. Remarks: It is intentional that the definition of ON_SubDimple class is not available in the opennurbs library interface (not in a header file). The size and design of ON_SubDimple will change constantly. If you choose to hack and whack so you can dereference an ON_SubDimple* pointer, then your code will crash unpredictably.

◆ SubDimpleUseCount()

unsigned int ON_SubD::SubDimpleUseCount ( ) const

◆ SubdivideSector()

static const class ON_SubDVertex* ON_SubD::SubdivideSector ( const class ON_SubDVertex center_vertex,
const class ON_SubDComponentPtr component_ring,
size_t  component_ring_count,
class ON_SubD_FixedSizeHeap fsh 
)
static

◆ SubDModifiedNofification()

void ON_SubD::SubDModifiedNofification ( )

Description: When finished editing a SubD, call this function to delete all cached evaluation values and update all vertex tag, edge tags, edge sector coefficients. Remarks: This function is the most reliable (and heavy handed) way to update SubD component information. Expert users can choose to be more selective when certain about exactly what needs to be modified.

◆ SubDSurfaceMesh()

class ON_SubDMesh ON_SubD::SubDSurfaceMesh ( ) const

Description: Get the cached surface mesh for this subD. Returns: A mesh of the SubD surface. Remarks: The mesh is a reference counted mesh managed by this ON_SubD.

◆ SurfaceMeshCacheExists()

bool ON_SubD::SurfaceMeshCacheExists ( bool  bTextureCoordinatesExist,
bool  bCurvaturesExist,
bool  bColorsExist 
) const

Determine if the limit surface mesh fragments exist.

Parameters
bTextureCoordinatesExistPass true if you want to know if the mesh cache exists and it has set texture coordinates.
bCurvaturesExistPass true if you want to know if the mesh cache exists and it has set curvatures.
bColorsExistPass true if you want to know if the mesh cache exists and it has set per vertex colors.
Returns
True if the limit surface mesh cache exists for all active faces and they have the requested additional values. False otherwise.

◆ SurfacePointRadiusFromControlPointRadius()

static double ON_SubD::SurfacePointRadiusFromControlPointRadius ( unsigned int  point_count,
double  control_point_radius 
)
static

Parameters: point_count - [in] >= 3 Number of control points in a regular planar SubD ngon with creased edges. control_point_radius - [in] Distance from an ngon control point to the ngon center. Returns: Distance from an ngon surface point to the ngon center. See Also: ON_SubD::SurfacePointRadiusFromControlPointRadius()

◆ SwapContents()

static void ON_SubD::SwapContents ( ON_SubD a,
ON_SubD b 
)
static

◆ SwapCoordinates()

bool ON_SubD::SwapCoordinates ( int  i,
int  j 
)
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ SwapDimple() [1/2]

void ON_SubD::SwapDimple ( class ON_SubDMeshImpl &  )

◆ SwapDimple() [2/2]

void ON_SubD::SwapDimple ( ON_SubD )

◆ Symmetry()

const class ON_Symmetry& ON_SubD::Symmetry ( ) const

SubD symmetry interface Returns: Current symmetry properties.

◆ SymmetrySetCount() [1/4]

unsigned ON_SubD::SymmetrySetCount ( const ON_SubDEdge edge) const

Parameters: edge - [in] Returns: Number of elements in the edges's symmetry set. 0 indicates the edge is not in a symmetry set. 1 indicates the set is a sington (the edge is fixed by the symmetry - it might be reversed).

◆ SymmetrySetCount() [2/4]

unsigned ON_SubD::SymmetrySetCount ( const ON_SubDFace face) const

Parameters: face - [in] Returns: Number of elements in the face's symmetry set. 0 indicates the component is not in a symmetry set. 1 indicates the set is a sington (the face is fixed by the symmetry - it might be rotated).

◆ SymmetrySetCount() [3/4]

unsigned ON_SubD::SymmetrySetCount ( const ON_SubDVertex vertex) const

Parameters: vertex - [in] Returns: Number of elements in the component's symmetry set. 0 indicates the component is not in a symmetry set. 1 indicates the set is a sington (the verrtex is fixed by the symmetry).

◆ SymmetrySetCount() [4/4]

unsigned ON_SubD::SymmetrySetCount ( ON_SubDComponentPtr  cptr) const

Parameters: cptr - [in] Returns: Number of elements in the component's symmetry set. 0 indicates the component is not in a symmetry set. 1 indicates the set is a sington (the component is fixed by the symmetry).

◆ SymmetrySetNext() [1/5]

const ON_SubDEdge* ON_SubD::SymmetrySetNext ( const ON_SubDEdge edge) const

Parameters: edge - [in] Returns: The next edge in the symmetry set. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SymmetrySetNext() [2/5]

const ON_SubDEdgePtr ON_SubD::SymmetrySetNext ( const ON_SubDEdgePtr  edge_ptr) const

Parameters: edge_ptr - [in] Returns: The next edge in the symmetry set with edge orientation set to be compatible with edge_ptr.Direction(). Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SymmetrySetNext() [3/5]

const ON_SubDFace* ON_SubD::SymmetrySetNext ( const ON_SubDFace face) const

Parameters: face - [in] Returns: The next face in the symmetry set. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SymmetrySetNext() [4/5]

const ON_SubDVertex* ON_SubD::SymmetrySetNext ( const ON_SubDVertex vertex) const

Parameters: vertex - [in] Returns: The next vertex in the symmetry set. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SymmetrySetNext() [5/5]

const ON_SubDComponentPtr ON_SubD::SymmetrySetNext ( ON_SubDComponentPtr  cptr) const

Parameters: component - [in] Returns: The next component in the symmetry set. If 1 == SymmetrySetNext().ComponentDirection(), the returned component is the set's primary motif. Remarks: A symmetry set is an ordered loop of components with a single one identificed as the primary motif component in the set. If N is the period of the symmetry, then the number of components in a symmetry set is a divisor of N (including 1 for a fixed component). Distinct symmetry sets never intersect and they partition the entire SubD into disjoint subsets.

◆ SymmetrySetPrimaryMotif() [1/4]

const ON_SubDEdge* ON_SubD::SymmetrySetPrimaryMotif ( const ON_SubDEdge edge) const

Parameters: edge - [in] Returns: If the edge is in a symmetry set, the primary motif edge is returned. Otherwise nullptr is returned.

◆ SymmetrySetPrimaryMotif() [2/4]

const ON_SubDFace* ON_SubD::SymmetrySetPrimaryMotif ( const ON_SubDFace face) const

Parameters: edge - [in] Returns: If the face is in a symmetry set, the primary motif face is returned. Otherwise nullptr is returned.

◆ SymmetrySetPrimaryMotif() [3/4]

const ON_SubDVertex* ON_SubD::SymmetrySetPrimaryMotif ( const ON_SubDVertex vertex) const

Parameters: vertex - [in] Returns: If the vertex is in a symmetry set, the primary motif vertex is returned. Otherwise nullptr is returned.

◆ SymmetrySetPrimaryMotif() [4/4]

const ON_SubDComponentPtr ON_SubD::SymmetrySetPrimaryMotif ( ON_SubDComponentPtr  cptr) const

Parameters: cptr - [in] Returns: If the component is in a symmetry set, the motif component is returned. Otherwise nullptr is returned.

◆ TextureCoordinateType()

ON_SubDTextureCoordinateType ON_SubD::TextureCoordinateType ( ) const

◆ TextureCoordinateTypeFromObsoleteTextureDomainType()

static ON_SubDTextureCoordinateType ON_SubD::TextureCoordinateTypeFromObsoleteTextureDomainType ( unsigned int  obsolete_texture_domain_type_as_unsigned)
static

◆ TextureCoordinateTypeFromUnsigned()

static ON_SubDTextureCoordinateType ON_SubD::TextureCoordinateTypeFromUnsigned ( unsigned int  texture_coordinate_type_as_unsigned)
static

◆ TextureCoordinateTypeToString()

static const ON_wString ON_SubD::TextureCoordinateTypeToString ( ON_SubDTextureCoordinateType  texture_domain_type)
static

◆ TextureDomainGridSize()

static const ON_2udex ON_SubD::TextureDomainGridSize ( unsigned  minimum_rectangle_count,
double  image_width,
double  image_height 
)
static

Parameters: minimum_rectangle_count - [in] >= 1 minimum number of rectangles in texture domain image_width - [in] image_height = [in] If a texture image size is known, pass it here. Otherwise pass 0.0 for both parameters. Returns: Suggested way to partition a texture coordinate domain into rectangles. ON_2udex.i = "x" count ON_2udex.j = "y" count For example (3,2) would mean divide the 2d texture domain into 3 segments across and 2 segments vertically.

◆ TextureMappingRequired()

bool ON_SubD::TextureMappingRequired ( ) const

Returns: True if setting texture coordinates requires a set ON_TextureMapping mapping. Remarks: An explicit texture mapping is required when TextureCoordinateType() is ON_SubDTextureCoordinateType::FromMapping and TextureMappingTag() is set and not ON_MappingTag::SurfaceParameterMapping or an equivalent surface parameter mapping.

◆ TextureMappingTag()

const ON_MappingTag ON_SubD::TextureMappingTag ( bool  bIgnoreTextureCoordinateType) const

Parameters: bIgnoreTextureCoordinateType - [in] If true, the current texture mapping tag is returned. If false, the current texture mapping tag is returned only when ON_SubDTextureCoordinateType::FromMapping = TextureCoordinateType(). Returns: The current texture mapping tag. Remarks: The texture mapping tag should be applied only when this->TextureCoordinateType() is ON_SubDTextureCoordinateType::FromMapping. SubD texture domains and coordinates are a mutable property. They can be changed by rendering applications as needed.

◆ TexturePointsAreSet()

unsigned int ON_SubD::TexturePointsAreSet ( ) const

Returns: Number of faces with ON_SubDFace.TexturePointsAreSet() = true.

◆ TextureSettingsHash() [1/2]

const ON_SHA1_Hash ON_SubD::TextureSettingsHash ( ) const

Returns: ON_SubD::TextureSettingsHash(this->TextureCoordinateType(),this->TextureMappingTag()); Remarks: Comparing with this->FragmentTextureCoordinatesTextureSettingsHash() can tell you if the current fragment texture coordinates were calculated using the same settings.

◆ TextureSettingsHash() [2/2]

static const ON_SHA1_Hash ON_SubD::TextureSettingsHash ( ON_SubDTextureCoordinateType  texture_coordinate_type,
const class ON_MappingTag texture_mapping_tag 
)
static

Parameters: texture_coordinate_type - [in] texture_mapping_tag - [in] If texture_coordinate_type is ON_SubDTextureCoordinateType::Custom, then then texture_mapping_tag information is included in the hash. Otherwise, texture_mapping_tag is ignored. Returns: A hash that uniquely identifies the information in TextureCoordinateType() and TextureMappingTag() that applies to the current subd.

◆ ToggleSubDAppearanceValue()

static ON_SubDComponentLocation ON_SubD::ToggleSubDAppearanceValue ( ON_SubDComponentLocation  subd_appearance)
static

Description: Get the SubD appearance (surface or control net); Returns: ON_SubDComponentLocation::Surface or ON_SubDComponentLocation::ControlNet.

◆ TopologyHash()

const ON_SHA1_Hash ON_SubD::TopologyHash ( ) const

Description: If two SubDs have identical values of TopologyHash(), then they have identical labeled control net topology. The labels are the vertex, edge, and face ids. Returns: this->SubDHash(ON_SubDHashType::Topology,false).SubDHash(). Remarks: Two SubDs can have the same topology hash but different geometry hashes.

◆ ToSubD()

static ON_SubD* ON_SubD::ToSubD ( const class ON_Geometry geometry,
const class ON_SubDFromMeshParameters from_mesh_parameters,
const class ON_SubDFromSurfaceParameters from_surface_parameters,
ON_SubD destination_subd 
)
static

◆ Transform()

bool ON_SubD::Transform ( const ON_Xform xform)
overridevirtual

virtual

Reimplemented from ON_Geometry.

◆ TransformComponents() [1/2]

unsigned int ON_SubD::TransformComponents ( const ON_Xform xform,
const ON_COMPONENT_INDEX ci_list,
size_t  ci_count,
ON_SubDComponentLocation  component_location 
)

Description: Transforms the SubD components in ci_list[]. Parameters: xform - [in] ci_list - [in] ci_count - [in] component_location - [in] Select between applying the transform to the control net (faster) or the surface points (slower). Returns: Number of vertex locations that changed.

◆ TransformComponents() [2/2]

unsigned int ON_SubD::TransformComponents ( const ON_Xform xform,
const ON_SubDComponentPtr cptr_list,
size_t  cptr_count,
ON_SubDComponentLocation  component_location 
)

◆ UnselectComponents()

unsigned int ON_SubD::UnselectComponents ( bool  bUnselectAllVertices,
bool  bUnselectAllEdges,
bool  bUnselectAllFaces 
) const

◆ UpdateAllTagsAndSectorCoefficients()

unsigned int ON_SubD::UpdateAllTagsAndSectorCoefficients ( bool  bUnsetValuesOnly)

Description: Updates vertex tag, edge tag, and edge coefficient values on the active level.

After completing custom editing operations that modify the topology of the SubD control net or changing values of vertex or edge tags, the tag and sector coefficients information on nearby components in the edited areas need to be updated.

Parameters: bUnsetValuesOnly - [in] If true, the update is restricted to vertices tagged as ON_SubDVertexTag::Unset and edges tagged as ON_SubDEdgeTag::Unset.

Returns: Number of vertices and edges that were changed during the update.

◆ UpdateEdgeSectorCoefficients()

unsigned int ON_SubD::UpdateEdgeSectorCoefficients ( bool  bUnsetSectorCoefficientsOnly) const

Description: This tool if for expert users writing advanced editing tools. After completing custom editing operations that modify the topology of the SubD control net or changing values of vertex or edge tags, the tag and sector coefficients information on nearby components in the edited areas need to be updated. Parameters: bUnsetValuesOnly - [in] If bUnsetValuesOnly is true, then only unset tags and sector coefficients will be updated. If bUnsetValuesOnly is false, then all tags and sector coefficients will be checked and updated as needed. Returns: Number of edges that had a tag value changed or sector coefficient set to ON_SubDSectorType::UnsetSectorCoefficient. Remarks: It is easiest to call UpdateAllTagsAndSectorCoefficients().

◆ UpdateEdgeTags()

unsigned int ON_SubD::UpdateEdgeTags ( bool  bUnsetEdgeTagsOnly)

Description: This tool if for expert users writing advanced editing tools. After completing custom editing operations that modify the topology of the SubD control net or changing values of vertex or edge tags, the tag and sector coefficients information on nearby components in the edited areas need to be updated. Parameters: bUnsetValuesOnly - [in] If bUnsetValuesOnly is true, then only unset tags and sector coefficients will be updated. If bUnsetValuesOnly is false, then all tags and sector coefficients will be checked and updated as needed. Returns: Number of edges that had a tag value changed or sector coefficient set to ON_SubDSectorType::UnsetSectorCoefficient. Remarks: It is easiest to call UpdateAllTagsAndSectorCoefficients().

◆ UpdateSurfaceMeshCache() [1/4]

unsigned int ON_SubD::UpdateSurfaceMeshCache ( bool  bLazyUpdate)

Description: Updates limit surface information returned by ON_SubDVertex.GetSurfacePoint(), ON_SubDEdge.EdgeSurfaceCurve(), and ON_SubDFace.SurfaceMeshFragments(), but does not update curvatures. The density of the mesh cache is ON_SubDDisplayParameters::AutomaticDisplayDensityFromSubD(*this). Parameters: bLazyUpdate - [in] If false, all information is updated. If true, only missing information is updated. If a relatively small subset of a SubD has been modified and care was taken to mark cached subdivision information as stale, then passing true can substantially improve performance. Returns: Number of elements that were updated.

◆ UpdateSurfaceMeshCache() [2/4]

unsigned int ON_SubD::UpdateSurfaceMeshCache ( bool  bLazyUpdate,
bool  bComputeCurvature 
)

Description: Updates limit surface information returned by ON_SubDVertex.GetSurfacePoint(), ON_SubDEdge.EdgeSurfaceCurve(), and ON_SubDFace.SurfaceMeshFragments(). The density of the mesh cache is ON_SubDDisplayParameters::AutomaticDisplayDensityFromSubD(*this). Parameters: bLazyUpdate - [in] If false, all information is updated. If true, only missing information is updated. If a relatively small subset of a SubD has been modified and care was taken to mark cached subdivision information as stale, then passing true can substantially improve performance. bComputeCurvature - [in] If false, curvature values in the mesh fragments is unchanged. If true, curvature values in the computed for the mesh fragments that are updated, if space can be allocated for it. If both bLazyUpdate and bcomputeCurvature are true, and any of the updated fragment does not have space allocated for m_K, no curvatures are computed. Returns: Number of elements that were updated.

◆ UpdateSurfaceMeshCache() [3/4]

unsigned int ON_SubD::UpdateSurfaceMeshCache ( bool  bLazyUpdate,
bool  bComputeCurvature,
bool  bSetUnchangedFaceColor,
ON_Color  unchanged_face_color,
bool  bSetUpdatedFaceColor,
ON_Color  updated_face_color 
)

Description: Updates limit surface information returned by ON_SubDVertex.GetSurfacePoint(), ON_SubDEdge.EdgeSurfaceCurve(), and ON_SubDFace.SurfaceMeshFragments(). The density of the mesh cache is ON_SubDDisplayParameters::AutomaticDisplayDensityFromSubD(*this). Parameters: bLazyUpdate - [in] If false, all information is updated. If true, only missing information is updated. If a relatively small subset of a SubD has been modified and care was taken to mark cached subdivision information as stale, then passing true can substantually improve performance. bComputeCurvature - [in] If false, curvature values in the mesh fragments is unchanged. If true, curvature values in the computed for the mesh fragments that are updated, if space can be allocated for it. If both bLazyUpdate and bcomputeCurvature are true, and any of the updated fragment does not have space allocated for m_K, no curvatures are computed. bSetUnchangedFaceColor - [in] unchanged_face_color - [in] If bSetUnchangedFaceColor is true, then unchanged_face_color is set as the per face color for faces whose mesh fragments are not recalculated. This is typically used in debugging. bSetUpdatedFaceColor - [in] updated_face_color - [in] If bSetUpdatedFaceColor is true, then updated_face_color is set as the per face color for faces whose mesh fragments are recalculated. This is typically used in debugging. Returns: Number of elements that were updated.

◆ UpdateSurfaceMeshCache() [4/4]

unsigned int ON_SubD::UpdateSurfaceMeshCache ( bool  bLazyUpdate,
bool  bSetUnchangedFaceColor,
ON_Color  unchanged_face_color,
bool  bSetUpdatedFaceColor,
ON_Color  updated_face_color 
)

Description: Updates limit surface information returned by ON_SubDVertex.GetSurfacePoint(), ON_SubDEdge.EdgeSurfaceCurve(), and ON_SubDFace.SurfaceMeshFragments() (expect for curvatures). The density of the mesh cache is ON_SubDDisplayParameters::AutomaticDisplayDensityFromSubD(*this). Parameters: bLazyUpdate - [in] If false, all information is updated. If true, only missing information is updated. If a relatively small subset of a SubD has been modified and care was taken to mark cached subdivision information as stale, then passing true can substantually improve performance. bSetUnchangedFaceColor - [in] unchanged_face_color - [in] If bSetUnchangedFaceColor is true, then unchanged_face_color is set as the per face color for faces whose mesh fragments are not recalculated. This is typically used in debugging. bSetUpdatedFaceColor - [in] updated_face_color - [in] If bSetUpdatedFaceColor is true, then updated_face_color is set as the per face color for faces whose mesh fragments are recalculated. This is typically used in debugging. Returns: Number of elements that were updated.

◆ UpdateSymmetry()

bool ON_SubD::UpdateSymmetry ( const ON_SimpleArray< unsigned int > &  moved_vertices,
bool  bPermitTopologyChange 
)

Description: Update existing symmetry on this SubD. Parameters: moved_vertices - [in] ids of vertices that have been moved bPermitTopologyChange - [in] True if the subd control net topology can change.
Returns: True if successful

◆ UpdateVertexTags()

unsigned int ON_SubD::UpdateVertexTags ( bool  bUnsetVertexTagsOnly)

Description: This tool if for expert users writing advanced editing tools. After completing custom editing operations that modify the topology of the SubD control net or changing values of vertex or edge tags, the tag and sector coefficients information on nearby components in the edited areas need to be updated. Parameters: bUnsetTagsOnly - [in] If bUnsetTagsOnly is true, then only unset tags and ill be updated. If bUnsetTagsOnly is false, then all tags and will be checked and updated as needed. Returns: Number of vertices that changed during the update. Remarks: It is easiest to call UpdateAllTagsAndSectorCoefficients().

◆ VertexArray()

class ON_SubDVertexArray ON_SubD::VertexArray ( ) const

Description: Avoid using this class. It is more efficient to use an ON_SubDVertexIterator returned by VertexIterator().

◆ VertexCount()

unsigned int ON_SubD::VertexCount ( ) const

Vertex access Returns: Number of vertices in the active level.

◆ VertexFacetTypeFromUnsigned()

static ON_SubD::VertexFacetType ON_SubD::VertexFacetTypeFromUnsigned ( unsigned int  vertex_facet_type_as_unsigned)
static

◆ VertexFromComponentIndex()

const class ON_SubDVertex* ON_SubD::VertexFromComponentIndex ( ON_COMPONENT_INDEX  component_index) const

◆ VertexFromId()

const class ON_SubDVertex* ON_SubD::VertexFromId ( unsigned int  vertex_id) const

Parameters: vertex_id - [in] Returns: If vertex_id identifies a valid vertex in this ON_SubD, then a pointer to that vertex is returned. Otherwise, nullptr is returned.

◆ VertexHash()

const ON_SHA1_Hash ON_SubD::VertexHash ( ON_SubDHashType  hash_type) const

Parameters: hash_type - [in] All hashes include vertex id. Geometry hashes include vertex tag, vertex control point, and vertex displacement. Returns: A SHA1 hash of the SubD's vertices.

◆ VertexIterator()

class ON_SubDVertexIterator ON_SubD::VertexIterator ( ) const

Example: ON_SubDVertexIterator vit = subd.VertexIterator(); for ( const ON_SubDVertex* v = vit.FirstVertex(); nullptr != v; v = vit.NextVertex()) { ... }

◆ VertexTagFromUnsigned()

static ON_SubDVertexTag ON_SubD::VertexTagFromUnsigned ( unsigned int  vertex_tag_as_unsigned)
static

◆ VertexTagIsSet()

static bool ON_SubD::VertexTagIsSet ( ON_SubDVertexTag  vertex_tag)
static

Parameters: vertex_tag - [in] Returns: True if vertex_tag is Smooth, Crease, Corner, or Dart. False otherwise.

◆ VertexTagToString()

static const ON_wString ON_SubD::VertexTagToString ( ON_SubDVertexTag  vertex_tag,
bool  bVertose 
)
static

Parameters: vertex_tag - [in] bVerbose - [in] If verbose, the tag name is preceded with "ON_SubDVertexTag::". Returns: vertex_tag as a string.

◆ Write()

bool ON_SubD::Write ( ON_BinaryArchive archive) const
overridevirtual

virtual

Reimplemented from ON_Object.

Friends And Related Function Documentation

◆ ON_SubDRef

friend class ON_SubDRef
friend

Member Data Documentation

◆ const

* * ON_RTreeRef ControlNetComponentTree bool ON_SubD::const

◆ CustomFacePackingId

const ON_UUID ON_SubD::CustomFacePackingId
static

The custom face packing is typically used when a subd creation function sets a custom face packing different from the default. Typically this happens when there are quad packs that align well with the overall geometry or to reduce texture distortion. It is used to indicate the built-in automatic face packing was not applied. {91FD7018-8BBE-4492-8D2E-E8761C505ACF}

◆ DefaultFacePackingId

const ON_UUID ON_SubD::DefaultFacePackingId
static

ADD NEW PackFaces ids above this comment and below FastAndSimplePackFacesId.

ON_SubD::DefaultFacePackingId identifies the default face packing. Code that wants to use the built-in face packing that is currently the best option for general use, will specify ON_SubD::DefaultFacePackingId.

Currently this id is ON_SubD::FastAndSimpleFacePackingId. In the future it may be changed to another id. Code that wants to always apply the same face packing will explicitly specify one of the built-in face pack ids defined above.

◆ DefaultSubDAppearance

const ON_SubDComponentLocation ON_SubD::DefaultSubDAppearance
static

◆ DefaultTextureCoordinateType

const ON_SubDTextureCoordinateType ON_SubD::DefaultTextureCoordinateType
static

◆ Empty

const ON_SubD ON_SubD::Empty
static

◆ ErrorCount

unsigned int ON_SubD::ErrorCount
static

The ON_SubD code increments ON_SubD::ErrorCount every time something unexpected happens. This is useful for debugging.

◆ FastAndSimpleFacePackingId

const ON_UUID ON_SubD::FastAndSimpleFacePackingId
static

The fast and simple face packing uses topology, vertex tags, and edge tags to group quads into rectangular grids. It does not perform geometric feature analysis. {C3D8DD54-F8C8-4455-BB0E-2A2F4988EC81}

◆ GlobeSphereFacePackingId

const ON_UUID ON_SubD::GlobeSphereFacePackingId
static

The globe sphere face packing is used by ON_SubD::CreateSubDGlobeSphere. The equatorial band of quads is assigned a central horizontal strip of texture space while the polar triangle fans are assigned horizontal strips from the bottom and top of texture space. The heights of the horizontal strips of texture space are chosen to minimize distortion as latitude varies. {63CA2FC1-8F6C-4EFC-9A07-C6A26A8C93FB}

◆ QuadSphereFacePackingId

const ON_UUID ON_SubD::QuadSphereFacePackingId
static

The quad sphere face packing is used by ON_SubD::CreateSubDQuadSphere. It divides the quad sphere into two similar sets (like a baseball cover) and assigns the bottom third of texture space to the first region and the top third to the second region. The middle third is unmapped so that texture distortion is uniform for each quad. {9C491E5C-2B46-48AA-BD43-7B18FDC52D58}