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

#include <opennurbs_topology.h>

Public Types

enum  : unsigned int { Damaged = 0x80000000U }
 
enum  EdgeAttributes : unsigned int {
  Open = 1, Closed = 2, ZeroLength = 4, NonzeroLength = 8,
  Wire = 16, Boundary = 32, Interior = 64, Nonmanifold = 128,
  InteriorOriented = 256, InteriorNotOriented = 512, InteriorSmooth = 1024, InteriorCrease = 2048,
  InteriorTwoFaced = 4096, InteriorSeam = 8192, InteriorSlit = 16384, InteriorSharp = 32768,
  Mask = 0xFFFF
}
 

Static Public Member Functions

static bool EdgeIsEligible (unsigned int edge_attributes_filter, const class ON_SubDEdge *edge)
 Inspects edge attributes to determine if the edge is has the attributes specified by the edge_attributes_filter. More...
 
static bool EdgeIsEligible (unsigned int edge_attributes_filter, unsigned int edge_attributes)
 
static bool HasBoundary (unsigned int aggregate_edge_component_attributes)
 Inspects aggregate edge demographics to determine if there is a boundary edge. More...
 
static bool IsManifold (unsigned int aggregate_edge_component_attributes)
 Inspects aggregate edge demographics to determine if the object is a manifold, possibly with boundary. Face orientation is ignored. More...
 
static bool IsNotManifold (unsigned int aggregate_edge_component_attributes)
 Inspects aggregate edge demographics to determine if the object is a not manifold. More...
 
static bool IsNotOriented (unsigned int aggregate_edge_component_attributes)
 Inspects aggregate edge demographics to determine if the faces have a compatible orientations. More...
 
static bool IsOriented (unsigned int aggregate_edge_component_attributes)
 Inspects aggregate edge demographics to determine if the faces have a compatible orientations. More...
 
static bool IsSolid (unsigned int aggregate_edge_component_attributes)
 Inspects aggregate edge demographics to determine if every edge has exactly two faces and all the faces have a compatible orientations. More...
 

Detailed Description

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : unsigned int
Enumerator
Damaged 

summary> The Damaged bit is set when an vertex, edge, or face component has a critical data structure flaw. /summary>

◆ EdgeAttributes

ON_EdgeAttributeFlags are used to report attributes of single edge objects, like ON_SubDEdge and ON_BrepEdge, and aggregate edge demographics in objects with topology like ON_SubD, ON_Mesh and ON_Brep.

See also
ON_BrepEdge::EdgeFlags, ON_SubDEdge::EdgeFlags, ON_Brep::AggregateEdgeFlags, ON_Mesh::AggregateEdgeFlags, ON_SubD::AggregateEdgeFlags
Enumerator
Open 

summary> The Open bit is set when an edge has distinct start and end vertices. Open and Closed are mutually exclusive edge attributes. Note that an open edge can have zero length when two distinct vertices have identical locations and the edge's geometry is a zero length curve. /summary> summary> The Closed bit is set when an edge begins and ends at the same vertex. Open and Closed are mutually exclusive edge attributes. Note that a closed edge can have zero length or nonzero length. /summary>

Closed 

summary> The ZeroLength edge has zero length. It can be open or closed. ZeroLength and NonzeroLength are mutually exclusive edge attributes. /summary>

ZeroLength 

summary> The NonzeroLength edge has non zero length. It can be open or closed. ZeroLength and NonzeroLength are mutually exclusive edge attributes. /summary>

NonzeroLength 

summary> The Wire edge has no faces. Wire, Boundary, Interior, and Nonmanifold are mutually exclusive edge attributes. /summary>

Wire 

summary> The Boundary edge has one face. Wire, Boundary, Interior, and Nonmanifold are mutually exclusive edge attributes. /summary>

Boundary 

summary> The Interior edge has two faces. Wire, Boundary, Interior, and Nonmanifold are mutually exclusive edge attributes. /summary>

Interior 

summary> The Nonmanifold edge has three or more faces. Wire, Boundary, Interior, and Nonmanifold are mutually exclusive edge attributes. /summary>

Nonmanifold 

summary> The InteriorOriented edge has two faces with compatible face orientations. InteriorOriented and InteriorNotOriented are mutually exclusive interior edge attributes. /summary>

InteriorOriented 

summary> The InteriorNotOriented edge has two faces with opposite face orientations. InteriorOriented and InteriorNotOriented are mutually exclusive interior edge attributes. /summary>

InteriorNotOriented 

summary> The InteriorSmooth edge has two faces with a guaranteed surface tangent continuity. InteriorSmooth and InteriorCrease are mutually exclusive interior edge attributes. /summary>

InteriorSmooth 

summary> The InteriorCrease edge has two faces with a possible surface tangent discontinuity InteriorSmooth and InteriorCrease are mutually exclusive interior edge attributes. /summary>

InteriorCrease 

summary> The InteriorTwoFaced edge has two distinct faces. InteriorTwoFaced, InteriorSeam, and InteriorSlit are mutually exclusive interior edge attributes. /summary>

InteriorTwoFaced 

summary> The InteriorSeam edge has two faces that are identical and the edge is on the parametric boundary of the face's surface. InteriorTwoFaced, InteriorSeam, and InteriorSlit are mutually exclusive interior edge attributes. /summary> example> Parametric surfaces that are cylinders are an example of a situation where seam edges occur. /example>

