MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include <MsqIRel.hpp>
Public Member Functions | |
MsqIRel (iGeom_Instance geom, iRel_Instance irel_iface, iRel_PairHandle irel_instance) | |
virtual | ~MsqIRel () |
void | snap_to (Mesh::VertexHandle entity_handle, Vector3D &coordinat) const |
void | vertex_normal_at (Mesh::VertexHandle entity_handle, Vector3D &coordinate) const |
void | element_normal_at (Mesh::ElementHandle entity_handle, Vector3D &coordinate) const |
void | vertex_normal_at (const Mesh::VertexHandle *handles, Vector3D coordinates[], unsigned count, MsqError &err) const |
evaluate surface normals | |
void | closest_point (Mesh::VertexHandle handle, const Vector3D &position, Vector3D &closest, Vector3D &normal, MsqError &err) const |
evaluate closest point and normal | |
void | domain_DoF (const Mesh::VertexHandle *handle_array, unsigned short *dof_array, size_t num_vertices, MsqError &err) const |
Protected Member Functions | |
int | geom_from_mesh (Mesh::EntityHandle mesh_handle_in, iBase_EntityHandle &geom_handle_out, int &geom_dimension_out) const |
int | geom_from_mesh (Mesh::EntityHandle const *mesh_handles_in, iBase_EntityHandle *geom_handles_out, unsigned short *geom_dimensions_out, size_t count) const |
Private Attributes | |
iRel_Instance | relateIface |
iRel_PairHandle | relateInstance |
std::vector< iBase_EntityHandle > | geomHandles |
Definition at line 44 of file MsqIRel.hpp.
MBMesquite::MsqIRel::MsqIRel | ( | iGeom_Instance | geom, |
iRel_Instance | irel_iface, | ||
iRel_PairHandle | irel_instance | ||
) |
Definition at line 47 of file MsqIRel.cpp.
: MsqCommonIGeom( geom ), relateIface( relate_iface ), relateInstance( relate_instance ) { }
MBMesquite::MsqIRel::~MsqIRel | ( | ) | [virtual] |
Definition at line 52 of file MsqIRel.cpp.
{}
void MBMesquite::MsqIRel::closest_point | ( | Mesh::VertexHandle | handle, |
const Vector3D & | position, | ||
Vector3D & | closest, | ||
Vector3D & | normal, | ||
MsqError & | err | ||
) | const [virtual] |
evaluate closest point and normal
Given a position in space, return the closest position in the domain and the domain normal at that point.
entity_handle | Evaluate the subset of the domain contianing this entity |
position | Input position for which to evaluate |
closest | Closest position in the domain. |
normal | Domain normal at the location of 'closest' |
Implements MBMesquite::MeshDomain.
Definition at line 157 of file MsqIRel.cpp.
References MBMesquite::MsqCommonIGeom::closest_and_normal(), dim, geom, geom_from_mesh(), iBase_SUCCESS, ierr, INTERNAL_ERROR, MBMesquite::MsqError::INVALID_ARG, MSQ_SETERR, and MBMesquite::process_itaps_error().
{ int ierr, dim; iBase_EntityHandle geom; ierr = geom_from_mesh( handle, geom, dim ); if( iBase_SUCCESS != ierr ) { MSQ_SETERR( err )( process_itaps_error( ierr ), MsqError::INTERNAL_ERROR ); return; } if( dim != 2 ) { MSQ_SETERR( err )( "Cannot get normal for non-surface geometry", MsqError::INVALID_ARG ); return; } ierr = closest_and_normal( geom, position, closest, p_normal ); if( iBase_SUCCESS != ierr ) { MSQ_SETERR( err )( process_itaps_error( ierr ), MsqError::INTERNAL_ERROR ); return; } }
void MBMesquite::MsqIRel::domain_DoF | ( | const Mesh::VertexHandle * | handle_array, |
unsigned short * | dof_array, | ||
size_t | num_vertices, | ||
MsqError & | err | ||
) | const |
Definition at line 141 of file MsqIRel.cpp.
References MBMesquite::arrptr(), geom_from_mesh(), geomHandles, iBase_SUCCESS, ierr, INTERNAL_ERROR, MSQ_SETERR, and MBMesquite::process_itaps_error().
{ int ierr; geomHandles.resize( count ); ierr = geom_from_mesh( handle_array, arrptr( geomHandles ), dof_array, count ); if( iBase_SUCCESS != ierr ) { MSQ_SETERR( err )( process_itaps_error( ierr ), MsqError::INTERNAL_ERROR ); return; } }
void MBMesquite::MsqIRel::element_normal_at | ( | Mesh::ElementHandle | entity_handle, |
Vector3D & | coordinate | ||
) | const [virtual] |
Implements MBMesquite::MeshDomain.
Definition at line 104 of file MsqIRel.cpp.
References vertex_normal_at().
{ MsqIRel::vertex_normal_at( handle, coordinate ); }
int MBMesquite::MsqIRel::geom_from_mesh | ( | Mesh::EntityHandle | mesh_handle_in, |
iBase_EntityHandle & | geom_handle_out, | ||
int & | geom_dimension_out | ||
) | const [protected] |
Get geometric entity owning a mesh entity
Definition at line 187 of file MsqIRel.cpp.
References MBMesquite::MsqCommonIGeom::geomIFace, iBase_SUCCESS, ierr, iRel_getEntEntRelation, relateIface, and relateInstance.
Referenced by closest_point(), domain_DoF(), geom_from_mesh(), snap_to(), and vertex_normal_at().
{ // get geometric entity int ierr; iRel_getEntEntRelation( relateIface, relateInstance, (iBase_EntityHandle)mesh_ent_handle, true, &geom_handle, &ierr ); if( iBase_SUCCESS != ierr ) return ierr; // get dimension of geometric entities int one = 1, one_too = 1, *type_ptr = &geom_dim; iGeom_getArrType( geomIFace, &geom_handle, 1, &type_ptr, &one, &one_too, &ierr ); if( iBase_SUCCESS != ierr ) return ierr; return iBase_SUCCESS; }
int MBMesquite::MsqIRel::geom_from_mesh | ( | Mesh::EntityHandle const * | mesh_handles_in, |
iBase_EntityHandle * | geom_handles_out, | ||
unsigned short * | geom_dimensions_out, | ||
size_t | count | ||
) | const [protected] |
Definition at line 203 of file MsqIRel.cpp.
References dim, geom_from_mesh(), iBase_SUCCESS, and ierr.
{ int ierr, dim; for( size_t i = 0; i < count; ++i ) { ierr = geom_from_mesh( handles[i], geom_handles[i], dim ); if( iBase_SUCCESS != ierr ) return ierr; dims[i] = dim; } return iBase_SUCCESS; }
void MBMesquite::MsqIRel::snap_to | ( | Mesh::VertexHandle | entity_handle, |
Vector3D & | coordinate | ||
) | const [virtual] |
Modifies "coordinate" so that it lies on the domain to which "entity_handle" is constrained. The handle determines the domain. The coordinate is the proposed new position on that domain.
Implements MBMesquite::MeshDomain.
Definition at line 54 of file MsqIRel.cpp.
References dim, geom, geom_from_mesh(), iBase_SUCCESS, ierr, MBMesquite::MsqCommonIGeom::move_to(), and MBMesquite::process_itaps_error().
{ int ierr, dim; iBase_EntityHandle geom; ierr = geom_from_mesh( handle, geom, dim ); if( iBase_SUCCESS != ierr ) { process_itaps_error( ierr ); return; } if( dim < 3 ) { ierr = move_to( geom, coordinate ); if( iBase_SUCCESS != ierr ) { process_itaps_error( ierr ); return; } } }
void MBMesquite::MsqIRel::vertex_normal_at | ( | Mesh::VertexHandle | entity_handle, |
Vector3D & | coordinate | ||
) | const [virtual] |
Returns the normal of the domain to which "entity_handle" is constrained. For non-planar surfaces, the normal is calculated at the point on the domain that is closest to the passed in value of "coordinate". If the domain does not have a normal, or the normal cannot be determined, "coordinate" is set to (0,0,0). Otherwise, "coordinate" is set to the domain's normal at the appropriate point. In summary, the handle determines the domain. The coordinate determines the point of interest on that domain.
User should see also PatchData::get_domain_normal_at_vertex and PatchData::get_domain_normal_at_element .
Implements MBMesquite::MeshDomain.
Definition at line 77 of file MsqIRel.cpp.
References dim, geom, geom_from_mesh(), iBase_SUCCESS, ierr, MBMesquite::MsqCommonIGeom::normal(), and MBMesquite::process_itaps_error().
Referenced by element_normal_at().
{ int ierr, dim; iBase_EntityHandle geom; ierr = geom_from_mesh( handle, geom, dim ); if( iBase_SUCCESS != ierr ) { process_itaps_error( ierr ); return; } if( dim == 2 ) { ierr = normal( geom, coordinate ); if( iBase_SUCCESS != ierr ) { process_itaps_error( ierr ); return; } } else { assert( 0 ); } }
void MBMesquite::MsqIRel::vertex_normal_at | ( | const Mesh::VertexHandle * | handles, |
Vector3D | coordinates[], | ||
unsigned | count, | ||
MsqError & | err | ||
) | const [virtual] |
evaluate surface normals
Returns normals for a domain.
handles | The domain evaluated is the one in which this mesh entity is constrained. |
coordinates | As input, a list of positions at which to evaluate the domain. As output, the resulting domain normals. |
count | The length of the coordinates array. |
Implements MBMesquite::MeshDomain.
Definition at line 109 of file MsqIRel.cpp.
References dim, geom, geom_from_mesh(), iBase_SUCCESS, ierr, MBMesquite::MsqError::INVALID_ARG, MSQ_SETERR, MBMesquite::MsqCommonIGeom::normal(), and MBMesquite::process_itaps_error().
{ int ierr, dim; iBase_EntityHandle geom; for( unsigned i = 0; i < count; ++i ) { ierr = geom_from_mesh( handle[i], geom, dim ); if( iBase_SUCCESS != ierr ) { process_itaps_error( ierr ); return; } if( dim != 2 ) { MSQ_SETERR( err ) ( "Cannot get normal for non-surface geometry", MsqError::INVALID_ARG ); return; } ierr = normal( geom, coordinates[i] ); if( iBase_SUCCESS != ierr ) { process_itaps_error( ierr ); return; } } }
std::vector< iBase_EntityHandle > MBMesquite::MsqIRel::geomHandles [mutable, private] |
temporary storage of geometry entity handles
Reimplemented from MBMesquite::MsqCommonIGeom.
Definition at line 90 of file MsqIRel.hpp.
Referenced by domain_DoF().
ITAPS interface implementation for mesh->geometry association
Definition at line 86 of file MsqIRel.hpp.
Referenced by geom_from_mesh().
Definition at line 87 of file MsqIRel.hpp.
Referenced by geom_from_mesh().