Rhino C++ API  8.13
Public Member Functions | Public Attributes | List of all members
ON_MeshMarker Class Reference

#include <opennurbs_plus_mesh_marker.h>

Public Member Functions

 ON_MeshMarker ()
 
 ON_MeshMarker (const ON_MeshMarker &)
 
 ~ON_MeshMarker ()
 
void Destroy ()
 
bool MarkComponents (bool bUseTopologicalComponent, bool bProcessUnmarkedVertices, bool bProcessUnmarkedFaces)
 
bool MarkFace (int mesh_face_index, int mark_value)
 
bool MarkVertex (int mesh_vertex_index, int mark_value)
 
ON_MeshMarkeroperator= (const ON_MeshMarker &)
 
bool SetMeshInfo (const ON_Mesh *mesh)
 
bool SetMeshInfo (int V_count, const float(*V)[3], int F_count, const int(*F)[4])
 
bool SetMeshInfo (int V_count, const ON_3fPoint *V, int F_count, const ON_MeshFace *F)
 
bool ValidateMarks (bool bAllowUnmarkedVertices, bool bAllowUnmarkedFaces, int *vertex_index, int *face_index) const
 

Public Attributes

int m_deleted_face_count
 number of m_face_mark_value[] entries with negative m_mark_value More...
 
int m_deleted_vertex_count
 number of m_vertex_mark_value[] entries with negative m_mark_value More...
 
const int(* m_F )[4]
 mesh vertices More...
 
int m_F_count
 length of m_face_info[] array More...
 
int * m_face_mark_value
 array of m_F_count ints parallel to m_F[] More...
 
int m_marked_face_count
 number of m_face_mark_value[] entries with nonzero value More...
 
int m_marked_vertex_count
 number of m_vertex_mark_value[] entries with nonzero m_mark_value More...
 
int m_marking_error_count
 number of errors encountered in MarkComponents() call More...
 
int m_max_mark_value
 largest vertex mark value More...
 
const float(* m_V )[3]
 
int m_V_count
 mesh being marked More...
 
int * m_vertex_mark_value
 array of m_V_count ints parallel to m_V[] 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.

Constructor & Destructor Documentation

◆ ON_MeshMarker() [1/2]

ON_MeshMarker::ON_MeshMarker ( )

◆ ~ON_MeshMarker()

ON_MeshMarker::~ON_MeshMarker ( )

◆ ON_MeshMarker() [2/2]

ON_MeshMarker::ON_MeshMarker ( const ON_MeshMarker )

The copy constructor and operator=() use onmemdup to set the m_vertex_mark_value[] and m_face_mark_value[] arrays and copy the values of all other fields.

Member Function Documentation

◆ Destroy()

void ON_MeshMarker::Destroy ( )

Description: Deallocates m_vertex_mark_value[] and m_face_mark_value[] arrays and zeros all fields.

◆ MarkComponents()

bool ON_MeshMarker::MarkComponents ( bool  bUseTopologicalComponent,
bool  bProcessUnmarkedVertices,
bool  bProcessUnmarkedFaces 
)

Description: Transfer initial marks to connected components. Parameters: bUseTopologicalComponent - [in] If true, then vertices that are at the same location are treated as one vertex. Setting this value to true requires more time and memory to be used. The additional time expense is quick sort of m_V_count items. The additional memory expense is two integer heap arrays of length m_V_count. If false, then the vertex point information is ignored and each vertex is considered to be distinct. bProcessUnmarkedVertices - [in] A mesh may have isolated vertices (not used by a face) and some of these may not be marked by calls to MarkVertex(). When bProcessUnmarkedVertices=true, if at the end of the component marking calculation there are unmarked vertices, then a new mark value is generated and assigned to each unmarked vertex. If bProcessUnmarkedVertices=false, then vertices that are not marked by the calculation are left unmarked.
bProcessUnmarkedFaces - [in] Generally a mesh has several components and some may have no marks in them. When bProcessUnmarkedFaces=true, a new mark value is generated for one face in each unmarked component and then the entire component the face belongs to is marked with that value. When bProcessUnmarkedFaces=false, if at the end of the marking calculation there are unmarked components, then those components are left unmarked.
If you set bProcessUnmarkedFaces=false, then you must use MarkFace() or MarkVertex() to set a see mark in at least one component before calling MarkComponents(). Returns: True if mesh is successfully marked. The mark information is is returned in the members

m_vertex_mark_value[]
m_face_mark_value[]
m_marked_vertex_count
m_marked_face_count
m_deleted_vertex_count
m_deleted_face_count
m_max_mark_value

in the m_face_mark_value[] and m_vertex_mark_value[] arrays. These arrays have length m_F_count and m_V_count, respectively, and are parallel to the m_F[] and m_V[] arrays. m_marked_vertex_count is the number of non-zero (positive or negative) elements m_vertex_mark_value[]. m_marked_face_count is the number of non-zero (positive or negative) elements m_face_mark_value[]. m_deleted_face_count is the number of negative elements in m_face_mark_value[]. m_deleted_vertex_count is the number of negative elements in m_vertex_mark_value[]. The maximum mark value used is in m_max_mark_value.

