Rhino C++ API
8.13
|
#include <opennurbs_subd.h>
Public Member Functions | |
ON_SubDEdgeChain ()=default | |
ON_SubDEdgeChain (const ON_SubDEdgeChain &)=default | |
~ON_SubDEdgeChain ()=default | |
unsigned int | AddAllNeighbors (ON_ChainDirection direction, ON_SubD::ChainType chain_type) |
unsigned int | AddEdge (const ON_SubDEdge *edge) |
unsigned int | AddOneNeighbor (ON_ChainDirection direction, ON_SubD::ChainType chain_type) |
unsigned int | BeginEdgeChain (ON_UUID persistent_subd_id, ON_SubDRef subd_ref, const ON_SimpleArray< const ON_SubDEdge * > &initial_edge_chain) |
unsigned int | BeginEdgeChain (ON_UUID persistent_subd_id, ON_SubDRef subd_ref, const ON_SimpleArray< ON_SubDEdgePtr > &initial_edge_chain) |
unsigned int | BeginEdgeChain (ON_UUID persistent_subd_id, ON_SubDRef subd_ref, const ON_SubDEdge *const *initial_edge_chain, size_t edge_count) |
unsigned int | BeginEdgeChain (ON_UUID persistent_subd_id, ON_SubDRef subd_ref, const ON_SubDEdge *initial_edge) |
unsigned int | BeginEdgeChain (ON_UUID persistent_subd_id, ON_SubDRef subd_ref, const ON_SubDEdgePtr *initial_edge_chain, size_t edge_count) |
unsigned int | BeginEdgeChain (ON_UUID persistent_subd_id, ON_SubDRef subd_ref, ON_SubDEdgePtr initial_edge) |
void | ClearEdgeChain () |
const ON_3dPoint | ControlNetPoint (int vertex_index) const |
void | Dump (class ON_TextLog &text_log) const |
const ON_SubDEdge * | Edge (int edge_index) const |
const ON_SimpleArray< ON_SubDEdgePtr > & | EdgeChain () const |
unsigned int | EdgeCount () const |
const ON_SubDEdgePtr | EdgePtr (int edge_index) const |
ON_NurbsCurve * | EdgeSurfaceCurve (ON_NurbsCurve *destination) const |
const ON_3dPoint | FirstControlNetPoint () const |
const ON_SubDEdge * | FirstEdge () const |
const ON_SubDEdgePtr | FirstEdgePtr () const |
const ON_SubDVertex * | FirstVertex () const |
bool | GetSideComponents (unsigned relative_side, ON_SimpleArray< ON_SubDComponentPtr > &side_components) const |
const ON_SHA1_Hash | Hash () const |
bool | HasPersistentEdgeIds () const |
bool | HasRuntimeEdgePtrs () const |
bool | InChain (const ON_SubDEdge *edge) const |
bool | InChain (const ON_SubDEdgePtr edge_ptr) const |
bool | InChain (const ON_SubDVertex *vertex) const |
bool | IsClosedLoop () const |
bool | IsConvexLoop (bool bStrictlyConvex) const |
const ON_3dPoint | LastControlNetPoint () const |
const ON_SubDEdge * | LastEdge () const |
const ON_SubDEdgePtr | LastEdgePtr () const |
const ON_SubDVertex * | LastVertex () const |
ON_NurbsCurve * | LoftCurve (ON_NurbsCurve *destination) const |
ON_SubDEdgeChain & | operator= (const ON_SubDEdgeChain &)=default |
const ON_UUID | PersistentSubDId () const |
bool | Read (class ON_BinaryArchive &archive) |
unsigned int | RemoveEdges (const ON_SubDEdge *first_edge, const ON_SubDEdge *last_edge) |
void | Reverse () |
bool | SetPersistentEdgeIdsFromRuntimeEdgePtrs () const |
bool | SetRuntimeEdgePtrsFromPersistentSubD (ON_UUID persistent_subd_id, ON_SubDRef persistent_subd_ref) |
void | SetStatusCheck (bool bEnableStatusCheck, ON_ComponentStatus status_check_pass, ON_ComponentStatus status_check_fail) |
bool | StatusCheck (const ON_SubDEdge *edge) const |
bool | StatusCheckEnabled () const |
const ON_ComponentStatus | StatusCheckFail () const |
const ON_ComponentStatus | StatusCheckPass () const |
const ON_SubD & | SubD () const |
const ON_SubDRef | SubDRef () const |
const ON_SubDVertex * | Vertex (int vertex_index) const |
bool | Write (class ON_BinaryArchive &archive) const |
Static Public Member Functions | |
static bool | ContinueChainDefaultCallback (ON__UINT_PTR continue_condition, ON_SubDEdgePtr left_eptr, ON_SubDEdgePtr right_eptr) |
ON_SubDEdgeChain::ContinueChainDefaultCallback() can be used as a callback function for ON_SubDEdgeChain::RefineEdgeChains() and ON_SubDEdgeChain::MergeCrossingEdgeChains(). More... | |
static const ON_SubDEdgePtr | EdgeChainNeighbor (ON_SubDEdgePtr starting_edge, ON_ChainDirection search_direction, ON_SubD::ChainType chain_type) |
static const ON_SubDEdgePtr | EdgeChainNeighbor (ON_SubDEdgePtr starting_edge, ON_ChainDirection search_direction, ON_SubD::ChainType chain_type, bool bEnableStatusCheck, ON_ComponentStatus status_pass, ON_ComponentStatus status_fail) |
static ON_NurbsCurve * | GetEdgeSurfaceCurve (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain, unsigned int *converted_count, ON_NurbsCurve *destination) |
static ON_NurbsCurve * | GetEdgeSurfaceCurve (const ON_SubDEdgePtr *edge_chain, size_t edge_count, unsigned int *converted_count, ON_NurbsCurve *destination) |
static ON_NurbsCurve * | GetLoftCurve (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain, bool bRequireCreases, ON_NurbsCurve *destination) |
static ON_NurbsCurve * | GetLoftCurve (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain, ON_NurbsCurve *destination) |
static ON_NurbsCurve * | GetLoftCurve (const ON_SubDEdgePtr *edge_chain, size_t edge_count, bool bReequireCreases, ON_NurbsCurve *destination) |
static ON_NurbsCurve * | GetLoftCurve (const ON_SubDEdgePtr *edge_chain, size_t edge_count, ON_NurbsCurve *destination) |
static bool | GetSideComponents (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain, unsigned relative_side, ON_SimpleArray< ON_SubDComponentPtr > &side_components) |
static bool | IsClosed (const ON_SimpleArray< ON_SubDEdgePtr > &edges) |
Returns true if edges[] has 3 or more edges, the edges form a single chain, and the chain begins and ends at the same vertex. More... | |
static bool | IsClosed (size_t edge_count, const ON_SubDEdgePtr *edges) |
Returns true if edges[] has 3 or more edges, the edges form a single chain, and the chain begins and ends at the same vertex. More... | |
static bool | IsSingleEdgeChain (const ON_SimpleArray< ON_SubDEdgePtr > &edges) |
static bool | IsSingleEdgeChain (const ON_SimpleArray< ON_SubDEdgePtr > &edges, bool &bIsClosed, bool &bIsSorted) |
static bool | IsValidEdgeChain (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chain, bool bCheckForDuplicateEdges) |
static bool | IsValidEdgeChain (const ON_SubDEdgePtr *edge_chain, size_t edge_count, bool bCheckForDuplicateEdges) |
static unsigned | MergeCrossingEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &edge_chains, ON__UINT_PTR callback_context, bool(*continue_chain_callback_function)(ON__UINT_PTR, ON_SubDEdgePtr, ON_SubDEdgePtr), ON_SimpleArray< ON_SubDEdgePtr > &merged_edge_chains) |
Merge crossing edge chains returned by the ON_SubDEdgeChain::SortEdgesIntoEdgeChains() or ON_SubDEdgeChain::RefineEdgeChains() functions. ON_SubDEdgeChain::SortEdgesIntoEdgeChains() unconditionally sorts breaks edge chains at vertices where 3 or more edges meet. More... | |
static unsigned int | OrientEdgesIntoEdgeChains (const ON_SimpleArray< const ON_SubDEdge * > &edges, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains) |
static unsigned int | OrientEdgesIntoEdgeChains (const ON_SimpleArray< ON_SubDComponentPtr > &edges, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains) |
static unsigned int | OrientEdgesIntoEdgeChains (const ON_SubD &subd, const ON_SimpleArray< ON_COMPONENT_INDEX > &edges, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains) |
static unsigned | RefineEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &unconditional_edge_chains, bool bOrdinarySmoothChains, bool bOrdinaryCreaseChains, ON_SimpleArray< ON_SubDEdgePtr > &refined_edge_chains) |
Refine unconditional edge chains returned by the ON_SubDEdgeChain::SortEdgesIntoEdgeChains() functions. ON_SubDEdgeChain::SortEdgesIntoEdgeChains() unconditionally sorts the input edges into edge chains; ending at where vertices where there the number of candidates for the next edge is zero or two or more. More... | |
static unsigned | RefineEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &unconditional_edge_chains, ON__UINT_PTR callback_context, bool(*continue_chain_callback_function)(ON__UINT_PTR, ON_SubDEdgePtr, ON_SubDEdgePtr), ON_SimpleArray< ON_SubDEdgePtr > &refined_edge_chains) |
Refine unconditional edge chains returned by the ON_SubDEdgeChain::SortEdgesIntoEdgeChains() functions. ON_SubDEdgeChain::SortEdgesIntoEdgeChains() unconditionally sorts the input edges into edge chains ending at where vertices where there the number of candidates for the next edge is zero or two or more. In particular, the unconditionally sorted chains may contain mixed edge tags and have extraordinary vertices as interior vertices. More... | |
static void | ReverseEdgeChain (ON_SimpleArray< ON_SubDEdgePtr > &edge_chain) |
static void | ReverseEdgeChain (ON_SubDEdgePtr *edge_chain, size_t edge_count) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< const ON_SubDEdge * > &unsorted_edges, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< const ON_SubDEdge * > &unsorted_edges, unsigned int minimum_chain_length, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains) |
7.x SDK prservation - calls above with bIgnoreCorners = false More... | |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< const ON_SubDEdge * > &unsorted_edges, unsigned int minimum_chain_length, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains, const bool bIgnoreCorners) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< ON_SubDComponentPtr > &unsorted_edges, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< ON_SubDComponentPtr > &unsorted_edges, unsigned int minimum_chain_length, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &unsorted_edges, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &unsorted_edges, unsigned int minimum_chain_length, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains) |
7.x SDK prservation - calls above with bIgnoreCorners = false More... | |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SimpleArray< ON_SubDEdgePtr > &unsorted_edges, unsigned int minimum_chain_length, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains, const bool bIgnoreCorners) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SubD &subd, const ON_SimpleArray< ON_COMPONENT_INDEX > &unsorted_edges, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SubD &subd, const ON_SimpleArray< ON_COMPONENT_INDEX > &unsorted_edges, unsigned int minimum_chain_length, ON_SimpleArray< ON_SubDEdgePtr > &edge_chains) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SubDEdge *const *unsorted_edges, unsigned unsorted_edge_count, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
static unsigned int | SortEdgesIntoEdgeChains (const ON_SubDEdgePtr *unsorted_edges, unsigned unsorted_edge_count, ON_SimpleArray< ON_SubDEdgePtr > &sorted_edges) |
Static Public Attributes | |
static const ON_SubDEdgeChain | Empty |
|
default |
|
default |
|
default |
unsigned int ON_SubDEdgeChain::AddAllNeighbors | ( | ON_ChainDirection | direction, |
ON_SubD::ChainType | chain_type | ||
) |
unsigned int ON_SubDEdgeChain::AddEdge | ( | const ON_SubDEdge * | edge | ) |
unsigned int ON_SubDEdgeChain::AddOneNeighbor | ( | ON_ChainDirection | direction, |
ON_SubD::ChainType | chain_type | ||
) |
unsigned int ON_SubDEdgeChain::BeginEdgeChain | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | subd_ref, | ||
const ON_SimpleArray< const ON_SubDEdge * > & | initial_edge_chain | ||
) |
Parameters: persistent_subd_id - [in] If this edge chain needs to persist in a 3dm archive, then persistent_subd_id should identify the subd in its current context. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). If the edge chain is being used in a runtime context and will not be saved in a 3dm archive or otherwise serialized, then persistent_subd_id can be ON_nil_uuid.
unsigned int ON_SubDEdgeChain::BeginEdgeChain | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | subd_ref, | ||
const ON_SimpleArray< ON_SubDEdgePtr > & | initial_edge_chain | ||
) |
Parameters: persistent_subd_id - [in] If this edge chain needs to persist in a 3dm archive, then persistent_subd_id should identify the subd in its current context. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). If the edge chain is being used in a runtime context and will not be saved in a 3dm archive or otherwise serialized, then persistent_subd_id can be ON_nil_uuid.
unsigned int ON_SubDEdgeChain::BeginEdgeChain | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | subd_ref, | ||
const ON_SubDEdge *const * | initial_edge_chain, | ||
size_t | edge_count | ||
) |
Parameters: persistent_subd_id - [in] If this edge chain needs to persist in a 3dm archive, then persistent_subd_id should identify the subd in its current context. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). If the edge chain is being used in a runtime context and will not be saved in a 3dm archive or otherwise serialized, then persistent_subd_id can be ON_nil_uuid.
unsigned int ON_SubDEdgeChain::BeginEdgeChain | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | subd_ref, | ||
const ON_SubDEdge * | initial_edge | ||
) |
Parameters: persistent_subd_id - [in] If this edge chain needs to persist in a 3dm archive, then persistent_subd_id should identify the subd in its current context. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). If the edge chain is being used in a runtime context and will not be saved in a 3dm archive or otherwise serialized, then persistent_subd_id can be ON_nil_uuid.
unsigned int ON_SubDEdgeChain::BeginEdgeChain | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | subd_ref, | ||
const ON_SubDEdgePtr * | initial_edge_chain, | ||
size_t | edge_count | ||
) |
Parameters: persistent_subd_id - [in] If this edge chain needs to persist in a 3dm archive, then persistent_subd_id should identify the subd in its current context. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). If the edge chain is being used in a runtime context and will not be saved in a 3dm archive or otherwise serialized, then persistent_subd_id can be ON_nil_uuid.
unsigned int ON_SubDEdgeChain::BeginEdgeChain | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | subd_ref, | ||
ON_SubDEdgePtr | initial_edge | ||
) |
Parameters: persistent_subd_id - [in] If this edge chain needs to persist in a 3dm archive, then persistent_subd_id should identify the subd in its current context. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). If the edge chain is being used in a runtime context and will not be saved in a 3dm archive or otherwise serialized, then persistent_subd_id can be ON_nil_uuid.
void ON_SubDEdgeChain::ClearEdgeChain | ( | ) |
|
static |
ON_SubDEdgeChain::ContinueChainDefaultCallback() can be used as a callback function for ON_SubDEdgeChain::RefineEdgeChains() and ON_SubDEdgeChain::MergeCrossingEdgeChains().
Edge chain topology check This check is alsways performed. If all edge and vertex pointers are not nullptr, and left_eptr.RelativeVertex(1) == right_eptr.RelativeVertex(0), and left_eptr.RelativeVertex(0), left_eptr.RelativeVertex(1, right_eptr.RelativeVertex(1) are distinct, then the edge chain topology check passes. If the chain topology check fails, then no further checks are performed.
If the valid topology check passes, the continue_condition is treated as a bitfield. Set bits cause additional checks to be performed.
bit 1: Same face count check: Passes when both edges have the same number of faces.
bit 2: Same EdgeIsSmooth() check: Passes when left_ptr.EdgeIsSmooth() == right_eptr.EdgeIsSmooth().
bit 4: Same EdgeIsSharp() check: Passes when left_ptr.EdgeIsSharp() == right_eptr.EdgeIsSharp().
bit 8: EqualEndSharpness() check: Passes when ON_SubDEdgeSharpness::EqualEndSharpness(left_eptr,right_eptr) is true.
bits 16, 32, 64, 128: Vertex tag filter check. If none of these bits are set, this check is not performed. If any of these bits are set, they specify a filter for a vertex tag check. If bit 16 is set and the common vertex tag is ON_SubDVertexTag::Smooth, the check passes. If bit 32 is set and the common vertex tag is ON_SubDVertexTag::Crease, the check passes. If bit 64 is set and the common vertex tag is ON_SubDVertexTag::Dart, the check passes. If bit 128 is set and the common vertex tag is ON_SubDVertexTag::Corner, the check passes. Otherwise the vertex tag filter check fails.
bit 256: opposite edge check If the common vertex has 4 faces and 4 edges and left_ept and right_eptr are opposite edges, the opposited edge check passes.
If the chain topology check passes and all tests specified by set bits pass, then true is returned.
Make no modifications including Mark() and MarkBits() modifications in the callback.
continue_condition | |
left_eptr | |
right_eptr |
const ON_3dPoint ON_SubDEdgeChain::ControlNetPoint | ( | int | vertex_index | ) | const |
void ON_SubDEdgeChain::Dump | ( | class ON_TextLog & | text_log | ) | const |
const ON_SubDEdge* ON_SubDEdgeChain::Edge | ( | int | edge_index | ) | const |
const ON_SimpleArray<ON_SubDEdgePtr>& ON_SubDEdgeChain::EdgeChain | ( | ) | const |
Returns: Current EdgeChain
|
static |
Edge chain tools Description: Get the neighboring link in an edge chain. Parameters: starting_edge - [in] search_direction - [in] ON_ChainDirection::Previous or ON_ChainDirection::Next. The search direction is relative to this->EdgeDirection(). chain_type - [in] Determines what edge/vertex tag conditions must be satisfied by the neighbor. Returns: The next or previous edge in the chain if it exists. Otherwise, nullptr is returned. Remarks: When multiple edges are candidates, there is a bias to preserve smooth/crease and a bias to preserve face count. If the biases don't reduce the list of candidates to one or bStopAtBreak is true and a creaase/smooth break is encountered, then ON_SubDEdgePtr::Null is returned.
|
static |
Description: Get the neighboring link in an edge chain. Parameters: starting_edge - [in] search_direction - [in] ON_ChainDirection::Previous or ON_ChainDirection::Next. The search direction is relative to this->EdgeDirection(). chain_type - [in] Determines what edge/vertex tag conditions must be satisfied by the neighbor. bEnableStatusCheck - [in] status_pass - [in] status_fail - [in] If bEnableStatusFilter is false, then no status checks are performed. If bEnableStatusFilter is true, ON_ComponentStatus::StatusCheck(candidate_edge->m_status,status_pass,status_fail) must be true for candidate_edge to be returned. Returns: The next or previous edge in the chain if it exists. Otherwise, nullptr is returned. Remarks: When multiple edges are candidates, there is a bias to preserve smooth/crease and a bias to preserve face count. If the biases don't reduce the list of candidates to one or bStopAtBreak is true and a creaase/smooth break is encountered, then ON_SubDEdgePtr::Null is returned.
unsigned int ON_SubDEdgeChain::EdgeCount | ( | ) | const |
const ON_SubDEdgePtr ON_SubDEdgeChain::EdgePtr | ( | int | edge_index | ) | const |
ON_NurbsCurve* ON_SubDEdgeChain::EdgeSurfaceCurve | ( | ON_NurbsCurve * | destination | ) | const |
const ON_3dPoint ON_SubDEdgeChain::FirstControlNetPoint | ( | ) | const |
const ON_SubDEdge* ON_SubDEdgeChain::FirstEdge | ( | ) | const |
const ON_SubDEdgePtr ON_SubDEdgeChain::FirstEdgePtr | ( | ) | const |
const ON_SubDVertex* ON_SubDEdgeChain::FirstVertex | ( | ) | const |
|
static |
Parameters: edge_count - [in] edge_chain[] - [in] A chain of contiguous edges. The conversion into a NURBS curve will stop if a link is not contiguous with the previous link. converted_count = [in] If not nullptr, the number of edges converted into the returned curve is returned. ON_NurbsCurve* destination - [in] If not nullptr, the limit curve is created in this instance. Returns: A NURBS curve that lies on the limit surface edges. The domain is (0,edge_count+1) and the subdomain for the i-th edge is (i,i+1).
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
See above.
bool ON_SubDEdgeChain::GetSideComponents | ( | unsigned | relative_side, |
ON_SimpleArray< ON_SubDComponentPtr > & | side_components | ||
) | const |
Description: Get the edges and faces on a specified side of the edge chain. Parameters: relative_side - [in] 0: Get edges and faces on the ON_SubDEdgePtr::RelativeFace(0) side (left). 1: Get edges and faces on the ON_SubDEdgePtr::RelativeFace(1) side (right).
side_components - [out] side_components[] is a sequence of made of vertices, edges, and faces that record the edges and faces that are on the specified side of the edge chain.
When a vertex is in side_components[], ON_SubDComponentPtr.Vertex() is not nullptr and the vertex is between two conscutive edges in the edge chain.
When an edge is in side_components[], ON_SubDComponentPtr.EdgePtr() is not nullptr, the edge is on the specified side of the edge chain (not in the edge chain), and ON_SubDComponentPtr.EdgePtr().RelativeVertex(0) is a vertex on the edge chain.
When a face is in side_components[], ON_SubDComponentPtr.Face() is not nullptr, then at least one vertex of f is part of the edge chain and f is on the specified side of the edge chain.
If a vertex v is in side_components[], then it is preceded and followed by the same face (...f,v,f,...), there are consecutive edges in the edge chain (...e0,e1,...), and e0 and e1 are consecutive edges in f's boundary.
If ...eptr0,f,eptr1,... is in side_components[], v0 = eptr0.RelativeVertex(0), v1 = eptr0.RelativeVertex(0), and v0 == v1, then eptr0 and eptr1 are consecutive edges in the boundary of f and v0==v1 is a vertex in the edge chain.
If ...eptr0,f,eptr1,... is in side_components[], v0 = eptr0.RelativeVertex(0), v1 = eptr0.RelativeVertex(0), and v0 != v1, then there is an edge c from v0 to v1 that is in the edge chain and eptr0,c,eptr1 are consecutive edges in the boundary of f.
If ...eptr0,f,v,... is in side_components[] and v0 = eptr0.RelativeVertex(0), and then v0 != v, then there is an edge c from v0 to v that is in the edge chain, and eptr0,c are consecutive edges in the boundary of f.
If ...v,f,eptr1,... is in side_components[] and v1 = eptr1.RelativeVertex(0), and then v != v1, then there is an edge c from v to v1 that is in the edge chain, and c,eptr1 consecutive edges in the boundary of f.
Remarks: If the SubD is not an oriented manifold along the entire side of the chain, then there may be gaps in chain_side[]. When there are face fans at a chain vertex, there will be faces that do not have an edge on the chain.
const ON_SHA1_Hash ON_SubDEdgeChain::Hash | ( | ) | const |
Returns: A SHA1 hash of the edge and vertex ids. Useful for determining when two edge chains from different subds (one generally a modified copy) involve the same edges and vertices.
bool ON_SubDEdgeChain::HasPersistentEdgeIds | ( | ) | const |
bool ON_SubDEdgeChain::HasRuntimeEdgePtrs | ( | ) | const |
bool ON_SubDEdgeChain::InChain | ( | const ON_SubDEdge * | edge | ) | const |
bool ON_SubDEdgeChain::InChain | ( | const ON_SubDEdgePtr | edge_ptr | ) | const |
bool ON_SubDEdgeChain::InChain | ( | const ON_SubDVertex * | vertex | ) | const |
|
static |
Returns true if edges[] has 3 or more edges, the edges form a single chain, and the chain begins and ends at the same vertex.
edges |
|
static |
Returns true if edges[] has 3 or more edges, the edges form a single chain, and the chain begins and ends at the same vertex.
edge_count | Number of elements in the edges[] array. |
edges |
bool ON_SubDEdgeChain::IsClosedLoop | ( | ) | const |
Returns: True if the edge chain has 3 or more edges that form a closed loop.
bool ON_SubDEdgeChain::IsConvexLoop | ( | bool | bStrictlyConvex | ) | const |
Parameters: bStrictlyConvex - [in] If true, then a colinear pair of edges is not considered convex. Returns: True if the edge chain has 3 or more edges that forma a convex loop.
|
static |
Description: Determine if the array of ON_SubDEdgePtrs in edges[] can be sorted into a single edge chain. Parameters: edges - [in] Set of edges to test. Returns: If the array of edges[] can be sorted into a single edge chain with no self intersections, then true is returned. Otherwise false is returned. Remarks: This test usesthe MarkBits() values on the edges and vertices and restores the values to the input state. Multiple threads may not simultaneously use any SubD tools on that rely on markbits on the same ON_SubD.
|
static |
Description: Determine if the array of ON_SubDEdgePtrs in edges[] can be sorted into a single edge chain. Parameters: edges - [in] Set of edges to test. bIsClosed - [out] If true is returned and edges[] sorts into a closed edge chain, then bIsClosed is true. Otherwise bIsClosed is false. bIsSorted - [out] If true is returned and edges[] is currently sorted into an edge chain, then bIsSorted is true. Otherwise bIsSorted is false. Returns: If the array of edges[] can be sorted into a single edge chain with no self intersections, then true is returned. Otherwise false is returned. Remarks: This test usesthe MarkBits() values on the edges and vertices and restores the values to the input state. Multiple threads may not simultaneously use any SubD tools on that rely on markbits on the same ON_SubD.
|
static |
Description: Checks that all edge and vertex pointers are not nullptr and that adjacent edges in the list share the same vertex. Parameters: edge_chain - [in] Edge chain to test bCheckForDuplicateEdges - [in] If bCheckForDuplicateEdges true, then false is returned if there are duplicate edges or duplicate interior vertices. Returns: True if edge_chain[] is valid.
|
static |
Description: Checks that all edge and vertex pointers are not nullptr and that adjacent edges in the list share the same vertex. Parameters: edge_count - [in] Number of elements in edge_chain[] to test. edge_chain - [in] Edge chain to test bCheckForDuplicateEdges - [in] If bCheckForDuplicateEdges true, then false is returned if there are duplicate edges or duplicate interior vertices. Returns: True if edge_chain[] is valid.
const ON_3dPoint ON_SubDEdgeChain::LastControlNetPoint | ( | ) | const |
const ON_SubDEdge* ON_SubDEdgeChain::LastEdge | ( | ) | const |
const ON_SubDEdgePtr ON_SubDEdgeChain::LastEdgePtr | ( | ) | const |
const ON_SubDVertex* ON_SubDEdgeChain::LastVertex | ( | ) | const |
ON_NurbsCurve* ON_SubDEdgeChain::LoftCurve | ( | ON_NurbsCurve * | destination | ) | const |
Description: Get a NURBS curve that is appropriate for lofting SubDs. Parameters: destination - [in] If not nullptr, then the curve is created in this instance. Returns: A pointer to the curve or nullptr if the edge is not valid.
|
static |
Merge crossing edge chains returned by the ON_SubDEdgeChain::SortEdgesIntoEdgeChains() or ON_SubDEdgeChain::RefineEdgeChains() functions. ON_SubDEdgeChain::SortEdgesIntoEdgeChains() unconditionally sorts breaks edge chains at vertices where 3 or more edges meet.
In some contexts, it is often desirable to have edge chains cross each other at 4 valent vertices. ON_SubDEdgeChain::MergeCrossingEdgeChains() search for 4 valent vertices where 4 input chains terminate and uses the call back function to determine if the chains opposite each other should be merged inot a single chain.
To merge edge chains in place, pass the same array as both edge chains parameters.
edge_chains | |||
callback_context | |||
continue_chain_callback_function | The callback function continue_chain_callback_function(callback_context,left_etpr,right_etpr) is called with pairs of crossing edges at the ends of input chains to see if they should be merged into the same chain. If the callback function returns true, input chains are merged. Often times, ON_SubDEdgeChain::ContinueChainDefaultCallback can be used as the callback function. If continue_chain_callback_function is nullptr, then ON_SubDEdgeChain::ContinueChainDefaultCallback() is used and callback_context is passed as the continue_condition parameter.
|
|
default |
|
static |
Description: Orient edges[] into edge chains preserving the order of edges[]. Returns: Number of chains in edge_chains[].
|
static |
Description: Orient edges[] into edge chains preserving the order of edges[]. Returns: Number of chains in edge_chains[].
|
static |
Description: Orient edges[] into edge chains preserving the order of edges[]. Returns: Number of chains in edge_chains[].
const ON_UUID ON_SubDEdgeChain::PersistentSubDId | ( | ) | const |
Returns: The persistent id of the parent subd object. If the context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If the context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId().
bool ON_SubDEdgeChain::Read | ( | class ON_BinaryArchive & | archive | ) |
|
static |
Refine unconditional edge chains returned by the ON_SubDEdgeChain::SortEdgesIntoEdgeChains() functions. ON_SubDEdgeChain::SortEdgesIntoEdgeChains() unconditionally sorts the input edges into edge chains; ending at where vertices where there the number of candidates for the next edge is zero or two or more.
In many contexts, it is often necessary to further refine the unconditionally sorted edge chains. RefineEdgeChains() refines the unconditional edge chains into chains that have homogeneous edge tags and continuous sharpness. When bOrdinarySmoothChains is true, the interior vertices of smooth chains will always be smooth vertices with 4 edges and faces. When bOrdinaryCreaseChains is true, the interior vertices of crease chains will alwasys be crease vertices.
To clean edge chains in place, pass the same array as both edge chains parameters.
unconditional_edge_chains | ON_SubDEdgePtr::Null elements separate the edge chains. Typically this arrary is the output from a call to ON_SubDEdgeChain::SortEdgesIntoEdgeChains(). |
bOrdinarySmoothChains | |
bOrdinaryCreaseChains | |
refined_edge_chains | The refined edge chains are appended to refined_edge_chains[]. ON_SubDEdgePtr::Null elements separate the edge chains and refined_edge_chains[] ends with a ON_SubDEdgePtr::Null. |
|
static |
Refine unconditional edge chains returned by the ON_SubDEdgeChain::SortEdgesIntoEdgeChains() functions. ON_SubDEdgeChain::SortEdgesIntoEdgeChains() unconditionally sorts the input edges into edge chains ending at where vertices where there the number of candidates for the next edge is zero or two or more. In particular, the unconditionally sorted chains may contain mixed edge tags and have extraordinary vertices as interior vertices.
In many contexts, it is often necessary to further refine the unconditionally sorted edge chains. The callback function is used to determine where the unconditional chain is refined.
To refine edge chains in place, pass the same array as both edge chains parameters.
unconditional_edge_chains | |||
callback_context | |||
continue_chain_callback_function | The callback function continue_chain_callback_function(callback_context,left_etpr,right_etpr) is called with pairs of unconditionally chained edges. If the callback function return false, the unconditional chain is broken between the edges. If continue_chain_callback_function is nullptr, then ON_SubDEdgeChain::ContinueChainDefaultCallback() is used and callback_context is passed as the continue_condition parameter.
|
unsigned int ON_SubDEdgeChain::RemoveEdges | ( | const ON_SubDEdge * | first_edge, |
const ON_SubDEdge * | last_edge | ||
) |
void ON_SubDEdgeChain::Reverse | ( | ) |
|
static |
Description: Reverse the orientation of the elements and the order of the elements in the edge_chain[] array. Parameters: edge_chain - [in/out]
|
static |
Description: Reverse the orientation of the elements and the order of the elements in the edge_chain[] array. Parameters: edge_count - [in] Number of elements in edge_chain[] edge_chain - [in/out]
bool ON_SubDEdgeChain::SetPersistentEdgeIdsFromRuntimeEdgePtrs | ( | ) | const |
bool ON_SubDEdgeChain::SetRuntimeEdgePtrsFromPersistentSubD | ( | ON_UUID | persistent_subd_id, |
ON_SubDRef | persistent_subd_ref | ||
) |
Description: In situations where this edge chain is being read from a 3dm archive, or a similar serialization context, this function uses the saved edge id information to initialize the runtime ON_SubDEdgePtr information. Parameters: persistent_subd_id - [in] This id is passed to insure it matches the saved persistent_subd_id. The source of the id depends on the context of the model managing the subd. If that context is an ONX_Model, then the persistent id is the ON_ModelGeometryComponent.Id(). If that context is a CRhinoDoc, then the persistent id is CRhinoObject.ModelObjectId(). Returns: True if successful. False if not successful.
void ON_SubDEdgeChain::SetStatusCheck | ( | bool | bEnableStatusCheck, |
ON_ComponentStatus | status_check_pass, | ||
ON_ComponentStatus | status_check_fail | ||
) |
|
static |
Description: Unconditionally sort edges into chains.
Parameters: unsorted_edges - [in] If unsorted_edges[] contains three or more edges that share a common vertex, no edge chain will pass through that vertex.
sorted_edges - [out] The sorted_edges[] has the edges grouped into edge chains. A value of ON_SubDEdgePtr::Null is at the end of every chain including the last chain.
In an edge chain subsequent edges share a common vertex; i.e. sorted_edges[i].RelativeVertex(1) == sorted_edges[i+1].RelativeVertex(0). Returns: Number of chains in edge_chains[]. Remarks: This version of SortEdgesIntoEdgeChains() uses MarkBits() on the edges and vertices in unsorted_edges[]. The output values of MarkBits() on these components are zero. Multiple threads may not simultaneously use any SubD tools on that rely on markbits on the same ON_SubD.
|
static |
7.x SDK prservation - calls above with bIgnoreCorners = false
|
static |
Description: Sort edges into a chains
Parameters: unsorted_edges - [in] To sort an array in place, pass the same array as both parameters. If unsorted_edges[] contains three or more edges that share a common vertex, then all of the edges that share that vertex are ignored. The edges can be from one or more SubDs.
unsigned int minimum_chain_length - [in] minimum number of edges to consider for a chain.
edge_chains - [out] The edge_chains[] has the edges grouped into edge chains.
In an edge chain subsequent edges share a common vertex; i.e. edge_chains[i].RelativeVertex(1) == edge_chains[i+1].RelativeVertex(0).
When edge_chains[i].RelativeVertex(1) != edge_chains[i+1].RelativeVertex(0), a chain ends at edge_chains[i] and another begins at edge_chains[i+1].
The first edge in every chain has the same orientation as the input edge from edge_chains[].
bIgnoreCorners - [in] If true the chains are not split at corner vertices
Returns: Number of chains in edge_chains[].
Remarks: When the orientation of the input edges is not intentionally set, the versions of SortEdgesIntoEdgeChains() above without a minimum_chain_length variable are a better choice.
|
static |
Description: Unconditionally sort edges into chains.
Parameters: unsorted_edges - [in] If unsorted_edges[] contains three or more edges that share a common vertex, no edge chain will pass through that vertex.
sorted_edges - [out] The sorted_edges[] has the edges grouped into edge chains. A value of ON_SubDEdgePtr::Null is at the end of every chain including the last chain.
In an edge chain subsequent edges share a common vertex; i.e. sorted_edges[i].RelativeVertex(1) == sorted_edges[i+1].RelativeVertex(0). Returns: Number of chains in edge_chains[]. Remarks: This version of SortEdgesIntoEdgeChains() uses MarkBits() on the edges and vertices in unsorted_edges[]. The output value of MarkBits() on these components is zero. Multiple threads may not simultaneously use any SubD tools on that rely on markbits on the same ON_SubD.
|
static |
Description: Sort edges into a chains
Parameters: unsorted_edges - [in] To sort an array in place, pass the same array as both parameters. If unsorted_edges[] contains three or more edges that share a common vertex, then all of the edges that share that vertex are ignored. The edges can be from one or more SubDs.
unsigned int minimum_chain_length - [in] minimum number of edges to consider for a chain.
edge_chains - [out] The edge_chains[] has the edges grouped into edge chains.
In an edge chain subsequent edges share a common vertex; i.e. edge_chains[i].RelativeVertex(1) == edge_chains[i+1].RelativeVertex(0).
When edge_chains[i].RelativeVertex(1) != edge_chains[i+1].RelativeVertex(0), a chain ends at edge_chains[i] and another begins at edge_chains[i+1].
The first edge in every chain has the same orientation as the input edge from edge_chains[].
Returns: Number of chains in edge_chains[].
Remarks: When the orientation of the input edges is not intentionally set, the versions of SortEdgesIntoEdgeChains() above without a minimum_chain_length variable are a better choice.
|
static |
Edge chain tools Description: Unconditionally sort edges into chains.
Parameters: unsorted_edges - [in] If unsorted_edges[] contains three or more edges that share a common vertex, no edge chain will pass through that vertex. To sort an array in place, pass the same array as both parameters.
sorted_edges - [out] The sorted_edges[] has the edges grouped into edge chains. A value of ON_SubDEdgePtr::Null is at the end of every chain including the last chain.
In an edge chain subsequent edges share a common vertex; i.e. sorted_edges[i].RelativeVertex(1) == sorted_edges[i+1].RelativeVertex(0). Returns: Number of chains in edge_chains[]. Remarks: This version of SortEdgesIntoEdgeChains() uses MarkBits() on the edges and vertices in unsorted_edges[]. The output values of MarkBits() on these components are zero. Multiple threads may not simultaneously use any SubD tools on that rely on markbits on the same ON_SubD.
|
static |
7.x SDK prservation - calls above with bIgnoreCorners = false
|
static |
Description: Sort edges into a chains
Parameters: unsorted_edges - [in] To sort an array in place, pass the same array as both parameters. If unsorted_edges[] contains three or more edges that share a common vertex, then all of the edges that share that vertex are ignored. The edges can be from one or more SubDs.
unsigned int minimum_chain_length - [in] minimum number of edges to consider for a chain.
edge_chains - [out] The edge_chains[] has the edges grouped into edge chains.
In an edge chain subsequent edges share a common vertex; i.e. edge_chains[i].RelativeVertex(1) == edge_chains[i+1].RelativeVertex(0).
When edge_chains[i].RelativeVertex(1) != edge_chains[i+1].RelativeVertex(0), a chain ends at edge_chains[i] and another begins at edge_chains[i+1].
Reasonable effort is made to keep the first edge in every chain with the same orientation as the input edge from edge_chains[]. However, this is not possible in every case, for example if the input is two edges sharing the same starting vertex.
NB: Reasonable effort is made to keep the corner vertices on the exterior of the chains, however some chains will have corners in their interior, especially closed chains.
bIgnoreCorners - [in] If true the chains are not split at corner vertices
Returns: Number of chains in edge_chains[].
Remarks: When the orientation of the input edges is not intentionally set, the versions of SortEdgesIntoEdgeChains() above without a minimum_chain_length variable are a better choice.
|
static |
Description: Unconditionally sort edges into chains.
Parameters: unsorted_edges - [in] If unsorted_edges[] contains three or more edges that share a common vertex, no edge chain will pass through that vertex.
sorted_edges - [out] The sorted_edges[] has the edges grouped into edge chains. A value of ON_SubDEdgePtr::Null is at the end of every chain including the last chain.
In an edge chain subsequent edges share a common vertex; i.e. sorted_edges[i].RelativeVertex(1) == sorted_edges[i+1].RelativeVertex(0). Returns: Number of chains in edge_chains[]. Remarks: This version of SortEdgesIntoEdgeChains() uses MarkBits() on the edges and vertices in unsorted_edges[]. The output value of MarkBits() on these components is zero. Multiple threads may not simultaneously use any SubD tools on that rely on markbits on the same ON_SubD.
|
static |
Description: Sort edges into a chains
Parameters: unsorted_edges - [in] To sort an array in place, pass the same array as both parameters. If unsorted_edges[] contains three or more edges that share a common vertex, then all of the edges that share that vertex are ignored. The edges can be from one or more SubDs.
unsigned int minimum_chain_length - [in] minimum number of edges to consider for a chain.
edge_chains - [out] The edge_chains[] has the edges grouped into edge chains.
In an edge chain subsequent edges share a common vertex; i.e. edge_chains[i].RelativeVertex(1) == edge_chains[i+1].RelativeVertex(0).
When edge_chains[i].RelativeVertex(1) != edge_chains[i+1].RelativeVertex(0), a chain ends at edge_chains[i] and another begins at edge_chains[i+1].
The first edge in every chain has the same orientation as the input edge from edge_chains[].
Returns: Number of chains in edge_chains[].
Remarks: When the orientation of the input edges is not intentionally set, the versions of SortEdgesIntoEdgeChains() above without a minimum_chain_length variable are a better choice.
|
static |
|
static |
bool ON_SubDEdgeChain::StatusCheck | ( | const ON_SubDEdge * | edge | ) | const |
bool ON_SubDEdgeChain::StatusCheckEnabled | ( | ) | const |
const ON_ComponentStatus ON_SubDEdgeChain::StatusCheckFail | ( | ) | const |
const ON_ComponentStatus ON_SubDEdgeChain::StatusCheckPass | ( | ) | const |
const ON_SubD& ON_SubDEdgeChain::SubD | ( | ) | const |
const ON_SubDRef ON_SubDEdgeChain::SubDRef | ( | ) | const |
const ON_SubDVertex* ON_SubDEdgeChain::Vertex | ( | int | vertex_index | ) | const |
bool ON_SubDEdgeChain::Write | ( | class ON_BinaryArchive & | archive | ) | const |
|
static |