Rhino C++ API
8.13
|
#include <opennurbs_subd.h>
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_SubDEdge * | AddEdge (class ON_SubDVertex *v0, class ON_SubDVertex *v1) |
class ON_SubDEdge * | AddEdge (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, class ON_SubDVertex *v1) |
class ON_SubDEdge * | AddEdge (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, class ON_SubDVertex *v1, ON_SubDEdgeSharpness sharpness) |
class ON_SubDEdge * | 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) |
class ON_SubDEdge * | 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) |
class ON_SubDEdge * | AddEdgeWithSectorCoefficients (ON_SubDEdgeTag edge_tag, class ON_SubDVertex *v0, double v0_sector_coefficient, class ON_SubDVertex *v1, double v1_sector_coefficient) |
class ON_SubDEdge * | AddEdgeWithSectorCoefficients (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_SubDFace * | AddFace (class ON_SubDEdge *const *edges, unsigned int edge_count) |
class ON_SubDFace * | AddFace (const class ON_SubDEdgePtr *edges, unsigned int edge_count) |
class ON_SubDFace * | AddFace (const ON_SimpleArray< ON_SubDEdge * > &edges) |
class ON_SubDFace * | AddFace (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_SubDFace * | AddFaceForExperts (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_SubDFace * | AddQuadFace (class ON_SubDEdge *edge0, class ON_SubDEdge *edge1, class ON_SubDEdge *edge2, class ON_SubDEdge *edge3) |
class ON_SubDFace * | AddQuadFace (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_SubDFace * | AddTriangleFace (class ON_SubDEdge *edge0, class ON_SubDEdge *edge1, class ON_SubDEdge *edge2) |
class ON_SubDFace * | AddTriangleFace (ON_SubDEdgePtr edge0, ON_SubDEdgePtr edge1, ON_SubDEdgePtr edge2) |
class ON_SubDVertex * | AddVertex (const double *P) |
class ON_SubDVertex * | AddVertex (ON_SubDVertexTag vertex_tag, const double *P) |
class ON_SubDVertex * | AddVertexForExperts (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_Brep * | BrepForm (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_SubD * | CreateSymmetryPrimaryMotif (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_SubDEdge * | EdgeFromComponentIndex (ON_COMPONENT_INDEX component_index) const |
const class ON_SubDEdge * | EdgeFromId (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_SubD * | ExtractMarkedComponents (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_SubDFace * | FaceFromComponentIndex (ON_COMPONENT_INDEX component_index) const |
const class ON_SubDFace * | FaceFromId (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_SubDFace * | FindOrAddFace (ON_SubDEdgeTag new_edge_tag, const class ON_SubDVertex *face_vertices[], size_t face_vertex_count) |
const class ON_SubDVertex * | FindOrAddVertex (const double *control_net_point, double distance_tolerance) |
const class ON_SubDVertex * | FindVertex (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_SubDEdge * | FirstEdge () const |
const class ON_SubDFace * | FirstFace () const |
const class ON_SubDVertex * | FirstVertex () 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_Mesh * | GetControlNetMesh (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_Brep * | GetSurfaceBrep (const ON_SubDToBrepParameters &brep_parameters, ON_Brep *destination_brep) const |
class ON_Mesh * | GetSurfaceMesh (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_SubDEdge * | LastEdge () const |
const class ON_SubDFace * | LastFace () const |
const class ON_SubDVertex * | LastVertex () 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_SubDFace * | MergeFaces (const class ON_SubDEdge *edge) |
const class ON_SubDFace * | MergeFaces (const class ON_SubDVertex *vertex) |
const class ON_SubDFace * | MergeFaces (const ON_SimpleArray< const ON_SubDFace * > &face_list, bool bFaceListMayBeInvalid) |
const class ON_SubDFace * | MergeFaces (const ON_SubDFacePtr *face_list, size_t face_count, bool bFaceListMayBeInvalid) |
const class ON_SubDFace * | MergeFaces (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_SubD * | Offset (double offset_distance, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, bool bPreserveSymmetry, ON_SubD *destination_subd) const |
ON_SubD * | Offset (double offset_distance, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, ON_SubD *destination_subd) const |
ON_SubD * | Offset (ON_3dVector offset_direction, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, bool bPreserveSymmetry, ON_SubD *destination_subd) const |
ON_SubD * | Offset (ON_3dVector offset_direction, bool bOffsetSurface, bool bBothSides, bool bMakeSolid, ON_SubD *destination_subd) const |
ON_SubD & | operator= (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_Brep * | ProxyBrep (ON_Brep *destination_brep) const |
SubD proxy brep interface. More... | |
const class ON_BrepEdge * | ProxyBrepEdge (const ON_Brep *proxy_brep, unsigned subd_edge_id, const class ON_BrepEdge *prev_proxy_edge) const |
const class ON_BrepFace * | ProxyBrepFace (const ON_Brep *proxy_brep, unsigned subd_face_id, const class ON_BrepFace *prev_proxy_face) const |
const class ON_BrepVertex * | ProxyBrepVertex (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_SubDVertex * | RemoveEdgeVertexConnection (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_SubDVertex * | ReplaceFaceWithTriangleFan (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_SubDEdge * | SpinEdge (class ON_SubDEdge *edge, bool spin_clockwise=false) |
const ON_SubDEdgePtr | SpinEdge (ON_SubDEdgePtr eptr, bool spin_clockwise=false) |
const class ON_SubDEdge * | SplitEdge (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_SubDEdge * | SplitFace (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_SubDEdge * | SplitFace (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_Symmetry & | Symmetry () 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_SubDEdge * | SymmetrySetNext (const ON_SubDEdge *edge) const |
const ON_SubDEdgePtr | SymmetrySetNext (const ON_SubDEdgePtr edge_ptr) const |
const ON_SubDFace * | SymmetrySetNext (const ON_SubDFace *face) const |
const ON_SubDVertex * | SymmetrySetNext (const ON_SubDVertex *vertex) const |
const ON_SubDComponentPtr | SymmetrySetNext (ON_SubDComponentPtr cptr) const |
const ON_SubDEdge * | SymmetrySetPrimaryMotif (const ON_SubDEdge *edge) const |
const ON_SubDFace * | SymmetrySetPrimaryMotif (const ON_SubDFace *face) const |
const ON_SubDVertex * | SymmetrySetPrimaryMotif (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_SubDVertex * | VertexFromComponentIndex (ON_COMPONENT_INDEX component_index) const |
const class ON_SubDVertex * | VertexFromId (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_Geometry & | operator= (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_UserData * | FirstUserData () const |
class ON_UserData * | GetUserData (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_Object & | operator= (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_SubD * | CreateControlNetFromNurbsCurves (const ON_ClassArray< ON_NurbsCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromNurbsCurves (const ON_ObjectArray< ON_NurbsCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromNurbsCurves (const ON_SimpleArray< const ON_NurbsCurve * > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromPolylines (const ON_ClassArray< ON_Polyline > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromPolylines (const ON_ClassArray< ON_PolylineCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromPolylines (const ON_ObjectArray< ON_PolylineCurve > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromPolylines (const ON_SimpleArray< const ON_Polyline * > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateControlNetFromPolylines (const ON_SimpleArray< const ON_PolylineCurve * > &polylines, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static 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 ON_SubD * | CreateFromBoundary (const class ON_Curve &curve, ON_SubD *destination_subd) |
static ON_SubD * | CreateFromBoundaryControlPoints (const class ON_SimpleArray< ON_3dPoint > &boundary_control_points, ON_SubD *destination_subd) |
static ON_SubD * | CreateFromLoftCurves (const ON_ClassArray< ON_NurbsCurve > &curves, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateFromLoftCurves (const ON_ObjectArray< ON_NurbsCurve > &curves, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateFromLoftCurves (const ON_SimpleArray< const ON_NurbsCurve * > &curves, bool bPeriodicClosedLoft, bool bCorners, unsigned int span_divisions, ON_SubD *destination_subd) |
static ON_SubD * | CreateFromMesh (const class ON_Mesh *level_zero_mesh, const class ON_SubDFromMeshParameters *from_mesh_parameters, ON_SubD *subd) |
static ON_SubD * | CreateFromSurface (const class ON_Surface &surface, const ON_SubDFromSurfaceParameters *from_surface_parameters, ON_SubD *destination_subd) |
static 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 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 class ON_NurbsCurve * | CreateSubDFriendlyCurve (const class ON_Curve &curve, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (const class ON_Curve &curve, int cv_count, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (const class ON_Curve &curve, int cv_count, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (const double *points, size_t point_count, int point_stride, bool bInterpolatePoints, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (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_NurbsCurve * | CreateSubDFriendlyCurve (const ON_3dPoint *points, size_t point_count, bool bInterpolatePoints, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (const ON_SimpleArray< ON_3dPoint > &points, bool bInterpolatePoints, bool bPeriodicClosedCurve, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (const ON_SubDEdgePtr *edge_chain, size_t edge_count, class ON_NurbsCurve *destination_curve) |
static class ON_NurbsCurve * | CreateSubDFriendlyCurve (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_NurbsSurface * | CreateSubDFriendlySurface (const class ON_Surface &surface, class ON_NurbsSurface *destination_surface) |
static class ON_NurbsSurface * | CreateSubDFriendlySurface (const ON_ClassArray< ON_NurbsCurve > &cubic_curves, bool bPeriodicClosedLoft, class ON_NurbsSurface *destination_surface) |
static class ON_NurbsSurface * | CreateSubDFriendlySurface (const ON_ObjectArray< ON_NurbsCurve > &cubic_curves, bool bPeriodicClosedLoft, class ON_NurbsSurface *destination_surface) |
static class ON_NurbsSurface * | CreateSubDFriendlySurface (const ON_SimpleArray< const ON_NurbsCurve * > &cubic_curves, bool bPeriodicClosedLoft, class ON_NurbsSurface *destination_surface) |
static class ON_NurbsSurface * | CreateSubDFriendlySurface (const ON_SimpleArray< const ON_NurbsCurve * > &cubic_curves, bool bPeriodicClosedLoft, const bool *creases, class ON_NurbsSurface *destination_surface) |
static ON_SubD * | CreateSubDGlobeSphere (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_SubD * | CreateSubDIcosahedron (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_SubD * | CreateSubDQuadSphere (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_SubD * | CreateSubDTriSphere (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_SubDVertex * | SubdivideSector (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_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 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 |
anonymous enum : unsigned int |
anonymous enum : unsigned int |
|
strong |
ON_SubD::AutomaticMeshToSubDContext identifies a context where meshes can automatically be converted to subds.
|
strong |
SubD::ChainType specifies what edge and vertex tag tests are used when creating edge chains.
|
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 |
|
strong |
SubD::PatchStyle identifies the style of patch used to fill holes.
|
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.
|
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 );
ON_SubD::ON_SubD | ( | ) |
|
virtual |
const class ON_SubDLevel& ON_SubD::ActiveLevel | ( | ) | const |
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.
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.
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.
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.
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 | ||
) |
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.
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.
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 | ||
) |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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[].
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[].
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.
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.
class ON_SubDVertex* ON_SubD::AddVertex | ( | const double * | P | ) |
Description: Adds a vertex with tag = ON_SubDVertexTag::Unset.
class ON_SubDVertex* ON_SubD::AddVertex | ( | ON_SubDVertexTag | vertex_tag, |
const double * | P | ||
) |
Description: Adds a vertex with specified tag.
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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.
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()).
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.
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.
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.
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.
unsigned int ON_SubD::AppendDisjoint | ( | const ON_SubD & | disjoint_subd, |
bool | bMarkOriginalComponents, | ||
bool | bMarkAddedComponents, | ||
ON_SimpleArray< ON_SubDComponentPtrPair > * | merge_map | ||
) |
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.
unsigned int ON_SubD::AutoBridge | ( | ON_SubDEdgeTag | bridge_boundary_edge_tag, |
const ON_SubDEdgePtr | start_edge, | ||
const ON_SubDEdgePtr | end_edge, | ||
bool | bMarkNewFaces | ||
) |
|
static |
Returns: true if SubDs are automatically created when an ON_Mesh is found in the specified context. false otherwise.
|
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.
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.
unsigned int ON_SubD::AutoMultiPatch | ( | ON_SubD::PatchStyle | patch_style, |
ON_SubDEdgeTag | patch_edge_tag, | ||
const ON_SimpleArray< ON_SubDEdgePtr > & | unsorted_edges, | ||
bool | bMarkNewFaces | ||
) |
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.
virtual
Returns: GetSurfaceBrep( ON_SubDToBrepParameters::Default, nullptr );
Reimplemented from ON_Geometry.
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.
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().
void ON_SubD::Clear | ( | ) |
|
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.
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.
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.
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.
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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.
* * void ON_SubD::ClearControlNetComponentTree | ( | ) |
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.
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.
unsigned int ON_SubD::ClearEdgeMarks | ( | ) | const |
Descripiton: Clears the m_status.RuntimeMark() for every edge. Returns: Number of marks that were cleared.
unsigned int ON_SubD::ClearEdgeSharpness | ( | ) |
Converts all sharp edges to smooth edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.
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.
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.
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.
unsigned int ON_SubD::ClearFaceMarks | ( | ) | const |
Descripiton: Clears the m_status.RuntimeMark() for every face. Returns: Number of marks that were cleared.
void ON_SubD::ClearFacePackIds | ( | ) |
Description: Clear all face pack ids and related information.
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().
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.
void ON_SubD::ClearFragmentTextureCoordinatesTextureSettingsHash | ( | ) | const |
Description: If a change requires existing fragment texture coordinates to be recalculated, then call ClearFragmentTextureCoordinatesTextureSettingsHash().
* * void ON_SubD::ClearFragmentTree | ( | ) |
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.
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.
unsigned ON_SubD::ClearInactiveLevels | ( | ) |
Description: Remove all levels except the active level. Returns: Number of removed levels.
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.
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.
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().
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().
void ON_SubD::ClearSymmetry | ( | ) |
Description: Removes all symmetry and component symmetry set information from this subd.
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.
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.
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.
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.
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).
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).
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).
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).
void ON_SubD::ClearSymmetrySetsForExperts | ( | ) |
Description: Removes the component symmetry set information. The Symmetry() property is not changed.
unsigned int ON_SubD::ClearTexturePoints | ( | ) | const |
Description: Delete texture points from faces. Returns: Number of faces that had texture points.
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.
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.
unsigned int ON_SubD::ClearVertexMarks | ( | ) | const |
Descripiton: Clears the m_status.RuntimeMark() for every vertex. Returns: Number of marks that were cleared.
const ON_MappingTag ON_SubD::ColorsMappingTag | ( | ) | const |
Returns: This mapping tag ideitifies the color mapping used to set fragment per vertex colors.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
component_type |
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
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 |
unsigned int ON_SubD::ComponentPtrFromComponentIndex | ( | const ON_COMPONENT_INDEX * | ci_list, |
size_t | ci_count, | ||
ON_SimpleArray< ON_SubDComponentPtr > & | cptr_list | ||
) | const |
const ON_SubDComponentPtr ON_SubD::ComponentPtrFromComponentIndex | ( | ON_COMPONENT_INDEX | component_index | ) | const |
Component (Vertex, Edge, Face) access
|
static |
Returns: Number of edges in an component ring returned by ON_SubD::GetVertexComponentRing();
|
static |
Returns: Number of faces in an component ring returned by ON_SubD::GetVertexComponentRing();
|
static |
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.
bool ON_SubD::ContentIsSymmetric | ( | ) | const |
Returns: True if this subd has the symmetry specified by this->Symmetry().
|
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()
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.
|
static |
Description: Loft a subd control net through a list of nurbs curve control nets.
|
static |
Description: Loft a subd control net through a list of nurbs curve control nets.
|
static |
Description: Loft a subd control net through a list of nurbs curve control nets.
|
static |
Description: Loft a subd control net through a list of polylines.
|
static |
Description: Loft a subd control net through a list of polylines.
|
static |
Description: Loft a subd control net through a list of polylines.
|
static |
Description: Loft a subd control net through a list of polylines.
|
static |
Description: Loft a subd control net through a list of polylines.
|
static |
|
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.
|
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.
|
static |
|
static |
|
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
|
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.
|
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.
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.
|
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
|
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
|
static |
|
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.
|
static |
|
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.
|
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.
|
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.
|
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.
|
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.
|
static |
|
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.
|
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
|
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
|
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
|
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
|
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
|
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.
sphere | |
vertex_location | If 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_count | Number 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_count | Number 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_subd | If this pointer is not nullptr, the SubD globe is saved in this instance. Otherwise a new SubD is created. |
|
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().
sphere | Location, size and orientation of the sphere that circumscribes the icosahedron. |
vertex_location | If 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_subd | If this pointer is not nullptr, the SubD icosahedron is saved in this instance. Otherwise a new SubD is created. |
|
static |
Creates a SubD sphere made from quad faces.
sphere | Location, size and orientation of the sphere. |
vertex_location | If 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_level | The resulting sphere will have 6*4^subdivision_level quads. (0 for 6 quads, 1 for 24 quads, 2 for 96 quads, ...). |
destination_subd | If destination_subd is not null, the SubD sphere is saved in this instance. |
|
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().
sphere | Location, size and orientation of the sphere. |
vertex_location | If 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_level | The resulting sphere will have 20*4^subdivision_level triangles. (0 for 20 triangles, 1 for 80 triangles, 2 for 320 triangles, ...). |
destination_subd | If this pointer is not nullptr, the SubD tri sphere is saved in this instance. Otherwise a new SubD is created. |
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
bool ON_SubD::DeleteComponents | ( | const ON_SimpleArray< ON_SubDComponentPtr > & | cptr_list, |
bool | bMarkDeletedFaceEdges | ||
) |
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.
bool ON_SubD::DeleteComponentsForExperts | ( | const ON_SubDComponentPtr * | cptr_list, |
size_t | cptr_count, | ||
bool | bDeleteIsolatedEdges, | ||
bool | bUpdateTagsAndCoefficients, | ||
bool | bMarkDeletedFaceEdges | ||
) |
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
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.
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.
void ON_SubD::Destroy | ( | ) |
Description: Delete all contents release all memory used by this ON_SubD.
|
overridevirtual |
virtual
Remarks: For ON_SubD objects, ClearBoundingBox() and DestroyRuntimeCache() are identical.
Reimplemented from ON_Object.
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
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.
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
unsigned int ON_SubD::DumpTopology | ( | ON_2udex | vertex_id_range, |
ON_2udex | edge_id_range, | ||
ON_2udex | face_id_range, | ||
ON_TextLog & | |||
) | const |
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);
class ON_SubDEdgeArray ON_SubD::EdgeArray | ( | ) | const |
Description: Avoid using this class. It is more efficient to use an ON_SubDEdgeIterator returned by EdgeIterator().
unsigned int ON_SubD::EdgeCount | ( | ) | const |
Edge access Returns: Number of edges in the active level.
const class ON_SubDEdge* ON_SubD::EdgeFromComponentIndex | ( | ON_COMPONENT_INDEX | component_index | ) | const |
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.
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.
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()) { ... }
|
static |
Returns: True if eptr0.RelativeVetex(1) == eptr1.RelativeVetex(0) and both edges have the same set of faces.
|
static |
|
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.
|
static |
|
static |
Parameters: edge_tag - [in] Returns: True if edge_tag is Smooth, Crease, or SmoothX. False otherwise.
|
static |
Parameters: edge_tag - [in] bVerbose - [in] If verbose, the tag name is preceded with "ON_SubDEdgeTag::". Returns: edge_tag as a string.
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
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]
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]
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]
Description: Extrude entire subd bay adding a ring of faces around the boundary and moving the original subd.
unsigned int ON_SubD::ExtrudeComponents | ( | const ON_Xform & | xform, |
const ON_COMPONENT_INDEX * | ci_list, | ||
size_t | ci_count | ||
) |
unsigned int ON_SubD::ExtrudeComponents | ( | const ON_Xform & | xform, |
const ON_COMPONENT_INDEX * | ci_list, | ||
size_t | ci_count, | ||
bool | bExtrudeBoundaries, | ||
bool | bPermitNonManifoldEdgeCreation | ||
) |
unsigned int ON_SubD::ExtrudeComponents | ( | const ON_Xform & | xform, |
const ON_SubDComponentPtr * | cptr_list, | ||
size_t | cptr_count | ||
) |
unsigned int ON_SubD::ExtrudeComponents | ( | const ON_Xform & | xform, |
const ON_SubDComponentPtr * | cptr_list, | ||
size_t | cptr_count, | ||
bool | bExtrudeBoundaries, | ||
bool | bPermitNonManifoldEdgeCreation | ||
) |
class ON_SubDFaceArray ON_SubD::FaceArray | ( | ) | const |
Description: Avoid using this class. It is more efficient to use an ON_SubDFaceIterator returned by FaceIterator().
unsigned int ON_SubD::FaceCount | ( | ) | const |
Face access Returns: Number of faces in the active level.
const class ON_SubDFace* ON_SubD::FaceFromComponentIndex | ( | ON_COMPONENT_INDEX | component_index | ) | const |
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.
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.
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()) { ... }
Returns: An id that identifies the algorithm used to pack the faces in this subd.
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.
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.
const ON_SubDHash ON_SubD::FacePackingTopologyHash | ( | ) | const |
Returns: The value of ON_SubDHash::Create(ON_SubDHashType::TopologyAndEdgeCrease, *this) when the faces were packed.
bool ON_SubD::FacesArePacked | ( | ) | const |
Returns: True if every face has a nonzero PackId and a set PackRect.
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.
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.
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.
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.
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.
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.
component_type |
const class ON_SubDEdge* ON_SubD::FirstEdge | ( | ) | const |
const class ON_SubDFace* ON_SubD::FirstFace | ( | ) | const |
const class ON_SubDVertex* ON_SubD::FirstVertex | ( | ) | const |
const ON_MappingTag ON_SubD::FragmentColorsMappingTag | ( | ) | const |
const ON_SHA1_Hash ON_SubD::FragmentColorsSettingsHash | ( | ) | const |
Returns: hash identifying the way the fragment vertex colors were set.
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.
* ON_RTreeRef ON_SubD::FragmentTree | ( | ) | const |
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.
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.
|
overridevirtual |
virtual ON_Geometry GetBBox override
Reimplemented from ON_Geometry.
|
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.
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[]
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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.
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[].
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.
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().
unsigned int ON_SubD::GetMarkedComponents | ( | bool | bIncludeVertices, |
bool | bIncludeEdges, | ||
bool | bIncludeFaces, | ||
ON_SimpleArray< const class ON_SubDComponentBase * > & | marked_component_list | ||
) | const |
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.
|
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.
|
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.
bPermitNoSubdivisions | When 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_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. The edges and faces are sorted radially(component_ring[1] and component_ring[3] are edges of component_ring[2], etc). |
component_ring_count | Number of components in the component_ring[] array. |
subdivision_count | The number of subdivisions used to calculate point_ring[] is returned in subdivision_count. |
point_ring | The point ring points are returned in point_ring[] |
point_ring_stride | Number of doubles between subsequent points in point_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));
|
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));
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Get a ring of points that can be used to calculate the subdivision and limit points of sit.CenterVertex().
sit | Initialized sector iterator. |
subdivision_count | TNumber of subdivisions performed to get point_ring[] is returned in subdivision_count. |
point_ring | The points are returned in point_ring[] |
|
static |
|
static |
Returns: Number of points in the subdivision ring or 0 if the call fails.
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]
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.
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.
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.
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[]
unsigned int ON_SubD::GetSurfaceNurbs | ( | ON_SubD::NurbsSurfaceType | nurbs_surface_type, |
ON_SimpleArray< ON_SubDFaceRegionAndNurbs > & | patches | ||
) | const |
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.
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.
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.
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.
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.
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.
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.
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.
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.
|
overridevirtual |
virtual ON_Geometry GetTightBoundingBox override
Reimplemented from ON_Geometry.
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.
bool ON_SubD::GlobalSubdivide | ( | ) |
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)
unsigned int ON_SubD::GlobalSubdivideQuadCount | ( | ) | const |
unsigned int ON_SubD::GlobalSubdivideQuadCount | ( | unsigned int | subdivision_count | ) | const |
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.
bool ON_SubD::GrowEdgeFaceArray | ( | ON_SubDEdge * | e, |
size_t | capacity | ||
) |
bool ON_SubD::GrowFaceEdgeArray | ( | ON_SubDFace * | f, |
size_t | capacity | ||
) |
bool ON_SubD::GrowVertexEdgeArray | ( | ON_SubDVertex * | v, |
size_t | capacity | ||
) |
bool ON_SubD::GrowVertexFaceArray | ( | ON_SubDVertex * | v, |
size_t | capacity | ||
) |
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
bool ON_SubD::HasFragmentColors | ( | ) | const |
Determing if this SubD's mesh fragments have per vertex color settings.
bool ON_SubD::HasFragmentColors | ( | ON_MappingTag | color_mapping_tag | ) | const |
color_mapping_tag | This 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. |
bool ON_SubD::HasFragmentColors | ( | ON_SHA1_Hash | color_settings_hash | ) | const |
color_settings_hash | This 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. |
bool ON_SubD::HasFragmentColors | ( | ON_SHA1_Hash | color_settings_hash, |
ON_MappingTag | color_mapping_tag | ||
) | const |
color_settings_hash | This 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_tag | This 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. |
bool ON_SubD::HasFragmentTextureCoordinates | ( | ) | const |
Determing if this SubD's mesh fragments have per vertex texture coordinates.
bool ON_SubD::HasFragmentTextureCoordinates | ( | ON_MappingTag | texture_mapping_tag | ) | const |
texture_mapping_tag | This 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. |
bool ON_SubD::HasFragmentTextureCoordinates | ( | ON_SHA1_Hash | texture_settings_hash | ) | const |
texture_settings_hash | This 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. |
bool ON_SubD::HasFragmentTextureCoordinates | ( | ON_SHA1_Hash | texture_settings_hash, |
ON_MappingTag | texture_mapping_tag | ||
) | const |
texture_settings_hash | This 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_tag | This 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. |
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().
bool ON_SubD::HasPerFaceColorsFromPackId | ( | ) | const |
Returns: True if per face colors were set by SetPerFaceColorsFromPackId().
bool ON_SubD::HasPerFaceColorsFromSymmetryMotif | ( | ) | const |
Returns: True if per face colors were set by SetPerFaceColorsFromSymmetryMotif().
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().
bool ON_SubD::HasSharpEdges | ( | ) | const |
Determine if this SubD has sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.
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).
bool ON_SubD::InSubD | ( | const class ON_SubDEdge * | edge | ) | const |
bool ON_SubD::InSubD | ( | const class ON_SubDFace * | face | ) | const |
bool ON_SubD::InSubD | ( | const class ON_SubDVertex * | vertex | ) | const |
Membership query
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.
bool ON_SubD::InterpolateControlNet | ( | ) |
Description: Modifies the SubD so that the SubD vertex limit points are equal to input control net locations.
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().
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).
bool ON_SubD::InterpolateSurfacePoints | ( | const ON_SimpleArray< ON_COMPONENT_INDEX > & | vertices, |
const ON_SimpleArray< ON_3dPoint > & | surface_points | ||
) |
bool ON_SubD::InterpolateSurfacePoints | ( | const ON_SimpleArray< ON_SubDComponentPtr > & | vertices, |
const ON_SimpleArray< ON_3dPoint > & | surface_points | ||
) |
bool ON_SubD::InterpolateSurfacePoints | ( | const ON_SimpleArray< ON_SubDVertexPtr > & | vertices, |
const ON_SimpleArray< ON_3dPoint > & | surface_points | ||
) |
|
static |
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
bool ON_SubD::IsEmpty | ( | ) | const |
bool ON_SubD::IsManifold | ( | ) | const |
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
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
bool ON_SubD::IsNotEmpty | ( | ) | const |
bool ON_SubD::IsOriented | ( | ) | const |
returns true if all facets are consistently oriented
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
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.
|
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.
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
|
static |
Returns: true if sector_edge_count is valid for the vertex type
|
static |
const class ON_SubDEdge* ON_SubD::LastEdge | ( | ) | const |
const class ON_SubDFace* ON_SubD::LastFace | ( | ) | const |
const class ON_SubDVertex* ON_SubD::LastVertex | ( | ) | const |
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.
const class ON_SubDLevel& ON_SubD::LevelForExperts | ( | unsigned int | level_index | ) | const |
If a level exists, get it
level_index |
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.
bool ON_SubD::LocalSubdivide | ( | const ON_SimpleArray< const class ON_SubDFace * > & | face_list | ) |
bool ON_SubD::LocalSubdivide | ( | const ON_SimpleArray< ON_COMPONENT_INDEX > & | face_list | ) |
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
bool ON_SubD::MakeReflectSymmetric | ( | ON_Symmetry | symmetry | ) |
Description: Apply reflection symmetry
bool ON_SubD::MakeSymmetric | ( | ON_Symmetry | symmetry | ) |
Description: Make this subd symmetric. Parameters: symmetry - [in] desired symmetry. Returns: True if successful
bool ON_SubD::MakeSymmetric | ( | ON_Symmetry | symmetry, |
bool | bIgnoredParameter1, | ||
bool | bIgnoredParameter2 | ||
) |
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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.
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 | ||
) |
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.
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 | ||
) |
unsigned int ON_SubD::MergeColinearEdges | ( | bool | bMergeBoundaryEdges, |
bool | bMergeInteriorCreaseEdges, | ||
bool | bMergeInteriorSmoothEdges, | ||
double | distance_tolerance, | ||
double | maximum_aspect, | ||
double | sin_angle_tolerance | ||
) |
Editing tools
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
unsigned int ON_SubD::MeshFragmentCount | ( | ) | const |
Returns: The number of limit surface mesh fragments (ON_SubDMeshFragment) that GetMeshFragments() will produce.
|
override |
virtual
|
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.
|
static |
|
overridevirtual |
virtual
Reimplemented from ON_Object.
|
static |
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.
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.
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.
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.
bool ON_SubD::Orient | ( | ) | const |
Attempts to orient all facet to match the first facet.
unsigned int ON_SubD::PackFaces | ( | ) |
Description: Calls this->PackFaces(ON_SubD::DefaultPackFacesId). Returns: Number of face packs.
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.
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.
SubD proxy brep interface.
Returns: GetSurfaceBrep( ON_SubDToBrepParameters::Default, destination_brep );
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.
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.
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
unsigned int ON_SubD::RemoveAllCreases | ( | ) |
Description: Remove all interior creases. Returns: Number of edges converted from crease to smooth.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
bool ON_SubD::ReturnEdgeForExperts | ( | ON_SubDEdge * | e | ) |
Parameters: e - [in] An edge in this subd with no vertices or faces.
bool ON_SubD::ReturnFaceForExperts | ( | ON_SubDFace * | f | ) |
Parameters: f - [in] A face with zero edges
bool ON_SubD::ReturnVertexForExperts | ( | ON_SubDVertex * | v | ) |
Parameters: v - [in] A vertex with zero edge and zero faces.
bool ON_SubD::ReverseOrientation | ( | ) | const |
reverses the orientation of all facets
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
|
static |
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.
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.
unsigned int ON_SubD::SetComponentMarks | ( | bool | bClearBeforeSet, |
const ON_SimpleArray< const class ON_SubDComponentBase * > & | marked_component_list | ||
) | const |
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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 |
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.
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.
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()
bUpdateSurfaceMeshCache | If 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. |
bLazyColorSet | If 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_range | kappa_colors.Color(K) is used to assigned a color to surface principal curvatures K. |
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.
bUpdateSurfaceMeshCache | If 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. |
bLazyColorSet | If 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 |
unsigned int ON_SubD::SetEdgeSharpness | ( | const class ON_SubDEdgeChain & | edge_chain, |
ON_SubDEdgeSharpness | edge_chain_sharpness, | ||
bool | bPreserveSymmetry | ||
) |
Set or change edge sharpness.
edge_chain | |
edge_chain_sharpness | Sharpness along the entire edge chain. |
bPreserveSymmetry | If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry. |
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.
edge_ptrs | Edges |
edge_sharpness | edge_sharpness[] is parallel to edge_ptrs[] |
bPreserveSymmetry | If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry. |
unsigned int ON_SubD::SetEdgeSharpness | ( | const ON_SimpleArray< ON_SubDEdgePtr > & | edge_ptrs, |
ON_SubDEdgeSharpness | sharpness, | ||
bool | bPreserveSymmetry | ||
) |
Set or change edge sharpness.
edge_count | |
edge_ptrs | Array of edge_count edges. |
sharpness | sharpness to apply to every edge. |
bPreserveSymmetry | If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry. |
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.
edge_count | |
edge_ptrs | Edges |
edge_sharpness | |
edge_sharpness_stride | 0 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. |
bPreserveSymmetry | If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry. |
unsigned int ON_SubD::SetEdgeSharpness | ( | size_t | edge_count, |
const ON_SubDEdgePtr * | edge_ptrs, | ||
ON_SubDEdgeSharpness | sharpness, | ||
bool | bPreserveSymmetry | ||
) |
Set or change edge sharpness.
edge_count | |
edge_ptrs | Array of edge_count edges. |
sharpness | sharpness to apply to every edge. |
bPreserveSymmetry | If both bPreserveSymmetry and this->ContentIsSymmetric() are true, then the sharpness modification will attempt to preserve the symmetry. |
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.
unsigned int ON_SubD::SetEdgeTags | ( | const ON_SimpleArray< ON_SubDComponentPtr > & | cptr_list, |
ON_SubDEdgeTag | edge_tag | ||
) |
Returns: number of tags that were changed.
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.
bool ON_SubD::SetFaceBoundary | ( | ON_SubDFace * | face, |
const ON_SimpleArray< ON_SubDEdgePtr > & | edges | ||
) |
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.
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.
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.
void ON_SubD::SetFragmentColorsMappingTag | ( | const class ON_MappingTag & | ) | const |
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.
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.
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.
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.
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
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.
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.
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.
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.
bool ON_SubD::SetSymmetrySet | ( | const ON_SubDComponentPtr * | component_symmetry_set, |
size_t | component_symmetry_set_count, | ||
unsigned | primary_motif_index | ||
) |
bool ON_SubD::SetSymmetrySet | ( | const ON_SubDEdge *const * | edge_symmetry_set, |
size_t | edge_symmetry_set_count, | ||
unsigned | primary_motif_index | ||
) |
bool ON_SubD::SetSymmetrySet | ( | const ON_SubDFace *const * | face_symmetry_set, |
size_t | face_symmetry_set_count, | ||
unsigned | primary_motif_index | ||
) |
bool ON_SubD::SetSymmetrySet | ( | const ON_SubDVertex *const * | vertex_symmetry_set, |
size_t | vertex_symmetry_set_count, | ||
unsigned | primary_motif_index | ||
) |
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.
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.
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.
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.
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:
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.
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.
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.
vertex_id | |
vertex_surface_point |
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.
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.
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.
void ON_SubD::ShareDimple | ( | const class ON_SubDMeshImpl & | ) |
unsigned int ON_SubD::SharpEdgeCount | ( | ) | const |
Number of sharp edges. See ON_SubDEdge::IsSharp() for more information about sharp edges.
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.
sharpness_range | The range of sharpness values is returned here. (0,0) is returned if there are no sharp edges. |
|
overridevirtual |
virtual
Reimplemented from ON_Object.
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().
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().
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().
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().
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().
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().
unsigned int ON_SubD::SnapPointsToPlane | ( | ON_PlaneEquation | plane_equation, |
double | distance_tolerance | ||
) |
* 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
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.
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.
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.
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).
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.
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).
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.
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).
ON_SubDComponentLocation ON_SubD::SubDAppearance | ( | ) | const |
Description: Get the SubD appearance (surface or control net); Returns: ON_SubDComponentLocation::Surface or ON_SubDComponentLocation::ControlNet.
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.
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.
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.
unsigned int ON_SubD::SubDimpleUseCount | ( | ) | const |
|
static |
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.
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.
bool ON_SubD::SurfaceMeshCacheExists | ( | bool | bTextureCoordinatesExist, |
bool | bCurvaturesExist, | ||
bool | bColorsExist | ||
) | const |
Determine if the limit surface mesh fragments exist.
bTextureCoordinatesExist | Pass true if you want to know if the mesh cache exists and it has set texture coordinates. |
bCurvaturesExist | Pass true if you want to know if the mesh cache exists and it has set curvatures. |
bColorsExist | Pass true if you want to know if the mesh cache exists and it has set per vertex colors. |
|
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()
|
overridevirtual |
virtual
Reimplemented from ON_Geometry.
void ON_SubD::SwapDimple | ( | class ON_SubDMeshImpl & | ) |
void ON_SubD::SwapDimple | ( | ON_SubD & | ) |
const class ON_Symmetry& ON_SubD::Symmetry | ( | ) | const |
SubD symmetry interface Returns: Current symmetry properties.
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).
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).
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).
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
ON_SubDTextureCoordinateType ON_SubD::TextureCoordinateType | ( | ) | const |
|
static |
|
static |
|
static |
|
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.
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.
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.
unsigned int ON_SubD::TexturePointsAreSet | ( | ) | const |
Returns: Number of faces with ON_SubDFace.TexturePointsAreSet() = true.
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.
|
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.
|
static |
Description: Get the SubD appearance (surface or control net); Returns: ON_SubDComponentLocation::Surface or ON_SubDComponentLocation::ControlNet.
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.
|
static |
virtual
Reimplemented from ON_Geometry.
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.
unsigned int ON_SubD::TransformComponents | ( | const ON_Xform & | xform, |
const ON_SubDComponentPtr * | cptr_list, | ||
size_t | cptr_count, | ||
ON_SubDComponentLocation | component_location | ||
) |
unsigned int ON_SubD::UnselectComponents | ( | bool | bUnselectAllVertices, |
bool | bUnselectAllEdges, | ||
bool | bUnselectAllFaces | ||
) | const |
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.
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().
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().
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.
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.
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.
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.
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
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().
class ON_SubDVertexArray ON_SubD::VertexArray | ( | ) | const |
Description: Avoid using this class. It is more efficient to use an ON_SubDVertexIterator returned by VertexIterator().
unsigned int ON_SubD::VertexCount | ( | ) | const |
Vertex access Returns: Number of vertices in the active level.
|
static |
const class ON_SubDVertex* ON_SubD::VertexFromComponentIndex | ( | ON_COMPONENT_INDEX | component_index | ) | const |
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.
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.
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()) { ... }
|
static |
|
static |
Parameters: vertex_tag - [in] Returns: True if vertex_tag is Smooth, Crease, Corner, or Dart. False otherwise.
|
static |
Parameters: vertex_tag - [in] bVerbose - [in] If verbose, the tag name is preceded with "ON_SubDVertexTag::". Returns: vertex_tag as a string.
|
overridevirtual |
virtual
Reimplemented from ON_Object.
|
friend |
* * ON_RTreeRef ControlNetComponentTree bool ON_SubD::const |
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}
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.
|
static |
|
static |
|
static |
The ON_SubD code increments ON_SubD::ErrorCount every time something unexpected happens. This is useful for debugging.
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}
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}
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}