MarkComponents() increments m_marking_error_count every time it encounters an error condition that it can tolerate.
If MarkComponents() returns true and m_marking_error_count is greater than 0, then exercise caution using the results.

◆ MarkFace()

bool ON_MeshMarker::MarkFace ( int  mesh_face_index,
int  mark_value 
)

Description: Initially mark faces. Parameters: mesh_face_index - [in] index of face to mark mark_value - [in] 0: unmarked >0: marked and mark will transfer to unmarked neighbors <0: treat face as deleted when marking components.

◆ MarkVertex()

bool ON_MeshMarker::MarkVertex ( int  mesh_vertex_index,
int  mark_value 
)

Description: Initially mark vertex. Parameters: mesh_vertex_index - [in] index of vertex to mark mark_value - [in] 0: unmarked >0: marked and mark will transfer to unmarked neighbors <0: treat vertex as deleted when marking components.

◆ operator=()

ON_MeshMarker& ON_MeshMarker::operator= ( const ON_MeshMarker )

◆ SetMeshInfo() [1/3]

bool ON_MeshMarker::SetMeshInfo ( const ON_Mesh mesh)

Description: Specify the mesh to be marked. Parameters: mesh - [in] V_count - [in] number of vertices. V - [in] array of vertex points. This information is used only when MarkComponents() is called with bUseTopologicalComponent=true. If you will be passing bUseTopologicalComponent=false, then you can pass a nullptr V parameter. F_count - [in] (>=1) number of faces. F - [in] Face list. Triangular faces have F[i][2]==F[i][3] or F[i].vi[2]==F[i].vi[3]. Returns: True if the mesh is valid. Remarks: This is the first step in calculating mesh component information. There are three versions of this function. You only need to call one of them one time before proceeding.

◆ SetMeshInfo() [2/3]

bool ON_MeshMarker::SetMeshInfo ( int  V_count,
const float(*)  V[3],
int  F_count,
const int(*)  F[4] 
)

◆ SetMeshInfo() [3/3]

bool ON_MeshMarker::SetMeshInfo ( int  V_count,
const ON_3fPoint V,
int  F_count,
const ON_MeshFace F 
)

◆ ValidateMarks()

bool ON_MeshMarker::ValidateMarks ( bool  bAllowUnmarkedVertices,
bool  bAllowUnmarkedFaces,
int *  vertex_index,
int *  face_index 
) const

Description: Validate results of the MeshComponents calculation. Parameters: bAllowUnmarkedVertices - [in] bAllowUnmarkedFaces - [in] vertex_index -[out] face_index - [out] If an error is found and the indices returned in vertex_index and face_index indicate where the error was found.

vi fi -1 >=0 m_face_mark_value[fi] = 0 and should be > 0 >=0 -1 m_vertex_mark_value[vi] = 0 and should be > 0 >=0 >=0 vertex vi is on face fi and the vertex and face have different mark values. Returns: True if mark values are valid. False if an error is found.

Member Data Documentation

◆ m_deleted_face_count

int ON_MeshMarker::m_deleted_face_count

number of m_face_mark_value[] entries with negative m_mark_value

◆ m_deleted_vertex_count

int ON_MeshMarker::m_deleted_vertex_count

number of m_vertex_mark_value[] entries with negative m_mark_value

◆ m_F

const int(* ON_MeshMarker::m_F)[4]

mesh vertices

◆ m_F_count

int ON_MeshMarker::m_F_count

length of m_face_info[] array

◆ m_face_mark_value

int* ON_MeshMarker::m_face_mark_value

array of m_F_count ints parallel to m_F[]

◆ m_marked_face_count

int ON_MeshMarker::m_marked_face_count

number of m_face_mark_value[] entries with nonzero value

◆ m_marked_vertex_count

int ON_MeshMarker::m_marked_vertex_count

number of m_vertex_mark_value[] entries with nonzero m_mark_value

◆ m_marking_error_count

int ON_MeshMarker::m_marking_error_count

number of errors encountered in MarkComponents() call

◆ m_max_mark_value

int ON_MeshMarker::m_max_mark_value

largest vertex mark value

◆ m_V

const float(* ON_MeshMarker::m_V)[3]

mesh vertices - used only when bUseTopologicalComponent = true is passed to MarkComponents.

◆ m_V_count

int ON_MeshMarker::m_V_count

mesh being marked

length of m_vertex_info[] array

◆ m_vertex_mark_value

int* ON_MeshMarker::m_vertex_mark_value

array of m_V_count ints parallel to m_V[]

The m_vertex_mark_value[] and m_face_mark_value[] arrays are allocated by onmalloc() when SetMeshInfo() is called and are deallocated by onfree() in ~ON_MeshMarker(). If you want to keep these arrays and deallocate them yourself using onfree(), then set the pointers to zero before ~ON_MeshMarker() is called.

mark values

0: unmarked,

0: vertex/face mark value

< 0: treat vertex/face as deleted