|
cgma
|
#include <FacetQueryEngine.hpp>
Public Member Functions | |
| virtual | ~FacetQueryEngine () |
| const char * | modeler_type () |
| int | get_major_version () |
| int | get_minor_version () |
| int | get_subminor_version () |
| CubitString | get_engine_version_string () |
| virtual const std::type_info & | entity_type_info () const |
| virtual CubitBoolean | is_solid_modeler_type () const |
| CubitBoolean | can_delete_bodies (DLIList< Body * >body_list) |
| virtual TBPoint * | make_Point (GeometryType point_type, CubitVector const &point) const |
| virtual Curve * | make_Curve (Curve *) const |
| virtual Curve * | make_Curve (TBPoint const *, TBPoint const *, RefFace *, CubitVector *) const |
| virtual Curve * | make_Curve (GeometryType, TBPoint const *, TBPoint const *, DLIList< CubitVector * > &, RefFace *) const |
| virtual Curve * | make_Curve (GeometryType, TBPoint const *, TBPoint const *, CubitVector const *, CubitSense) const |
| virtual Surface * | make_Surface (Surface *, DLIList< Loop * > &, CubitBoolean) const |
| virtual Surface * | make_Surface (GeometryType, DLIList< Curve * > &, DLIList< Loop * > &, Surface *) const |
| virtual Lump * | make_Lump (GeometryType, DLIList< Surface * > &) const |
| virtual BodySM * | make_BodySM (Surface *) const |
| virtual BodySM * | make_BodySM (DLIList< Lump * > &) const |
| Body * | copy_body (Body *body_ptr) |
| virtual CubitStatus | get_graphics (BodySM *bodysm, GMem *g_mem, std::vector< Surface * > &surface_to_facets_vector, std::vector< TopologyBridge * > &vertex_edge_to_point_vector, std::vector< std::pair< TopologyBridge *, std::pair< int, int > > > &facet_edges_on_curves, unsigned short normal_tolerance, double distance_tolerance, double max_edge_length) const |
| virtual CubitStatus | get_graphics (Surface *surface_ptr, GMem *gMem, unsigned short normal_tolerance, double distance_tolerance, double max_edge_length) const |
| virtual CubitStatus | get_graphics (Curve *curve_ptr, GMem *gMem, double angle_tolerance=0, double distance_tolerance=0, double max_edge_length=0) const |
| virtual CubitStatus | get_isoparametric_points (Surface *, int &, int &, GMem *&) const |
| virtual CubitStatus | get_u_isoparametric_points (Surface *ref_face_ptr, double v, int &n, GMem *&gMem) const |
| virtual CubitStatus | get_v_isoparametric_points (Surface *ref_face_ptr, double u, int &n, GMem *&gMem) const |
| virtual CubitStatus | transform_vec_position (CubitVector const &, BodySM *, CubitVector &) const |
| virtual CubitStatus | get_intersections (Curve *, CubitVector &point1, CubitVector &, DLIList< CubitVector > &, CubitBoolean, CubitBoolean) |
| virtual CubitStatus | get_intersections (Curve *, Curve *, DLIList< CubitVector > &, CubitBoolean, CubitBoolean) |
| virtual CubitStatus | get_intersections (Curve *ref_edge1, Curve *ref_edge2, DLIList< CubitVector > &intersection_list, double offset, CubitBoolean ext_first=CUBIT_TRUE) |
| virtual CubitStatus | get_intersections (Curve *ref_edge, Surface *ref_face, DLIList< CubitVector > &intersection_list, CubitBoolean bounded=CUBIT_FALSE) |
| virtual CubitStatus | entity_extrema (DLIList< GeometryEntity * > &entity_list, const CubitVector *dir1, const CubitVector *dir2, const CubitVector *dir3, CubitVector &extrema, GeometryEntity *&extrema_entity_ptr) |
| virtual CubitStatus | entity_entity_distance (GeometryEntity *ref_entity_ptr1, GeometryEntity *ref_entity_ptr2, CubitVector &pos1, CubitVector &pos2, double &distance) |
| virtual CubitStatus | export_solid_model (DLIList< TopologyBridge * > &bridge_list, const char *file_name, Model_File_Type file_type, const CubitString &cubit_version, ModelExportOptions &export_options) |
| virtual CubitStatus | export_solid_model (DLIList< TopologyBridge * > &bridge_list, char *&p_buffer, int &n_buffer_size, bool b_export_buffer) |
| virtual CubitStatus | save_temp_geom_file (DLIList< TopologyBridge * > &ref_entity_list, const char *file_name, const CubitString &cubit_version, CubitString &created_file, CubitString &created_file_type) |
| virtual CubitStatus | import_solid_model (const char *file_name, Model_File_Type file_type, DLIList< TopologyBridge * > &imported_entities, ModelImportOptions &import_options) |
| virtual CubitStatus | import_solid_model (DLIList< TopologyBridge * > &imported_entities, const char *pBuffer, const int n_buffer_size) |
| virtual void | delete_solid_model_entities (DLIList< BodySM * > &body_list) const |
| virtual CubitStatus | delete_solid_model_entities (BodySM *body_ptr) const |
| virtual CubitStatus | delete_solid_model_entities (Surface *surf_ptr) const |
| virtual CubitStatus | delete_solid_model_entities (Curve *curve_ptr) const |
| virtual CubitStatus | delete_solid_model_entities (TBPoint *point_ptr) const |
| virtual CubitStatus | fire_ray (CubitVector &origin, CubitVector &direction, DLIList< TopologyBridge * > &at_entity_list, DLIList< double > &ray_params, int max_hits, double ray_radius, DLIList< TopologyBridge * > *hit_entity_list=0) const |
| virtual double | get_sme_resabs_tolerance () const |
| virtual double | set_sme_resabs_tolerance (double new_resabs) |
| virtual CubitStatus | set_int_option (const char *opt_name, int val) |
| virtual CubitStatus | set_dbl_option (const char *opt_name, double val) |
| virtual CubitStatus | set_str_option (const char *opt_name, const char *val) |
| CubitStatus | ensure_is_ascii_stl_file (FILE *fp, CubitBoolean &is_ascii) |
| CubitStatus | read_facets_stl_tolerance (DLIList< CubitFacet * > &tfacet_list, DLIList< CubitPoint * > &point_list, const char *file_name, int &npoints, int &ntri, long &seek_address, double tolerance) |
| CubitStatus | read_facets_stl (DLIList< CubitFacet * > &tfacet_list, DLIList< CubitPoint * > &point_list, const char *file_name, int &npoints, int &ntri, long &seek_address) |
| CubitStatus | import_facets (const char *file_name, CubitBoolean use_feature_angle, double feature_angle, double tolerance, int interp_order, CubitBoolean smooth_non_manifold, CubitBoolean split_surfaces, CubitBoolean stitch, CubitBoolean improve, DLIList< CubitQuadFacet * > &quad_facet_list, DLIList< CubitFacet * > &tri_facet_list, DLIList< Surface * > &surface_list, FacetFileFormat file_format=CUBIT_FACET_FILE) |
| CubitBoolean | is_close (CubitVector &this_point, DLIList< CubitFacet * > &facet_list, CubitFacet *&lastFacet, double tol) |
| CubitStatus | gather_all_facet_entities (DLIList< FacetBody * > &facet_bodies, DLIList< FacetLump * > &facet_lumps, DLIList< FacetShell * > &facet_shells, DLIList< FacetSurface * > &facet_surfaces, DLIList< FacetLoop * > &facet_loops, DLIList< FacetCoEdge * > &facet_coedges, DLIList< FacetCurve * > &facet_curves, DLIList< FacetPoint * > &facet_points) |
| CubitStatus | save_facets (FILE *fp, DLIList< FacetSurface * > facet_surfaces, DLIList< FacetCurve * > facet_curves, DLIList< FacetPoint * > facet_points) |
| CubitStatus | save_eval_tools (FILE *fp, DLIList< FacetSurface * > facet_surfaces, DLIList< FacetCurve * > facet_curves) |
| CubitStatus | dump_facets (FILE *fp, DLIList< CubitFacet * > &facet_list, DLIList< CubitFacetEdge * > &edge_list, DLIList< CubitPoint * > &point_list) |
| CubitStatus | gather_facets (DLIList< FacetSurface * > facet_surfaces, DLIList< FacetCurve * > facet_curves, DLIList< FacetPoint * > facet_points, DLIList< CubitFacet * > &facet_list, DLIList< CubitFacetEdge * > &edge_list, DLIList< CubitPoint * > &point_list) |
| CubitStatus | restore_eval_tools (FILE *fp, unsigned int endian, int num_facets, int num_edges, int num_points, CubitFacet **facets, CubitFacetEdge **edges, CubitPoint **points, int &num_cfet, int &num_fet, CurveFacetEvalTool **&cfeval_tools, FacetEvalTool **&feval_tools) |
| CubitStatus | create_super_facet_bounding_box (DLIList< BodySM * > &body_list, CubitBox &super_box) |
| CubitStatus | create_facet_bounding_box (BodySM *bodySM, CubitBox &bbox) |
| CubitStatus | restore_transform (BodySM *body) |
| CubitStatus | translate (BodySM *body, const CubitVector &offset) |
| CubitStatus | rotate (BodySM *body, const CubitVector &axis, double angle) |
| CubitStatus | scale (BodySM *body, double factor) |
| CubitStatus | scale (BodySM *body, const CubitVector &factors) |
| CubitStatus | reflect (BodySM *body, const CubitVector &axis) |
| CubitStatus | translate (GeometryEntity *ent, const CubitVector &offset) |
| CubitStatus | rotate (GeometryEntity *ent, const CubitVector &axis, double degrees) |
| CubitStatus | scale (GeometryEntity *ent, double factor) |
| CubitStatus | scale (GeometryEntity *ent, const CubitVector &factors) |
| CubitStatus | reflect (GeometryEntity *ent, const CubitVector &axis) |
| CubitStatus | get_connected_patch (DLIList< FacetSurface * > &remaining_surfs, DLIList< FacetSurface * > &output_patch) |
| virtual CubitBoolean | bodies_overlap (BodySM *body_ptr_1, BodySM *body_ptr_2) const |
| virtual CubitBoolean | volumes_overlap (Lump *lump_ptr_1, Lump *lump_ptr_2) const |
| virtual CubitStatus | get_point_containment (DLIList< BodySM * > &bodysm_list, DLIList< CubitVector > &point_list, double tolerance, bool allow_pts_in_multiple_bodies, std::vector< std::pair< BodySM *, std::vector< int > > > &bodysm_to_pt_indices) |
Static Public Member Functions | |
| static FacetQueryEngine * | instance () |
| static void | delete_instance () |
| static CubitStatus | make_facets (int *conn, int nfacets, DLIList< CubitQuadFacet * > &facet_list) |
| static CubitStatus | make_facets (int *conn, int nfacets, DLIList< CubitFacet * > &facet_list) |
| static CubitStatus | read_facets (const char *file_name, int *&conn, int &npoints, int &nquad, int &ntri, FacetFileFormat file_format=CUBIT_FACET_FILE) |
| static CubitStatus | read_cholla_file (const char *file_name, double &feature_angle, DLIList< CubitPoint * > &point_list, DLIList< CubitFacet * > &facet_list) |
| static CubitStatus | export_facets (DLIList< CubitFacet * > &facet_list, char *filename) |
Protected Member Functions | |
| FacetQueryEngine () | |
Private Member Functions | |
| CubitStatus | import_solid_model (FILE *file_ptr, DLIList< TopologyBridge * > &imported_entities) |
| CubitStatus | write_topology (FILE *file_ptr, DLIList< FacetBody * > &facet_bodies, DLIList< FacetLump * > &facet_lumps, DLIList< FacetShell * > &facet_shells, DLIList< FacetSurface * > &facet_surfaces, DLIList< FacetLoop * > &facet_loops, DLIList< FacetCoEdge * > &facet_coedges, DLIList< FacetCurve * > &facet_curves, DLIList< FacetPoint * > &facet_points) |
| CubitStatus | restore_topology (FILE *file_ptr, unsigned int endian, int num_points, CubitPoint **points_array, int num_cfet, CurveFacetEvalTool **cfev_array, int num_fet, FacetEvalTool **fev_array, DLIList< TopologyBridge * > &imported_entities) |
| CubitStatus | restore_facets (FILE *file_ptr, unsigned int endian, int &num_facets, int &num_edges, int &num_points, CubitPoint **&points_array, int &num_cfet, int &num_fet, CurveFacetEvalTool **&cfet_array, FacetEvalTool **&fet_array) |
| CubitStatus | read_facets (FILE *fp, unsigned int endian, int &num_facets, int &num_edges, int &num_points, CubitFacet **&facets, CubitFacetEdge **&edges, CubitPoint **&points) |
Static Private Member Functions | |
| static CubitStatus | init_hash_points (int num_points) |
| static CubitStatus | add_hash_point (CubitPoint *point_ptr) |
| static CubitPoint * | get_hash_point (int id) |
| static void | delete_hash_points () |
| static int | get_hash_key (int id) |
| static CubitStatus | get_all_hash_points (DLIList< CubitPoint * > &point_list) |
Static Private Attributes | |
| static FacetQueryEngine * | instance_ = NULL |
| static int | hashPointSize = 0 |
| static DLIList< CubitPoint * > * | hashPointArray = NULL |
| static const int | FQE_MAJOR_VERSION = 10 |
| static const int | FQE_MINOR_VERSION = 0 |
| static const int | FQE_SUBMINOR_VERSION = 0 |
Friends | |
| class | FacetSurface |
Definition at line 92 of file FacetQueryEngine.hpp.
| FacetQueryEngine::~FacetQueryEngine | ( | ) | [virtual] |
Definition at line 125 of file FacetQueryEngine.cpp.
{
instance_ = NULL;
}
| FacetQueryEngine::FacetQueryEngine | ( | ) | [protected] |
Definition at line 115 of file FacetQueryEngine.cpp.
{
GeometryQueryTool::instance()->add_gqe( this );
}
| CubitStatus FacetQueryEngine::add_hash_point | ( | CubitPoint * | point_ptr | ) | [static, private] |
Definition at line 4388 of file FacetQueryEngine.cpp.
{
int id = point_ptr->id();
int key = get_hash_key( id );
hashPointArray[key].append( point_ptr );
return CUBIT_SUCCESS;
}
| CubitBoolean FacetQueryEngine::bodies_overlap | ( | BodySM * | body_ptr_1, |
| BodySM * | body_ptr_2 | ||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 5243 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Currently, Cubit is unable to determine overlap for Facet-based geometry.\n");
return CUBIT_FALSE;
//The following should work, but due to bug 5599, we are not
// using it. Having this code in the default would cause the
// GeometryPowerTool to rely on Facetbool, which isn't robust
// yet.
/*
FacetboolInterface *fbint;
CubitFacetboolOp op = CUBIT_FB_INTERSECTION;
bool keep_old = true;
CubitStatus status;
BodySM* body_out = 0;
bool intersection_found;
fbint = new FacetboolInterface;
status = fbint->dofacetboolean_2bodies(body_ptr_1,body_ptr_2,body_out,
keep_old,intersection_found,op);
if ( status == CUBIT_FAILURE ) return CUBIT_FALSE;
else return CUBIT_TRUE;
*/
}
| CubitBoolean FacetQueryEngine::can_delete_bodies | ( | DLIList< Body * > | body_list | ) |
Definition at line 146 of file FacetQueryEngine.cpp.
{
CubitBoolean delete_ok = CUBIT_TRUE;
int ii;
for (ii=0; ii<body_list.size() && delete_ok; ii++)
{
Body *body_ptr = body_list.get_and_step();
// Extract the BODY from Body
FacetBody* fbody_ptr = CAST_TO(body_ptr->get_body_sm_ptr(), FacetBody);
if (fbody_ptr)
{
delete_ok = fbody_ptr->can_be_deleted(body_list);
}
}
return delete_ok;
}
| Body * FacetQueryEngine::copy_body | ( | Body * | body_ptr | ) |
Definition at line 333 of file FacetQueryEngine.cpp.
{
BodySM* bodysm_ptr = body_ptr->get_body_sm_ptr();
FacetBody *facet_body_ptr = CAST_TO(bodysm_ptr, FacetBody);
if (!facet_body_ptr)
{
PRINT_ERROR("Attempt to copy mesh-based geometry Body. This body is not MBG.");
return (Body*)NULL;
}
TopologyBridge *top_bridge;
GeometryModifyTool::instance()->prepare_for_copy( body_ptr, top_bridge );
BodySM* osme_body_ptr = (BodySM*)facet_body_ptr->copy();
if (!osme_body_ptr)
{
GeometryModifyTool::instance()->clean_up_from_copy_failure( top_bridge );
PRINT_ERROR("Failed to copy mesh-based geometry Body");
return (Body*)NULL;
}
TopologyBridge *tb = (TopologyBridge*)osme_body_ptr;
GeometryModifyTool::instance()->finish_copy( tb, bodysm_ptr );
Body *new_body_ptr = GeometryQueryTool::instance()->make_Body( osme_body_ptr );
return new_body_ptr;
}
| CubitStatus FacetQueryEngine::create_facet_bounding_box | ( | BodySM * | bodySM, |
| CubitBox & | bbox | ||
| ) |
Definition at line 5148 of file FacetQueryEngine.cpp.
{
FacetBody *fbody_ptr;
int j;
DLIList<FacetSurface*> facet_surf_list;
DLIList<CubitFacet*> facet_list;
DLIList<CubitPoint*> point_list;
FacetSurface *facet_surface;
CubitBox surf_bbox, total_box;
CubitStatus status = CUBIT_FAILURE;
fbody_ptr = dynamic_cast<FacetBody *>(bodySM);
fbody_ptr->get_surfaces(facet_surf_list);
for ( j = 0; j < facet_surf_list.size(); j++ ) {
facet_surface = facet_surf_list.get_and_step();
facet_list.clean_out();
point_list.clean_out();
facet_surface->get_my_facets(facet_list,point_list);
status = FacetDataUtil::get_bbox_of_points(point_list,surf_bbox);
if ( j == 0 )
total_box = surf_bbox;
else
total_box |= surf_bbox;
}
bbox = total_box;
return status;
}
| CubitStatus FacetQueryEngine::create_super_facet_bounding_box | ( | DLIList< BodySM * > & | body_list, |
| CubitBox & | super_box | ||
| ) |
Definition at line 5125 of file FacetQueryEngine.cpp.
{
BodySM *bodySM;
int i;
CubitStatus status = CUBIT_SUCCESS;
body_list.reset();
for ( i = 0; i < body_list.size(); i++ ) {
bodySM = body_list.get_and_step();
create_facet_bounding_box(bodySM,super_box);
}
return status;
}
| void FacetQueryEngine::delete_hash_points | ( | ) | [static, private] |
Definition at line 4425 of file FacetQueryEngine.cpp.
{
if (hashPointArray)
delete [] hashPointArray;
hashPointArray = NULL;
hashPointSize = 0;
}
| void FacetQueryEngine::delete_instance | ( | ) | [static] |
Definition at line 130 of file FacetQueryEngine.cpp.
| void FacetQueryEngine::delete_solid_model_entities | ( | DLIList< BodySM * > & | body_list | ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2266 of file FacetQueryEngine.cpp.
{
BodySM* BodyPtr = NULL;
for (int i = 0; i < BodyList.size(); i++ )
{
BodyPtr = BodyList.get_and_step();
this->delete_solid_model_entities(BodyPtr);
}
return;
}
| CubitStatus FacetQueryEngine::delete_solid_model_entities | ( | BodySM * | body_ptr | ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2288 of file FacetQueryEngine.cpp.
{
FacetBody* fbody = dynamic_cast<FacetBody*>(bodysm);
if (!fbody)
return CUBIT_FAILURE;
DLIList<FacetLump*> lumps;
DLIList<FacetShell*> shells;
DLIList<FacetSurface*> surfaces;
fbody->get_lumps(lumps);
fbody->disconnect_all_lumps();
delete fbody;
for (int i = lumps.size(); i--; )
{
FacetLump* lump = lumps.get_and_step();
shells.clean_out();
lump->get_shells(shells);
lump->disconnect_all_shells();
delete lump;
for (int j = shells.size(); j--; )
{
FacetShell* shell = shells.get_and_step();
surfaces.clean_out();
shell->get_surfaces(surfaces);
shell->disconnect_all_surfaces();
delete shell;
for (int k = surfaces.size(); k--; )
{
FacetSurface* surface = surfaces.get_and_step();
if (!surface->has_parent_shell())
delete_solid_model_entities(surface);
}
}
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::delete_solid_model_entities | ( | Surface * | surf_ptr | ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2342 of file FacetQueryEngine.cpp.
{
FacetSurface* fsurf = dynamic_cast<FacetSurface*>(surface);
if (!fsurf || fsurf->has_parent_shell())
return CUBIT_FAILURE;
DLIList<FacetLoop*> loops;
DLIList<FacetCoEdge*> coedges;
fsurf->get_loops(loops);
fsurf->disconnect_all_loops();
delete fsurf;
for (int i = loops.size(); i--; )
{
FacetLoop* loop = loops.get_and_step();
coedges.clean_out();
loop->get_coedges(coedges);
loop->disconnect_all_coedges();
delete loop;
for (int j = coedges.size(); j--; )
{
FacetCoEdge* coedge = coedges.get_and_step();
FacetCurve* curve = dynamic_cast<FacetCurve*>(coedge->curve());
if (curve)
{
curve->disconnect_coedge(coedge);
if (!curve->has_parent_coedge())
delete_solid_model_entities(curve);
}
delete coedge;
}
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::delete_solid_model_entities | ( | Curve * | curve_ptr | ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2392 of file FacetQueryEngine.cpp.
{
FacetCurve* fcurve = dynamic_cast<FacetCurve*>(curve);
if (!fcurve || fcurve->has_parent_coedge())
return CUBIT_FAILURE;
FacetPoint* start = dynamic_cast<FacetPoint*>(fcurve->start_point());
FacetPoint* end = dynamic_cast<FacetPoint*>(fcurve->end_point() );
if (start == end )
end = NULL;
if (start)
{
start->disconnect_curve(fcurve);
if (!start->has_parent_curve())
delete_solid_model_entities(start);
}
if (end)
{
end->disconnect_curve(fcurve);
if (!end->has_parent_curve())
delete_solid_model_entities(end);
}
delete curve;
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::delete_solid_model_entities | ( | TBPoint * | point_ptr | ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2432 of file FacetQueryEngine.cpp.
{
FacetPoint* fpoint = dynamic_cast<FacetPoint*>(point);
if (!fpoint || fpoint->has_parent_curve())
return CUBIT_FAILURE;
delete point;
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::dump_facets | ( | FILE * | fp, |
| DLIList< CubitFacet * > & | facet_list, | ||
| DLIList< CubitFacetEdge * > & | edge_list, | ||
| DLIList< CubitPoint * > & | point_list | ||
| ) |
Definition at line 4674 of file FacetQueryEngine.cpp.
{
NCubitFile::CIOWrapper cio(fp);
typedef NCubitFile::UnsignedInt32 UnsignedInt32;
// Gather CubitPoint Data
int npoints = point_list.size();
int nnormals = 0;
double* uvs_array = new double [npoints * 3];
double* coord_array = new double [npoints * 3];
//double* du_array = new double [npoints * 3];
//double* dv_array = new double [npoints * 3];
int c_zero_points = 0;
int c_zero_int_data_size = 0;
int c_zero_double_data_size = 0;
int ii;
DLIList<CubitPoint*> has_td_boundary_point;
DLIList<CubitPoint*> points_with_normal;
TDFacetBoundaryPoint *td_fbp;
CubitPoint *cp_ptr;
CubitVector coord, *normal;
point_list.reset();
for (ii=0; ii<point_list.size(); ii++)
{
cp_ptr = point_list.get_and_step();
// write out uVal, vVal, sizeVal
uvs_array[ii*3] = cp_ptr->u();
uvs_array[ii*3+1] = cp_ptr->v();
uvs_array[ii*3+2] = cp_ptr->size();
// coordinates
coord = cp_ptr->coordinates();
coord_array[ii*3] = coord.x();
coord_array[ii*3+1] = coord.y();
coord_array[ii*3+2] = coord.z();
// surfNormal
if( cp_ptr->normal_ptr() )
points_with_normal.append( cp_ptr );
/*
// surfU
du = cp_ptr->du();
du_array[ii*3] = du.x();
du_array[ii*3+1] = du.y();
du_array[ii*3+2] = du.z();
// surfV
dv = cp_ptr->dv();
dv_array[ii*3] = dv.x();
dv_array[ii*3+1] = dv.y();
dv_array[ii*3+2] = dv.z(); */
if ((td_fbp = TDFacetBoundaryPoint::get_facet_boundary_point( cp_ptr ))!= NULL)
{
has_td_boundary_point.append( cp_ptr );
c_zero_points++;
td_fbp->get_boundary_point_data_size( c_zero_int_data_size,
c_zero_double_data_size );
}
}
// Normals
nnormals = points_with_normal.size();
double* normal_array = NULL;
int* normal_ids = NULL;
points_with_normal.reset();
if( nnormals > 0 )
{
normal_array = new double [nnormals* 3];
normal_ids = new int[nnormals];
points_with_normal.reset();
for( ii=0; ii<nnormals; ii++)
{
cp_ptr = points_with_normal.get_and_step();
normal_ids[ii] = cp_ptr->id();
normal = cp_ptr->normal_ptr();
normal_array[ii*3] = normal->x();
normal_array[ii*3+1] = normal->y();
normal_array[ii*3+2] = normal->z();
}
}
// write arrays --CubitPoint
cio.Write(reinterpret_cast<UnsignedInt32*>(&npoints), 1);
if( npoints > 0 )
{
cio.Write(coord_array, npoints*3);
cio.Write(uvs_array, npoints*3);
}
// clean up
delete [] uvs_array;
delete [] coord_array;
uvs_array = NULL;
coord_array = NULL;
// write normals & ids of points to which normals belong
cio.Write( reinterpret_cast<UnsignedInt32*>(&nnormals), 1 );
if( nnormals > 0 )
{
cio.Write(normal_array, nnormals*3);
cio.Write(reinterpret_cast<UnsignedInt32*>(normal_ids), nnormals);
delete [] normal_array;
delete [] normal_ids;
normal_array = NULL;
normal_ids = NULL;
}
// Gather CubitFacetEdge Data
int jj, idx;
int nedges = edge_list.size();
int nctrl_pts = nedges * NUM_EDGE_CPTS;
CubitFacetEdge *edge_ptr;
CubitVector *edge_ctrl_pts;
double* control_points = new double [nctrl_pts * 3];
UnsignedInt32* edge_vert_array = new UnsignedInt32 [nedges * 2];
for(ii=0; ii<nedges; ii++)
{
// pointArray[2]
edge_ptr = edge_list.get_and_step();
edge_vert_array[ii*2] = edge_ptr->point(0)->id();
edge_vert_array[ii*2+1] = edge_ptr->point(1)->id();
edge_ctrl_pts = edge_ptr->control_points();
// controlPoints[3]
if (nctrl_pts > 0)
{
if (!edge_ctrl_pts)
{
nctrl_pts = 0;
continue;
}
for(jj=0; jj<NUM_EDGE_CPTS; jj++)
{
idx = (ii*NUM_EDGE_CPTS+jj)*3;
control_points[idx] = edge_ctrl_pts[jj].x();
control_points[idx+1] = edge_ctrl_pts[jj].y();
control_points[idx+2] = edge_ctrl_pts[jj].z();
}
}
}
// write arrays --CubitFacetEdge
cio.Write(reinterpret_cast<UnsignedInt32*>(&nedges), 1);
if( nedges > 0 )
{
cio.Write(edge_vert_array, nedges*2 );
cio.Write(reinterpret_cast<UnsignedInt32*>(&nctrl_pts), 1);
if (nctrl_pts > 0)
cio.Write(control_points, nctrl_pts*3);
}
// clean up
delete [] edge_vert_array;
delete [] control_points;
edge_vert_array = NULL;
control_points = NULL;
// Gather CubitFacet Data
int nfacets = facet_list.size();
nctrl_pts = nfacets * NUM_TRI_CPTS;
CubitFacet *facet_ptr;
CubitVector *facet_ctrl_pts;
control_points = new double [nctrl_pts * 3];
UnsignedInt32* facet_edge_array = new UnsignedInt32 [nfacets * 3];
int *int_data = new int[ nfacets * 2 ];
facet_list.reset();
for (ii=0; ii<nfacets; ii++)
{
facet_ptr = facet_list.get_and_step();
// is Flat and isBackwards
int_data[ii*2] = facet_ptr->is_flat();
int_data[ii*2+1] = facet_ptr->is_backwards();
// edgeArray[3]
facet_edge_array[ii*3] = facet_ptr->edge(0)->id();
facet_edge_array[ii*3+1] = facet_ptr->edge(1)->id();
facet_edge_array[ii*3+2] = facet_ptr->edge(2)->id();
facet_ctrl_pts = facet_ptr->control_points();
if(nctrl_pts > 0)
{
if (!facet_ctrl_pts)
{
nctrl_pts = 0;
continue;
}
for(jj=0; jj<NUM_TRI_CPTS; jj++)
{
idx = (ii*NUM_TRI_CPTS+jj)*3;
control_points[idx] = facet_ctrl_pts[jj].x();
control_points[idx+1] = facet_ctrl_pts[jj].y();
control_points[idx+2] = facet_ctrl_pts[jj].z();
}
}
}
// write arrays --CubitFacet
cio.Write(reinterpret_cast<UnsignedInt32*>(&nfacets), 1);
if( nfacets > 0 )
{
cio.Write(facet_edge_array, nfacets*3);
cio.Write( reinterpret_cast<UnsignedInt32*>(int_data), nfacets*2 );
cio.Write(reinterpret_cast<UnsignedInt32*>(&nctrl_pts), 1);
if (nctrl_pts > 0)
cio.Write(control_points, nctrl_pts*3);
}
// clean up
delete [] facet_edge_array;
delete [] control_points;
delete [] int_data;
facet_edge_array = NULL;
control_points = NULL;
int_data = NULL;
// At points along the boundary (C0 continuity) there may be
// multiple normals. Write this data too. First gether it
// into two arrays and then dump.
cio.Write(reinterpret_cast<UnsignedInt32*>(&c_zero_points), 1);
if (c_zero_points > 0)
{
int *c_zero_int_data = new int [c_zero_int_data_size];
double *c_zero_double_data = new double [c_zero_double_data_size];
point_list.reset();
int iidx = 0;
int didx = 0;
point_list.reset();
for (ii=0; ii<point_list.size(); ii++)
{
cp_ptr = point_list.get_and_step();
td_fbp = TDFacetBoundaryPoint::get_facet_boundary_point( cp_ptr );
if (td_fbp != NULL)
{
td_fbp->get_boundary_point_data( c_zero_int_data,
c_zero_double_data,
iidx, didx );
}
}
// dump the int data array
cio.Write(reinterpret_cast<UnsignedInt32*>(&c_zero_int_data_size), 1);
//convert to UnsignedInt32
UnsignedInt32 *c_zero_int32_data = new UnsignedInt32 [c_zero_int_data_size];
for (ii=0; ii<c_zero_int_data_size; ii++)
c_zero_int32_data[ii] = (UnsignedInt32)c_zero_int_data[ii];
cio.Write(c_zero_int32_data, c_zero_int_data_size);
// dump the double array
cio.Write(reinterpret_cast<UnsignedInt32*>(&c_zero_double_data_size), 1);
cio.Write(c_zero_double_data, c_zero_double_data_size);
// clean up
delete [] c_zero_int_data;
delete [] c_zero_int32_data;
delete [] c_zero_double_data;
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::ensure_is_ascii_stl_file | ( | FILE * | fp, |
| CubitBoolean & | is_ascii | ||
| ) |
Definition at line 2728 of file FacetQueryEngine.cpp.
{
char line[128]="";
if (fgets(line, 128, fp)==NULL)
{
return CUBIT_FAILURE;
}
if (fgets(line, 128, fp)==NULL)
{
return CUBIT_FAILURE;
}
if (strlen(line)==127)
{
if (fgets(line, 128, fp)==NULL)
{
return CUBIT_FAILURE;
}
}
unsigned int dummy_int=0;
// One of the functions called by isspace() has an assert that can fail in debug mode if
// line[dummy_int] is negative so check for it here.
while (line[dummy_int] > -1 && isspace(line[dummy_int]) && dummy_int < strlen(line))
dummy_int++;
if (strlen(line)-dummy_int>5)
{
if (tolower(line[dummy_int++])=='f' &&
tolower(line[dummy_int++])=='a' &&
tolower(line[dummy_int++])=='c' &&
tolower(line[dummy_int++])=='e' &&
tolower(line[dummy_int])=='t')
{
if (fgets(line, 128, fp)==NULL)
{
return CUBIT_FAILURE;
}
dummy_int=0;
while (isspace(line[dummy_int])&& dummy_int<strlen(line))
{
dummy_int++;
}
if (strlen(line)-dummy_int>5)
{
if (tolower(line[dummy_int++])=='o' &&
tolower(line[dummy_int++])=='u' &&
tolower(line[dummy_int++])=='t' &&
tolower(line[dummy_int++])=='e' &&
tolower(line[dummy_int])=='r')
{
if (fgets(line, 128, fp)==NULL)
{
return CUBIT_FAILURE;
}
dummy_int=0;
while (isspace(line[dummy_int])&& dummy_int<strlen(line)) {
dummy_int++;
}
if (strlen(line)-dummy_int>6)
{
if (tolower(line[dummy_int++])=='v' &&
tolower(line[dummy_int++])=='e' &&
tolower(line[dummy_int++])=='r' &&
tolower(line[dummy_int++])=='t' &&
tolower(line[dummy_int++])=='e' &&
tolower(line[dummy_int])=='x')
{
is_ascii=CUBIT_TRUE;
}
}
}
}
}
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::entity_entity_distance | ( | GeometryEntity * | ref_entity_ptr1, |
| GeometryEntity * | ref_entity_ptr2, | ||
| CubitVector & | pos1, | ||
| CubitVector & | pos2, | ||
| double & | distance | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 824 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::entity_extrema | ( | DLIList< GeometryEntity * > & | entity_list, |
| const CubitVector * | dir1, | ||
| const CubitVector * | dir2, | ||
| const CubitVector * | dir3, | ||
| CubitVector & | extrema, | ||
| GeometryEntity *& | extrema_entity_ptr | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 807 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| const std::type_info & FacetQueryEngine::entity_type_info | ( | ) | const [virtual] |
Definition at line 195 of file FacetQueryEngine.cpp.
{
return typeid(*this);
}
| CubitStatus FacetQueryEngine::export_facets | ( | DLIList< CubitFacet * > & | facet_list, |
| char * | filename | ||
| ) | [static] |
Definition at line 4271 of file FacetQueryEngine.cpp.
{
// open the file for writing
FILE *fp = fopen(filename, "w");
if (!fp)
{
PRINT_ERROR("Couldn't open file %s for writing.\n", filename);
return CUBIT_FAILURE;
}
// make list of all points
CubitPoint *point_ptr;
CubitFacet *facet_ptr;
DLIList<CubitPoint*>temp_point_list;
int ii, jj;
for (ii=0; ii<facet_list.size(); ii++)
{
facet_ptr = facet_list.get_and_step();
for(jj=0; jj<3; jj++)
{
point_ptr = facet_ptr->point(jj);
point_ptr->marked(-1);
temp_point_list.append(point_ptr);
}
}
// assign ids to points and make list unique
int id = 0;
DLIList<CubitPoint*>point_list;
for (ii=0; ii<temp_point_list.size(); ii++)
{
point_ptr = temp_point_list.get_and_step();
if (point_ptr->marked() == -1)
{
point_ptr->marked(id++);
point_list.append( point_ptr );
}
}
// write the points
CubitVector coords;
fprintf(fp, "%d\n", point_list.size());
point_list.reset();
for(ii=0; ii<point_list.size(); ii++)
{
point_ptr = point_list.get_and_step();
coords = point_ptr->coordinates();
fprintf(fp,"%d %f %f %f\n", ii, coords.x(), coords.y(), coords.z());
}
// write the facets
int indx[3];
fprintf(fp, "%d\n", facet_list.size());
for (ii=0; ii<facet_list.size(); ii++)
{
facet_ptr = facet_list.get_and_step();
for (jj=0; jj<3; jj++)
{
indx[jj] = facet_ptr->point(jj)->marked();
}
fprintf(fp,"%d %d %d %d\n", ii, indx[0], indx[1], indx[2]);
}
//- unmark the points
for (ii=0; ii<point_list.size(); ii++)
point_list.get_and_step()->marked(0);
fclose(fp);
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::export_solid_model | ( | DLIList< TopologyBridge * > & | bridge_list, |
| const char * | file_name, | ||
| Model_File_Type | file_type, | ||
| const CubitString & | cubit_version, | ||
| ModelExportOptions & | export_options | ||
| ) | [virtual] |
R CubitStatus R- CUBIT_SUCCESS/CUBIT_FAILURE I ref_entity_list I- A list of RefEntities to be exported or saved to a file. I file_name I- The name of the file to write to. I file_type I- An optional type of file.
Implements GeometryQueryEngine.
Definition at line 880 of file FacetQueryEngine.cpp.
{
if( file_type != FACET_TYPE )
return CUBIT_SUCCESS;
DLIList<FacetBody*> facet_bodies;
DLIList<FacetLump*> facet_lumps;
DLIList<FacetShell*> facet_shells;
DLIList<FacetSurface*> facet_surfaces;
DLIList<FacetLoop*> facet_loops;
DLIList<FacetCoEdge*> facet_coedges;
DLIList<FacetCurve*> facet_curves;
DLIList<FacetPoint*> facet_points;
DLIList<TopologyBridge*> ref_entities_handled;
int i;
//Collect all free entities (bodies, curves, vertices )
ref_entity_list.reset();
for(i=ref_entity_list.size(); i>0; i--)
{
TopologyBridge* ref_entity_ptr = ref_entity_list.get();
CubitBoolean handled = CUBIT_TRUE;
//if it is a Vertex
if( FacetPoint* pt = CAST_TO( ref_entity_ptr, FacetPoint) )
facet_points.append( pt );
//if it is a Curve
else if( FacetCurve* curve = CAST_TO( ref_entity_ptr, FacetCurve) )
facet_curves.append( curve );
/*
//if it is a Surface -- I don't think you can ever have a free surface
//without it being a Body
else if( FacetSurface* surf = CAST_TO( ref_entity_ptr, FacetSurface) )
facet_surfaces.append( surf );
*/
//if it is a Body
else if( FacetBody* body = CAST_TO( ref_entity_ptr, FacetBody ) )
facet_bodies.append( body );
else
handled = CUBIT_FALSE;
if( handled == CUBIT_TRUE )
{
ref_entities_handled.append( ref_entity_ptr );
ref_entity_list.change_to(NULL);
}
ref_entity_list.step();
}
ref_entity_list.remove_all_with_value(NULL);
int free_body_count = facet_bodies.size();
int free_curve_count = facet_curves.size();
int free_point_count = facet_points.size();
//if nothing to write out...return
if( free_body_count == 0 && free_curve_count == 0 && free_point_count == 0)
return CUBIT_SUCCESS;
//get file pointer
FILE *file_ptr = fopen( file_name, "wb" );
//get all child entities from the bodies, curves, & vertices
gather_all_facet_entities( facet_bodies, facet_lumps,
facet_shells, facet_surfaces,
facet_loops, facet_coedges,
facet_curves, facet_points );
//create a wrapper object for writing
CIOWrapper file_writer( file_ptr );
// write out file type "MESHED_BASED_GEOMETRY"
file_writer.BeginWriteBlock(0);
file_writer.Write( "MESH_BASED_GEOMETRY", 19 );
// write out Endian value
UnsignedInt32 endian_value = CCubitFile::mintNativeEndian;
file_writer.Write( &endian_value, 1 );
// write out version #
UnsignedInt32 version = 1;
file_writer.Write( &version, 1 );
//save the facets (geometry info )
CubitStatus status;
status = save_facets( file_ptr, facet_surfaces, facet_curves, facet_points );
if( status == CUBIT_FAILURE ) return CUBIT_FAILURE;
//write out topology and attributes
status = write_topology( file_ptr,
facet_bodies, facet_lumps,
facet_shells, facet_surfaces,
facet_loops, facet_coedges,
facet_curves, facet_points );
if( status == CUBIT_FAILURE ) return CUBIT_FAILURE;
if( free_body_count || free_curve_count || free_point_count )
PRINT_INFO( "\nExported:" );
int flg = 0;
if( free_body_count )
{
if( flg )PRINT_INFO( " " );else flg=1;
if( DEBUG_FLAG( 153 ) )
{
if( free_body_count == 1 )
PRINT_INFO( "%4d Facet Body\n", free_body_count );
else
PRINT_INFO( "%4d Facet Bodies\n", free_body_count );
}
if( facet_lumps.size() == 1 )
PRINT_INFO( "%4d Facet Volume\n", facet_lumps.size() );
else
PRINT_INFO( "%4d Facet Volumes\n", facet_lumps.size() );
}
if( free_curve_count )
{
if( flg )PRINT_INFO( " " );else flg=1;
if( free_curve_count == 1 )
PRINT_INFO( "%4d Facet Curve\n", free_curve_count );
else
PRINT_INFO( "%4d Facet Curves\n", free_curve_count );
}
if( free_point_count )
{
if( flg )PRINT_INFO( " " );else flg=1;
if( free_point_count == 1 )
PRINT_INFO( "%4d Facet Point\n", free_point_count );
else
PRINT_INFO( "%4d Facet Points\n", free_point_count );
}
PRINT_INFO( "\n" );
fclose( file_ptr );
return CUBIT_SUCCESS;
}
| virtual CubitStatus FacetQueryEngine::export_solid_model | ( | DLIList< TopologyBridge * > & | bridge_list, |
| char *& | p_buffer, | ||
| int & | n_buffer_size, | ||
| bool | b_export_buffer | ||
| ) | [inline, virtual] |
Implements GeometryQueryEngine.
Definition at line 263 of file FacetQueryEngine.hpp.
{return CUBIT_FAILURE;}
| CubitStatus FacetQueryEngine::fire_ray | ( | CubitVector & | origin, |
| CubitVector & | direction, | ||
| DLIList< TopologyBridge * > & | at_entity_list, | ||
| DLIList< double > & | ray_params, | ||
| int | max_hits, | ||
| double | ray_radius, | ||
| DLIList< TopologyBridge * > * | hit_entity_list = 0 |
||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2442 of file FacetQueryEngine.cpp.
{
TopologyBridge *bridge_ptr;
int i, j;
bool hit = false;
DLIList<double> tmp_ray_params;
DLIList<FacetSurface*> at_surface_list;
DLIList<FacetCurve*> at_curve_list;
DLIList<FacetPoint*> at_point_list;
if( ray_radius == 0.0 )
ray_radius = get_sme_resabs_tolerance();
at_entity_list.reset();
for (i=0; i<at_entity_list.size(); i++)
{
hit = false;
bridge_ptr = at_entity_list.get_and_step();
//determine which type of geometry we have. body, lump, face, curve?
if (CAST_TO(bridge_ptr, FacetBody))
{
FacetBody* f_body = CAST_TO(bridge_ptr, FacetBody);
DLIList<Surface*> surface_list;
f_body->surfaces(surface_list);
}
else if (CAST_TO(bridge_ptr, FacetLump))
{
FacetLump* f_lump = CAST_TO(bridge_ptr, FacetLump);
PRINT_INFO("Found FacetLump.\n");
DLIList<FacetSurface*> f_surface_list;
f_lump->get_surfaces(f_surface_list);
at_surface_list.merge_unique(f_surface_list);
}
else if (CAST_TO(bridge_ptr, Surface))
{
FacetSurface* f_surface = CAST_TO(bridge_ptr, FacetSurface);
DLIList<CubitFacet*> facet_list;
DLIList<CubitPoint*> point_list;
f_surface->get_my_facets(facet_list, point_list);
//PRINT_INFO("There are %d facets.\n", facet_list.size());
//RTree<CubitFacet*> rtree(ray_radius);
//for (j=0; j<facet_list.size(); j++)
// rtree.add(facet_list.get_and_step();
//DLIList<CubitFacet*> facet_list1;
//CubitBox range_box();
//make range box for the ray
//rtree.find(range_box, facet_list1);
CubitVector* intersection_pt = new CubitVector();
double distance;
for (j=0; j<facet_list.size(); j++)
{
if (hit)
break;
CubitFacet* facet = facet_list.get_and_step();
// Find intersection of ray with triangle
int rv = FacetEvalTool::intersect_ray(origin, direction, facet, intersection_pt, distance);
switch (rv)
{
case -1:
//PRINT_INFO("Facet is degenerate (segment or point).\n");
break;
case 0:
//PRINT_INFO("Ray does not intersect the facet.\n");
break;
case 1:
{
hit = true;
if (hit_entity_list)
hit_entity_list->append(bridge_ptr);
ray_params.append(distance);
//PRINT_INFO("Ray intersects facet at %f, %f, %f.\n", intersection_pt->x(), intersection_pt->y(), intersection_pt->z());
continue;
}
case 2:
//PRINT_INFO("Ray is in same plane as the facet.\n");
break;
}
}
if (intersection_pt)
delete intersection_pt;
}
else if (CAST_TO(bridge_ptr, Curve))
{
FacetCurve* f_curve = CAST_TO(bridge_ptr, FacetCurve);
DLIList<CubitFacetEdge*> facet_edge_list;
f_curve->get_facets(facet_edge_list);
//PRINT_INFO("There are %d facetedges.\n", facet_edge_list.size());
CubitVector* intersection_pt = new CubitVector();
double distance;
for (j=0; j<facet_edge_list.size(); j++)
{
if (hit)
break;
CubitFacetEdge* facet_edge = facet_edge_list.get_and_step();
int rv = FacetEvalTool::intersect_ray(origin, direction, facet_edge, intersection_pt, distance);
switch (rv)
{
case -1:
//PRINT_INFO("Facet is degenerate (segment or point).\n");
break;
case 0:
//PRINT_INFO("Ray does not intersect the facet edge.\n");
break;
case 1:
{
hit = true;
if (hit_entity_list)
hit_entity_list->append(bridge_ptr);
ray_params.append(distance);
//PRINT_INFO("Ray intersects facet at %f, %f, %f.\n", intersection_pt->x(), intersection_pt->y(), intersection_pt->z());
continue;
}
case 2:
//PRINT_INFO("Ray is parallel to the facet.\n");
break;
}
}
if (intersection_pt)
delete intersection_pt;
}
else if (CAST_TO(bridge_ptr, FacetPoint))
{
FacetPoint* f_point = CAST_TO(bridge_ptr, FacetPoint);
at_point_list.append_unique(f_point);
}
else
;//PRINT_INFO("Cast error in FacetQueryEngine::fire_ray.\n");
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::gather_all_facet_entities | ( | DLIList< FacetBody * > & | facet_bodies, |
| DLIList< FacetLump * > & | facet_lumps, | ||
| DLIList< FacetShell * > & | facet_shells, | ||
| DLIList< FacetSurface * > & | facet_surfaces, | ||
| DLIList< FacetLoop * > & | facet_loops, | ||
| DLIList< FacetCoEdge * > & | facet_coedges, | ||
| DLIList< FacetCurve * > & | facet_curves, | ||
| DLIList< FacetPoint * > & | facet_points | ||
| ) |
Definition at line 1030 of file FacetQueryEngine.cpp.
{
int i;
//Collect FacetLumps from FacetBody
for(i=0; i<facet_bodies.size(); i++)
{
FacetBody *facet_body = facet_bodies.get_and_step();
facet_body->get_lumps( facet_lumps );
}
//Collect FacetShells from FacetLumps
for(i=0; i<facet_lumps.size(); i++)
{
FacetLump *facet_lump = facet_lumps.get_and_step();
facet_lump->get_shells( facet_shells );
}
//Collect FacetSurfaces from FacetShells
for(i=0; i<facet_shells.size(); i++)
{
FacetShell *facet_shell = facet_shells.get_and_step();
facet_shell->get_surfaces( facet_surfaces );
}
facet_surfaces.uniquify_ordered();
//Collect FacetLoops from FacetSurfaces
for(i=0; i<facet_surfaces.size(); i++)
{
FacetSurface *facet_surface = facet_surfaces.get_and_step();
facet_surface->get_loops( facet_loops );
}
//Collect FacetCoEdges from FacetLoops
for(i=0; i<facet_loops.size(); i++)
{
FacetLoop *facet_loop = facet_loops.get_and_step();
facet_loop->get_coedges( facet_coedges );
}
//Collect FacetCurves from FacetCoEdges
for( i=0; i<facet_coedges.size(); i++)
{
FacetCoEdge *facet_coedge = facet_coedges.get_and_step();
facet_coedge->get_curves( facet_curves );
}
facet_curves.uniquify_ordered();
//Collect FacetPoints from FacetCurves
for( i=0; i<facet_curves.size(); i++)
{
FacetCurve *facet_curve = facet_curves.get_and_step();
facet_curve->get_points( facet_points );
}
//uniquify lists
facet_points.uniquify_ordered();
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::gather_facets | ( | DLIList< FacetSurface * > | facet_surfaces, |
| DLIList< FacetCurve * > | facet_curves, | ||
| DLIList< FacetPoint * > | facet_points, | ||
| DLIList< CubitFacet * > & | facet_list, | ||
| DLIList< CubitFacetEdge * > & | edge_list, | ||
| DLIList< CubitPoint * > & | point_list | ||
| ) |
Definition at line 4951 of file FacetQueryEngine.cpp.
{
int ii, jj, kk;
FacetSurface *fsurf_ptr;
FacetCurve *fcurv_ptr;
FacetPoint *fpoint_ptr;
DLIList<CubitFacet *>temp_facets;
DLIList<CubitPoint *>temp_points;
DLIList<CubitFacetEdge *>temp_edges;
CubitFacet *facet_ptr;
CubitFacetEdge *edge_ptr;
CubitPoint *cp_ptr;
//unmark facets/edges/points on surface
for(ii=facet_surfaces.size(); ii--;)
{
fsurf_ptr = facet_surfaces.get_and_step();
temp_facets.clean_out();
temp_points.clean_out();
fsurf_ptr->get_my_facets(temp_facets, temp_points);
for(jj=0; jj<temp_facets.size(); jj++)
{
facet_ptr = temp_facets.get_and_step();
facet_ptr->marked( 0 );
for (kk=0; kk<3; kk++)
{
edge_ptr = facet_ptr->edge( kk );
edge_ptr->marked( 0 );
}
}
for (jj=0; jj<temp_points.size(); jj++)
{
cp_ptr = temp_points.get_and_step();
cp_ptr->marked( 0 );
}
}
//unmark facet-edges/points on curves
for(ii=facet_curves.size(); ii--; )
{
fcurv_ptr = facet_curves.get_and_step();
temp_edges.clean_out();
fcurv_ptr->get_facets( temp_edges );
for (jj=0; jj<temp_edges.size(); jj++)
{
edge_ptr = temp_edges.get_and_step();
edge_ptr->marked( 0 );
edge_ptr->point( 0 )->marked( 0 );
edge_ptr->point( 1 )->marked( 0 );
}
}
//unmark facet-points on points
for(ii=facet_points.size(); ii--; )
{
fpoint_ptr = facet_points.get_and_step();
if (fpoint_ptr != NULL)
{
cp_ptr = fpoint_ptr->get_cubit_point();
cp_ptr->marked( 0 );
}
}
// make unique lists
for(ii=facet_surfaces.size(); ii--;)
{
fsurf_ptr = facet_surfaces.get_and_step();
temp_facets.clean_out();
temp_points.clean_out();
fsurf_ptr->get_my_facets(temp_facets, temp_points);
for(jj=0; jj<temp_facets.size(); jj++)
{
facet_ptr = temp_facets.get_and_step();
if (0 == facet_ptr->marked())
{
facet_ptr->marked( 1 );
facet_list.append( facet_ptr );
}
for (kk=0; kk<3; kk++)
{
edge_ptr = facet_ptr->edge( kk );
if (0 == edge_ptr->marked())
{
edge_ptr->marked( 1 );
edge_list.append( edge_ptr );
}
}
}
for (jj=0; jj<temp_points.size(); jj++)
{
cp_ptr = temp_points.get_and_step();
if (0 == cp_ptr->marked())
{
cp_ptr->marked(1);
point_list.append( cp_ptr );
}
}
}
for(ii=facet_curves.size(); ii--;)
{
fcurv_ptr = facet_curves.get_and_step();
temp_edges.clean_out();
fcurv_ptr->get_facets( temp_edges );
for (jj=0; jj<temp_edges.size(); jj++)
{
edge_ptr = temp_edges.get_and_step();
if (0 == edge_ptr->marked())
{
edge_ptr->marked(1);
edge_list.append( edge_ptr );
for (kk=0; kk<2; kk++)
{
cp_ptr = edge_ptr->point( kk );
if (0 == cp_ptr->marked())
{
cp_ptr->marked(1);
point_list.append(cp_ptr);
}
}
}
}
}
for(ii=facet_points.size(); ii--;)
{
fpoint_ptr = facet_points.get_and_step();
cp_ptr = fpoint_ptr->get_cubit_point();
if (0 == cp_ptr->marked())
{
cp_ptr->marked( 1 );
point_list.append( cp_ptr );
}
}
// set the IDs of the facet entities and clear the marks
facet_list.reset();
for (ii=0; ii<facet_list.size(); ii++)
{
facet_ptr = facet_list.get_and_step();
facet_ptr->set_id(ii);
facet_ptr->marked(0);
}
edge_list.reset();
for (ii=0; ii<edge_list.size(); ii++)
{
edge_ptr = edge_list.get_and_step();
edge_ptr->set_id(ii);
edge_ptr->marked(0);
}
for (ii=0; ii<point_list.size(); ii++)
{
cp_ptr = point_list.get_and_step();
cp_ptr->set_id(ii);
cp_ptr->marked(0);
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::get_all_hash_points | ( | DLIList< CubitPoint * > & | point_list | ) | [static, private] |
Definition at line 4450 of file FacetQueryEngine.cpp.
{
CubitStatus rv = CUBIT_SUCCESS;
int ii, jj;
CubitPoint *point_ptr;
for(jj=0; jj<hashPointSize; jj++)
{
for (ii=0; ii<hashPointArray[jj].size(); ii++)
{
point_ptr = hashPointArray[jj].get_and_step();
point_list.append(point_ptr);
}
}
return rv;
}
| CubitStatus FacetQueryEngine::get_connected_patch | ( | DLIList< FacetSurface * > & | remaining_surfs, |
| DLIList< FacetSurface * > & | output_patch | ||
| ) |
Definition at line 381 of file FacetQueryEngine.cpp.
{
DLIList<FacetSurface*> stack, curve_surfs;
std::set<FacetSurface*> marked;
DLIList<FacetCurve*> curves;
int debug_this = 0;
if(debug_this){
GfxDebug::clear();
}
int i;
for (i = remaining_surfs.size(); i--; )
marked.insert( remaining_surfs.get_and_step() );
// Choose one surface to start with
FacetSurface* surf = remaining_surfs.pop();
marked.erase( surf );
stack.append( surf );
// Get all connected surfaces
while( stack.size() )
{
surf = stack.pop();
if(debug_this){
surf->get_eval_tool()->debug_draw_facets(CUBIT_BLUE_INDEX);
GfxDebug::mouse_xforms();
}
output_patch.append( surf );
surf->get_curves( curves );
while (curves.size())
{
FacetCurve* curve = curves.pop();
curve->get_surfaces( curve_surfs );
if(debug_this && curve_surfs.size() < 2){
PRINT_INFO("Curve is not connected to 2 surfaces.\n");
curve->get_eval_tool()->debug_draw_facet_edges(CUBIT_MAGENTA_INDEX);
}
while (curve_surfs.size())
{
FacetSurface* curve_surf = curve_surfs.pop();
if (marked.erase(curve_surf))
stack.append( curve_surf );
}
}
}
// Remove output surfaces from input list
// At this point, "marked" contains all the surfaces not in "ouput_patch"
remaining_surfs.last();
for (i = remaining_surfs.size(); i--; )
if (marked.find(remaining_surfs.step_and_get()) == marked.end())
remaining_surfs.change_to( 0 );
remaining_surfs.remove_all_with_value( 0 );
return CUBIT_SUCCESS;
}
| CubitString FacetQueryEngine::get_engine_version_string | ( | ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 178 of file FacetQueryEngine.cpp.
{
CubitString version_string = "Facet Geometry Engine version ";
version_string += CubitString::number(get_major_version());
version_string += CubitString(".");
version_string += CubitString::number(get_minor_version());
version_string += CubitString(".");
version_string += CubitString::number(get_subminor_version());
return version_string;
}
| CubitStatus FacetQueryEngine::get_graphics | ( | BodySM * | bodysm, |
| GMem * | g_mem, | ||
| std::vector< Surface * > & | surface_to_facets_vector, | ||
| std::vector< TopologyBridge * > & | vertex_edge_to_point_vector, | ||
| std::vector< std::pair< TopologyBridge *, std::pair< int, int > > > & | facet_edges_on_curves, | ||
| unsigned short | normal_tolerance, | ||
| double | distance_tolerance, | ||
| double | max_edge_length | ||
| ) | const [virtual] |
Reimplemented from GeometryQueryEngine.
Definition at line 443 of file FacetQueryEngine.cpp.
{
FacetBody *facet_body = CAST_TO(bodysm, FacetBody );
if( NULL == facet_body )
return CUBIT_FAILURE;
DLIList<Surface*> surfaces;
bodysm->surfaces( surfaces );
//unmark all the points
for( int i=surfaces.size(); i--; )
{
Surface *tmp_surf = surfaces.get_and_step();
FacetSurface *facet_surface = CAST_TO( tmp_surf, FacetSurface );
DLIList<CubitPoint*> surface_points;
facet_surface->get_my_points( surface_points );
for( int k=surface_points.size(); k--; )
surface_points.get_and_step()->marked(0);
}
DLIList<CubitFacet*> all_facets;
int point_index = 0;
std::vector<CubitPoint*> all_points;
for( int i=surfaces.size(); i--; )
{
Surface *tmp_surf = surfaces.get_and_step();
FacetSurface *facet_surface = CAST_TO( tmp_surf, FacetSurface );
DLIList<CubitFacet*> surface_facets;
DLIList<CubitPoint*> surface_points;
facet_surface->get_my_facets(surface_facets, surface_points);
surface_facets.reset();
all_facets += surface_facets;
for( int k=surface_points.size(); k--; )
{
CubitPoint *tmp_pt = surface_points.get_and_step();
if( tmp_pt->marked() == 0 )
{
all_points.push_back( tmp_pt );
point_index++;
tmp_pt->marked( point_index );
vertex_edge_to_point_vector.push_back( tmp_surf );
}
}
surface_facets.reset();
for( int k=surface_facets.size(); k--; )
surface_to_facets_vector.push_back( tmp_surf );
}
//now stuff them into the g_mem
g_mem->allocate_tri( all_facets.size() );
g_mem->fListCount = all_facets.size() * 4;
g_mem->pointListCount = all_points.size();
GPoint* pt_itor = g_mem->point_list();
for ( size_t i = 0; i < all_points.size(); i++ )
{
CubitPoint* point = all_points[i];
pt_itor->x = (float)point->x();
pt_itor->y = (float)point->y();
pt_itor->z = (float)point->z();
pt_itor++;
}
// Copy facets to Gmem
all_facets.reset();
int* f_itor = g_mem->facet_list();
for ( int i = 0; i < all_facets.size(); i++ )
{
*(f_itor++) = 3;
CubitFacet* facet = all_facets.get_and_step();
for ( int j = 0; j < 3; j++ )
{
*(f_itor++) = facet->point(j)->marked() - 1; //go back to zero-based
}
}
//get all the curves
DLIList<Curve*> curves;
bodysm->curves( curves );
for( int i=curves.size(); i--; )
{
Curve *tmp_curve = curves.get_and_step();
FacetCurve *facet_curve = CAST_TO( tmp_curve, FacetCurve );
//get all the curves
DLIList<CubitFacetEdge*> curve_facets;
facet_curve->get_facets(curve_facets);
DLIList<CubitPoint*> curve_points;
facet_curve->get_points(curve_points);
curve_points.reset();
curve_facets.reset();
for( int k=0; k<curve_points.size(); k++ )
{
CubitPoint *tmp_pt = curve_points.get_and_step();
assert( tmp_pt->marked() );
if( k == curve_points.size() - 1 )
break;
int index1 = tmp_pt->marked();
int index2 = curve_points.get()->marked();
vertex_edge_to_point_vector[index1-1] = tmp_curve;
facet_edges_on_curves.push_back( std::make_pair( tmp_curve, std::make_pair( index1-1, index2-1) ) );
}
}
//get all the vertices
DLIList<TBPoint*> points;
bodysm->points( points );
for( int i=points.size(); i--; )
{
TBPoint *tmp_pt = points.get_and_step();
FacetPoint *facet_point = CAST_TO( tmp_pt, FacetPoint );
CubitPoint *cubit_pt = facet_point->get_cubit_point();
assert( cubit_pt->marked() );
vertex_edge_to_point_vector[cubit_pt->marked()-1] = tmp_pt;
}
//reset the marks back to zero
for ( unsigned int i = 0; i < all_points.size(); i++ )
all_points[i]->marked(0);
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::get_graphics | ( | Surface * | surface_ptr, |
| GMem * | gMem, | ||
| unsigned short | normal_tolerance, | ||
| double | distance_tolerance, | ||
| double | max_edge_length | ||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 589 of file FacetQueryEngine.cpp.
{
if( !gMem )
return CUBIT_FAILURE;
// get the FacetSurface.
int i;
FacetSurface *facet_surf_ptr = CAST_TO(surface_ptr,FacetSurface);
if( ! facet_surf_ptr )
return CUBIT_FAILURE;
// get the facets for the surface
DLIList<CubitFacet*> surface_facets;
DLIList<CubitPoint*> surface_points;
facet_surf_ptr->get_my_facets(surface_facets, surface_points);
// set return values, and if GMem is NULL return
// (caller just wanted to know the counts.)
int number_points = surface_points.size();
int number_triangles = surface_facets.size();
// Allocate space in GMem
gMem->allocate_tri(number_triangles);
gMem->fListCount = surface_facets.size() * 4;
gMem->pointListCount = number_points;
// Copy points to GMem
surface_points.reset();
GPoint* pt_itor = gMem->point_list();
for ( i = 0; i < number_points; i++ )
{
CubitPoint* point = surface_points.get_and_step();
pt_itor->x = (float)point->x();
pt_itor->y = (float)point->y();
pt_itor->z = (float)point->z();
point->marked(i);
pt_itor++;
}
// Copy facets to Gmem
surface_facets.reset();
int* f_itor = gMem->facet_list();
for ( i = 0; i < number_triangles; i++ )
{
*(f_itor++) = 3;
CubitFacet* facet = surface_facets.get_and_step();
for ( int j = 0; j < 3; j++ )
*(f_itor++) = facet->point(j)->marked();
}
// cleanup
while( surface_points.size() )
surface_points.pop()->marked(0);
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::get_graphics | ( | Curve * | curve_ptr, |
| GMem * | gMem, | ||
| double | angle_tolerance = 0, |
||
| double | distance_tolerance = 0, |
||
| double | max_edge_length = 0 |
||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 655 of file FacetQueryEngine.cpp.
{
// get the FacetCurve.
FacetCurve *facet_curv_ptr = CAST_TO(curve_ptr,FacetCurve);
DLIList<CubitFacetEdge*> curve_facets;
facet_curv_ptr->get_facets(curve_facets);
int number_facets = curve_facets.size();
DLIList<CubitPoint*> curve_points;
facet_curv_ptr->get_points(curve_points);
curve_points.reset();
curve_facets.reset();
int num_points = curve_points.size();
GPoint *new_point_list = new GPoint[num_points];
int *new_facet_list = new int [number_facets*3];
int ii;
CubitPoint *cur_pnt;
for ( ii = 0; ii < num_points; ii++ )
{
cur_pnt = curve_points.get();
new_point_list[ii].x = cur_pnt->x();
new_point_list[ii].y = cur_pnt->y();
new_point_list[ii].z = cur_pnt->z();
//mark the point with the index into the point list.
//This is very important to make sure we can index these
//points when we do the facet array.
curve_points.get_and_step()->marked(ii);
}
for ( ii = 0; ii < number_facets; ii++ )
{
//All our facets are segments. So the first value is 2.
int index_count = 3*ii;
new_facet_list[index_count] = 2;
int jj = index_count + 1;
int ll, kk;
CubitFacetEdge *facet_ptr = curve_facets.get_and_step();
CubitPoint *temp_point;
for ( kk = jj, ll = 0; kk < jj+2; kk++, ll++)
{
temp_point = facet_ptr->point(ll);
int index_to_point = temp_point->marked();
if ( index_to_point < 0 || index_to_point > num_points )
{
PRINT_ERROR("Bad logic in converting edge facets to drawing facets.\n");
delete[] new_point_list;
delete[] new_facet_list;
return CUBIT_FAILURE;
}
new_facet_list[kk] = index_to_point;
}
}
gMem->replace_point_list(new_point_list, num_points, num_points);
gMem->replace_facet_list(new_facet_list, number_facets*3, number_facets*3);
gMem->points_consolidated(CUBIT_TRUE);
return CUBIT_SUCCESS;
}
| int FacetQueryEngine::get_hash_key | ( | int | id | ) | [static, private] |
Definition at line 4439 of file FacetQueryEngine.cpp.
{
int key = id % hashPointSize;
return key;
}
| CubitPoint * FacetQueryEngine::get_hash_point | ( | int | id | ) | [static, private] |
Definition at line 4402 of file FacetQueryEngine.cpp.
{
int key = get_hash_key( id );
int ii;
int found = 0;
CubitPoint *point_ptr;
for (ii=0; ii<hashPointArray[key].size() && !found; ii++)
{
point_ptr = hashPointArray[key].get_and_step();
if (point_ptr->id() == id)
{
return point_ptr;
}
}
return (CubitPoint*)NULL;
}
| CubitStatus FacetQueryEngine::get_intersections | ( | Curve * | , |
| CubitVector & | point1, | ||
| CubitVector & | , | ||
| DLIList< CubitVector > & | , | ||
| CubitBoolean | , | ||
| CubitBoolean | |||
| ) | [virtual] |
Definition at line 765 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::get_intersections | ( | Curve * | , |
| Curve * | , | ||
| DLIList< CubitVector > & | , | ||
| CubitBoolean | , | ||
| CubitBoolean | |||
| ) | [virtual] |
Definition at line 775 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::get_intersections | ( | Curve * | ref_edge1, |
| Curve * | ref_edge2, | ||
| DLIList< CubitVector > & | intersection_list, | ||
| double | offset, | ||
| CubitBoolean | ext_first = CUBIT_TRUE |
||
| ) | [virtual] |
Definition at line 783 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::get_intersections | ( | Curve * | ref_edge, |
| Surface * | ref_face, | ||
| DLIList< CubitVector > & | intersection_list, | ||
| CubitBoolean | bounded = CUBIT_FALSE |
||
| ) | [virtual] |
Definition at line 793 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::get_isoparametric_points | ( | Surface * | , |
| int & | nu, | ||
| int & | nv, | ||
| GMem *& | |||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 722 of file FacetQueryEngine.cpp.
{
nu = nv = 0;
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| int FacetQueryEngine::get_major_version | ( | ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 163 of file FacetQueryEngine.cpp.
{
return FQE_MAJOR_VERSION;
}
| int FacetQueryEngine::get_minor_version | ( | ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 168 of file FacetQueryEngine.cpp.
{
return FQE_MINOR_VERSION;
}
| CubitStatus FacetQueryEngine::get_point_containment | ( | DLIList< BodySM * > & | bodysm_list, |
| DLIList< CubitVector > & | point_list, | ||
| double | tolerance, | ||
| bool | allow_pts_in_multiple_bodies, | ||
| std::vector< std::pair< BodySM *, std::vector< int > > > & | bodysm_to_pt_indices | ||
| ) | [virtual] |
Reimplemented from GeometryQueryEngine.
Definition at line 5275 of file FacetQueryEngine.cpp.
{
//convert all the BodySMs into FacetBodies
DLIList<FacetBody*> body_list;
for( int k=bodysm_list.size(); k--; )
{
BodySM *body_sm = bodysm_list.get_and_step();
FacetBody *facet_body = dynamic_cast<FacetBody*>(body_sm);
if( !facet_body )
return CUBIT_FAILURE;
body_list.append( facet_body );
}
//stuff all the points into the atree
AbstractTree<ContainmentPoint*> *atree = new RTree<ContainmentPoint*>( tolerance );
std::vector<ContainmentPoint*> atree_nodes;
int num_points = point_list.size();
for( int i=0; i<num_points; i++ )
{
ContainmentPoint *tmp_pt = new ContainmentPoint();
tmp_pt->pt_coordinates = &(point_list[i]);
tmp_pt->index = i;
atree->add( tmp_pt );
atree_nodes.push_back( tmp_pt );
}
int num_bodies = body_list.size();
if( num_bodies > 10 )
{
char message[128];
sprintf(message, "Point containment routine: %d points %d volumes.", num_points, num_bodies );
AppUtil::instance()->progress_tool()->start(0, num_bodies,
"Progress", message, TRUE, TRUE );
}
//for each body
//get the points in the bbox of the body
for( int i=0; i<body_list.size(); i++ )
{
FacetBody *facet_body = body_list[i];
CubitBox cubit_box = facet_body->bounding_box();
double range_ratio = cubit_box.maximum_range() / cubit_box.minimum_range();
//find the points in the bounding box
DLIList<ContainmentPoint*> close_pts;
atree->find( cubit_box, close_pts );
std::vector<int> pts_in_body;
//if( 0 ) // old ray-shooting
//if( 1 ) // new octree
if( range_ratio < CUTOFF_BBOX_RANGE_RATIO && (close_pts.size() > CUTOFF_NUM_NODES /*pow( pow(2, CUTOFF_OCTREE_DEPTH), 3) */ ) ) // smart
{
// build octree
RefEntity* ref_ent = dynamic_cast<RefEntity*>( facet_body->topology_entity() );
DLIList<RefEntity*> ref_entity_list;
ref_entity_list.insert( ref_ent );
CubitOctreeGeneratorVolumes octree_generator( ref_entity_list);
octree_generator.generate_full_octree();
for( int k=0; k<close_pts.size(); k++ )
{
//ask each point if it is in the body
CubitVector tmp_vec = *(close_pts[k]->pt_coordinates);
CubitPointContainment pt_cont;
pt_cont = octree_generator.point_containment( tmp_vec, tolerance );
switch( pt_cont )
{
case CUBIT_PNT_INSIDE:
if( false == allow_pts_in_multiple_bodies )
atree->remove( close_pts[k] );
pts_in_body.push_back( close_pts[k]->index );
//GfxDebug::draw_point(tmp_vec.x(), tmp_vec.y(), tmp_vec.z(), CUBIT_BLUE_INDEX);
//PRINT_INFO(" INSIDE ");
break;
case CUBIT_PNT_BOUNDARY:
pt_cont = facet_body->point_containment( tmp_vec, tolerance );
if( CUBIT_PNT_INSIDE == pt_cont || CUBIT_PNT_BOUNDARY == pt_cont )
{
if( false == allow_pts_in_multiple_bodies )
atree->remove( close_pts[k] );
pts_in_body.push_back( close_pts[k]->index );
}
//GfxDebug::draw_point(tmp_vec.x(), tmp_vec.y(), tmp_vec.z(), CUBIT_GREEN_INDEX);
//PRINT_INFO(" BOUNDARY ");
break;
case CUBIT_PNT_OUTSIDE:
// do nothing
//GfxDebug::draw_point(tmp_vec.x(), tmp_vec.y(), tmp_vec.z(), CUBIT_RED_INDEX);
//PRINT_INFO(" OUTSIDE ");
break;
default:
break;
}
}
}
else {
for( int k=0; k<close_pts.size(); k++ )
{
//ask each point if it is in the body
CubitVector tmp_vec = *(close_pts[k]->pt_coordinates);
CubitPointContainment pt_cont = facet_body->point_containment( tmp_vec, tolerance );
if( CUBIT_PNT_INSIDE == pt_cont || CUBIT_PNT_BOUNDARY == pt_cont )
{
if( false == allow_pts_in_multiple_bodies )
atree->remove( close_pts[k] );
pts_in_body.push_back( close_pts[k]->index );
}
}
}
if( num_bodies > 10 )
AppUtil::instance()->progress_tool()->step();
if(AppUtil::instance()->interrupt())
{
if( num_bodies > 10 )
AppUtil::instance()->progress_tool()->end();
//clean up
while( atree_nodes.size() )
{
delete atree_nodes.back();
atree_nodes.pop_back();
}
delete atree;
return CUBIT_FAILURE;
}
bodysm_to_pt_indices.push_back( std::make_pair( bodysm_list[i], pts_in_body ) );
}
//cleanup
while( atree_nodes.size() )
{
delete atree_nodes.back();
atree_nodes.pop_back();
}
delete atree;
if( num_bodies > 10 )
AppUtil::instance()->progress_tool()->end();
return CUBIT_SUCCESS;
}
| double FacetQueryEngine::get_sme_resabs_tolerance | ( | ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 2605 of file FacetQueryEngine.cpp.
{
return GEOMETRY_RESABS;
}
| int FacetQueryEngine::get_subminor_version | ( | ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 173 of file FacetQueryEngine.cpp.
{
return FQE_SUBMINOR_VERSION;
}
| CubitStatus FacetQueryEngine::get_u_isoparametric_points | ( | Surface * | ref_face_ptr, |
| double | v, | ||
| int & | n, | ||
| GMem *& | gMem | ||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 731 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::get_v_isoparametric_points | ( | Surface * | ref_face_ptr, |
| double | u, | ||
| int & | n, | ||
| GMem *& | gMem | ||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 739 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::import_facets | ( | const char * | file_name, |
| CubitBoolean | use_feature_angle, | ||
| double | feature_angle, | ||
| double | tolerance, | ||
| int | interp_order, | ||
| CubitBoolean | smooth_non_manifold, | ||
| CubitBoolean | split_surfaces, | ||
| CubitBoolean | stitch, | ||
| CubitBoolean | improve, | ||
| DLIList< CubitQuadFacet * > & | quad_facet_list, | ||
| DLIList< CubitFacet * > & | tri_facet_list, | ||
| DLIList< Surface * > & | surface_list, | ||
| FacetFileFormat | file_format = CUBIT_FACET_FILE |
||
| ) |
Definition at line 3379 of file FacetQueryEngine.cpp.
{
DLIList <CubitFacet *>tfacet_list;
DLIList <CubitQuadFacet *>qfacet_list;
DLIList <CubitPoint *>point_list;
ShellSM *shell_ptr;
DLIList<ShellSM*> shell_list;
Lump *lump_ptr;
DLIList<Lump*> lump_list;
BodySM *bodysm_ptr;
Body *body_ptr;
GeometryQueryTool *gti = GeometryQueryTool::instance();
FacetShell* facet_shell;
DLIList<DLIList<CubitFacet *> *> shell_facet_list;
int ishell, ii;
CubitBoolean is_water_tight = CUBIT_TRUE;
// read the facets from a file
int *conn = NULL;
int npoints = 0;
int nfacets = 0;
int nquad = 0;
int ntri = 0;
int prev_vert;
int prev_edge;
int prev_face;
int prev_vol;
int prev_bod;
long stl_seek_address=0;
bool stl_multiple_parts = true;
CubitStatus rv;
// Here we add the capability to read stl files with more than one part.
while ( stl_multiple_parts == true ) {
stl_multiple_parts = false;
prev_vert = gti->num_ref_vertices();
prev_edge = gti->num_ref_edges();
prev_face = gti->num_ref_faces();
prev_vol = gti->num_ref_volumes();
prev_bod = gti->num_bodies();
switch (file_format)
{
case STL_FILE:
tfacet_list.clean_out(); // In case there are multiple parts in the stl file
point_list.clean_out();
shell_list.clean_out();
lump_list.clean_out();
shell_facet_list.clean_out();
if (tolerance>0)
{
rv = read_facets_stl_tolerance(tfacet_list, point_list, file_name, npoints, ntri, stl_seek_address, tolerance);
}
else
{
rv = read_facets_stl(tfacet_list, point_list, file_name, npoints, ntri, stl_seek_address);
}
PRINT_INFO(" %d facets read.\n", ntri);
if ( (rv == CUBIT_SUCCESS) && (stl_seek_address) > 0 ) stl_multiple_parts = true;
nfacets = ntri;
if (rv != CUBIT_SUCCESS)
{
goto end_import_facets;
}
break;
case CUBIT_FACET_FILE:
case AVS_FILE:
rv = read_facets( file_name, conn, npoints, nquad, ntri, file_format );
nfacets = ntri + nquad;
if (rv != CUBIT_SUCCESS)
goto end_import_facets;
// make cubit facet entities from the points and connectivity
if (nquad > 0)
rv = make_facets(conn, nfacets, qfacet_list);
if (ntri > 0)
rv = make_facets(conn, nfacets, tfacet_list);
if (rv != CUBIT_SUCCESS)
goto end_import_facets;
get_all_hash_points(point_list);
delete_hash_points();
break;
case CHOLLA_FILE:
rv = read_cholla_file( file_name, feature_angle, point_list, tfacet_list );
nquad = 0;
ntri = tfacet_list.size();
npoints = point_list.size();
break;
case FROM_FACET_LIST:
tfacet_list = tri_facet_list;
qfacet_list = quad_facet_list;
if (tfacet_list.size() + qfacet_list.size() == 0)
{
PRINT_ERROR("No facets found to build geometry\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
break;
default:
assert(0); // unrecognized file format
break;
}
if (tfacet_list.size() + qfacet_list.size() == 0)
{
PRINT_ERROR("No facets read from file %s.\n", file_name);
rv = CUBIT_FAILURE;
goto end_import_facets;
}
else
{
PRINT_INFO("Building facet-based geometry from %d facets...\n",
tfacet_list.size() + qfacet_list.size() );
}
// if (fix)
// {
// rv = check_facets( point_list, tfacet_list );
// }
if (0)
{
// Call function to generate an x-y-z file for a CTH/SPH simulation
// the following is an exampl call...
//make_sph( point_list, tfacet_list, 100.0, "fem1-sph100.xyz" );
}
if (0)
{
// This is an example of using the export_facets function. Writes
// a facet file of all facets in the list
//commented out because otherwise it's a compiler warning.
// char filename[128];
// strcpy(filename, "my_test.facets");
// export_facets(tfacet_list,filename);
}
// split the facets into shells if needed
rv = FacetDataUtil::split_into_shells(tfacet_list, qfacet_list,
shell_facet_list, is_water_tight);
if (rv != CUBIT_SUCCESS)
{
PRINT_ERROR("Error processing facets from %s.\n", file_name);
goto end_import_facets;
}
// if the facets aren't watertight, see if they can be merged
if (!is_water_tight && stitch)
{
rv = FacetDataUtil::stitch_facets(shell_facet_list,
GEOMETRY_RESABS,
is_water_tight);
if (rv != CUBIT_SUCCESS)
{
PRINT_WARNING("Couldn't stitch facets.\n");
}
}
DLIList <CubitFacet *> *facet_list_ptr;
if (improve)
{
for (ishell = 0; ishell < shell_facet_list.size(); ishell++)
{
facet_list_ptr = shell_facet_list.get_and_step();
rv = FacetDataUtil::collapse_short_edges( *facet_list_ptr, CUBIT_TRUE );
if (rv != CUBIT_SUCCESS)
{
PRINT_WARNING("Couldn't improve facets.\n");
}
}
}
// check for consistent orientations on the facets for each shell
for (ishell = 0; ishell < shell_facet_list.size(); ishell++)
{
facet_list_ptr = shell_facet_list.get_and_step();
rv = ChollaEngine::check_all_facet_orientations(*facet_list_ptr,
CUBIT_TRUE);
if (rv != CUBIT_SUCCESS)
{
PRINT_WARNING("Couldn't set consistent orientation for facets.\n");
}
// check to see that we have a positive enclosed volume (note this only works for
// a single shell. Will need to do something else for multiple shells
if (shell_facet_list.size() == 1)
{
double volume = FacetEvalTool::contained_volume(*facet_list_ptr);
if (volume < 0.0)
{
FacetEvalTool::reverse_facets(*facet_list_ptr);
}
}
}
// create the surface geometry
if (!use_feature_angle)
feature_angle = -1.0;
std::vector< std::vector<Surface*> > list_of_shells;
for (ishell = 0; ishell < shell_facet_list.size(); ishell++)
{
DLIList <Surface *> shell_surfaces;
DLIList <CubitPoint *> mypoint_list;
facet_list_ptr = shell_facet_list.get_and_step();
if(facet_list_ptr == NULL)
rv = CUBIT_FAILURE;
else
rv = FacetModifyEngine::instance()->build_facet_surface( NULL,
*facet_list_ptr, mypoint_list,
feature_angle, interp_order,
smooth_non_manifold,
split_surfaces, shell_surfaces);
if (rv != CUBIT_SUCCESS || shell_surfaces.size() == 0)
{
PRINT_ERROR("Couldn't build facet based geometry from facets in %s\n", file_name);
rv = CUBIT_FAILURE;
goto end_import_facets;
}
list_of_shells.push_back( shell_surfaces.as_vector() );
}
// make a shell out of these surfaces
if( split_surfaces ) //make a shell for each and every surface
{
for( size_t k=0; k<list_of_shells.size(); k++ )
{
std::vector<Surface*> shell_surfaces = list_of_shells[k];
for( size_t i=0; i<shell_surfaces.size(); i++ )
{
DLIList<Surface*> sheet_body_surfaces;
sheet_body_surfaces.append( shell_surfaces[i] );
rv = FacetModifyEngine::instance()->make_facet_shell(sheet_body_surfaces, shell_ptr);
if ( shell_ptr == NULL || rv != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems building facet based shell entity.\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
//set the sense
facet_shell = CAST_TO( shell_ptr, FacetShell );
FacetSurface* facet_surf = CAST_TO( sheet_body_surfaces.get(), FacetSurface );
facet_surf->set_shell_sense( facet_shell, CUBIT_FORWARD );
surface_list.append( sheet_body_surfaces.get() );
shell_list.clean_out();
shell_list.append( shell_ptr );
rv = FacetModifyEngine::instance()->make_facet_lump(shell_list,lump_ptr);
if ( lump_ptr == NULL || rv != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems building facet based lump entity.\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
lump_list.clean_out();
lump_list.append(lump_ptr);
rv = FacetModifyEngine::instance()->make_facet_body(lump_list,bodysm_ptr);
body_ptr = GeometryQueryTool::instance()->make_Body(bodysm_ptr);
if ( body_ptr == NULL || rv != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems building facet based body entity.\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
}
}
}
else //make a shell out of all these surfaces
{
for( size_t k=0; k<list_of_shells.size(); k++ )
{
DLIList<Surface*> shell_surfaces( list_of_shells[k] );
// make a shell out of these surfaces
rv = FacetModifyEngine::instance()->make_facet_shell(shell_surfaces, shell_ptr);
if ( shell_ptr == NULL || rv != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems building facet based shell entity.\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
//Set the sense for the surfaces (will be cofaces) on this shell.
//Assumption: The sense is always forward when creating geom from facets.
// (This may not be correct -especially with multiple shells in a body)
facet_shell = CAST_TO( shell_ptr, FacetShell );
for( ii = shell_surfaces.size(); ii > 0; ii-- )
{
Surface* surf = shell_surfaces.get_and_step();
FacetSurface* facet_surf = CAST_TO( surf, FacetSurface );
facet_surf->set_shell_sense( facet_shell, CUBIT_FORWARD );
}
surface_list += shell_surfaces;
shell_list.append(shell_ptr);
}
// make a body out of it
rv = FacetModifyEngine::instance()->make_facet_lump(shell_list,lump_ptr);
if ( lump_ptr == NULL || rv != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems building facet based lump entity.\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
lump_list.append(lump_ptr);
rv = FacetModifyEngine::instance()->make_facet_body(lump_list,bodysm_ptr);
body_ptr = GeometryQueryTool::instance()->make_Body(bodysm_ptr);
if ( body_ptr == NULL || rv != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems building facet based body entity.\n");
rv = CUBIT_FAILURE;
goto end_import_facets;
}
}
if(gti->num_bodies() - prev_bod > 1)
PRINT_INFO("Bodies successfully created.\n");
else
PRINT_INFO("Body successfully created.\n");
PRINT_INFO(" Number of new vertices = %d\n", gti->num_ref_vertices() - prev_vert);
PRINT_INFO(" Number of new curves = %d\n", gti->num_ref_edges() - prev_edge);
PRINT_INFO(" Number of new surfaces = %d\n", gti->num_ref_faces() - prev_face);
PRINT_INFO(" Number of new shells = %d\n", shell_facet_list.size());
PRINT_INFO(" Number of new volumes = %d\n", gti->num_ref_volumes() - prev_vol);
PRINT_INFO(" Number of new bodies = %d\n", gti->num_bodies() - prev_bod);
if (!is_water_tight)
{
PRINT_WARNING("Volume generated does not completely close. 3D meshing (ie. hex/tet) will not be permitted.\n");
PRINT_INFO("Hint: In some cases the \"stitch\" option on the import command may correct the problem.\n");
}
} // end while ( stl_multiple_parts == true )
end_import_facets:
if (conn != NULL)
delete [] conn;
for (ii=0; ii<shell_list.size(); ii++)
delete shell_facet_list.get_and_step();
quad_facet_list = qfacet_list;
tri_facet_list = tfacet_list;
return rv;
}
| CubitStatus FacetQueryEngine::import_solid_model | ( | const char * | file_name, |
| Model_File_Type | file_type, | ||
| DLIList< TopologyBridge * > & | imported_entities, | ||
| ModelImportOptions & | import_options | ||
| ) | [virtual] |
R CubitStatus R- CUBIT_SUCCESS/CUBIT_FAILURE I file_ptr I- A pointer to the file to read (can be NULL for IGES and STEP files). I file_type I- Type of file.
Implements GeometryQueryEngine.
Definition at line 1895 of file FacetQueryEngine.cpp.
{
errno = 0;
FILE *file_ptr = fopen(file_name, "rb");
if (!file_ptr)
{
PRINT_ERROR("Cannot open file: %s (%s)\n", file_name, strerror(errno) );
return CUBIT_FAILURE;
}
CubitStatus status = import_solid_model(file_ptr, imported_entities );
fclose(file_ptr);
return status;
}
| virtual CubitStatus FacetQueryEngine::import_solid_model | ( | DLIList< TopologyBridge * > & | imported_entities, |
| const char * | pBuffer, | ||
| const int | n_buffer_size | ||
| ) | [inline, virtual] |
Implements GeometryQueryEngine.
Definition at line 280 of file FacetQueryEngine.hpp.
{return CUBIT_FAILURE;}
| CubitStatus FacetQueryEngine::import_solid_model | ( | FILE * | file_ptr, |
| DLIList< TopologyBridge * > & | imported_entities | ||
| ) | [private] |
Definition at line 1914 of file FacetQueryEngine.cpp.
{
CubitPoint **points_array = NULL;
CurveFacetEvalTool **cfet_array = NULL;
FacetEvalTool **fet_array = NULL;
int num_points, num_edges, num_facets;
int num_cfet, num_fet;
// read in the file type "MESHED_BASED_GEOMETRY"
char fileType[19] = {0};
if( fread( fileType, 1, 19, file_ptr) != 19 )
{
PRINT_ERROR("Trouble reading in file type for MBG\n");
return CUBIT_FAILURE;
}
if( strncmp( fileType, "MESH_BASED_GEOMETRY", 19 ) )
{
PRINT_ERROR("Not MESH_BASED_GEOMETRY file type\n");
return CUBIT_FAILURE;
}
// read in the endian value
NCubitFile::CIOWrapper file_reader(file_ptr, 19, 0);
// read in version #
UnsignedInt32 version;
file_reader.Read( &version, 1 );
//Read in points/edges/facets
CubitStatus status;
status = restore_facets( file_ptr, file_reader.get_endian(),
num_points, num_edges,
num_facets, points_array, num_cfet,
num_fet, cfet_array, fet_array );
if( status == CUBIT_FAILURE)
{
PRINT_ERROR("Problems restore facets\n");
return CUBIT_FAILURE;
}
//Restore Topology
status = restore_topology( file_ptr, file_reader.get_endian(),
num_points, points_array,
num_cfet, cfet_array, num_fet,
fet_array, imported_entities);
if( status == CUBIT_FAILURE)
{
PRINT_ERROR("Problems restore MDB topology\n");
return CUBIT_FAILURE;
}
if(cfet_array != NULL)
delete [] cfet_array;
if(fet_array != NULL)
delete [] fet_array;
if(points_array != NULL)
delete [] points_array;
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::init_hash_points | ( | int | num_points | ) | [static, private] |
Definition at line 4357 of file FacetQueryEngine.cpp.
{
/* === find the next highest prime number */
hashPointSize = num_points / 10;
int i;
if (hashPointSize < 13) hashPointSize = 13;
else
{
i=2;
while (i<hashPointSize*0.5 + 1) {
if (hashPointSize % i == 0) {
i=2;
hashPointSize++;
}
else {
i++;
}
}
}
hashPointArray = new DLIList<CubitPoint*>[hashPointSize];
return CUBIT_SUCCESS;
}
| FacetQueryEngine * FacetQueryEngine::instance | ( | void | ) | [static] |
Definition at line 102 of file FacetQueryEngine.cpp.
{
if (instance_ == NULL ) {
instance_ = new FacetQueryEngine;
}
return instance_;
}
| CubitBoolean FacetQueryEngine::is_close | ( | CubitVector & | this_point, |
| DLIList< CubitFacet * > & | facet_list, | ||
| CubitFacet *& | lastFacet, | ||
| double | tol | ||
| ) |
Definition at line 4149 of file FacetQueryEngine.cpp.
{
CubitBoolean isclose = CUBIT_FALSE;
CubitBox bbox;
CubitVector close_point;
CubitFacet *facet;
int ii;
// set the first facet to be checked as the last one located
if (lastFacet) {
if (!facet_list.move_to(lastFacet)) {
facet_list.reset();
}
}
else {
facet_list.reset();
}
CubitBoolean done = CUBIT_FALSE;
// define a bounding box around the point
CubitVector ptmin( this_point.x() - tol,
this_point.y() - tol,
this_point.z() - tol );
CubitVector ptmax( this_point.x() + tol,
this_point.y() + tol,
this_point.z() + tol );
for ( ii = facet_list.size(); ii > 0 && !done; ii-- ) {
facet = facet_list.get_and_step();
// Try to trivially reject this facet with a bounding box test
bbox = facet->bounding_box();
if (ptmax.x() < bbox.minimum().x() ||
ptmin.x() > bbox.maximum().x()) {
continue;
}
if (ptmax.y() < bbox.minimum().y() ||
ptmin.y() > bbox.maximum().y()) {
continue;
}
if (ptmax.z() < bbox.minimum().z() ||
ptmin.z() > bbox.maximum().z()) {
continue;
}
// Only facets that pass the bounding box test will get past here!
// Project point to plane of the facet and determine its area coordinates
CubitVector pt_on_plane;
double dist_to_plane;
FacetEvalTool::project_to_facet_plane( facet, this_point, pt_on_plane, dist_to_plane );
CubitVector areacoord;
FacetEvalTool::facet_area_coordinate( facet, pt_on_plane, areacoord );
// If sign of areacoords are all positive then its inside the triangle
// and we are done - go interpolate the point. (use an absolute
// tolerance since the coordinates arenormalized)
if (areacoord.x() > -GEOMETRY_RESABS &&
areacoord.y() > -GEOMETRY_RESABS &&
areacoord.z() > -GEOMETRY_RESABS) {
FacetEvalTool::eval_facet( facet, areacoord, &close_point, NULL );
}
// otherwise find the closest vertex or edge to the projected point
else if (areacoord.x() < GEOMETRY_RESABS) {
if (areacoord.y() < GEOMETRY_RESABS) {
FacetEvalTool::eval_point( facet, 2, close_point );
}
else if(areacoord.z() < GEOMETRY_RESABS) {
FacetEvalTool::eval_point( facet, 1, close_point );
}
else {
FacetEvalTool::eval_edge( facet, 1, 2, pt_on_plane, close_point );
}
}
else if (areacoord.y() < GEOMETRY_RESABS) {
if (areacoord.z() < GEOMETRY_RESABS) {
FacetEvalTool::eval_point( facet, 0, close_point );
}
else {
FacetEvalTool::eval_edge( facet, 2, 0, pt_on_plane, close_point);
}
}
else {
FacetEvalTool::eval_edge( facet, 0, 1, pt_on_plane, close_point );
}
// keep track of the minimum distance
double dist = sqrt(FacetEvalToolUtils::sqr(close_point.x() - this_point.x()) +
FacetEvalToolUtils::sqr(close_point.y() - this_point.y()) +
FacetEvalToolUtils::sqr(close_point.z() - this_point.z()));
if (dist <= tol) {
done = CUBIT_TRUE;
isclose = CUBIT_TRUE;
lastFacet = facet;
}
}
return isclose;
}
| virtual CubitBoolean FacetQueryEngine::is_solid_modeler_type | ( | ) | const [inline, virtual] |
Definition at line 127 of file FacetQueryEngine.hpp.
{return CUBIT_FALSE;}
| BodySM * FacetQueryEngine::make_BodySM | ( | Surface * | ) | const [virtual] |
Definition at line 311 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (BodySM*) NULL;
}
| BodySM * FacetQueryEngine::make_BodySM | ( | DLIList< Lump * > & | ) | const [virtual] |
Definition at line 322 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (BodySM*) NULL;
}
| Curve * FacetQueryEngine::make_Curve | ( | Curve * | ) | const [virtual] |
Definition at line 217 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Curve*) NULL;
}
| Curve * FacetQueryEngine::make_Curve | ( | TBPoint const * | , |
| TBPoint const * | , | ||
| RefFace * | , | ||
| CubitVector * | |||
| ) | const [virtual] |
Definition at line 228 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Curve*) NULL;
}
| Curve * FacetQueryEngine::make_Curve | ( | GeometryType | , |
| TBPoint const * | , | ||
| TBPoint const * | , | ||
| DLIList< CubitVector * > & | , | ||
| RefFace * | |||
| ) | const [virtual] |
Definition at line 242 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Curve*) NULL;
}
| Curve * FacetQueryEngine::make_Curve | ( | GeometryType | , |
| TBPoint const * | , | ||
| TBPoint const * | , | ||
| CubitVector const * | , | ||
| CubitSense | |||
| ) | const [virtual] |
Definition at line 257 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Curve*) NULL;
}
| CubitStatus FacetQueryEngine::make_facets | ( | int * | conn, |
| int | nfacets, | ||
| DLIList< CubitQuadFacet * > & | facet_list | ||
| ) | [static] |
Definition at line 2642 of file FacetQueryEngine.cpp.
{
CubitQuadFacet *facet_ptr = NULL;
CubitStatus rv = CUBIT_SUCCESS;
CubitPoint *point0, *point1, *point2, *point3;
// create the facet array
for(int ii=0; ii<nfacets; ii++)
{
if (conn[ii*4+2] != conn[ii*4+3])
{
point0 = get_hash_point(conn[ii*4]);
point1 = get_hash_point(conn[ii*4+1]);
point2 = get_hash_point(conn[ii*4+2]);
point3 = get_hash_point(conn[ii*4+3]);
facet_ptr = new CubitQuadFacetData( point0, point1, point2, point3 );
if (!facet_ptr)
{
rv = CUBIT_FAILURE;
return rv;
}
facet_list.append( facet_ptr );
}
}
return rv;
}
| CubitStatus FacetQueryEngine::make_facets | ( | int * | conn, |
| int | nfacets, | ||
| DLIList< CubitFacet * > & | facet_list | ||
| ) | [static] |
Definition at line 2681 of file FacetQueryEngine.cpp.
{
CubitFacet *facet_ptr = NULL;
CubitStatus rv = CUBIT_SUCCESS;
CubitPoint *point0, *point1, *point2;
// create the facet array
for(int ii=0; ii<nfacets; ii++)
{
if (conn[ii*4+2] == conn[ii*4+3])
{
point0 = get_hash_point(conn[ii*4]);
point1 = get_hash_point(conn[ii*4+1]);
point2 = get_hash_point(conn[ii*4+2]);
if( (point0 == point1) || (point0 == point2) || (point1 == point2) ){
PRINT_ERROR("Point used more than once in a single facet. This is not allowed.\n");
return CUBIT_FAILURE;
}
if( !point0 || !point1 || !point2 ){
PRINT_ERROR("Point in facet is undefined. This is not allowed.\n");
return CUBIT_FAILURE;
}
facet_ptr = new CubitFacetData( point0, point1, point2 );
if (!facet_ptr)
{
rv = CUBIT_FAILURE;
return rv;
}
facet_list.append( facet_ptr );
}
}
return rv;
}
| Lump * FacetQueryEngine::make_Lump | ( | GeometryType | , |
| DLIList< Surface * > & | |||
| ) | const [virtual] |
Definition at line 299 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Lump*) NULL;
}
| TBPoint * FacetQueryEngine::make_Point | ( | GeometryType | point_type, |
| CubitVector const & | point | ||
| ) | const [virtual] |
Definition at line 205 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (TBPoint*) NULL;
}
| Surface * FacetQueryEngine::make_Surface | ( | Surface * | , |
| DLIList< Loop * > & | , | ||
| CubitBoolean | |||
| ) | const [virtual] |
Definition at line 272 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Surface*) NULL;
}
| Surface * FacetQueryEngine::make_Surface | ( | GeometryType | , |
| DLIList< Curve * > & | , | ||
| DLIList< Loop * > & | , | ||
| Surface * | |||
| ) | const [virtual] |
Definition at line 285 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return (Surface*) NULL;
}
| const char* FacetQueryEngine::modeler_type | ( | ) | [inline, virtual] |
Implements GeometryQueryEngine.
Definition at line 110 of file FacetQueryEngine.hpp.
{ return "facet"; }
| CubitStatus FacetQueryEngine::read_cholla_file | ( | const char * | file_name, |
| double & | feature_angle, | ||
| DLIList< CubitPoint * > & | point_list, | ||
| DLIList< CubitFacet * > & | facet_list | ||
| ) | [static] |
Definition at line 4032 of file FacetQueryEngine.cpp.
{
double angle = 135.0;
int num_tri = 0;
int num_quad = 0;
int num_edge = 0;
int num_vert = 0;
int* tri_edge = NULL;
int* quad_edge = NULL;
int* edge_vert = NULL;
double* vert = NULL;
double* edge_ctrl_pts = NULL;
double* tri_ctrl_pts = NULL;
double* quad_ctrl_pts = NULL;
int results_included = 0;
// importMesh and resolveFaceVectors are in Cholla.h
importMesh(file_name, &results_included, &angle, &num_tri, &num_quad, &num_edge,
&num_vert, &tri_edge, &quad_edge, &edge_vert, &vert,
&edge_ctrl_pts, &tri_ctrl_pts, &quad_ctrl_pts);
feature_angle = angle;
// create the points
CubitPoint **point_array = new CubitPoint * [num_vert];
double x, y, z;
int ii;
for (ii=0; ii<num_vert; ii++)
{
x = vert[ii*3];
y = vert[ii*3 + 1];
z = vert[ii*3 + 2];
point_array[ii] = (CubitPoint *) new CubitPointData( x, y, z );
point_list.append( point_array[ii] );
}
// create the edges
CubitFacetEdge **edge_array = new CubitFacetEdge * [num_edge];
int ip, jp;
for (ii=0; ii<num_edge; ii++)
{
ip = edge_vert[ii*2];
jp = edge_vert[ii*2 + 1];
assert(ip < num_vert && jp < num_vert && ip >= 0 && jp >= 0);
edge_array[ii] = (CubitFacetEdge *) new CubitFacetEdgeData( point_array[ip],
point_array[jp] );
}
// create the tri facets
int begin_face;
int jj, iedge;
CubitFacetEdge *edges[4];
CubitFacet *facet_ptr = NULL;
CubitQuadFacet *qfacet_ptr = NULL;
for (ii=0; ii<num_tri; ii++)
{
begin_face = 3 * ii;
for(jj=0; jj<3; jj++)
{
iedge = tri_edge[begin_face+jj];
edges[jj] = edge_array[iedge];
}
facet_ptr = (CubitFacet *)
new CubitFacetData(edges[0], edges[1], edges[2]);
facet_list.append(facet_ptr);
}
// create the quad facets
for (ii=0; ii<num_quad; ii++)
{
begin_face = 4 * ii;
for(jj=0; jj<4; jj++)
{
iedge = quad_edge[begin_face+jj];
edges[jj] = edge_array[iedge];
}
qfacet_ptr = (CubitQuadFacet *)
new CubitQuadFacetData(edges[0], edges[1], edges[2], edges[3]);
facet_list.append(qfacet_ptr->get_tri_facet(0));
facet_list.append(qfacet_ptr->get_tri_facet(1));
}
// delete the temp arrays
delete [] point_array;
delete [] edge_array;
delete [] tri_edge;
delete [] quad_edge;
delete [] edge_vert;
delete [] vert;
delete [] edge_ctrl_pts;
delete [] tri_ctrl_pts;
delete [] quad_ctrl_pts;
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::read_facets | ( | const char * | file_name, |
| int *& | conn, | ||
| int & | npoints, | ||
| int & | nquad, | ||
| int & | ntri, | ||
| FacetFileFormat | file_format = CUBIT_FACET_FILE |
||
| ) | [static] |
Definition at line 3770 of file FacetQueryEngine.cpp.
{
// open the file
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
{
PRINT_ERROR("Could not open file %s for reading\n", file_name);
return CUBIT_FAILURE;
}
PRINT_INFO("Reading facets...\n");
// read the number of nodes
int id;
int nfacets = 0;
int iline = 1;
char line[128];
if (fgets(line, 128, fp) == NULL)
{
PRINT_ERROR("Format error in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
int n;
char type_header[8];
CubitBoolean is_off_file = CUBIT_FALSE;
n = sscanf( line, "%s", type_header );
if( !strcmp( type_header, "OFF" ) ||
!strcmp( type_header, "off" ) )
{
PRINT_INFO( "Reading OFF file...\n" );
iline++;
if (fgets(line, 128, fp) == NULL) {
PRINT_ERROR("Format error in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
is_off_file = CUBIT_TRUE;
}
n = sscanf(line, "%d %d", &npoints, &nfacets);
if( !is_off_file )
{
if (n < 1 || ( n > 2 && file_format == CUBIT_FACET_FILE ) )
{
PRINT_ERROR("Format error in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
}
if (npoints <= 0)
{
PRINT_ERROR("Expecting number of nodes in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
if (n==1)
{
nfacets = 0;
}
else if (nfacets <= 0)
{
PRINT_ERROR("Format error in facet file %s on line %d reading number of facets\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
if (init_hash_points( npoints ) == CUBIT_FAILURE)
{
PRINT_ERROR("Can't allocate memory for points in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
// read the nodes
int ii;
double xx, yy, zz;
CubitPoint *new_point;
for (ii=0; ii<npoints; ii++)
{
iline++;
if (fgets(line, 128, fp)== NULL)
{
PRINT_ERROR("Format error in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
if( is_off_file )
{
n = sscanf( line, "%lf %lf %lf", &xx, &yy, &zz );
id = ii;
if (n != 3)
{
PRINT_ERROR("Format error in OFF file %s on line %d\n", file_name, iline);
PRINT_INFO(" Expecting 3 doubles, but instead read %d values\n", n);
fclose( fp );
return CUBIT_FAILURE;
}
}
else
{
n = sscanf(line, "%d %lf %lf %lf", &id, &xx, &yy, &zz );
if (n != 4)
{
PRINT_ERROR("Format error in facet file %s on line %d\n", file_name, iline);
PRINT_INFO(" Expecting 1 integer and 3 doubles, but instead read %d values\n", n);
fclose( fp );
return CUBIT_FAILURE;
}
}
new_point = (CubitPoint *) new CubitPointData( xx, yy, zz );
new_point->set_id( id );
add_hash_point( new_point );
}
// read the number of facets
if (nfacets == 0)
{
iline++;
if (fgets(line, 128, fp) == NULL)
{
PRINT_ERROR("Format error in facet file %s on line %d reading number of facets\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
n = sscanf(line, "%d", &nfacets);
if (n != 1)
{
PRINT_ERROR("Format error in facet file %s on line %d reading number of facets\n", file_name, iline);
PRINT_INFO(" Expecting <num facets>\n");
fclose( fp );
return CUBIT_FAILURE;
}
if (nfacets <= 0)
{
PRINT_ERROR("Format error in facet file %s on line %d reading number of facets\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
}
conn = new int [4*nfacets];
if (!conn)
{
PRINT_ERROR("Can't allocate memory for facets in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
ntri = nquad = 0;
// read the facets
for (ii=0; ii<nfacets; ii++)
{
iline++;
if (fgets(line, 128, fp) == NULL)
{
PRINT_ERROR("Format error in facet file %s on line %d\n", file_name, iline);
fclose( fp );
return CUBIT_FAILURE;
}
if( AVS_FILE == file_format )
{
n = sscanf( line, "%d %*d %*s %d %d %d %d", &id, &conn[4*ii],
&conn[4*ii+1], &conn[4*ii+2], &conn[4*ii+3] );
if( n < 4 || n > 5 )
{
PRINT_ERROR("Format error in avs file %s on line %d reading facets\n", file_name, iline);
PRINT_INFO("Expecting 6 or 7 values, but instead read %d values\n", n);
fclose( fp );
return CUBIT_FAILURE;
}
//duplicate the point
if( n == 4 )
{
conn[4*ii+3] = conn[4*ii+2];
ntri++;
}
else
{
nquad++;
}
}
else
{
// if( is_off_file )
// {
// n = sscanf( line, "%d %d %d %d", &id, &conn[4*ii], &conn[4*ii+1],
// &conn[4*ii+2], &conn[4*ii+3] );
// if (n < 4 || n > 5)
// {
// PRINT_ERROR("Format error in OFF file %s on line %d reading facets\n", file_name, iline);
// PRINT_INFO(" Expecting 4 or 5 integers, but instead read %d values\n", n);
// PRINT_INFO(" For example: <facet_size> <i0> <i1> <i2> [<i3>]\n");
// fclose( fp );
// return CUBIT_FAILURE;
// }
// // for triangles -- duplicate the point
// // if( n==3 )
// if( id==3 )
// {
// conn[4*ii+3] = conn[4*ii+2];
// ntri++;
// }
// else
// {
// nquad++;
// }
// }
// else
// {
n = sscanf(line, "%d %d %d %d %d", &id, &conn[4*ii], &conn[4*ii+1],
&conn[4*ii+2], &conn[4*ii+3] );
if (n < 4 || n > 5)
{
PRINT_ERROR("Format error in facet file %s on line %d reading facets\n", file_name, iline);
PRINT_INFO(" Expecting 4 or 5 integers, but instead read %d values\n", n);
PRINT_INFO(" For example: <id> <i0> <i1> <i2> [<i3>]\n");
fclose( fp );
return CUBIT_FAILURE;
}
// for triangles -- duplicate the point
if (n==4)
{
conn[4*ii+3] = conn[4*ii+2];
ntri++;
}
else
{
nquad++;
}
// }
}
}
fclose( fp );
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::read_facets | ( | FILE * | fp, |
| unsigned int | endian, | ||
| int & | num_facets, | ||
| int & | num_edges, | ||
| int & | num_points, | ||
| CubitFacet **& | facets, | ||
| CubitFacetEdge **& | edges, | ||
| CubitPoint **& | points | ||
| ) | [private] |
Definition at line 2039 of file FacetQueryEngine.cpp.
{
NCubitFile::CIOWrapper cio(endian, fp );
int ii;
// read points
UnsignedInt32 npoints;
double uu,vv,ss;
cio.Read(&npoints, 1);
num_points = (int)npoints;
if (num_points > 0)
{
double* coord_array = new double [num_points * 3];
double* uvs_array = new double [num_points * 3];
cio.Read(coord_array, npoints*3);
cio.Read(uvs_array, npoints*3);
// create CubitPoints
CubitPoint *point_ptr;
//CubitVector normal;
points = new CubitPoint * [num_points];
for(ii=0; ii<num_points; ii++)
{
point_ptr = (CubitPoint *) new CubitPointData( coord_array[ii*3],
coord_array[ii*3+1],
coord_array[ii*3+2] );
points[ii] = point_ptr;
uu = uvs_array[ii*3];
vv = uvs_array[ii*3+1];
ss = uvs_array[ii*3+2];
point_ptr->set_uvs(uu, vv, ss);
}
//Clean up
delete [] coord_array;
delete [] uvs_array;
}
//Read in Normals
int nnormals;
cio.Read(reinterpret_cast<UnsignedInt32*>(&nnormals), 1);
if( nnormals > 0 )
{
double* normal_array = new double [nnormals * 3];
int* normal_ids = new int[nnormals * 3];
cio.Read(normal_array, nnormals * 3);
cio.Read(reinterpret_cast<UnsignedInt32*>(normal_ids), nnormals);
CubitVector normal;
for(ii=0; ii<nnormals; ii++)
{
normal.x( normal_array[ii*3] );
normal.y( normal_array[ii*3+1] );
normal.z( normal_array[ii*3+2] );
points[ normal_ids[ii] ]->normal( normal );
}
//Clean up
delete [] normal_array;
delete [] normal_ids;
}
// read edges and edge control points
UnsignedInt32 nedges;
cio.Read(&nedges, 1);
num_edges = (int)nedges;
if (num_edges > 0)
{
UnsignedInt32 *edge_vert_array = new UnsignedInt32 [nedges*2];
cio.Read(edge_vert_array, nedges*2);
UnsignedInt32 nctrl_pts;
cio.Read(&nctrl_pts, 1);
double *control_points = NULL;
if (nctrl_pts > 0)
{
control_points = new double [nctrl_pts*3];
cio.Read(control_points, nctrl_pts*3);
}
unsigned id0, id1, ii;
edges = new CubitFacetEdge * [num_edges];
CubitFacetEdge *edge_ptr;
for(ii=0; ii<nedges; ii++)
{
id0 = edge_vert_array[ii*2];
id1 = edge_vert_array[ii*2+1];
edge_ptr = (CubitFacetEdge *) new CubitFacetEdgeData( points[id0], points[id1] );
edges[ii] = edge_ptr;
if (nctrl_pts > 0)
{
edge_ptr->set_control_points(&control_points[ii*NUM_EDGE_CPTS*3]);
}
}
//Clean up
delete [] edge_vert_array;
delete [] control_points;
edge_vert_array = NULL;
control_points = NULL;
}
// read the facets and the facet control points
UnsignedInt32 nfacets;
cio.Read(&nfacets, 1);
num_facets = (int)nfacets;
if(num_facets > 0)
{
UnsignedInt32 *facet_edge_array = new UnsignedInt32 [nfacets*3];
cio.Read(facet_edge_array, nfacets*3);
int *int_data = new int [nfacets*2];
cio.Read(reinterpret_cast<UnsignedInt32*>(int_data), nfacets*2);
UnsignedInt32 nctrl_pts;
cio.Read(&nctrl_pts, 1);
double *control_points = NULL;
if (nctrl_pts > 0)
{
control_points = new double [nctrl_pts*3];
cio.Read(control_points, nctrl_pts*3);
}
unsigned id0, id1, id2, ii;
CubitFacet *facet_ptr;
facets = new CubitFacet * [num_facets];
for (ii=0; ii<nfacets; ii++)
{
id0 = facet_edge_array[ii*3];
id1 = facet_edge_array[ii*3+1];
id2 = facet_edge_array[ii*3+2];
facet_ptr = (CubitFacet *) new CubitFacetData(edges[id0], edges[id1], edges[id2]);
facets[ii] = facet_ptr;
facet_ptr->is_flat( int_data[ii*2] );
facet_ptr->is_backwards( int_data[ii*2+1] );
if(nctrl_pts > 0)
{
facet_ptr->set_control_points(&control_points[ii*NUM_TRI_CPTS*3]);
}
}
//Clean up
delete [] facet_edge_array;
delete [] control_points;
delete [] int_data;
facet_edge_array = NULL;
control_points = NULL;
int_data = NULL;
}
// read the extra info at the surface boundaries
UnsignedInt32 num_c_zero_points = 0;
cio.Read(&num_c_zero_points, 1);
if (num_c_zero_points > 0)
{
UnsignedInt32 c_zero_int_data_size;
cio.Read(&c_zero_int_data_size, 1);
if (c_zero_int_data_size <= 0)
return CUBIT_FAILURE;
UnsignedInt32 *c_zero_int32_data = new UnsignedInt32 [c_zero_int_data_size];
cio.Read(c_zero_int32_data, c_zero_int_data_size);
int *c_zero_int_data = new int [c_zero_int_data_size];
unsigned int jj;
for (jj=0; jj<c_zero_int_data_size; jj++)
c_zero_int_data[jj] = (int) c_zero_int32_data[jj];
UnsignedInt32 c_zero_double_data_size;
cio.Read(&c_zero_double_data_size, 1);
if (c_zero_double_data_size <= 0) {
delete [] c_zero_int_data;
delete [] c_zero_int32_data;
return CUBIT_FAILURE;
}
double *c_zero_double_data = new double [c_zero_double_data_size];
cio.Read(c_zero_double_data, c_zero_double_data_size);
// create the facet boundary tool datas and assign to points
int didx = 0;
int iidx = 0;
UnsignedInt32 zz;
for (zz=0; zz<num_c_zero_points; zz++)
{
if (didx >= (int)c_zero_double_data_size ||
iidx >= (int)c_zero_int_data_size)
return CUBIT_FAILURE;
TDFacetBoundaryPoint::new_facet_boundary_point( points, facets,
iidx, didx, c_zero_int_data, c_zero_double_data );
}
//Clean up
delete [] c_zero_int_data;
delete [] c_zero_int32_data;
delete [] c_zero_double_data;
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::read_facets_stl | ( | DLIList< CubitFacet * > & | tfacet_list, |
| DLIList< CubitPoint * > & | point_list, | ||
| const char * | file_name, | ||
| int & | npoints, | ||
| int & | ntri, | ||
| long & | seek_address | ||
| ) |
APPEND facet to output facet_ptr list
Definition at line 3047 of file FacetQueryEngine.cpp.
{
ntri = 0;
npoints = 0;
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
{
PRINT_ERROR("Could not open file %s for reading\n", file_name);
seek_address = 0;
return CUBIT_FAILURE;
}
typedef std::map< CubitPoint * , int, CubitPointComparator > vMap;
vMap mm; // binary search tree to hold the vertices for efficiency
vMap::iterator pos;
bool append_to_facet_list=CUBIT_TRUE;
CubitBoolean is_ascii=CUBIT_FALSE;
if (!ensure_is_ascii_stl_file(fp, is_ascii))
{
seek_address = 0;
fclose(fp);
return CUBIT_FAILURE;
}
if (is_ascii==CUBIT_TRUE)
{
CubitPoint *point0,*point1,*point2;
CubitFacet *facet_ptr = NULL;
PRINT_INFO("Reading facets...\n");
fclose(fp);
fp = fopen(file_name, "r");
fseek(fp,seek_address,SEEK_SET);
char line[128], junk[30];
int numverts;
double xx[3], yy[3], zz[3];
int linenumber, num;
bool done, error_found, eof_found;
linenumber = 0;
strcpy(line,"");
done = false;
error_found = false;
eof_found = false;
while ( (strstr(line,"endsolid") == 0) && (error_found == false) ) {
numverts = 0;
while ( numverts < 3 ) {
if ( fgets(line,127,fp) == 0 ) {
linenumber++;
eof_found = true;
break; // EOF
}
linenumber++;
// makelowercase(line);
int len, ij;
len = strlen(line);
for ( ij = 0; ij < len; ij++ )
line[ij] = tolower(line[ij]);
if ( strstr(line,"endsolid") != 0 ) {
done = true;
break; // End of part definition
}
if ( strstr(line,"vertex") != 0 ) {
num = sscanf(line,"%s %le %le %le",junk,&xx[numverts],&yy[numverts],&zz[numverts]);
if ( num != 4 ) {
error_found = true;
break; // error in reading vertices
}
numverts += 1;
}
} // end of while ( numverts < 3 )
if ( (eof_found == true) || (done == true) ||
(error_found == true) || (numverts != 3) ) break;
point0 = (CubitPoint *) new CubitPointData(xx[0],yy[0],zz[0]);
pos=mm.find(point0);
if (pos==mm.end())
{
mm.insert ( vMap::value_type(point0, npoints));
point0->set_id( npoints ++ );
//point_list is output of functionAVS
point_list.append(point0);
}
else
{
delete point0;
point0=((*pos).first);
}
point1 = (CubitPoint *) new CubitPointData(xx[1],yy[1],zz[1]);
pos=mm.find(point1);
if (pos==mm.end())
{
mm.insert ( vMap::value_type(point1, npoints));
point1->set_id( npoints ++ );
//point_list is output of function
point_list.append(point1);
}
else
{
delete point1;
point1=((*pos).first);
}
point2 = (CubitPoint *) new CubitPointData(xx[2],yy[2],zz[2]);
pos=mm.find(point2);
if (pos==mm.end())
{
mm.insert ( vMap::value_type(point2, npoints));
point2->set_id( npoints ++ );
//point_list is output of function
point_list.append(point2);
}
else
{
delete point2;
point2=((*pos).first);
}
if (point0 && point1 && point2 && point0!=point1 && point1!=point2 && point2 !=point0)
{
facet_ptr = new CubitFacetData( point0, point1, point2 );
append_to_facet_list=CUBIT_TRUE;
}
else
{
append_to_facet_list=CUBIT_FALSE;
}
if (!facet_ptr)
{
seek_address = 0;
fclose(fp);
return CUBIT_FAILURE;
}
if (append_to_facet_list)
{
tfacet_list.append( facet_ptr );
ntri++;
}
}
seek_address = 0;
if ( eof_found == true ) {
PRINT_WARNING("Premature end-of-file on STL file. Body may be incomplete.\n");
fclose(fp);
return CUBIT_SUCCESS;
}
if ( error_found == true ) {
PRINT_WARNING("Error found while reading line number %d of file %s. Body may be incomplete.\n",
linenumber,file_name);
fclose(fp);
return CUBIT_SUCCESS;
}
if ( done == false ) {
PRINT_WARNING("Error found while reading line number %d of file %s. Body may be incomplete.\n",
linenumber,file_name);
fclose(fp);
return CUBIT_SUCCESS;
}
if ( (eof_found == false) && (error_found == false) && (done == true) ) {
while ( fgets(line,127,fp) != 0 ) {
if ( (strstr(line,"solid") != 0) && (strstr(line,"endsolid") == 0) ) {
seek_address = ftell(fp);
// PRINT_INFO("This STL file is a multipart file. Only the first part was read.\n");
break;
}
}
}
fclose(fp);
return CUBIT_SUCCESS;
}
else
{
fclose(fp);
// file is closed so that it can be opened as binary
fp = fopen(file_name, "rb");
if (fp == NULL)
{
PRINT_ERROR("Could not open file %s for reading\n", file_name);
return CUBIT_FAILURE;
}
CubitFacet *facet_ptr = NULL;
CubitPoint *point0,
*point1,
*point2;
char dummy;
int ii=0; // iterates through the facets of the file
float cur[12]; // an array to hold 48 bytes representing 1 facet
npoints=0; // only tri facets in stl files
//put file pointer back where you found it
fseek(fp, seek_address+80, SEEK_SET);
size_t count = fread(&ntri, 4, 1, fp);
if (count != 1) {
PRINT_ERROR("Trouble reading in number of triangles\n");
return CUBIT_FAILURE;
}
int distinct_ntri=ntri;
PRINT_INFO ("Reading facets...\n");
for (ii=0; ii<ntri; ii++) {
// read in 1 facet
if (fread(cur, 4, 12, fp) != 12)
{
PRINT_INFO ("Abnormal file termination %s \n", file_name); break;
}
count = fread(&dummy, 1, 1, fp);
count = fread(&dummy, 1, 1, fp);
//make point
point0 = (CubitPoint *) new CubitPointData( cur[3], cur[4], cur[5] );
pos=mm.find(point0);
if (pos==mm.end())
{
mm.insert ( vMap::value_type(point0, npoints));
point0->set_id( npoints ++ );
//point_list is output of function
point_list.append(point0);
}
else
{
delete point0;
point0=((*pos).first);
}
//make point
point1 = (CubitPoint *) new CubitPointData( cur[6], cur[7], cur[8] );
pos=mm.find(point1);
if (pos==mm.end())
{
mm.insert ( vMap::value_type(point1, npoints));
point1->set_id( npoints ++ );
//point_list is output of function
point_list.append(point1);
}
else
{
delete point1;
point1=((*pos).first);
}
//make point
point2 = (CubitPoint *) new CubitPointData( cur[9], cur[10], cur[11] );
pos=mm.find(point2);
if (pos==mm.end())
{
mm.insert ( vMap::value_type(point2, npoints));
point2->set_id( npoints ++ );
//point_list is output of function
point_list.append(point2);
}
else
{
delete point2;
point2=((*pos).first);
}
// this is to avoid a facet with all points on same line, which crashes CUBIT
// because of assertion
if (point0 && point1 && point2 && point0!=point1 && point1!=point2 && point2 !=point0)
{
facet_ptr = new CubitFacetData( point0, point1, point2 );
append_to_facet_list=CUBIT_TRUE;
}
else
{
append_to_facet_list=CUBIT_FALSE;
}
if (!facet_ptr)
{
fclose(fp);
return CUBIT_FAILURE;
}
if (append_to_facet_list)
{
tfacet_list.append( facet_ptr );
}
else
{
distinct_ntri--;
}
}
ntri=distinct_ntri;
//reading at or past EOF
long previous_pos = ftell(fp);
fread(&dummy, 1, 1, fp);
if( feof(fp) )
seek_address = 0;
else
{
fseek(fp, previous_pos, SEEK_SET);
seek_address = ftell(fp);
}
fclose(fp);
return CUBIT_SUCCESS;
}
}
| CubitStatus FacetQueryEngine::read_facets_stl_tolerance | ( | DLIList< CubitFacet * > & | tfacet_list, |
| DLIList< CubitPoint * > & | point_list, | ||
| const char * | file_name, | ||
| int & | npoints, | ||
| int & | ntri, | ||
| long & | seek_address, | ||
| double | tolerance | ||
| ) |
Definition at line 2816 of file FacetQueryEngine.cpp.
{
FILE *fp = fopen(file_name, "r");
if (fp == NULL)
{
PRINT_ERROR("Could not open file %s for reading\n", file_name);
seek_address = 0;
return CUBIT_FAILURE;
}
DLIList <CubitPoint *> file_points;
CubitPoint *current_point;
int points_in_file=0;
int ii;
CubitBoolean is_ascii=CUBIT_FALSE;
if (!ensure_is_ascii_stl_file(fp, is_ascii))
{
seek_address = 0;
fclose(fp);
return CUBIT_FAILURE;
}
if (is_ascii==CUBIT_TRUE)
{
PRINT_INFO("Reading facets...\n");
fclose(fp);
fp = fopen(file_name, "r");
fseek(fp,seek_address,SEEK_SET);
char line[128], junk[30];
int numverts;
double xx[3], yy[3], zz[3];
int linenumber, num;
bool done, error_found, eof_found;
linenumber = 0;
strcpy(line,"");
done = false;
error_found = false;
eof_found = false;
while ( (strstr(line,"endsolid") == 0) && (error_found == false) ) {
numverts = 0;
while ( numverts < 3 ) {
if ( fgets(line,127,fp) == 0 ) {
linenumber++;
eof_found = true;
break; // EOF
}
linenumber++;
// makelowercase(line);
int len, ij;
len = strlen(line);
for ( ij = 0; ij < len; ij++ )
line[ij] = tolower(line[ij]);
if ( strstr(line,"endsolid") != 0 ) {
done = true;
break; // End of part definition
}
if ( strstr(line,"vertex") != 0 ) {
num = sscanf(line,"%s %le %le %le",junk,&xx[numverts],&yy[numverts],&zz[numverts]);
if ( num != 4 ) {
error_found = true;
break; // error in reading vertices
}
numverts += 1;
}
} // end of while ( numverts < 3 )
if ( (eof_found == true) || (done == true) ||
(error_found == true) || (numverts != 3) ) break;
current_point = (CubitPoint *) new CubitPointData(xx[0],yy[0],zz[0]);
current_point->set_id(points_in_file++);
file_points.append(current_point);
current_point = (CubitPoint *) new CubitPointData(xx[1],yy[1],zz[1]);
current_point->set_id(points_in_file++);
file_points.append(current_point);
current_point = (CubitPoint *) new CubitPointData(xx[2],yy[2],zz[2]);
current_point->set_id(points_in_file++);
file_points.append(current_point);
}
seek_address = 0;
if ( eof_found == true ) {
PRINT_WARNING("Premature end-of-file on STL file. Body may be incomplete.\n");
fclose(fp);
goto end_read_file_points;
}
if ( error_found == true ) {
PRINT_WARNING("Error found while reading line number %d of file %s. Body may be incomplete.\n",
linenumber,file_name);
fclose(fp);
goto end_read_file_points;
}
if ( done == false ) {
PRINT_WARNING("Error found while reading line number %d of file %s. Body may be incomplete.\n",
linenumber,file_name);
fclose(fp);
goto end_read_file_points;
}
if ( (eof_found == false) && (error_found == false) && (done == true) ) {
while ( fgets(line,127,fp) != 0 ) {
if ( (strstr(line,"solid") != 0) && (strstr(line,"endsolid") == 0) ) {
seek_address = ftell(fp);
break;
}
}
}
fclose(fp);
goto end_read_file_points;
}
else
{
fclose(fp);
// file is closed so that it can be opened as binary
fp = fopen(file_name, "rb");
if (fp == NULL)
{
PRINT_ERROR("Could not open file %s for reading\n", file_name);
return CUBIT_FAILURE;
}
char dummy;
// iterates through the facets of the file
float cur[12]; // an array to hold 48 bytes representing 1AVS facet
fseek(fp, 80, SEEK_SET);
size_t count = fread(&ntri, 4, 1, fp);
if (count != 1) {
PRINT_ERROR("Trouble reading in number of triangles\n");
return CUBIT_FAILURE;
}
PRINT_INFO ("Reading facets...\n");
for (ii=0; ii<ntri; ii++) {
// read in 1 facet
if (fread(cur, 4, 12, fp) != 12)
{
PRINT_INFO ("Abnormal file termination %s \n", file_name); break;
}
count = fread(&dummy, 1, 1, fp);
count = fread(&dummy, 1, 1, fp);
//make point
current_point = (CubitPoint *) new CubitPointData(cur[3],cur[4],cur[5]);
current_point->set_id(points_in_file++);
file_points.append(current_point);
current_point = (CubitPoint *) new CubitPointData(cur[6],cur[7],cur[8]);
current_point->set_id(points_in_file++);
file_points.append(current_point);
current_point = (CubitPoint *) new CubitPointData(cur[9],cur[10],cur[11]);
current_point->set_id(points_in_file++);
file_points.append(current_point);
}
}
fclose(fp);
// at this point all points from the file are in file_points
end_read_file_points:
// grid search tree to hold points
GridSearchTree * node_grid = new GridSearchTree (tolerance);
CubitPoint
*point0,
*point1,
*point2;
CubitFacet
*facet_ptr;
ntri=0;
npoints=0;
if (file_points.size() % 3 != 0)
{
PRINT_INFO("File Error.");
return CUBIT_FAILURE;
}
for (ii = file_points.size(); ii>0; ii-=3)
{
// get three points from the file_points list
// and compare them against the data already in the
// grid search tree; if it contains a point within
// epsilon tolerance this point would replace the
// current point
point0 = node_grid->fix(file_points.get_and_step());
point1 = node_grid->fix(file_points.get_and_step());
point2 = node_grid->fix(file_points.get_and_step());
if (point0 && point1 && point2 && point0 != point1 && point1!=point2 && point2!=point0 )
{
facet_ptr = new CubitFacetData(point0, point1, point2);
if (facet_ptr)
{
tfacet_list.append(facet_ptr);
ntri++;
}
}
}
//delete node_grid;
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::reflect | ( | BodySM * | body, |
| const CubitVector & | axis | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 366 of file FacetQueryEngine.cpp.
{
FacetBody *fbody = CAST_TO(bodysm, FacetBody);
if (!fbody)
{
PRINT_ERROR("Attempt to reflect mesh-based geometry Body. This body is not MBG.");
return CUBIT_FAILURE;
}
fbody->reflect( axis.x(), axis.y(), axis.z() );
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::reflect | ( | GeometryEntity * | ent, |
| const CubitVector & | axis | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5227 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("%s", fqe_xform_err);
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::restore_eval_tools | ( | FILE * | fp, |
| unsigned int | endian, | ||
| int | num_facets, | ||
| int | num_edges, | ||
| int | num_points, | ||
| CubitFacet ** | facets, | ||
| CubitFacetEdge ** | edges, | ||
| CubitPoint ** | points, | ||
| int & | num_cfet, | ||
| int & | num_fet, | ||
| CurveFacetEvalTool **& | cfeval_tools, | ||
| FacetEvalTool **& | feval_tools | ||
| ) |
Definition at line 4591 of file FacetQueryEngine.cpp.
{
NCubitFile::CIOWrapper cio(endian, fp);
int ii;
FacetEvalTool *fsurf_ptr;
CurveFacetEvalTool *fcurv_ptr;
// read the number of facet eval tools
// we are about to read from the CUB file
cio.Read(reinterpret_cast<UnsignedInt32*>(&num_fet), 1);
feval_tools = new FacetEvalTool *[num_fet];
// read all the facet surface eval tools
for (ii=0; ii<num_fet; ii++)
{
/*
// read the topo ID from the CUB file. This will be stored as the
// FacetEvalTool toolID and serve as the means to associate this
// eval tool with it's topology entity
UnsignedInt32 surf_id = 0;
cio.Read(&surf_id, 1);
int topo_id = (int)surf_id; */
// read the facet eval tool data and create the tool
fsurf_ptr = new FacetEvalTool();
fsurf_ptr->restore(fp, endian, num_facets,
num_edges, num_points,
facets, edges, points);
if (fsurf_ptr == NULL)
{
PRINT_ERROR("Error restoring mesh-based geometry\n");
return CUBIT_FAILURE;
}
feval_tools[ii] = fsurf_ptr;
}
// read the number of curves
cio.Read(reinterpret_cast<UnsignedInt32*>(&num_cfet), 1);
cfeval_tools = new CurveFacetEvalTool *[num_cfet];
// read all the curve facet eval tools. Same thing as surfaces
for (ii=0; ii<num_cfet; ii++)
{
// read the facet eval tool data and create the tool
fcurv_ptr = new CurveFacetEvalTool();
fcurv_ptr->restore(fp, endian, num_edges, num_points,
edges, points, num_fet, feval_tools );
if (fcurv_ptr == NULL)
{
PRINT_ERROR("Error restoring mesh-based geometry\n");
return CUBIT_FAILURE;
}
cfeval_tools[ii] = fcurv_ptr;
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::restore_facets | ( | FILE * | file_ptr, |
| unsigned int | endian, | ||
| int & | num_facets, | ||
| int & | num_edges, | ||
| int & | num_points, | ||
| CubitPoint **& | points_array, | ||
| int & | num_cfet, | ||
| int & | num_fet, | ||
| CurveFacetEvalTool **& | cfet_array, | ||
| FacetEvalTool **& | fet_array | ||
| ) | [private] |
Definition at line 1989 of file FacetQueryEngine.cpp.
{
CubitStatus rv = CUBIT_SUCCESS;
CubitFacet **facets = NULL;
CubitFacetEdge **edges = NULL;
// read facets from the file and build arrays of facet entities
rv = read_facets( fp, endian,
num_facets, num_edges, num_points,
facets, edges, points );
// create the CurveFacetEvalTools and FacetEval Tools
if (rv != CUBIT_FAILURE )
{
rv = restore_eval_tools( fp, endian,
num_facets, num_edges, num_points,
facets, edges, points,
num_cfet, num_fet,
cfet_array, fet_array );
}
if (facets != NULL)
delete [] facets;
if(edges != NULL)
delete [] edges;
return rv;
}
| CubitStatus FacetQueryEngine::restore_topology | ( | FILE * | file_ptr, |
| unsigned int | endian, | ||
| int | num_points, | ||
| CubitPoint ** | points_array, | ||
| int | num_cfet, | ||
| CurveFacetEvalTool ** | cfev_array, | ||
| int | num_fet, | ||
| FacetEvalTool ** | fev_array, | ||
| DLIList< TopologyBridge * > & | imported_entities | ||
| ) | [private] |
Definition at line 1467 of file FacetQueryEngine.cpp.
{
//get file pointer
unsigned int size;
unsigned int i, j;
int id, k;
FacetPoint **facet_points;
FacetCurve **facet_curves;
FacetCoEdge **facet_coedges;
FacetLoop **facet_loops;
FacetSurface **facet_surfaces;
FacetShell **facet_shells;
FacetLump **facet_lumps;
FacetBody **facet_bodies;
FacetPoint *tmp_point;
FacetCurve *tmp_curve;
FacetCoEdge *tmp_coedge;
FacetLoop *tmp_loop;
FacetSurface *tmp_surf;
FacetShell *tmp_shell;
FacetLump *tmp_lump;
FacetBody*tmp_body;
int num_facet_points = 0;
int num_facet_curves = 0;
int num_facet_coedges = 0;
int num_facet_loops = 0;
int num_facet_surfaces = 0;
int num_facet_shells = 0;
int num_facet_lumps = 0;
int num_facet_bodies = 0;
//create a wrapper object for writing
CIOWrapper file_reader( endian, file_ptr );
//-----------------Read FacetPoints------------------
// Read number of FacetPoints
file_reader.Read( &size, 1 );
// Allocate memory for FacetPoints
facet_points = new FacetPoint*[size];
for(i=0; i<size; i++)
{
file_reader.Read( reinterpret_cast<UnsignedInt32*>(&id), 1 );
if( id >= num_points || id < 0 )
{
delete [] facet_points;
return CUBIT_FAILURE;
}
tmp_point = new FacetPoint( points_array[ id ] );
if( tmp_point == NULL )
return CUBIT_FAILURE;
num_facet_points++;
facet_points[i] = tmp_point;
tmp_point->restore_attribs( file_ptr, endian );
}
//-----------------Read FacetCurves------------------
//Read number of FacetCurves
file_reader.Read( &size, 1 );
// Allocate memory for FacetCurves
facet_curves = new FacetCurve*[size];
for(i=0; i<size; i++)
{
int data[4];
file_reader.Read( reinterpret_cast<UnsignedInt32*>(data), 4 );
if( data[0] >= num_facet_points || data[0] < 0 ||
data[1] >= num_facet_points || data[1] < 0 ||
data[3] >= num_cfet || data[3] < 0 )
{
delete [] facet_curves;
return CUBIT_FAILURE;
}
CubitSense sense;
if (data[2] == -1 )
sense = CUBIT_UNKNOWN;
else
sense = data[2] ? CUBIT_REVERSED : CUBIT_FORWARD;
tmp_curve = new FacetCurve( cfev_array[ data[3] ], facet_points[ data[0] ],
facet_points[ data[1] ], sense );
if( tmp_curve == NULL )
return CUBIT_FAILURE;
// Add curve to FacetPoints
facet_points[data[0]]->add_curve( tmp_curve );
facet_points[data[1]]->add_curve( tmp_curve );
num_facet_curves++;
facet_curves[i] = tmp_curve;
tmp_curve->restore_attribs( file_ptr, endian );
}
//-----------------Read FacetCoEdges------------------
//Read number of FacetCoEdges
file_reader.Read( &size, 1 );
facet_coedges = new FacetCoEdge*[ size ];
for(i=0; i<size; i++)
{
int data[2];
file_reader.Read( reinterpret_cast<unsigned int*>(data), 2 );
if( data[0] >= num_facet_curves || data[0] < 0 )
{
delete [] facet_coedges;
return CUBIT_FAILURE;
}
CubitSense sense;
if (data[1] == -1 )
sense = CUBIT_UNKNOWN;
else
sense = data[1] ? CUBIT_REVERSED : CUBIT_FORWARD;
tmp_coedge = new FacetCoEdge( facet_curves[ data[0] ], sense );
if( tmp_coedge == NULL )
return CUBIT_FAILURE;
facet_coedges[i] = tmp_coedge;
num_facet_coedges++;
// Add FacetCoEdge to FacetCurve
facet_curves[ data[0] ]->add_coedge( tmp_coedge );
}
//-----------------Read FacetLoops------------------
//Read number of FacetLoops
file_reader.Read( &size, 1 );
DLIList<CoEdgeSM*> temp_coedge_list;
facet_loops = new FacetLoop*[ size ];
for(i=0; i<size; i++)
{
temp_coedge_list.clean_out();
unsigned int num_coedges = 0;
file_reader.Read( &num_coedges, 1);
int* coedge_ids = new int[ num_coedges];
file_reader.Read( (unsigned*)coedge_ids, num_coedges );
for( j=0; j<num_coedges; j++)
{
if( coedge_ids[j] >= num_facet_coedges || coedge_ids[j] < 0 )
{
delete [] facet_loops;
return CUBIT_FAILURE;
}
temp_coedge_list.append( facet_coedges[ coedge_ids[j] ] );
}
tmp_loop = new FacetLoop( temp_coedge_list );
if( tmp_loop == NULL)
return CUBIT_FAILURE;
num_facet_loops++;
facet_loops[i] = tmp_loop;
for( j=0; j<num_coedges; j++)
facet_coedges[ coedge_ids[j] ]->add_loop( tmp_loop );
delete [] coedge_ids;
}
//-----------------Read FacetSurfaces------------------
//Read number of FacetSurfaces
file_reader.Read( &size, 1 );
facet_surfaces = new FacetSurface*[size];
DLIList<LoopSM*> temp_loops;
for(i=0; i<size; i++)
{
temp_loops.clean_out();
int data[6];
file_reader.Read( (unsigned int*)data, 6);
CubitSense sense, sense0;
if (data[0] == -1 )
sense = CUBIT_UNKNOWN;
else
sense = data[0] ? CUBIT_REVERSED : CUBIT_FORWARD;
CubitBoolean useFacets;
useFacets = data[1] ? CUBIT_TRUE : CUBIT_FALSE;
// make sure FacetEvalTool ID is in range
if( data[2] >= num_fet || data[2] < 0 )
{
delete [] facet_surfaces;
return CUBIT_FAILURE;
}
if (data[3] == -1 )
sense0 = CUBIT_UNKNOWN;
else
sense0 = data[3] ? CUBIT_REVERSED : CUBIT_FORWARD;
int num_loops = data[5];
int* loop_ids = new int[ num_loops ];
file_reader.Read( (unsigned*)loop_ids, num_loops );
for( k=0; k<num_loops; k++)
{
if( loop_ids[k] >= num_facet_loops ||
loop_ids[k] < 0 )
{
delete [] loop_ids;
return CUBIT_FAILURE;
}
temp_loops.append( facet_loops[ loop_ids[k] ] );
}
tmp_surf = new FacetSurface( fev_array[ data[2] ],
sense, sense0,
useFacets, temp_loops );
if( tmp_surf == NULL)
return CUBIT_FAILURE;
facet_surfaces[i] = tmp_surf;
num_facet_surfaces++;
// Add FacetSurface to FacetLoops
for( k=0; k<num_loops; k++)
facet_loops[ loop_ids[k] ]->add_surface( tmp_surf );
delete [] loop_ids;
tmp_surf->restore_attribs( file_ptr, endian );
}
//-----------------Read FacetShells------------------
//Read number of FacetShells
file_reader.Read( &size, 1 );
facet_shells = new FacetShell*[size];
DLIList<Surface*> temp_surfs;
for(i=0; i<size; i++)
{
temp_surfs.clean_out();
unsigned int num_surfs = 0;
file_reader.Read( &num_surfs, 1 );
int* surface_ids = new int[ num_surfs ];
file_reader.Read( (unsigned*)surface_ids, num_surfs );
for( j=0; j<num_surfs; j++)
{
if( surface_ids[j] >= num_facet_surfaces ||
surface_ids[j] < 0 )
{
delete [] facet_shells;
return CUBIT_FAILURE;
}
temp_surfs.append( facet_surfaces[ surface_ids[j] ] );
}
tmp_shell = new FacetShell( temp_surfs );
facet_shells[i] = tmp_shell;
num_facet_shells++;
// Add this shell to surfaces
for( j=0; j<num_surfs; j++)
facet_surfaces[ surface_ids[j] ]->add_shell( tmp_shell );
delete [] surface_ids;
}
//-----------------Read FacetLumps------------------
//Read number of FacetLumps
file_reader.Read( &size, 1 );
facet_lumps = new FacetLump*[size];
DLIList<ShellSM*> temp_shells;
for(i=0; i<size; i++)
{
temp_shells.clean_out();
unsigned int num_shells = 0;
file_reader.Read( &num_shells, 1 );
int* shell_ids = new int[ num_shells ];
file_reader.Read( (unsigned*)shell_ids, num_shells );
for( j=0; j<num_shells; j++)
{
if( shell_ids[j] >= num_facet_shells )
{
delete [] facet_lumps;
return CUBIT_FAILURE;
}
temp_shells.append( facet_shells[ shell_ids[j] ] );
}
tmp_lump = new FacetLump( temp_shells );
if( tmp_lump == NULL )
return CUBIT_FAILURE;
facet_lumps[i] = tmp_lump;
num_facet_lumps++;
for( j=0; j<num_shells; j++)
facet_shells[ shell_ids[j] ]->add_lump( tmp_lump );
delete [] shell_ids;
tmp_lump->restore_attribs( file_ptr, endian );
}
//-----------------Read FacetBodies ------------------
//Read number of FacetBodies
file_reader.Read( &size, 1 );
facet_bodies = new FacetBody*[size];
DLIList<Lump*> temp_lumps;
for(i=0; i<size; i++)
{
temp_lumps.clean_out();
unsigned int num_lumps= 0;
file_reader.Read( &num_lumps, 1 );
int* lump_ids = new int[ num_lumps ];
file_reader.Read( (unsigned*)lump_ids, num_lumps );
for( j=0; j<num_lumps; j++)
{
if( lump_ids[j] >= num_facet_lumps )
{
delete [] facet_bodies;
return CUBIT_FAILURE;
}
temp_lumps.append( facet_lumps[ lump_ids[j] ] );
}
tmp_body = new FacetBody( temp_lumps );
if( tmp_body == NULL )
return CUBIT_FAILURE;
facet_bodies[i] = tmp_body;
num_facet_bodies++;
// Add this FacetBody to FacetLumps
for( j=0; j<num_lumps; j++)
facet_lumps[ lump_ids[j] ]->add_body( tmp_body );
delete [] lump_ids;
//read in trans matrix
unsigned int rows_and_cols[2];
file_reader.Read( rows_and_cols, 2 );
unsigned int num_rows = rows_and_cols[0];
unsigned int num_cols = rows_and_cols[1];
if( num_rows || num_cols)
{
CubitTransformMatrix trans_matrix;
double *trans_matrix_array;
trans_matrix_array = new double[ num_rows*num_cols ];
file_reader.Read( trans_matrix_array, num_rows*num_cols );
unsigned c;
for(j=0; j<num_rows; j++ )
{
for(c=0; c<num_cols; c++)
trans_matrix.add(j,c, trans_matrix_array[(j*num_cols)+c] );
}
tmp_body->set_transforms( trans_matrix );
delete [] trans_matrix_array;
}
tmp_body->restore_attribs( file_ptr, endian );
}
// Here is where we determine if the entites are free or not
// bodies, all bodies are free
for(k=0; k<num_facet_bodies; k++)
imported_entities.append( facet_bodies[k] );
// surfaces are free if they are not in a shell
DLIList<FacetShell*> shell_list;
for(k=0; k<num_facet_surfaces; k++)
{
shell_list.clean_out();
facet_surfaces[k]->get_shells( shell_list );
if( shell_list.size() == 0 )
imported_entities.append( facet_surfaces[k] );
}
// curves are free if they are not associate with a coedge
DLIList<FacetCoEdge*> coedge_list;
for(k=0; k<num_facet_curves; k++)
{
coedge_list.clean_out();
facet_curves[k]->get_coedges( coedge_list );
if( coedge_list.size() == 0 )
imported_entities.append( facet_curves[k] );
}
// points are free if they are not associate with a curve
DLIList<FacetCurve*> curve_list;
for(k=0; k<num_facet_points; k++)
{
curve_list.clean_out();
facet_points[k]->get_curves( curve_list );
if( curve_list.size() == 0 )
imported_entities.append( facet_points[k] );
}
// clean up
delete [] facet_points;
delete [] facet_curves;
delete [] facet_coedges;
delete [] facet_loops;
delete [] facet_surfaces;
delete [] facet_shells;
delete [] facet_lumps;
delete [] facet_bodies;
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::restore_transform | ( | BodySM * | body | ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5181 of file FacetQueryEngine.cpp.
{
FacetBody* facetbod = dynamic_cast<FacetBody*>(body);
return facetbod ? facetbod->restore( ) : CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::rotate | ( | BodySM * | body, |
| const CubitVector & | axis, | ||
| double | angle | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5191 of file FacetQueryEngine.cpp.
{
FacetBody* facetbod = dynamic_cast<FacetBody*>(body);
return facetbod ? facetbod->rotate( v.x(), v.y(), v.z(), a ) : CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::rotate | ( | GeometryEntity * | ent, |
| const CubitVector & | axis, | ||
| double | degrees | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5212 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("%s", fqe_xform_err);
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::save_eval_tools | ( | FILE * | fp, |
| DLIList< FacetSurface * > | facet_surfaces, | ||
| DLIList< FacetCurve * > | facet_curves | ||
| ) |
Definition at line 4516 of file FacetQueryEngine.cpp.
{
int ii;
FacetSurface *fsurf_ptr;
FacetCurve *fcurv_ptr;
//separate out eval tools and set ids
DLIList<CurveFacetEvalTool*> cfe_tools;
DLIList<FacetEvalTool*> fe_tools;
int ft_id = 0;
int cft_id = 0;
facet_surfaces.reset();
for (ii=facet_surfaces.size(); ii--; )
{
fsurf_ptr = facet_surfaces.get_and_step();
FacetEvalTool *feval_tool = fsurf_ptr->get_eval_tool();
if( feval_tool )
{
feval_tool->set_output_id( ft_id++ );
fe_tools.append( feval_tool );
}
}
facet_curves.reset();
for (ii=facet_curves.size(); ii--; )
{
fcurv_ptr = facet_curves.get_and_step();
CurveFacetEvalTool *ceval_tool = fcurv_ptr->get_eval_tool();
if( ceval_tool )
{
ceval_tool->set_output_id( cft_id++ );
cfe_tools.append( ceval_tool );
}
}
//Write out number of FacetEvalTools
int count = fe_tools.size();
NCubitFile::CIOWrapper cio(fp);
cio.Write( reinterpret_cast<UnsignedInt32*>(&count), 1 );
//Write out each FacetEvalTool
fe_tools.reset();
for( ii=0; ii<fe_tools.size(); ii++)
{
FacetEvalTool *feval_tool = fe_tools.get_and_step();
feval_tool->save( fp );
}
//Write out number of CurveFacetEvalTools
count = cfe_tools.size();
cio.Write( reinterpret_cast<UnsignedInt32*>(&count), 1 );
//Write out each CurveFacetEvalTool
cfe_tools.reset();
for( ii=0; ii<cfe_tools.size(); ii++)
{
CurveFacetEvalTool *ceval_tool = cfe_tools.get_and_step();
ceval_tool->save( fp );
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::save_facets | ( | FILE * | fp, |
| DLIList< FacetSurface * > | facet_surfaces, | ||
| DLIList< FacetCurve * > | facet_curves, | ||
| DLIList< FacetPoint * > | facet_points | ||
| ) |
Definition at line 4476 of file FacetQueryEngine.cpp.
{
CubitStatus rv = CUBIT_SUCCESS;
DLIList<CubitFacet *> facet_list;
DLIList<CubitFacetEdge *> edge_list;
DLIList<CubitPoint *> point_list;
// get a unique list of all facets, edges and points
rv = gather_facets(facet_surfaces, facet_curves, facet_points,
facet_list, edge_list, point_list );
if (rv != CUBIT_SUCCESS)
return rv;
// dump the facet entities the file
rv = dump_facets( fp, facet_list, edge_list, point_list );
if (rv != CUBIT_SUCCESS)
return rv;
// dump the CurveFacetEvalTools and FacetEval Tools
rv = save_eval_tools( fp, facet_surfaces, facet_curves );
return rv;
}
| CubitStatus FacetQueryEngine::save_temp_geom_file | ( | DLIList< TopologyBridge * > & | ref_entity_list, |
| const char * | filename, | ||
| const CubitString & | cubit_version, | ||
| CubitString & | created_file, | ||
| CubitString & | created_file_type | ||
| ) | [virtual] |
Saves out a temporary geometry file. Entities in list must all be of same modeling engine.
Implements GeometryQueryEngine.
Definition at line 843 of file FacetQueryEngine.cpp.
{
int size_before = ref_entity_list.size();
CubitString temp_filename(file_name);
temp_filename += ".mbg";
ModelExportOptions export_options;
if( export_solid_model( ref_entity_list, temp_filename.c_str(), FACET_TYPE,
cubit_version, export_options ) == CUBIT_FAILURE )
{
PRINT_ERROR( "Error occured while trying to save temporary MESH_BASED_GEOMETRY file\n");
return CUBIT_FAILURE;
}
int size_after = ref_entity_list.size();
if( size_before > size_after )
{
created_file += temp_filename;
created_file_type += "FACET";
}
return CUBIT_SUCCESS;
}
| CubitStatus FacetQueryEngine::scale | ( | BodySM * | body, |
| double | factor | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5196 of file FacetQueryEngine.cpp.
{
FacetBody* facetbod = dynamic_cast<FacetBody*>(body);
return facetbod ? facetbod->scale( factor ) : CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::scale | ( | BodySM * | body, |
| const CubitVector & | factors | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5201 of file FacetQueryEngine.cpp.
{
FacetBody* facetbod = dynamic_cast<FacetBody*>(body);
return facetbod ? facetbod->scale( f.x(), f.y(), f.z() ) : CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::scale | ( | GeometryEntity * | ent, |
| double | factor | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5217 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("%s", fqe_xform_err);
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::scale | ( | GeometryEntity * | ent, |
| const CubitVector & | factors | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5222 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("%s", fqe_xform_err);
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::set_dbl_option | ( | const char * | opt_name, |
| double | val | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 2623 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("FacetQueryEngine::set_dbl_option not yet implemented.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::set_int_option | ( | const char * | opt_name, |
| int | val | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 2617 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("FacetQueryEngine::set_int_option not yet implemented.\n");
return CUBIT_FAILURE;
}
| double FacetQueryEngine::set_sme_resabs_tolerance | ( | double | new_resabs | ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 2611 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("FacetQueryEngine::set_sme_resabs_tolerance not yet implemented.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::set_str_option | ( | const char * | opt_name, |
| const char * | val | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 2629 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("FacetQueryEngine::set_str_option not yet implemented.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::transform_vec_position | ( | CubitVector const & | , |
| BodySM * | , | ||
| CubitVector & | |||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 752 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Option not supported for mesh based geometry.\n");
return CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::translate | ( | BodySM * | body, |
| const CubitVector & | offset | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5186 of file FacetQueryEngine.cpp.
{
FacetBody* facetbod = dynamic_cast<FacetBody*>(body);
return facetbod ? facetbod->move( d.x(), d.y(), d.z() ) : CUBIT_FAILURE;
}
| CubitStatus FacetQueryEngine::translate | ( | GeometryEntity * | ent, |
| const CubitVector & | offset | ||
| ) | [virtual] |
Implements GeometryQueryEngine.
Definition at line 5207 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("%s", fqe_xform_err);
return CUBIT_FAILURE;
}
| CubitBoolean FacetQueryEngine::volumes_overlap | ( | Lump * | lump_ptr_1, |
| Lump * | lump_ptr_2 | ||
| ) | const [virtual] |
Implements GeometryQueryEngine.
Definition at line 5268 of file FacetQueryEngine.cpp.
{
PRINT_ERROR("Currently, Cubit is unable to determine overlap for Facet-based geometry.\n");
return CUBIT_FALSE;
}
| CubitStatus FacetQueryEngine::write_topology | ( | FILE * | file_ptr, |
| DLIList< FacetBody * > & | facet_bodies, | ||
| DLIList< FacetLump * > & | facet_lumps, | ||
| DLIList< FacetShell * > & | facet_shells, | ||
| DLIList< FacetSurface * > & | facet_surfaces, | ||
| DLIList< FacetLoop * > & | facet_loops, | ||
| DLIList< FacetCoEdge * > & | facet_coedges, | ||
| DLIList< FacetCurve * > & | facet_curves, | ||
| DLIList< FacetPoint * > & | facet_points | ||
| ) | [private] |
Definition at line 1108 of file FacetQueryEngine.cpp.
{
int i;
//create a wrapper object for writing
CIOWrapper file_writer( file_ptr );
//-----------------write FacetPoints--------------
UnsignedInt32 size = facet_points.size();
//write out number of FacetPoints
file_writer.Write( &size, 1 );
facet_points.reset();
for( i=0; i<facet_points.size(); i++)
{
FacetPoint *curr_point = facet_points.get_and_step();
int id = curr_point->get_cubit_point()->id();
file_writer.Write( reinterpret_cast<UnsignedInt32*>(&id), 1 );
if( curr_point->save_attribs(file_ptr) == CUBIT_FAILURE )
return CUBIT_FAILURE;
}
//-----------------write FacetCurves--------------
size = facet_curves.size();
//write out number of FacetCurves
file_writer.Write( &size, 1 );
facet_curves.reset();
for( i=0; i<facet_curves.size(); i++)
{
FacetCurve *curr_curve = facet_curves.get_and_step();
TBPoint *s_point, *e_point;
s_point = curr_curve->start_point();
e_point = curr_curve->end_point();
int data_to_write[4];
// get start&end points implicit ids
FacetPoint *temp_point = NULL;
temp_point = CAST_TO( s_point, FacetPoint );
if( !temp_point ) assert(0);
int found;
found = facet_points.where_is_item( temp_point );
if( found == -1)
assert(0);
data_to_write[0] = found;
temp_point = CAST_TO( e_point, FacetPoint );
if( !temp_point ) assert(0);
found = facet_points.where_is_item( temp_point );
if( found == -1)
PRINT_ERROR("Problem saving Facet Curves\n");
data_to_write[1] = found;
//convert Sense info to integer
if( curr_curve->get_sense() == CUBIT_UNKNOWN )
data_to_write[2] = -1;
else
data_to_write[2] = (curr_curve->get_sense() == CUBIT_REVERSED) ? 1 : 0;
data_to_write[3] = curr_curve->get_eval_tool()->get_output_id();
//write the data
file_writer.Write( reinterpret_cast<UnsignedInt32*>(data_to_write), 4 );
if( curr_curve->save_attribs(file_ptr) == CUBIT_FAILURE )
return CUBIT_FAILURE;
}
//-----------------write FacetCoedges--------------
size = facet_coedges.size();
// write out number of FacetCurves
file_writer.Write( &size, 1 );
facet_coedges.reset();
for( i=0; i<facet_coedges.size(); i++)
{
FacetCoEdge *curr_coedge = facet_coedges.get_and_step();
Curve *curve_sm;
curve_sm = curr_coedge->curve();
FacetCurve *temp_curve = NULL;
temp_curve = CAST_TO( curve_sm, FacetCurve );
int data_to_write[2];
// get implicit id of this curve
int found;
found = facet_curves.where_is_item( temp_curve );
if( found == -1)
PRINT_ERROR("Problem saving Facet CoEdges\n");
data_to_write[0] = found;
// convert sense info to integer
if( curr_coedge->get_sense() == CUBIT_UNKNOWN )
data_to_write[1] = -1;
else
data_to_write[1] = (curr_coedge->get_sense() == CUBIT_REVERSED) ? 1 : 0;
// write out the data
file_writer.Write( reinterpret_cast<UnsignedInt32*>(data_to_write), 2 );
}
//-----------------write FacetLoops--------------
size = facet_loops.size();
// write out number of FacetLoops
file_writer.Write( &size, 1 );
facet_loops.reset();
for( i=0; i<facet_loops.size(); i++)
{
FacetLoop *curr_loop = facet_loops.get_and_step();
DLIList<FacetCoEdge*> coedge_list;
curr_loop->get_coedges( coedge_list );
// get number of coedges in this loop
UnsignedInt32 *data_to_write;
size = coedge_list.size();
data_to_write = new UnsignedInt32[ size + 1 ];
data_to_write[0] = size;
UnsignedInt32 j;
// get implicit ids of coedges
coedge_list.reset();
for( j=1; j<size+1; j++)
{
FacetCoEdge *temp_coedge = coedge_list.get_and_step();
int found;
found = facet_coedges.where_is_item( temp_coedge );
if( found == -1)
PRINT_ERROR("Problem saving Facet Loops\n");
data_to_write[j] = found;
}
// write out the data
file_writer.Write( data_to_write, size + 1);
delete [] data_to_write;
}
//-----------------write FacetSurfaces--------------
size = facet_surfaces.size();
// write out number of FacetSurfaces
file_writer.Write( &size, 1 );
facet_surfaces.reset();
for( i=0; i<facet_surfaces.size(); i++)
{
FacetSurface *curr_surface = facet_surfaces.get_and_step();
DLIList<FacetLoop*> loop_list;
curr_surface->get_loops( loop_list );
int num_loops = loop_list.size();
int data_to_write[6];
// convert sense info to integer
// if( curr_surface->get_relative_surface_sense() == CUBIT_UNKNOWN )
// data_to_write[0] = -1;
// else
// data_to_write[0] = (curr_surface->get_relative_surface_sense() == CUBIT_REVERSED) ? 1 : 0;
data_to_write[0]=0;
// get "useFacets"
data_to_write[1] = 1;
// get output id of FacetEvalTool
data_to_write[2] = curr_surface->get_eval_tool()->get_output_id();
// get Shell Sense stuff
CubitSense sense0;
curr_surface->get_shell_sense( sense0 );
if( sense0 == CUBIT_UNKNOWN )
data_to_write[3] = -1;
else
data_to_write[3] = (sense0 == CUBIT_REVERSED) ? 1 : 0;
// if( sense1 == CUBIT_UNKNOWN )
data_to_write[4] = -1;
// else
// data_to_write[4] = (sense1 == CUBIT_REVERSED) ? 1 : 0;
// get number of loops
data_to_write[5] = num_loops;
file_writer.Write( reinterpret_cast<UnsignedInt32*>(data_to_write), 6 );
// get implicit ids of loops
if( num_loops > 0 )
{
int *loop_ids = new int[num_loops];
int j;
loop_list.reset();
for( j=0; j<num_loops; j++)
{
FacetLoop *temp_loop = loop_list.get_and_step();
int found;
found = facet_loops.where_is_item( temp_loop );
if( found == -1 )
PRINT_ERROR("Problem saving Facet Surfaces\n");
loop_ids[j] = found;
}
// write out data
file_writer.Write( reinterpret_cast<UnsignedInt32*>(loop_ids), num_loops );
delete [] loop_ids;
}
if( curr_surface->save_attribs(file_ptr) == CUBIT_FAILURE )
return CUBIT_FAILURE;
}
//-----------------write FacetShells--------------
size = facet_shells.size();
// write out number of FacetShells
file_writer.Write( &size, 1 );
facet_shells.reset();
for( i=0; i<facet_shells.size(); i++)
{
FacetShell *curr_shell= facet_shells.get_and_step(); //number of surfaces
DLIList<FacetSurface*> temp_facet_surf_list;
curr_shell->get_surfaces( temp_facet_surf_list );
// get number of surfaces in this shell
UnsignedInt32 *data_to_write;
int num_surfs = temp_facet_surf_list.size();
data_to_write = new UnsignedInt32[ num_surfs + 1];
data_to_write[0] = num_surfs;
// get implicit ids of surfaces
int j;
temp_facet_surf_list.reset();
for( j=1; j<num_surfs+1; j++)
{
FacetSurface *temp_facet_surface = temp_facet_surf_list.get_and_step();
int found;
found = facet_surfaces.where_is_item( temp_facet_surface );
if( found == -1 )
PRINT_ERROR("Problem saving Facet Shells\n");
data_to_write[j] = found;
}
// write the data
file_writer.Write( data_to_write, num_surfs + 1 );
delete [] data_to_write;
}
//-----------------write FacetLumps--------------
size = facet_lumps.size();
// write out number of FacetLumps
file_writer.Write( &size, 1 );
facet_lumps.reset();
for( i=0; i<facet_lumps.size(); i++)
{
FacetLump *curr_lump = facet_lumps.get_and_step();
DLIList<FacetShell*> temp_facet_shell_list;
curr_lump->get_shells( temp_facet_shell_list );
// get number of shells in this lump
UnsignedInt32 *data_to_write;
int num_shells= temp_facet_shell_list.size();
data_to_write = new UnsignedInt32[ num_shells+ 1];
data_to_write[0] = num_shells;
//get implicit ides of the lumps in this shell
int j;
temp_facet_shell_list.reset();
for( j=1; j<num_shells+1; j++)
{
FacetShell *temp_facet_shell = temp_facet_shell_list.get_and_step();
int found;
found = facet_shells.where_is_item( temp_facet_shell );
if( found == -1 )
PRINT_ERROR("Problem saving Facet Lumps\n");
data_to_write[j] = found;
}
//write the data
file_writer.Write( data_to_write, num_shells + 1 );
delete [] data_to_write;
if( curr_lump->save_attribs(file_ptr) == CUBIT_FAILURE )
return CUBIT_FAILURE;
}
//-----------------write FacetBodies--------------
size = facet_bodies.size();
// write out number of FacetBodies
file_writer.Write( &size, 1 );
facet_bodies.reset();
for( i=0; i<facet_bodies.size(); i++)
{
FacetBody *curr_body = facet_bodies.get_and_step();
DLIList<FacetLump*> temp_facet_lump_list;
curr_body->get_lumps( temp_facet_lump_list );
// get the number of lumps in this body
UnsignedInt32 *data_to_write;
int num_lumps = temp_facet_lump_list.size();
data_to_write = new UnsignedInt32[ num_lumps + 1];
data_to_write[0] = num_lumps;
// get the implicit ids of the lumps in this body
int j;
temp_facet_lump_list.reset();
for( j=1; j<num_lumps+1; j++)
{
FacetLump *temp_facet_lump = temp_facet_lump_list.get_and_step();
int found;
found = facet_lumps.where_is_item( temp_facet_lump );
if( found == -1 )
PRINT_ERROR("Problem saving Facet Bodies\n");
data_to_write[j] = found;
}
// write the data
file_writer.Write( data_to_write, num_lumps + 1 );
delete [] data_to_write;
// write the transformation matrix of this body
CubitTransformMatrix trans_matrix;
curr_body->get_transforms( trans_matrix );
UnsignedInt32 num_rows = trans_matrix.num_rows();
UnsignedInt32 num_cols = trans_matrix.num_cols();
UnsignedInt32 rows_and_cols[2];
rows_and_cols[0] = num_rows;
rows_and_cols[1] = num_cols;
file_writer.Write( rows_and_cols, 2 );
double *trans_matrix_array;
trans_matrix_array = new double[ num_rows*num_cols ];
//fill up the array row-by-row
unsigned u, k = 0;
for(u=0; u<num_rows; u++)
{
for(k=0; k<num_cols; k++)
trans_matrix_array[(u*num_cols)+k] = trans_matrix.get(u,k);
}
file_writer.Write( trans_matrix_array, u*k );
delete [] trans_matrix_array;
if( curr_body->save_attribs(file_ptr) == CUBIT_FAILURE )
return CUBIT_FAILURE;
}
return CUBIT_SUCCESS;
}
friend class FacetSurface [friend] |
Definition at line 96 of file FacetQueryEngine.hpp.
const int FacetQueryEngine::FQE_MAJOR_VERSION = 10 [static, private] |
Definition at line 530 of file FacetQueryEngine.hpp.
const int FacetQueryEngine::FQE_MINOR_VERSION = 0 [static, private] |
Definition at line 531 of file FacetQueryEngine.hpp.
const int FacetQueryEngine::FQE_SUBMINOR_VERSION = 0 [static, private] |
Definition at line 532 of file FacetQueryEngine.hpp.
DLIList< CubitPoint * > * FacetQueryEngine::hashPointArray = NULL [static, private] |
Definition at line 527 of file FacetQueryEngine.hpp.
int FacetQueryEngine::hashPointSize = 0 [static, private] |
Definition at line 526 of file FacetQueryEngine.hpp.
FacetQueryEngine * FacetQueryEngine::instance_ = NULL [static, private] |
Definition at line 517 of file FacetQueryEngine.hpp.