InteriorSeam 

summary> The InteriorSlit edge has two faces that are identical and the edges is not a seam. InteriorTwoFaced, InteriorSeam, and InteriorSlit are mutually exclusive interior edge attributes. /summary>

InteriorSlit 

summary> The InteriorSharp edge has two faces with a guaranteed surface tangent continuity. An InteriorSharp edge is an InteriorSmooth edge with added SubD sharpness. /summary>

InteriorSharp 

summary> ON_ComponentAttributes::EdgeAttributes::Mask can be used to isolate EdgeAttributes bits from an unsigned int bit field containing other information. /summary> example> Determine if two unsigned ints have identical ON_ComponentAttributes::EdgeAttributes settings. code> unsigned int combined_flags1 = ...; unsigned int combined_flags2 = ...; unsigned int edge_flags1 = (ON_ComponentAttributes::EdgeAttributes::Mask & combined_flags1); unsigned int edge_flags2 = (ON_ComponentAttributes::EdgeAttributes::Mask & combined_flags2); if ( edge_flags1 == edge_flags1) { ... edges flags are identical ... } /code> /example>

Mask 

Member Function Documentation

◆ EdgeIsEligible() [1/2]

static bool ON_ComponentAttributes::EdgeIsEligible ( unsigned int  edge_attributes_filter,
const class ON_SubDEdge edge 
)
static

Inspects edge attributes to determine if the edge is has the attributes specified by the edge_attributes_filter.


◆ EdgeIsEligible() [2/2]

static bool ON_ComponentAttributes::EdgeIsEligible ( unsigned int  edge_attributes_filter,
unsigned int  edge_attributes 
)
static

◆ HasBoundary()

static bool ON_ComponentAttributes::HasBoundary ( unsigned int  aggregate_edge_component_attributes)
static

Inspects aggregate edge demographics to determine if there is a boundary edge.

Parameters
aggregate_edge_component_attributesValue made by bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the object.
Returns
True if there is at least one edge that has exactly one face. Otherwise, false is returned. /returns>

◆ IsManifold()

static bool ON_ComponentAttributes::IsManifold ( unsigned int  aggregate_edge_component_attributes)
static

Inspects aggregate edge demographics to determine if the object is a manifold, possibly with boundary. Face orientation is ignored.

Parameters
aggregate_edge_component_attributesValue made by bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the object.
Returns
If every edge has one or two faces, then true is returned. If bAllowBoundaryEdges is true and every edge has one or two faces, then true is returned. Otherwise, false is returned. /returns>

◆ IsNotManifold()

static bool ON_ComponentAttributes::IsNotManifold ( unsigned int  aggregate_edge_component_attributes)
static

Inspects aggregate edge demographics to determine if the object is a not manifold.

Parameters
aggregate_edge_component_attributesValue made by bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the object.
Returns
True if there is at least one edge with 3 or more faces or at least one wire edge.


◆ IsNotOriented()

static bool ON_ComponentAttributes::IsNotOriented ( unsigned int  aggregate_edge_component_attributes)
static

Inspects aggregate edge demographics to determine if the faces have a compatible orientations.

Parameters
aggregate_edge_component_attributesValue made by bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the object.
Returns
If there is an edge edge with exactly two faces and those faces have incompatible orientations, then true is returned. Otherwise, false is returned. /returns>

◆ IsOriented()

static bool ON_ComponentAttributes::IsOriented ( unsigned int  aggregate_edge_component_attributes)
static

Inspects aggregate edge demographics to determine if the faces have a compatible orientations.

Parameters
aggregate_edge_demographicsValue made by bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the object.
Returns
If for every edge edge with exactly two faces, those two faces have compatible orientations, then true is returned. Otherwise, false is returned. /returns>

◆ IsSolid()

static bool ON_ComponentAttributes::IsSolid ( unsigned int  aggregate_edge_component_attributes)
static

Inspects aggregate edge demographics to determine if every edge has exactly two faces and all the faces have a compatible orientations.


This sample shows how to determine if an ON_SubD is a solid.

ON_SubD subd = ...;
if (ON_ComponentAttributes::IsSolid(subd.AggregateEdgeComponentAttributes())
{
///< subd is a solid
...
}
Parameters
aggregate_edge_component_attributesValue made by bitwise or of ON_ComponentAttributes::EdgeAttributes values for every edge in the object.
Returns
True if every edge has exactly two faces.
See also
ON_Brep::EdgeDemographics, ON_SUbD::EdgeDemographics, ON_Mesh::EdgeDemographics, ON_ComponentAttributes::IsSolid, ON_ComponentAttributes::IsNotSolid, ON_ComponentAttributes::HasBoundary, ON_ComponentAttributes::IsOriented, ON_ComponentAttributes::IsNotOriented, ON_ComponentAttributes::IsManifold, ON_ComponentAttributes::IsNotManifold
ON_SubD
Definition: opennurbs_subd.h:5700
ON_ComponentAttributes::IsSolid
static bool IsSolid(unsigned int aggregate_edge_component_attributes)
Inspects aggregate edge demographics to determine if every edge has exactly two faces and all the fac...