MeshKit
1.0
|
00001 #ifndef MESHKIT_ITAPS_FBGEOM_HPP 00002 #define MESHKIT_ITAPS_FBGEOM_HPP 00003 00007 #include "FBiGeom.h" 00008 #include "iGeom.hpp" 00009 #include "iRel.hpp" 00010 00028 class FBiGeom : public iGeom { 00029 protected: 00030 FBiGeom_Instance mInstance; 00031 public: 00032 virtual inline iRel::IfaceType iface_type() const { 00033 return iRel::FBIGEOM_IFACE; 00034 } 00035 00036 typedef iBase_EntitySetHandle EntitySetHandle; 00037 typedef iBase_EntityHandle EntityHandle; 00038 typedef iBase_TagHandle TagHandle; 00039 typedef iBase_ErrorType Error; 00040 typedef iBase_EntityType EntityType; 00041 typedef iBase_StorageOrder StorageOrder; 00042 typedef iBase_TagValueType TagValueType; 00043 00044 inline FBiGeom(const char* options = 0); 00045 inline FBiGeom(FBiGeom_Instance instance); 00046 00047 inline FBiGeom(bool meshBased); 00048 00049 virtual inline ~FBiGeom(); 00050 00051 virtual inline Error load(const char* file_name, const char* options = 0); 00052 00053 virtual inline Error save(const char* file_name, const char* options = 0); 00054 00055 virtual inline Error getBoundBox(double& min_x, double& min_y, double& min_z, 00056 double& max_x, double& max_y, double& max_z) const; 00057 00058 virtual inline int getParametric(); 00059 00060 virtual inline Error getNumOfType(EntitySetHandle set, EntityType type, 00061 int& count_out) const; 00062 00063 virtual inline Error getEntities(EntitySetHandle set, EntityType type, 00064 std::vector<EntityHandle>& entities_out) const; 00065 00066 virtual inline Error getEntType(EntityHandle handle, EntityType& type_out) const; 00067 00068 virtual inline Error getArrType(const EntityHandle* entity_handles, 00069 int entity_handles_Size, EntityType* types_out) const; 00070 00071 virtual inline Error getEntAdj(EntityHandle handle, 00072 EntityType type_requested, std::vector<EntityHandle>& adj_entities_out) const; 00073 00074 virtual inline Error getArrAdj(const EntityHandle* entity_handles, 00075 int entity_handles_size, EntityType type_requested, std::vector< 00076 EntityHandle>& adjacent_entity_handles_out, int* offsets_out) const; 00077 00078 virtual inline Error getEnt2ndAdj(EntityHandle handle, 00079 EntityType bridge_dimension, EntityType type_requested, std::vector< 00080 EntityHandle>& adj_entities_out) const; 00081 00082 virtual inline Error getArr2ndAdj(const EntityHandle* entity_handles, 00083 int entity_handles_size, EntityType order_adjacent_key, 00084 EntityType type_requested, 00085 std::vector<EntityHandle>& adjacent_entity_handles_out, int* offsets_out) const; 00086 00087 virtual inline Error isEntAdj(EntityHandle entity1, EntityHandle entity2, 00088 bool& adjacent_out) const; 00089 00090 virtual inline Error isArrAdj(const EntityHandle* entities1, 00091 const EntityHandle* entities2, int num_entity_pairs, int* is_adj_out) const; 00092 00093 virtual inline Error getEntClosestPt(EntityHandle entity, double near_x, 00094 double near_y, double near_z, double& on_x, double& on_y, double& on_z) const; 00095 00096 virtual inline Error getEntClosestPtTrimmed(EntityHandle entity, double near_x, 00097 double near_y, double near_z, double& on_x, double& on_y, double& on_z) const; 00098 00099 virtual inline Error getArrClosestPt(const EntityHandle* handles, 00100 int handles_size, StorageOrder order, const double* near_coordinates, 00101 int near_coordinates_size, double* on_coordinates) const; 00102 00103 virtual inline Error getEntNrmlXYZ(EntityHandle entity, double x, double y, 00104 double z, double& i, double& j, double& k) const; 00105 00106 virtual inline Error getArrNrmlXYZ(const EntityHandle* entities, 00107 int entities_size, StorageOrder order, const double* xyz, int xyz_size, 00108 double* ijk) const; 00109 00110 virtual inline Error getEntNrmlPlXYZ(EntityHandle entity, double x, double y, 00111 double z, double& on_x, double& on_y, double& on_z, double& i, double& j, 00112 double& k) const; 00113 00114 virtual inline Error getArrNrmlPlXYZ(const EntityHandle* entities, 00115 int entities_size, StorageOrder order, const double* near_xyz, 00116 int near_xyz_size, double* on_xyz, double* nrml_ijk) const; 00117 00118 virtual inline Error getEntTgntXYZ(EntityHandle entity, double x, double y, 00119 double z, double& i, double& j, double& k) const; 00120 00121 virtual inline Error getArrTgntXYZ(const EntityHandle* entities, 00122 int entities_size, StorageOrder order, const double* xyz, int xyz_size, 00123 double* ijk) const; 00124 00125 virtual inline Error getFcCvtrXYZ(EntityHandle face, double x, double y, 00126 double z, double& i1, double& j1, double& k1, double& i2, double& j2, 00127 double& k2) const; 00128 00129 virtual inline Error getEgCvtrXYZ(EntityHandle edge, double x, double y, 00130 double z, double& i, double& j, double& k) const; 00131 00132 virtual inline Error getEntArrCvtrXYZ(const EntityHandle* entities, 00133 int entities_size, StorageOrder order, const double* xyz, int xyz_size, 00134 double* cvtr_1, double* cvtr_2) const; 00135 00136 virtual inline Error getEgEvalXYZ(EntityHandle edge, double x, double y, 00137 double z, double& on_x, double& on_y, double& on_z, double& tngt_i, 00138 double& tngt_j, double& tngt_k, double& cvtr_i, double& cvtr_j, 00139 double& cvtr_k) const; 00140 00141 virtual inline Error getFcEvalXYZ(EntityHandle face, double x, double y, 00142 double z, double& on_x, double& on_y, double& on_z, double& nrml_i, 00143 double& nrml_j, double& nrml_k, double& cvtr1_i, double& cvtr1_j, 00144 double& cvtr1_k, double& cvtr2_i, double& cvtr2_j, double& cvtr2_k) const; 00145 00146 virtual inline Error getArrEgEvalXYZ(const EntityHandle* edges, 00147 int edges_size, StorageOrder order, const double* near_coords, 00148 int near_coords_size, double* on_coords, double* tangent, 00149 double* curvature) const; 00150 00151 virtual inline Error getArrFcEvalXYZ(const EntityHandle* faces, 00152 int faces_size, StorageOrder order, const double* near_coords, 00153 int near_coords_size, double* on_coords, double* normal, 00154 double* curvature1, double* curvature2) const; 00155 00156 virtual inline Error 00157 getEntBoundBox(EntityHandle entity, double& min_x, double& min_y, 00158 double& min_z, double& max_x, double& max_y, double& max_z) const; 00159 00160 virtual inline Error getArrBoundBox(const EntityHandle* entities, 00161 int entities_size, StorageOrder order, double* min_corners, 00162 double* max_corners) const; 00163 00164 virtual inline Error getVtxCoord(EntityHandle vertex, double& x, double& y, 00165 double& z) const; 00166 00167 virtual inline Error getVtxArrCoords(const EntityHandle* vertices, 00168 int vertices_size, StorageOrder order, double* coords) const; 00169 00170 virtual inline Error getPntRayIntsct(double x, double y, double z, double i, 00171 double j, double k, StorageOrder order, 00172 std::vector<EntityHandle>& entities_out, std::vector<double>& points_out, 00173 std::vector<double>& params_out) const; 00174 00175 virtual inline Error getPntClsf(double x, double y, double z, 00176 EntityHandle& handle_out)const; 00177 00178 virtual inline Error getPntArrClsf(StorageOrder order, const double* coords, 00179 int coords_size, EntityHandle* entities_out) const; 00180 00181 virtual inline Error getEntNrmlSense(EntityHandle face, EntityHandle region, 00182 int& sense) const; 00183 00184 virtual inline Error getEgFcSense(EntityHandle edge, EntityHandle face, 00185 int& sense) const; 00186 00187 virtual inline Error getEgVtxSense(EntityHandle edge, EntityHandle vtx1, 00188 EntityHandle vtx2, int& sense) const; 00189 00190 virtual inline Error getArrNrmlSense(const EntityHandle* faces, 00191 int faces_size, const EntityHandle* vols, int vols_size, int* senses_out)const; 00192 00193 virtual inline Error getEgFcArrSense(const EntityHandle* edges, 00194 int edges_size, const EntityHandle* faces, int faces_size, 00195 int* senses_out) const; 00196 00197 virtual inline Error getEgVtxArrSense(const EntityHandle* edges, 00198 int edges_size, const EntityHandle* vertices1, int vertices1_size, 00199 const EntityHandle* vertices2, int vertices2_size, int* senses_out) const; 00200 00201 virtual inline Error getSense(EntityHandle ent, EntityHandle wrt_ent, 00202 int &sense) const; 00203 00204 virtual inline Error getArrSense(const EntityHandle *ent, int num_ents, 00205 EntityHandle wrt_ent, int *sense) const; 00206 00207 virtual inline Error measure(const EntityHandle* entities, int entities_size, 00208 double* measures) const; 00209 00210 virtual inline Error getFaceType(EntityHandle face, std::string& type) const; 00211 00212 virtual inline Error isEntParametric(EntityHandle entity, bool& parametric) const; 00213 00214 virtual inline Error isArrParametric(const EntityHandle* entities, 00215 int entities_size, int* is_parametric) const; 00216 00217 virtual inline Error getEntUVtoXYZ(EntityHandle face, double u, double v, 00218 double& x, double& y, double& z) const; 00219 00220 virtual inline Error getEntUtoXYZ(EntityHandle edge, double u, double& x, 00221 double& y, double& z) const; 00222 00223 virtual inline Error getArrUVtoXYZ(const EntityHandle* faces, int faces_size, 00224 StorageOrder order, const double* uv, int uv_size, double* xyz) const; 00225 00226 virtual inline Error getArrUtoXYZ(const EntityHandle* edges, int edges_size, 00227 const double* u, int u_size, StorageOrder order, double* xyz) const; 00228 00229 virtual inline Error getEntXYZtoUV(EntityHandle face, double x, double y, 00230 double z, double& u, double& v) const; 00231 00232 virtual inline Error getEntXYZtoU(EntityHandle edge, double x, double y, 00233 double z, double& u) const; 00234 00235 virtual inline Error getArrXYZtoUV(const EntityHandle* faces, int faces_size, 00236 StorageOrder order, const double* coords, int coords_size, double* uv) const; 00237 00238 virtual inline Error getArrXYZtoU(const EntityHandle* edges, int edges_size, 00239 StorageOrder order, const double* coords, int coords_size, double* u) const; 00240 00241 virtual inline Error getEntXYZtoUVHint(EntityHandle face, double x, double y, 00242 double z, double& u, double& v) const; 00243 00244 virtual inline Error getArrXYZtoUVHint(const EntityHandle* faces, 00245 int faces_size, StorageOrder order, const double* coords, 00246 int coords_size, double* uv) const; 00247 00248 virtual inline Error getEntNrmlUV(EntityHandle face, double u, double v, 00249 double& i, double& j, double& k) const; 00250 00251 virtual inline Error getArrNrmlUV(const EntityHandle* faces, int faces_size, 00252 StorageOrder order, const double* uv, int uv_size, double* normals) const; 00253 00254 virtual inline Error getEntTgntU(EntityHandle edge, double u, double& i, 00255 double& j, double& k) const; 00256 00257 virtual inline Error getArrTgntU(const EntityHandle* edges, int edges_size, 00258 StorageOrder order, const double* u, int u_size, double* normals) const; 00259 00260 virtual inline Error getEnt1stDrvt(EntityHandle handle, double u, double v, 00261 double& du_i, double& du_j, double& du_k, double& dv_i, double& dv_j, 00262 double& dv_k) const; 00263 virtual inline Error 00264 getEnt2ndDrvt(EntityHandle handle, double u, double v, double& duu_i, 00265 double& duu_j, double& duu_k, double& dvv_i, double& dvv_j, 00266 double& dvv_k, double& duv_i, double& duv_j, double& duv_k) const; 00267 00268 virtual inline Error getArr1stDrvt(const EntityHandle* entities, 00269 int entities_size, StorageOrder order, const double* uv, int uv_size, 00270 double* dvtr_u, double* dvtr_v) const; 00271 00272 virtual inline Error getArr2ndDrvt(const EntityHandle* entities, 00273 int entities_size, StorageOrder order, const double* uv, int uv_size, 00274 double* dvtr_uu, double* dvtr_vv, double* dvtr_uv) const; 00275 00276 virtual inline Error getFcCvtrUV(EntityHandle face, double u, double v, 00277 double& i1, double& j1, double& k1, double& i2, double& j2, double& k2) const; 00278 00279 virtual inline Error getFcArrCvtrUV(const EntityHandle* faces, 00280 int faces_size, StorageOrder order, const double* uv, int uv_size, 00281 double* cvtr1, double* cvtr2) const; 00282 00283 virtual inline Error isEntPeriodic(EntityHandle entity, bool& in_u, 00284 bool& in_v) const; 00285 00286 virtual inline Error isArrPeriodic(const EntityHandle* entities, 00287 int entities_size, int* in_uv) const; 00288 00289 virtual inline Error isFcDegenerate(EntityHandle face, bool& is_degenerate) const; 00290 00291 virtual inline Error isFcArrDegenerate(const EntityHandle* faces, 00292 int faces_size, int* degenerate) const; 00293 00294 virtual inline Error getTolerance(int& type_out, double& tolerance_out) const; 00295 virtual inline Error getEntTolerance(EntityHandle entity, double& tolerance) const; 00296 virtual inline Error getArrTolerance(const EntityHandle* entities, 00297 int entities_size, double* tolerances) const; 00298 00299 virtual inline Error getEntUVRange(EntityHandle face, double& u_min, 00300 double& v_min, double& u_max, double& v_max) const; 00301 virtual inline Error getEntURange(EntityHandle edge, double& u_min, 00302 double& u_max) const; 00303 virtual inline Error getArrUVRange(const EntityHandle* faces, int faces_size, 00304 StorageOrder order, double* uv_min, double* uv_max) const; 00305 virtual inline Error getArrURange(const EntityHandle* edges, int edges_size, 00306 double* u_min, double* u_max) const; 00307 00308 virtual inline Error getEntUtoUV(EntityHandle edge, EntityHandle face, 00309 double edge_u, double& face_u, double& face_v) const; 00310 virtual inline Error getVtxToUV(EntityHandle vertex, EntityHandle face, 00311 double& u, double& v) const; 00312 virtual inline Error getVtxToU(EntityHandle vertex, EntityHandle edge, 00313 double& u) const; 00314 virtual inline Error getArrUtoUV(const EntityHandle* edges, int edges_size, 00315 const EntityHandle* faces, int faces_size, const double* edge_u, 00316 int edge_u_size, StorageOrder order, double* face_uv) const; 00317 virtual inline Error getVtxArrToUV(const EntityHandle* vertices, 00318 int vertices_size, const EntityHandle* faces, int faces_size, 00319 StorageOrder order, double* face_uv) const; 00320 virtual inline Error getVtxArrToU(const EntityHandle* vertices, 00321 int vertices_size, const EntityHandle* edges, int edges_size, 00322 double* edge_u) const; 00323 00324 virtual inline Error deleteAll(); 00325 00326 virtual inline Error deleteEnt(EntityHandle entity); 00327 00328 virtual inline Error copyEnt(EntityHandle source, EntityHandle& copy); 00329 00330 virtual inline Error createSphere(double radius, EntityHandle& sphere); 00331 virtual inline Error createPrism(double height, int num_sides, 00332 double maj_radius, double min_radius, EntityHandle& prism); 00333 virtual inline Error createBrick(double x, double y, double z, 00334 EntityHandle& brick); 00335 virtual inline Error createCylinder(double height, double maj_rad, 00336 double min_rad, EntityHandle& cylinder); 00337 virtual inline Error createTorus(double maj_rad, double min_rad, 00338 EntityHandle& torus); 00339 00340 virtual inline Error moveEnt(EntityHandle entity, double x, double y, 00341 double z); 00342 virtual inline Error rotateEnt(EntityHandle entity, double angle, 00343 double axis_x, double axis_y, double axis_z); 00344 virtual inline Error reflectEnt(EntityHandle entity, double norm_x, 00345 double norm_y, double norm_z); 00346 virtual inline Error scaleEnt(EntityHandle entity, double x_factor, 00347 double y_factor, double z_factor); 00348 00349 virtual inline Error uniteEnts(const EntityHandle* entities, 00350 int entities_size, EntityHandle& result_entity); 00351 virtual inline Error subtractEnts(EntityHandle blank, EntityHandle tool, 00352 EntityHandle& result); 00353 virtual inline Error intersectEnts(EntityHandle entity1, 00354 EntityHandle entity2, EntityHandle& result); 00355 00356 virtual inline Error sectionEnt(EntityHandle entity, double plane_x, 00357 double plane_y, double plane_z, double offset, bool reverse, 00358 EntityHandle& result); 00359 00360 virtual inline Error sweepEntAboutAxis(EntityHandle entity, double angle, 00361 double axis_x, double axis_y, double axis_z, EntityHandle& swept_entity); 00362 00363 virtual inline Error imprintEnts(const EntityHandle* entities, 00364 int entities_size); 00365 virtual inline Error mergeEnts(const EntityHandle* entities, 00366 int entities_size, double tolerance); 00367 00368 // copied from iBaseVirtual.hpp 00369 FBiGeom_Instance instance() { 00370 return mInstance; 00371 } 00372 00373 virtual inline std::string getDescription() const; 00374 00375 virtual inline Error getErrorType() const; 00376 00377 virtual inline EntitySetHandle getRootSet() const; 00378 00379 virtual inline Error createEntSet(bool is_list, EntitySetHandle& handle_out); 00380 virtual inline Error destroyEntSet(EntitySetHandle handle); 00381 virtual inline Error isList(EntitySetHandle handle, bool& is_list); 00382 00383 virtual inline Error getNumEntSets(EntitySetHandle set, int num_hops, 00384 int& num_sets_out) const; 00385 virtual inline Error getEntSets(EntitySetHandle set, int num_hops, std::vector< 00386 EntitySetHandle>& contained_sets_out) const; 00387 00388 virtual inline Error addEntToSet(EntityHandle entity, EntitySetHandle set); 00389 virtual inline Error rmvEntFromSet(EntityHandle entity, EntitySetHandle set); 00390 00391 virtual inline Error addEntArrToSet(const EntityHandle* entity_handles, 00392 int entity_handles_size, EntitySetHandle entity_set); 00393 virtual inline Error rmvEntArrFromSet(const EntityHandle* entity_handles, 00394 int entity_handles_size, EntitySetHandle entity_set); 00395 00396 virtual inline Error addEntSet(EntitySetHandle to_add, EntitySetHandle add_to); 00397 virtual inline Error rmvEntSet(EntitySetHandle to_rmv, EntitySetHandle rmv_from); 00398 00399 virtual inline Error isEntContained(EntitySetHandle set, EntityHandle ent, 00400 bool& contained_out) const; 00401 virtual inline Error isEntArrContained(EntitySetHandle containing_set, 00402 const EntityHandle* entity_handles, int num_entity_handles, 00403 bool* is_contained_out) const; 00404 virtual inline Error isEntSetContained(EntitySetHandle containing_set, 00405 EntitySetHandle contained_set, bool& contained_out) const; 00406 00407 virtual inline Error addPrntChld(EntitySetHandle parent, EntitySetHandle child); 00408 virtual inline Error rmvPrntChld(EntitySetHandle parent, EntitySetHandle child); 00409 virtual inline Error isChildOf(EntitySetHandle parent, EntitySetHandle child, 00410 bool& is_child_out) const; 00411 virtual inline Error getNumChld(EntitySetHandle parent, int num_hops, 00412 int& num_child_out) const; 00413 virtual inline Error getNumPrnt(EntitySetHandle child, int num_hops, 00414 int& num_parent_out) const; 00415 virtual inline Error getChldn(EntitySetHandle parent, int num_hops, std::vector< 00416 EntitySetHandle>& children_out) const; 00417 virtual inline Error getPrnts(EntitySetHandle child, int num_hops, std::vector< 00418 EntitySetHandle>& parents_out) const; 00419 00420 virtual inline Error subtract(EntitySetHandle set1, EntitySetHandle set2, 00421 EntitySetHandle& result_set_out); 00422 virtual inline Error intersect(EntitySetHandle set1, EntitySetHandle set2, 00423 EntitySetHandle& result_set_out); 00424 virtual inline Error unite(EntitySetHandle set1, EntitySetHandle set2, 00425 EntitySetHandle& result_set_out); 00426 00427 virtual inline Error createTag(const char* tag_name, int tag_num_type_values, 00428 TagValueType tag_type, TagHandle& tag_handle_out); 00429 00430 virtual inline Error destroyTag(TagHandle tag_handle, bool forced); 00431 virtual inline Error getTagName(TagHandle tag_handle, std::string& name_out) const; 00432 virtual inline Error getTagSizeValues(TagHandle tag_handle, int& size_out) const; 00433 virtual inline Error getTagSizeBytes(TagHandle tag_handle, int& size_out) const; 00434 virtual inline Error getTagHandle(const char* name, TagHandle& handle_out) const; 00435 virtual inline Error getTagType(TagHandle tag_handle, TagValueType& type_out) const; 00436 00437 virtual inline Error setEntSetData(EntitySetHandle set_handle, TagHandle tag_handle, 00438 const void* tag_value); 00439 virtual inline Error setEntSetIntData(EntitySetHandle set_handle, 00440 TagHandle tag_handle, int value); 00441 virtual inline Error setEntSetDblData(EntitySetHandle set_handle, 00442 TagHandle tag_handle, double value); 00443 virtual inline Error setEntSetEHData(EntitySetHandle set_handle, 00444 TagHandle tag_handle, EntityHandle value); 00445 virtual inline Error setEntSetESHData(EntitySetHandle set_handle, 00446 TagHandle tag_handle, EntitySetHandle value); 00447 00448 virtual inline Error getEntSetData(EntitySetHandle set_handle, TagHandle tag_handle, 00449 void* tag_value_out) const; 00450 virtual inline Error getEntSetIntData(EntitySetHandle set_handle, 00451 TagHandle tag_handle, int& value_out) const; 00452 virtual inline Error getEntSetDblData(EntitySetHandle set_handle, 00453 TagHandle tag_handle, double& value_out) const; 00454 virtual inline Error getEntSetEHData(EntitySetHandle set_handle, 00455 TagHandle tag_handle, EntityHandle& value_out) const; 00456 virtual inline Error getEntSetESHData(EntitySetHandle set_handle, 00457 TagHandle tag_handle, EntitySetHandle& value_out) const; 00458 00459 virtual inline Error getAllEntSetTags(EntitySetHandle set, 00460 std::vector<TagHandle>& tags_out) const; 00461 virtual inline Error getAllTags(EntityHandle entity, 00462 std::vector<TagHandle>& tags_out) const; 00463 00464 virtual inline Error rmvEntSetTag(EntitySetHandle set, TagHandle tag); 00465 virtual inline Error rmvTag(EntityHandle entity, TagHandle tag); 00466 virtual inline Error rmvArrTag(const EntityHandle* handles, int size, TagHandle tag); 00467 00468 virtual inline Error getArrData(const EntityHandle* entity_handles, 00469 int entity_handles_size, TagHandle tag_handle, void* tag_values_out) const; 00470 virtual inline Error getIntArrData(const EntityHandle* entity_handles, 00471 int entity_handles_size, TagHandle tag_handle, int* tag_values_out) const; 00472 virtual inline Error getDblArrData(const EntityHandle* entity_handles, 00473 int entity_handles_size, TagHandle tag_handle, double* tag_values_out) const; 00474 virtual inline Error getEHArrData(const EntityHandle* entity_handles, 00475 int entity_handles_size, TagHandle tag_handle, 00476 EntityHandle* tag_values_out) const; 00477 virtual inline Error getESHArrData(const EntityHandle* entity_handles, 00478 int entity_handles_size, TagHandle tag_handle, 00479 EntitySetHandle* tag_values_out) const; 00480 00481 virtual inline Error setArrData(const EntityHandle* entity_handles, 00482 int entity_handles_size, TagHandle tag_handle, const void* tag_values); 00483 virtual inline Error setIntArrData(const EntityHandle* entity_handles, 00484 int entity_handles_size, TagHandle tag_handle, const int* tag_values); 00485 virtual inline Error setDblArrData(const EntityHandle* entity_handles, 00486 int entity_handles_size, TagHandle tag_handle, const double* tag_values); 00487 virtual inline Error setEHArrData(const EntityHandle* entity_handles, 00488 int entity_handles_size, TagHandle tag_handle, 00489 const EntityHandle* tag_values); 00490 virtual inline Error setESHArrData(const EntityHandle* entity_handles, 00491 int entity_handles_size, TagHandle tag_handle, 00492 const EntitySetHandle* tag_values); 00493 00494 virtual inline Error setData(EntityHandle entity_handle, TagHandle tag_handle, 00495 const void* tag_value); 00496 virtual inline Error setIntData(EntityHandle entity_handle, TagHandle tag_handle, 00497 int value); 00498 virtual inline Error setDblData(EntityHandle entity_handle, TagHandle tag_handle, 00499 double value); 00500 virtual inline Error setEHData(EntityHandle entity_handle, TagHandle tag_handle, 00501 EntityHandle value); 00502 virtual inline Error setESHData(EntityHandle entity_handle, TagHandle tag_handle, 00503 EntitySetHandle value); 00504 00505 virtual inline Error getData(EntityHandle entity_handle, TagHandle tag_handle, 00506 void* tag_value_out) const; 00507 virtual inline Error getFacets(EntityHandle entity_handle, double dist_tolerance, 00508 std::vector<double> &point, std::vector<int> &facets) const; 00509 virtual inline Error getIntData(EntityHandle entity_handle, TagHandle tag_handle, 00510 int& value_out) const; 00511 virtual inline Error getDblData(EntityHandle entity_handle, TagHandle tag_handle, 00512 double& value_out) const; 00513 virtual inline Error getEHData(EntityHandle entity_handle, TagHandle tag_handle, 00514 EntityHandle& value_out) const; 00515 virtual inline Error getESHData(EntityHandle entity_handle, TagHandle tag_handle, 00516 EntitySetHandle& value_out) const; 00517 00518 virtual bool isFBiGeom() {return true;} 00519 // end copy from iBaseVirtual.hpp 00523 class EntArrIter { 00524 private: 00525 friend class FBiGeom; 00526 iBase_EntityArrIterator mHandle; 00527 FBiGeom_Instance mInstance; 00528 int mSize; 00529 public: 00530 EntArrIter() : 00531 mHandle(0), mInstance(0), mSize(0) { 00532 } 00533 inline ~EntArrIter(); 00534 inline Error getNext(EntityHandle* entity_handles_out, int& size_out, 00535 bool& has_more_data_out); 00536 inline Error reset(); 00537 }; 00538 00542 class EntIter { 00543 private: 00544 friend class FBiGeom; 00545 iBase_EntityIterator mHandle; 00546 FBiGeom_Instance mInstance; 00547 public: 00548 EntIter() : 00549 mHandle(0), mInstance(0) { 00550 } 00551 inline ~EntIter(); 00552 inline Error getNext(EntityHandle& entity_handle_out, 00553 bool& has_more_data_out); 00554 inline Error reset(); 00555 }; 00556 00557 virtual inline Error initEntIter(EntitySetHandle set, 00558 EntityType requested_type, EntIter& iter); 00559 virtual inline Error initEntArrIter(EntitySetHandle set, 00560 EntityType requested_type, int requested_array_size, EntArrIter& iter); 00561 private: 00562 bool FBiGeomInstanceOwner; 00563 00564 // prohibit copying 00565 FBiGeom(const FBiGeom&) { 00566 } 00567 void operator=(const FBiGeom&) { 00568 } 00569 }; 00570 00571 inline FBiGeom::FBiGeom(const char* options) : 00572 FBiGeomInstanceOwner(true) 00573 { 00574 int err, len = options ? strlen(options) : 0; 00575 FBiGeom_newGeom(options, &mInstance, &err, len); 00576 if (iBase_SUCCESS != err) { 00577 mInstance = 0; 00578 FBiGeomInstanceOwner = false; 00579 } 00580 } 00581 00582 inline FBiGeom::FBiGeom(FBiGeom_Instance instance) : 00583 FBiGeomInstanceOwner(false) 00584 { 00585 mInstance = instance; 00586 } 00587 inline FBiGeom::FBiGeom(bool meshBased) 00588 { 00589 mInstance = 0; 00590 FBiGeomInstanceOwner = false; 00591 } 00592 inline FBiGeom::~FBiGeom() 00593 { 00594 if (FBiGeomInstanceOwner) { 00595 int err; 00596 FBiGeom_dtor(mInstance, &err); 00597 } 00598 } 00599 00600 inline FBiGeom::Error FBiGeom::load(const char* file_name, const char* options) 00601 { 00602 int err, len = options ? strlen(options) : 0; 00603 FBiGeom_load(mInstance, file_name, options, &err, strlen(file_name), len); 00604 return (Error) err; 00605 } 00606 00607 inline FBiGeom::Error FBiGeom::save(const char* file_name, const char* options) 00608 { 00609 int err, len = options ? strlen(options) : 0; 00610 FBiGeom_save(mInstance, file_name, options, &err, strlen(file_name), len); 00611 return (Error) err; 00612 } 00613 00614 //inline FBiGeom::StorageOrder 00615 //FBiGeom::getDfltStorage() 00616 //{ 00617 // int err, order; 00618 // FBiGeom_getDfltStorage( mInstance, &order, &err ); 00619 // return (iBase_SUCCESS == err) ? (StorageOrder)order : iBase_UNDETERMINED; 00620 //} 00621 00622 inline FBiGeom::Error FBiGeom::getNumOfType(EntitySetHandle set, EntityType type, 00623 int& count_out) const 00624 { 00625 int err; 00626 FBiGeom_getNumOfType(mInstance, set, type, &count_out, &err); 00627 return (Error) err; 00628 } 00629 00630 inline FBiGeom::Error FBiGeom::getEntities(EntitySetHandle set, EntityType type, 00631 std::vector<EntityHandle>& entities_out) const 00632 { 00633 // if input vect has no allocated space, allocate some so 00634 // we don't accidentally ask the impl to allocate an array 00635 if (entities_out.capacity() == 0) { 00636 int count; 00637 Error err2 = getNumOfType(set, iBase_ALL_TYPES, count); 00638 if (err2 != iBase_SUCCESS) 00639 return err2; 00640 entities_out.resize(count); 00641 } 00642 00643 // try getting results using whatever space input vector has allocated 00644 int err, size = 0, alloc = entities_out.capacity(); 00645 entities_out.resize(entities_out.capacity()); 00646 EntityHandle* ptr = &entities_out[0]; 00647 FBiGeom_getEntities(mInstance, set, type, &ptr, &alloc, &size, &err); 00648 entities_out.resize(size); 00649 00650 // if input vector was too small, try again with increased size 00651 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 00652 alloc = entities_out.size(); 00653 ptr = &entities_out[0]; 00654 FBiGeom_getEntities(mInstance, set, type, &ptr, &alloc, &size, &err); 00655 } 00656 00657 return (Error) err; 00658 } 00659 00660 inline FBiGeom::Error FBiGeom::deleteEnt(EntityHandle handle) 00661 { 00662 int err; 00663 FBiGeom_deleteEnt(mInstance, handle, &err); 00664 return (Error) err; 00665 } 00666 00667 //inline FBiGeom::Error 00668 //FBiGeom::deleteEntArr( const EntityHandle* entity_handles, int num_handles ) 00669 //{ 00670 // int err; 00671 // FBiGeom_deleteEntArr( mInstance, entity_handles, num_handles, &err ); 00672 // return (Error)err; 00673 //} 00674 00675 //inline FBiGeom::Error 00676 //FBiGeom::getAdjEntities( EntitySetHandle set, 00677 // EntityType type_requestor, 00678 // EntityType type_requested, 00679 // std::vector<EntityHandle>& adj_entity_handles, 00680 // std::vector<int>& offset ) 00681 //{ 00682 // std::vector<EntityHandle> entities; 00683 // Error err = getEntities( set, type_requestor, entities ); 00684 // if (iBase_SUCCESS != err) 00685 // return err; 00686 // 00687 // offset.resize( entities.size() + 1 ); 00688 // return getArrAdj( &entities[0], entities.size(), type_requested, 00689 // adj_entity_handles, &offset[0] ); 00690 //} 00691 00692 inline FBiGeom::Error FBiGeom::initEntIter(EntitySetHandle set, 00693 EntityType requested_type, FBiGeom::EntIter& iter) 00694 { 00695 int err; 00696 iter.mInstance = mInstance; 00697 FBiGeom_initEntIter(mInstance, set, requested_type, &iter.mHandle, &err); 00698 return (Error) err; 00699 } 00700 00701 inline FBiGeom::Error FBiGeom::initEntArrIter(EntitySetHandle set, 00702 EntityType requested_type, int requested_array_size, 00703 FBiGeom::EntArrIter& iter) 00704 { 00705 int err; 00706 iter.mInstance = mInstance; 00707 iter.mSize = requested_array_size; 00708 FBiGeom_initEntArrIter(mInstance, set, requested_type, requested_array_size, 00709 &iter.mHandle, &err); 00710 return (Error) err; 00711 } 00712 00713 inline FBiGeom::EntArrIter::~EntArrIter() 00714 { 00715 int err; 00716 if (mHandle != 0) { 00717 FBiGeom_endEntArrIter(mInstance, mHandle, &err); 00718 mHandle = 0; 00719 } 00720 } 00721 00722 inline FBiGeom::EntIter::~EntIter() 00723 { 00724 int err; 00725 if (mHandle != 0) { 00726 FBiGeom_endEntIter(mInstance, mHandle, &err); 00727 mHandle = 0; 00728 } 00729 } 00730 00731 inline FBiGeom::Error FBiGeom::EntArrIter::getNext(EntityHandle* entity_handles, 00732 int& size_out, bool& has_more_data_out) 00733 { 00734 int err, alloc = mSize, has_data; 00735 FBiGeom_getNextEntArrIter(mInstance, mHandle, &entity_handles, &alloc, 00736 &size_out, &has_data, &err); 00737 has_more_data_out = (has_data != 0); 00738 return (Error) err; 00739 } 00740 00741 inline FBiGeom::Error FBiGeom::EntIter::getNext(EntityHandle& handle_out, 00742 bool& has_more_data_out) 00743 { 00744 int err, has_data; 00745 FBiGeom_getNextEntIter(mInstance, mHandle, &handle_out, &has_data, &err); 00746 has_more_data_out = (has_data != 0); 00747 return (Error) err; 00748 } 00749 00750 inline FBiGeom::Error FBiGeom::EntArrIter::reset() 00751 { 00752 int err; 00753 FBiGeom_resetEntArrIter(mInstance, mHandle, &err); 00754 return (Error) err; 00755 } 00756 00757 inline FBiGeom::Error FBiGeom::EntIter::reset() 00758 { 00759 int err; 00760 FBiGeom_resetEntIter(mInstance, mHandle, &err); 00761 return (Error) err; 00762 } 00763 00764 inline FBiGeom::Error FBiGeom::getEntType(EntityHandle handle, EntityType& type_out) const 00765 { 00766 int err, result; 00767 FBiGeom_getEntType(mInstance, handle, &result, &err); 00768 type_out = (EntityType) result; 00769 return (Error) err; 00770 } 00771 00772 inline FBiGeom::Error FBiGeom::getArrType(const EntityHandle* entity_handles, 00773 int entity_handles_size, EntityType* types_out) const 00774 { 00775 int err, alloc = entity_handles_size, junk, *ptr; 00776 std::vector<int> storage; 00777 if (sizeof(EntityType) == sizeof(int)) 00778 ptr = reinterpret_cast<int*> (types_out); 00779 else { 00780 storage.resize(entity_handles_size); 00781 ptr = &storage[0]; 00782 } 00783 00784 FBiGeom_getArrType(mInstance, entity_handles, entity_handles_size, &ptr, 00785 &alloc, &junk, &err); 00786 00787 if (sizeof(EntityType) != sizeof(int)) 00788 for (int i = 0; i < entity_handles_size; ++i) 00789 types_out[i] = (EntityType) storage[i]; 00790 00791 return (Error) err; 00792 } 00793 00794 inline FBiGeom::Error FBiGeom::getEntAdj(EntityHandle handle, 00795 EntityType type_requested, std::vector<EntityHandle>& adj_entities_out) const 00796 { 00797 if (adj_entities_out.capacity() == 0) 00798 adj_entities_out.resize(12); 00799 else 00800 adj_entities_out.resize(adj_entities_out.capacity()); 00801 00802 int err, alloc = adj_entities_out.size(), size = 0; 00803 EntityHandle* ptr = &adj_entities_out[0]; 00804 FBiGeom_getEntAdj(mInstance, handle, type_requested, &ptr, &alloc, &size, &err); 00805 adj_entities_out.resize(size); 00806 00807 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 00808 alloc = adj_entities_out.size(); 00809 ptr = &adj_entities_out[0]; 00810 FBiGeom_getEntAdj(mInstance, handle, type_requested, &ptr, &alloc, &size, 00811 &err); 00812 } 00813 00814 return (Error) err; 00815 } 00816 00817 inline FBiGeom::Error FBiGeom::getArrAdj(const EntityHandle* entity_handles, 00818 int entity_handles_size, EntityType type_requested, std::vector< 00819 EntityHandle>& adj_entities_out, int* offsets_out) const 00820 { 00821 if (adj_entities_out.capacity() == 0) 00822 adj_entities_out.resize(12 * entity_handles_size); 00823 else 00824 adj_entities_out.resize(adj_entities_out.capacity()); 00825 00826 int err, alloc = adj_entities_out.size(), size = 0; 00827 int off_alloc = entity_handles_size + 1, junk; 00828 EntityHandle* ptr = &adj_entities_out[0]; 00829 FBiGeom_getArrAdj(mInstance, entity_handles, entity_handles_size, 00830 type_requested, &ptr, &alloc, &size, &offsets_out, &off_alloc, &junk, 00831 &err); 00832 adj_entities_out.resize(size); 00833 00834 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 00835 alloc = adj_entities_out.size(); 00836 ptr = &adj_entities_out[0]; 00837 FBiGeom_getArrAdj(mInstance, entity_handles, entity_handles_size, 00838 type_requested, &ptr, &alloc, &size, &offsets_out, &off_alloc, &junk, 00839 &err); 00840 } 00841 00842 return (Error) err; 00843 } 00844 00845 inline FBiGeom::Error FBiGeom::getEnt2ndAdj(EntityHandle handle, 00846 EntityType bridge_entity_type, EntityType type_requested, std::vector< 00847 EntityHandle>& adj_entities_out) const 00848 { 00849 if (adj_entities_out.capacity() == 0) 00850 adj_entities_out.resize(12); 00851 else 00852 adj_entities_out.resize(adj_entities_out.capacity()); 00853 00854 int err, alloc = adj_entities_out.size(), size = 0; 00855 EntityHandle* ptr = &adj_entities_out[0]; 00856 FBiGeom_getEnt2ndAdj(mInstance, handle, bridge_entity_type, type_requested, 00857 &ptr, &alloc, &size, &err); 00858 adj_entities_out.resize(size); 00859 00860 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 00861 alloc = adj_entities_out.size(); 00862 ptr = &adj_entities_out[0]; 00863 FBiGeom_getEnt2ndAdj(mInstance, handle, bridge_entity_type, type_requested, 00864 &ptr, &alloc, &size, &err); 00865 } 00866 00867 return (Error) err; 00868 } 00869 00870 inline FBiGeom::Error FBiGeom::getArr2ndAdj(const EntityHandle* entity_handles, 00871 int entity_handles_size, EntityType order_key, EntityType type_requested, 00872 std::vector<EntityHandle>& adj_entities_out, int* offsets_out) const 00873 { 00874 if (adj_entities_out.capacity() == 0) 00875 adj_entities_out.resize(12 * entity_handles_size); 00876 else 00877 adj_entities_out.resize(adj_entities_out.capacity()); 00878 00879 int err, alloc = adj_entities_out.size(), size = 0; 00880 int off_alloc = entity_handles_size + 1, junk; 00881 EntityHandle* ptr = &adj_entities_out[0]; 00882 FBiGeom_getArr2ndAdj(mInstance, entity_handles, entity_handles_size, order_key, 00883 type_requested, &ptr, &alloc, &size, &offsets_out, &off_alloc, &junk, 00884 &err); 00885 adj_entities_out.resize(size); 00886 00887 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 00888 alloc = adj_entities_out.size(); 00889 ptr = &adj_entities_out[0]; 00890 FBiGeom_getArr2ndAdj(mInstance, entity_handles, entity_handles_size, 00891 order_key, type_requested, &ptr, &alloc, &size, &offsets_out, 00892 &off_alloc, &junk, &err); 00893 } 00894 00895 return (Error) err; 00896 } 00897 00898 inline FBiGeom::Error FBiGeom::getBoundBox(double& min_x, double& min_y, 00899 double& min_z, double& max_x, double& max_y, double& max_z) const 00900 { 00901 int err; 00902 FBiGeom_getBoundBox(mInstance, &min_x, &min_y, &min_z, &max_x, &max_y, &max_z, 00903 &err); 00904 return (Error) err; 00905 } 00906 00907 inline int FBiGeom::getParametric() 00908 { 00909 int err, result; 00910 FBiGeom_getParametric(mInstance, &result, &err); 00911 return result; 00912 } 00913 00914 inline FBiGeom::Error FBiGeom::isEntAdj(EntityHandle entity1, EntityHandle entity2, 00915 bool& adjacent_out) const 00916 { 00917 int err, result; 00918 FBiGeom_isEntAdj(mInstance, entity1, entity2, &result, &err); 00919 adjacent_out = (result != 0); 00920 return (Error) err; 00921 } 00922 00923 inline FBiGeom::Error FBiGeom::isArrAdj(const EntityHandle* entities1, 00924 const EntityHandle* entities2, int num_entity_pairs, int* is_adj_out) const 00925 { 00926 int err, alloc = num_entity_pairs, size = 0; 00927 FBiGeom_isArrAdj(mInstance, entities1, num_entity_pairs, entities2, 00928 num_entity_pairs, &is_adj_out, &alloc, &size, &err); 00929 return (Error) err; 00930 } 00931 00932 inline FBiGeom::Error FBiGeom::getEntClosestPt(EntityHandle entity, double near_x, 00933 double near_y, double near_z, double& on_x, double& on_y, double& on_z) const 00934 { 00935 int err; 00936 FBiGeom_getEntClosestPt(mInstance, entity, near_x, near_y, near_z, &on_x, 00937 &on_y, &on_z, &err); 00938 return (Error) err; 00939 } 00940 00941 inline FBiGeom::Error FBiGeom::getEntClosestPtTrimmed(EntityHandle entity, double near_x, 00942 double near_y, double near_z, double& on_x, double& on_y, double& on_z) const 00943 { 00944 int err=0; 00945 FBiGeom_getEntClosestPtTrimmed(mInstance, entity, near_x, near_y, near_z, &on_x, &on_y, &on_z, &err); 00946 return (Error) err; 00947 } 00948 00949 inline FBiGeom::Error FBiGeom::getArrClosestPt(const EntityHandle* handles, 00950 int handles_size, StorageOrder order, const double* near_coordinates, 00951 int near_coordinates_size, double* on_coordinates) const 00952 { 00953 int err, alloc = std::max(near_coordinates_size, 3 * handles_size), size = 0; 00954 FBiGeom_getArrClosestPt(mInstance, handles, handles_size, order, 00955 near_coordinates, near_coordinates_size, &on_coordinates, &alloc, &size, 00956 &err); 00957 return (Error) err; 00958 } 00959 00960 inline FBiGeom::Error FBiGeom::getEntNrmlXYZ(EntityHandle entity, double x, 00961 double y, double z, double& i, double& j, double& k) const 00962 { 00963 int err; 00964 FBiGeom_getEntNrmlXYZ(mInstance, entity, x, y, z, &i, &j, &k, &err); 00965 return (Error) err; 00966 } 00967 00968 inline FBiGeom::Error FBiGeom::getArrNrmlXYZ(const EntityHandle* entities, 00969 int entities_size, StorageOrder order, const double* xyz, int xyz_size, 00970 double* ijk) const 00971 { 00972 int err, alloc = std::max(xyz_size, 3 * entities_size), size = 0; 00973 FBiGeom_getArrNrmlXYZ(mInstance, entities, entities_size, order, xyz, xyz_size, 00974 &ijk, &alloc, &size, &err); 00975 return (Error) err; 00976 } 00977 00978 inline FBiGeom::Error FBiGeom::getEntNrmlPlXYZ(EntityHandle entity, double x, 00979 double y, double z, double& on_x, double& on_y, double& on_z, double& i, 00980 double& j, double& k) const 00981 { 00982 int err; 00983 FBiGeom_getEntNrmlPlXYZ(mInstance, entity, x, y, z, &on_x, &on_y, &on_z, &i, 00984 &j, &k, &err); 00985 return (Error) err; 00986 } 00987 00988 inline FBiGeom::Error FBiGeom::getArrNrmlPlXYZ(const EntityHandle* entities, 00989 int entities_size, StorageOrder order, const double* near_xyz, 00990 int near_xyz_size, double* on_xyz, double* nrml_ijk) const 00991 { 00992 int err, alloc = std::max(near_xyz_size, 3 * entities_size), size = 0; 00993 FBiGeom_getArrNrmlPlXYZ(mInstance, entities, entities_size, order, near_xyz, 00994 near_xyz_size, &on_xyz, &alloc, &size, &nrml_ijk, &alloc, &size, &err); 00995 return (Error) err; 00996 } 00997 00998 inline FBiGeom::Error FBiGeom::getEntTgntXYZ(EntityHandle entity, double x, 00999 double y, double z, double& i, double& j, double& k) const 01000 { 01001 int err; 01002 FBiGeom_getEntTgntXYZ(mInstance, entity, x, y, z, &i, &j, &k, &err); 01003 return (Error) err; 01004 } 01005 01006 inline FBiGeom::Error FBiGeom::getArrTgntXYZ(const EntityHandle* entities, 01007 int entities_size, StorageOrder order, const double* xyz, int xyz_size, 01008 double* ijk) const 01009 { 01010 int err, alloc = std::max(xyz_size, 3 * entities_size), size = 0; 01011 FBiGeom_getArrTgntXYZ(mInstance, entities, entities_size, order, xyz, xyz_size, 01012 &ijk, &alloc, &size, &err); 01013 return (Error) err; 01014 } 01015 01016 inline FBiGeom::Error FBiGeom::getFcCvtrXYZ(EntityHandle face, double x, double y, 01017 double z, double& i1, double& j1, double& k1, double& i2, double& j2, 01018 double& k2) const 01019 { 01020 int err=0; 01021 FBiGeom_getFcCvtrXYZ(mInstance, face, x, y, z, &i1, &j1, &k1, &i2, &j2, &k2, 01022 &err); 01023 return (Error) err; 01024 } 01025 01026 inline FBiGeom::Error FBiGeom::getEgCvtrXYZ(EntityHandle edge, double x, double y, 01027 double z, double& i, double& j, double& k) const 01028 { 01029 int err=0; 01030 FBiGeom_getEgCvtrXYZ(mInstance, edge, x, y, z, &i, &j, &k, &err); 01031 return (Error) err; 01032 } 01033 01034 inline FBiGeom::Error FBiGeom::getEntArrCvtrXYZ(const EntityHandle* entities, 01035 int entities_size, StorageOrder order, const double* xyz, int xyz_size, 01036 double* cvtr_1, double* cvtr_2) const 01037 { 01038 int err=0, alloc = std::max(xyz_size, 3 * entities_size), size = 0; 01039 FBiGeom_getEntArrCvtrXYZ(mInstance, entities, entities_size, order, xyz, 01040 xyz_size, &cvtr_1, &alloc, &size, &cvtr_2, &alloc, &size, &err); 01041 return (Error) err; 01042 } 01043 01044 inline FBiGeom::Error FBiGeom::getEgEvalXYZ(EntityHandle edge, double x, double y, 01045 double z, double& on_x, double& on_y, double& on_z, double& tngt_i, 01046 double& tngt_j, double& tngt_k, double& cvtr_i, double& cvtr_j, 01047 double& cvtr_k) const 01048 { 01049 int err=0; 01050 FBiGeom_getEgEvalXYZ(mInstance, edge, x, y, z, &on_x, &on_y, &on_z, &tngt_i, 01051 &tngt_j, &tngt_k, &cvtr_i, &cvtr_j, &cvtr_k, &err); 01052 return (Error) err; 01053 } 01054 01055 inline FBiGeom::Error FBiGeom::getFcEvalXYZ(EntityHandle face, double x, double y, 01056 double z, double& on_x, double& on_y, double& on_z, double& tngt_i, 01057 double& tngt_j, double& tngt_k, double& cvtr1_i, double& cvtr1_j, 01058 double& cvtr1_k, double& cvtr2_i, double& cvtr2_j, double& cvtr2_k) const 01059 { 01060 int err=0; 01061 FBiGeom_getFcEvalXYZ(mInstance, face, x, y, z, &on_x, &on_y, &on_z, &tngt_i, 01062 &tngt_j, &tngt_k, &cvtr1_i, &cvtr1_j, &cvtr1_k, &cvtr2_i, &cvtr2_j, 01063 &cvtr2_k, &err); 01064 return (Error) err; 01065 } 01066 01067 inline FBiGeom::Error FBiGeom::getArrEgEvalXYZ(const EntityHandle* edges, 01068 int edges_size, StorageOrder order, const double* near_coords, 01069 int near_coords_size, double* on_coords, double* tangent, double* curvature) const 01070 { 01071 int err=0, alloc = std::max(near_coords_size, 3 * edges_size), size = 0; 01072 FBiGeom_getArrEgEvalXYZ(mInstance, edges, edges_size, order, near_coords, 01073 near_coords_size, &on_coords, &alloc, &size, &tangent, &alloc, &size, 01074 &curvature, &alloc, &size, &err); 01075 return (Error) err; 01076 } 01077 01078 inline FBiGeom::Error FBiGeom::getArrFcEvalXYZ(const EntityHandle* faces, 01079 int faces_size, StorageOrder order, const double* near_coords, 01080 int near_coords_size, double* on_coords, double* tangent, 01081 double* curvature1, double* curvature2) const 01082 { 01083 int err=0, alloc = std::max(near_coords_size, 3 * faces_size), size = 0; 01084 FBiGeom_getArrFcEvalXYZ(mInstance, faces, faces_size, order, near_coords, 01085 near_coords_size, &on_coords, &alloc, &size, &tangent, &alloc, &size, 01086 &curvature1, &alloc, &size, &curvature2, &alloc, &size, &err); 01087 return (Error) err; 01088 } 01089 01090 inline FBiGeom::Error FBiGeom::getEntBoundBox(EntityHandle entity, double& min_x, 01091 double& min_y, double& min_z, double& max_x, double& max_y, double& max_z) const 01092 { 01093 int err; 01094 FBiGeom_getEntBoundBox(mInstance, entity, &min_x, &min_y, &min_z, &max_x, 01095 &max_y, &max_z, &err); 01096 return (Error) err; 01097 } 01098 01099 inline FBiGeom::Error FBiGeom::getArrBoundBox(const EntityHandle* entities, 01100 int entities_size, StorageOrder order, double* min_corners, 01101 double* max_corners) const 01102 { 01103 int err, alloc = 3 * entities_size, size = 0, order_int = order; 01104 FBiGeom_getArrBoundBox(mInstance, entities, entities_size, order_int, 01105 &min_corners, &alloc, &size, &max_corners, &alloc, &size, &err); 01106 return (Error) err; 01107 } 01108 01109 inline FBiGeom::Error FBiGeom::getVtxCoord(EntityHandle vertex, double& x, 01110 double& y, double& z) const 01111 { 01112 int err; 01113 FBiGeom_getVtxCoord(mInstance, vertex, &x, &y, &z, &err); 01114 return (Error) err; 01115 } 01116 01117 inline FBiGeom::Error FBiGeom::getVtxArrCoords(const EntityHandle* vertices, 01118 int vertices_size, StorageOrder order, double* coords) const 01119 { 01120 int err, alloc = vertices_size, size = 0; 01121 FBiGeom_getVtxArrCoords(mInstance, vertices, vertices_size, order, &coords, 01122 &alloc, &size, &err); 01123 return (Error) err; 01124 } 01125 01126 inline FBiGeom::Error FBiGeom::getPntRayIntsct(double x, double y, double z, 01127 double i, double j, double k, StorageOrder order, 01128 std::vector<EntityHandle>& entities_out, std::vector<double>& points_out, 01129 std::vector<double>& params_out) const 01130 { 01131 int err, count; 01132 Error err2 = getNumOfType(getRootSet(), iBase_ALL_TYPES, count); 01133 if (err2 != iBase_SUCCESS) 01134 return err2; 01135 01136 entities_out.resize(count); 01137 points_out.resize(3 * count); 01138 params_out.resize(2 * count); 01139 int entities_alloc = entities_out.size(), entities_size = 0; 01140 int points_alloc = points_out.size(), points_size = 0; 01141 int params_alloc = params_out.size(), params_size = 0; 01142 EntityHandle* entities_ptr = &entities_out[0]; 01143 double * points_ptr = &points_out[0]; 01144 double * params_ptr = ¶ms_out[0]; 01145 01146 FBiGeom_getPntRayIntsct(mInstance, x, y, z, i, j, k, &entities_ptr, 01147 &entities_alloc, &entities_size, order, &points_ptr, &points_alloc, 01148 &points_size, ¶ms_ptr, ¶ms_alloc, ¶ms_size, &err); 01149 entities_out.resize(entities_size); 01150 points_out.resize(points_size); 01151 params_out.resize(params_size); 01152 if (err == iBase_BAD_ARRAY_SIZE || err == iBase_BAD_ARRAY_DIMENSION) { 01153 entities_alloc = entities_out.size(); 01154 points_alloc = points_out.size(); 01155 params_alloc = params_out.size(); 01156 entities_ptr = &entities_out[0]; 01157 points_ptr = &points_out[0]; 01158 params_ptr = ¶ms_out[0]; 01159 FBiGeom_getPntRayIntsct(mInstance, x, y, z, i, j, k, &entities_ptr, 01160 &entities_alloc, &entities_size, order, &points_ptr, &points_alloc, 01161 &points_size, ¶ms_ptr, ¶ms_alloc, ¶ms_size, &err); 01162 } 01163 01164 return (Error) err; 01165 } 01166 01167 inline FBiGeom::Error FBiGeom::getPntClsf(double x, double y, double z, 01168 EntityHandle& handle_out) const 01169 { 01170 int err=0; 01171 /*FBiGeom_getPntClsf(mInstance, x, y, z, &handle_out, &err);*/ 01172 return (Error) err; 01173 } 01174 01175 inline FBiGeom::Error FBiGeom::getPntArrClsf(StorageOrder order, 01176 const double* coords, int coords_size, EntityHandle* entities_out) const 01177 { 01178 int err=0;//, alloc = coords_size / 3, size = 0; 01179 /*FBiGeom_getPntArrClsf(mInstance, order, coords, coords_size, &entities_out, 01180 &alloc, &size, &err);*/ 01181 return (Error) err; 01182 } 01183 01184 inline FBiGeom::Error FBiGeom::getSense(EntityHandle ent, EntityHandle wrt_ent, 01185 int &sense) const 01186 { 01187 EntityType tp_wrt, tp_ent; 01188 Error err = getEntType(wrt_ent, tp_wrt); 01189 if (iBase_SUCCESS != err) 01190 return err; 01191 err = getEntType(ent, tp_ent); 01192 if (iBase_SUCCESS != err) 01193 return err; 01194 if (tp_wrt - tp_ent != 1) 01195 return iBase_FAILURE; 01196 switch (tp_wrt) { 01197 case iBase_REGION: 01198 return getEntNrmlSense(ent, wrt_ent, sense); 01199 break; 01200 case iBase_FACE: 01201 return getEgFcSense(ent, wrt_ent, sense); 01202 case iBase_EDGE: 01203 return getEgVtxSense(wrt_ent, ent, ent, sense); 01204 case iBase_VERTEX: 01205 case iBase_ALL_TYPES: 01206 return iBase_FAILURE; 01207 } 01208 return iBase_FAILURE; 01209 } 01210 01211 inline FBiGeom::Error FBiGeom::getArrSense(const EntityHandle *ent, int num_ents, 01212 EntityHandle wrt_ent, int *sense) const 01213 { 01214 EntityType tp_wrt, tp_ent; 01215 Error err = getEntType(wrt_ent, tp_wrt); 01216 if (iBase_SUCCESS != err) 01217 return err; 01218 err = getEntType(ent[0], tp_ent); 01219 if (iBase_SUCCESS != err) 01220 return err; 01221 if (tp_wrt - tp_ent != 1) 01222 return iBase_FAILURE; 01223 std::vector<EntityHandle> dum_wrts(num_ents, wrt_ent); 01224 switch (tp_wrt) { 01225 case iBase_REGION: 01226 return getArrNrmlSense(ent, num_ents, &dum_wrts[0], num_ents, sense); 01227 break; 01228 case iBase_FACE: 01229 return getEgFcArrSense(ent, num_ents, &dum_wrts[0], num_ents, sense); 01230 break; 01231 case iBase_EDGE: 01232 return getEgVtxArrSense(&dum_wrts[0], num_ents, ent, num_ents, ent, 01233 num_ents, sense); 01234 break; 01235 case iBase_VERTEX: 01236 case iBase_ALL_TYPES: 01237 return iBase_FAILURE; 01238 break; 01239 } 01240 return iBase_FAILURE; 01241 } 01242 01243 inline FBiGeom::Error FBiGeom::getEntNrmlSense(EntityHandle face, 01244 EntityHandle region, int& sense) const 01245 { 01246 int err; 01247 FBiGeom_getEntNrmlSense(mInstance, face, region, &sense, &err); 01248 return (Error) err; 01249 } 01250 01251 inline FBiGeom::Error FBiGeom::getEgFcSense(EntityHandle edge, EntityHandle face, 01252 int& sense) const 01253 { 01254 int err; 01255 FBiGeom_getEgFcSense(mInstance, edge, face, &sense, &err); 01256 return (Error) err; 01257 } 01258 01259 inline FBiGeom::Error FBiGeom::getEgVtxSense(EntityHandle edge, EntityHandle vtx1, 01260 EntityHandle vtx2, int& sense) const 01261 { 01262 int err; 01263 FBiGeom_getEgVtxSense(mInstance, edge, vtx1, vtx2, &sense, &err); 01264 return (Error) err; 01265 } 01266 01267 inline FBiGeom::Error FBiGeom::getArrNrmlSense(const EntityHandle* faces, 01268 int faces_size, const EntityHandle* vols, int vols_size, int* senses_out) const 01269 { 01270 int err, alloc = std::max(vols_size, faces_size), size = 0; 01271 FBiGeom_getArrNrmlSense(mInstance, faces, faces_size, vols, vols_size, 01272 &senses_out, &alloc, &size, &err); 01273 return (Error) err; 01274 } 01275 01276 inline FBiGeom::Error FBiGeom::getEgFcArrSense(const EntityHandle* edges, 01277 int edges_size, const EntityHandle* faces, int faces_size, int* senses_out) const 01278 { 01279 int err, alloc = std::max(edges_size, faces_size), size = 0; 01280 FBiGeom_getEgFcArrSense(mInstance, edges, edges_size, faces, faces_size, 01281 &senses_out, &alloc, &size, &err); 01282 return (Error) err; 01283 } 01284 01285 inline FBiGeom::Error FBiGeom::getEgVtxArrSense(const EntityHandle* edges, 01286 int edges_size, const EntityHandle* vertices1, int vertices1_size, 01287 const EntityHandle* vertices2, int vertices2_size, int* senses_out) const 01288 { 01289 int err, alloc = std::max(vertices1_size, 01290 std::max(vertices2_size, edges_size)), size = 0; 01291 FBiGeom_getEgVtxArrSense(mInstance, edges, edges_size, vertices1, 01292 vertices1_size, vertices2, vertices2_size, &senses_out, &alloc, &size, 01293 &err); 01294 return (Error) err; 01295 } 01296 01297 inline FBiGeom::Error FBiGeom::measure(const EntityHandle* entities, 01298 int entities_size, double* measures) const 01299 { 01300 int err, alloc = entities_size, size = 0; 01301 FBiGeom_measure(mInstance, entities, entities_size, &measures, &alloc, &size, 01302 &err); 01303 return (Error) err; 01304 } 01305 01306 inline FBiGeom::Error FBiGeom::getFaceType(EntityHandle face, std::string& type) const 01307 { 01308 char buffer[1024]; 01309 int err, len = sizeof(buffer); 01310 FBiGeom_getFaceType(mInstance, face, buffer, &err, &len); 01311 type = std::string(buffer, len); 01312 return (Error) err; 01313 } 01314 01315 inline FBiGeom::Error FBiGeom::isEntParametric(EntityHandle entity, 01316 bool& parametric) const 01317 { 01318 int err, result; 01319 FBiGeom_isEntParametric(mInstance, entity, &result, &err); 01320 parametric = (result != 0); 01321 return (Error) err; 01322 } 01323 01324 inline FBiGeom::Error FBiGeom::isArrParametric(const EntityHandle* entities, 01325 int entities_size, int* is_parametric) const 01326 { 01327 int err, alloc = entities_size, size = 1; 01328 FBiGeom_isArrParametric(mInstance, entities, entities_size, &is_parametric, 01329 &alloc, &size, &err); 01330 return (Error) err; 01331 } 01332 01333 inline FBiGeom::Error FBiGeom::getEntUVtoXYZ(EntityHandle face, double u, double v, 01334 double& x, double& y, double& z) const 01335 { 01336 int err; 01337 FBiGeom_getEntUVtoXYZ(mInstance, face, u, v, &x, &y, &z, &err); 01338 return (Error) err; 01339 } 01340 01341 inline FBiGeom::Error FBiGeom::getEntUtoXYZ(EntityHandle edge, double u, double& x, 01342 double& y, double& z) const 01343 { 01344 int err; 01345 FBiGeom_getEntUtoXYZ(mInstance, edge, u, &x, &y, &z, &err); 01346 return (Error) err; 01347 } 01348 01349 inline FBiGeom::Error FBiGeom::getArrUVtoXYZ(const EntityHandle* faces, 01350 int faces_size, StorageOrder order, const double* uv, int uv_size, 01351 double* xyz) const 01352 { 01353 int err, alloc = std::max(3 * uv_size / 2, 3 * faces_size), size = 0; 01354 FBiGeom_getArrUVtoXYZ(mInstance, faces, faces_size, order, uv, uv_size, &xyz, 01355 &alloc, &size, &err); 01356 return (Error) err; 01357 } 01358 01359 inline FBiGeom::Error FBiGeom::getArrUtoXYZ(const EntityHandle* edges, 01360 int edges_size, const double* u, int u_size, StorageOrder order, 01361 double* xyz) const 01362 { 01363 int err, alloc = std::max(3 * u_size, 3 * edges_size), size = 0; 01364 FBiGeom_getArrUtoXYZ(mInstance, edges, edges_size, u, u_size, order, &xyz, 01365 &alloc, &size, &err); 01366 return (Error) err; 01367 } 01368 01369 inline FBiGeom::Error FBiGeom::getEntXYZtoUV(EntityHandle face, double x, double y, 01370 double z, double& u, double& v) const 01371 { 01372 int err; 01373 FBiGeom_getEntXYZtoUV(mInstance, face, x, y, z, &u, &v, &err); 01374 return (Error) err; 01375 } 01376 01377 inline FBiGeom::Error FBiGeom::getEntXYZtoU(EntityHandle edge, double x, double y, 01378 double z, double& u) const 01379 { 01380 int err; 01381 FBiGeom_getEntXYZtoU(mInstance, edge, x, y, z, &u, &err); 01382 return (Error) err; 01383 } 01384 01385 inline FBiGeom::Error FBiGeom::getArrXYZtoUV(const EntityHandle* faces, 01386 int faces_size, StorageOrder order, const double* coords, int coords_size, 01387 double* uv) const 01388 { 01389 int err, alloc = std::max(2 * coords_size / 3, 2 * faces_size), size = 0; 01390 FBiGeom_getArrXYZtoUV(mInstance, faces, faces_size, order, coords, coords_size, 01391 &uv, &alloc, &size, &err); 01392 return (Error) err; 01393 } 01394 01395 inline FBiGeom::Error FBiGeom::getArrXYZtoU(const EntityHandle* edges, 01396 int edges_size, StorageOrder order, const double* coords, int coords_size, 01397 double* u) const 01398 { 01399 int err, alloc = std::max(coords_size / 3, edges_size), size = 0; 01400 FBiGeom_getArrXYZtoU(mInstance, edges, edges_size, order, coords, coords_size, 01401 &u, &alloc, &size, &err); 01402 return (Error) err; 01403 } 01404 01405 inline FBiGeom::Error FBiGeom::getEntXYZtoUVHint(EntityHandle face, double x, 01406 double y, double z, double& u, double& v) const 01407 { 01408 int err; 01409 FBiGeom_getEntXYZtoUVHint(mInstance, face, x, y, z, &u, &v, &err); 01410 return (Error) err; 01411 } 01412 01413 inline FBiGeom::Error FBiGeom::getArrXYZtoUVHint(const EntityHandle* faces, 01414 int faces_size, StorageOrder order, const double* coords, int coords_size, 01415 double* uv) const 01416 { 01417 int err, alloc = std::max(2 * coords_size / 3, 2 * faces_size), size = 0; 01418 FBiGeom_getArrXYZtoUVHint(mInstance, faces, faces_size, order, coords, 01419 coords_size, &uv, &alloc, &size, &err); 01420 return (Error) err; 01421 } 01422 01423 inline FBiGeom::Error FBiGeom::getEntNrmlUV(EntityHandle face, double u, double v, 01424 double& i, double& j, double& k) const 01425 { 01426 int err; 01427 FBiGeom_getEntNrmlUV(mInstance, face, u, v, &i, &j, &k, &err); 01428 return (Error) err; 01429 } 01430 01431 inline FBiGeom::Error FBiGeom::getArrNrmlUV(const EntityHandle* faces, 01432 int faces_size, StorageOrder order, const double* uv, int uv_size, 01433 double* normals) const 01434 { 01435 int err, alloc = std::max(3 * uv_size / 2, 3 * faces_size), size = 0; 01436 FBiGeom_getArrNrmlUV(mInstance, faces, faces_size, order, uv, uv_size, 01437 &normals, &alloc, &size, &err); 01438 return (Error) err; 01439 } 01440 01441 inline FBiGeom::Error FBiGeom::getEntTgntU(EntityHandle edge, double u, double& i, 01442 double& j, double& k) const 01443 { 01444 int err; 01445 FBiGeom_getEntTgntU(mInstance, edge, u, &i, &j, &k, &err); 01446 return (Error) err; 01447 } 01448 01449 inline FBiGeom::Error FBiGeom::getArrTgntU(const EntityHandle* edges, 01450 int edges_size, StorageOrder order, const double* u, int u_size, 01451 double* normals) const 01452 { 01453 int err, alloc = std::max(3 * u_size, 3 * edges_size), size = 0; 01454 FBiGeom_getArrTgntU(mInstance, edges, edges_size, order, u, u_size, &normals, 01455 &alloc, &size, &err); 01456 return (Error) err; 01457 } 01458 01459 inline FBiGeom::Error FBiGeom::getEnt1stDrvt(EntityHandle handle, double u, 01460 double v, double& du_i, double& du_j, double& du_k, double& dv_i, 01461 double& dv_j, double& dv_k) const 01462 { 01463 int err, du_alloc = 3, dv_alloc = 3, du_size = 0, dv_size = 0; 01464 double du[3], dv[3], *du_ptr = du, *dv_ptr = dv; 01465 FBiGeom_getEnt1stDrvt(mInstance, handle, u, v, &du_ptr, &du_alloc, &du_size, 01466 &dv_ptr, &dv_alloc, &dv_size, &err); 01467 du_i = du[0]; 01468 du_j = du[1]; 01469 du_k = du[2]; 01470 dv_i = dv[0]; 01471 dv_j = dv[1]; 01472 dv_k = dv[2]; 01473 return (Error) err; 01474 } 01475 01476 inline FBiGeom::Error FBiGeom::getEnt2ndDrvt(EntityHandle handle, double u, 01477 double v, double& duu_i, double& duu_j, double& duu_k, double& dvv_i, 01478 double& dvv_j, double& dvv_k, double& duv_i, double& duv_j, double& duv_k) const 01479 { 01480 int err, uu_alloc = 3, uv_alloc = 3, vv_alloc = 3, uu_size = 0, uv_size = 0, 01481 vv_size = 0; 01482 double uu[3], uv[3], vv[3], *uu_ptr = uu, *vv_ptr = vv, *uv_ptr = uv; 01483 FBiGeom_getEnt2ndDrvt(mInstance, handle, u, v, &uu_ptr, &uu_alloc, &uu_size, 01484 &vv_ptr, &vv_alloc, &vv_size, &uv_ptr, &uv_alloc, &uv_size, &err); 01485 duu_i = uu[0]; 01486 duu_j = uu[1]; 01487 duu_k = uu[2]; 01488 dvv_i = vv[0]; 01489 dvv_j = vv[1]; 01490 dvv_k = vv[2]; 01491 duv_i = uv[0]; 01492 duv_j = uv[1]; 01493 duv_k = uv[2]; 01494 return (Error) err; 01495 } 01496 01497 inline FBiGeom::Error FBiGeom::getArr1stDrvt(const EntityHandle* entities, 01498 int entities_size, StorageOrder order, const double* uv, int uv_size, 01499 double* dvtr_u, double* dvtr_v) const 01500 { 01501 int err, allocu = std::max(3 * uv_size / 2, 3 * entities_size), sizeu = 0, 01502 allocv = allocu, sizev = 0; 01503 std::vector<int> offset1(std::max(uv_size / 2, entities_size) + 1); 01504 std::vector<int> offset2(std::max(uv_size / 2, entities_size) + 1); 01505 int alloc1 = offset1.size(), size1 = 0, *ptr1 = &offset1[0]; 01506 int alloc2 = offset2.size(), size2 = 0, *ptr2 = &offset2[0]; 01507 FBiGeom_getArr1stDrvt(mInstance, entities, entities_size, order, uv, uv_size, 01508 &dvtr_u, &allocu, &sizeu, &ptr1, &alloc1, &size1, &dvtr_v, &allocv, 01509 &sizev, &ptr2, &alloc2, &size2, &err); 01510 return (Error) err; 01511 } 01512 01513 inline FBiGeom::Error FBiGeom::getArr2ndDrvt(const EntityHandle* entities, 01514 int entities_size, StorageOrder order, const double* uv, int uv_size, 01515 double* dvtr_uu, double* dvtr_vv, double* dvtr_uv) const 01516 { 01517 int err, allocuu = std::max(3 * uv_size / 2, 3 * entities_size), sizeuu = 0, 01518 allocvv = allocuu, sizevv = 0, allocuv = allocuu, sizeuv = 0; 01519 std::vector<int> offset1(std::max(uv_size / 2, entities_size) + 1); 01520 std::vector<int> offset2(std::max(uv_size / 2, entities_size) + 1); 01521 std::vector<int> offset3(std::max(uv_size / 2, entities_size) + 1); 01522 int alloc1 = offset1.size(), size1 = 0, *ptr1 = &offset1[0]; 01523 int alloc2 = offset2.size(), size2 = 0, *ptr2 = &offset2[0]; 01524 int alloc3 = offset3.size(), size3 = 0, *ptr3 = &offset3[0]; 01525 FBiGeom_getArr2ndDrvt(mInstance, entities, entities_size, order, uv, uv_size, 01526 &dvtr_uu, &allocuu, &sizeuu, &ptr1, &alloc1, &size1, &dvtr_vv, &allocvv, 01527 &sizevv, &ptr2, &alloc2, &size2, &dvtr_uv, &allocuv, &sizeuv, &ptr3, 01528 &alloc3, &size3, &err); 01529 return (Error) err; 01530 } 01531 01532 inline FBiGeom::Error FBiGeom::getFcCvtrUV(EntityHandle face, double u, double v, 01533 double& i1, double& j1, double& k1, double& i2, double& j2, double& k2) const 01534 { 01535 int err; 01536 FBiGeom_getFcCvtrUV(mInstance, face, u, v, &i1, &j1, &k1, &i2, &j2, &k2, &err); 01537 return (Error) err; 01538 } 01539 01540 inline FBiGeom::Error FBiGeom::getFcArrCvtrUV(const EntityHandle* faces, 01541 int faces_size, StorageOrder order, const double* uv, int uv_size, 01542 double* cvtr1, double* cvtr2) const 01543 { 01544 int err, alloc = std::max(3 * uv_size / 2, 3 * faces_size), size = 0; 01545 FBiGeom_getFcArrCvtrUV(mInstance, faces, faces_size, order, uv, uv_size, 01546 &cvtr1, &alloc, &size, &cvtr2, &alloc, &size, &err); 01547 return (Error) err; 01548 } 01549 01550 inline FBiGeom::Error FBiGeom::isEntPeriodic(EntityHandle entity, bool& in_u, 01551 bool& in_v) const 01552 { 01553 int err, u, v; 01554 FBiGeom_isEntPeriodic(mInstance, entity, &u, &v, &err); 01555 in_u = (u != 0); 01556 in_v = (v != 0); 01557 return (Error) err; 01558 } 01559 01560 inline FBiGeom::Error FBiGeom::isArrPeriodic(const EntityHandle* entities, 01561 int entities_size, int* in_uv) const 01562 { 01563 int err, alloc = 2 * entities_size, size = 0; 01564 FBiGeom_isArrPeriodic(mInstance, entities, entities_size, &in_uv, &alloc, 01565 &size, &err); 01566 return (Error) err; 01567 } 01568 01569 inline FBiGeom::Error FBiGeom::isFcDegenerate(EntityHandle face, 01570 bool& is_degenerate) const 01571 { 01572 int err, result; 01573 FBiGeom_isFcDegenerate(mInstance, face, &result, &err); 01574 is_degenerate = (result != 0); 01575 return (Error) err; 01576 } 01577 01578 inline FBiGeom::Error FBiGeom::isFcArrDegenerate(const EntityHandle* faces, 01579 int faces_size, int* degenerate) const 01580 { 01581 int err, alloc = faces_size, size = 0; 01582 FBiGeom_isFcArrDegenerate(mInstance, faces, faces_size, °enerate, &alloc, 01583 &size, &err); 01584 return (Error) err; 01585 } 01586 01587 inline FBiGeom::Error FBiGeom::getTolerance(int& type_out, double& tolerance_out) const 01588 { 01589 int err=0; 01590 FBiGeom_getTolerance(mInstance, &type_out, &tolerance_out, &err); 01591 return (Error) err; 01592 } 01593 01594 inline FBiGeom::Error FBiGeom::getEntTolerance(EntityHandle entity, 01595 double& tolerance) const 01596 { 01597 int err=0; 01598 FBiGeom_getEntTolerance(mInstance, entity, &tolerance, &err); 01599 return (Error) err; 01600 } 01601 01602 inline FBiGeom::Error FBiGeom::getArrTolerance(const EntityHandle* entities, 01603 int entities_size, double* tolerances) const 01604 { 01605 int err, alloc = entities_size, size = 0; 01606 FBiGeom_getArrTolerance(mInstance, entities, entities_size, &tolerances, 01607 &alloc, &size, &err); 01608 return (Error) err; 01609 } 01610 01611 inline FBiGeom::Error FBiGeom::getEntUVRange(EntityHandle face, double& u_min, 01612 double& v_min, double& u_max, double& v_max) const 01613 { 01614 int err; 01615 FBiGeom_getEntUVRange(mInstance, face, &u_min, &v_min, &u_max, &v_max, &err); 01616 return (Error) err; 01617 } 01618 01619 inline FBiGeom::Error FBiGeom::getEntURange(EntityHandle edge, double& u_min, 01620 double& u_max) const 01621 { 01622 int err; 01623 FBiGeom_getEntURange(mInstance, edge, &u_min, &u_max, &err); 01624 return (Error) err; 01625 } 01626 01627 inline FBiGeom::Error FBiGeom::getArrUVRange(const EntityHandle* faces, 01628 int faces_size, StorageOrder order, double* uv_min, double* uv_max) const 01629 { 01630 int err, alloc = faces_size, size = 0; 01631 FBiGeom_getArrUVRange(mInstance, faces, faces_size, order, &uv_min, &alloc, 01632 &size, &uv_max, &alloc, &size, &err); 01633 return (Error) err; 01634 } 01635 01636 inline FBiGeom::Error FBiGeom::getArrURange(const EntityHandle* edges, 01637 int edges_size, double* u_min, double* u_max) const 01638 { 01639 int err, alloc = edges_size, size = 0; 01640 FBiGeom_getArrURange(mInstance, edges, edges_size, &u_min, &alloc, &size, 01641 &u_max, &alloc, &size, &err); 01642 return (Error) err; 01643 } 01644 01645 inline FBiGeom::Error FBiGeom::getEntUtoUV(EntityHandle edge, EntityHandle face, 01646 double edge_u, double& face_u, double& face_v) const 01647 { 01648 int err; 01649 FBiGeom_getEntUtoUV(mInstance, edge, face, edge_u, &face_u, &face_v, &err); 01650 return (Error) err; 01651 } 01652 01653 inline FBiGeom::Error FBiGeom::getVtxToUV(EntityHandle vertex, EntityHandle face, 01654 double& u, double& v) const 01655 { 01656 int err; 01657 FBiGeom_getVtxToUV(mInstance, vertex, face, &u, &v, &err); 01658 return (Error) err; 01659 } 01660 01661 inline FBiGeom::Error FBiGeom::getVtxToU(EntityHandle vertex, EntityHandle edge, 01662 double& u) const 01663 { 01664 int err; 01665 FBiGeom_getVtxToU(mInstance, vertex, edge, &u, &err); 01666 return (Error) err; 01667 } 01668 01669 inline FBiGeom::Error FBiGeom::getArrUtoUV(const EntityHandle* edges, 01670 int edges_size, const EntityHandle* faces, int faces_size, 01671 const double* edge_u, int edge_u_size, StorageOrder order, double* face_uv) const 01672 { 01673 int err, alloc = std::max(edge_u_size, std::max(edges_size, faces_size)); 01674 int size = 0; 01675 FBiGeom_getArrUtoUV(mInstance, edges, edges_size, faces, faces_size, edge_u, 01676 edge_u_size, order, &face_uv, &alloc, &size, &err); 01677 return (Error) err; 01678 } 01679 01680 inline FBiGeom::Error FBiGeom::getVtxArrToUV(const EntityHandle* vertices, 01681 int vertices_size, const EntityHandle* faces, int faces_size, 01682 StorageOrder order, double* face_uv) const 01683 { 01684 int err, alloc = std::max(vertices_size, faces_size), size = 0; 01685 FBiGeom_getVtxArrToUV(mInstance, vertices, vertices_size, faces, faces_size, 01686 order, &face_uv, &alloc, &size, &err); 01687 return (Error) err; 01688 } 01689 01690 inline FBiGeom::Error FBiGeom::getVtxArrToU(const EntityHandle* vertices, 01691 int vertices_size, const EntityHandle* edges, int edges_size, 01692 double* edge_u) const 01693 { 01694 int err, alloc = std::max(vertices_size, edges_size), size = 0; 01695 FBiGeom_getVtxArrToU(mInstance, vertices, vertices_size, edges, edges_size, 01696 &edge_u, &alloc, &size, &err); 01697 return (Error) err; 01698 } 01699 01700 inline FBiGeom::Error FBiGeom::deleteAll() 01701 { 01702 int err; 01703 FBiGeom_deleteAll(mInstance, &err); 01704 return (Error) err; 01705 } 01706 01707 inline FBiGeom::Error FBiGeom::copyEnt(EntityHandle source, EntityHandle& copy) 01708 { 01709 int err; 01710 FBiGeom_copyEnt(mInstance, source, ©, &err); 01711 return (Error) err; 01712 } 01713 01714 inline FBiGeom::Error FBiGeom::createSphere(double radius, EntityHandle& sphere) 01715 { 01716 int err; 01717 FBiGeom_createSphere(mInstance, radius, &sphere, &err); 01718 return (Error) err; 01719 } 01720 01721 inline FBiGeom::Error FBiGeom::createPrism(double height, int num_sides, 01722 double maj_radius, double min_radius, EntityHandle& prism) 01723 { 01724 int err; 01725 FBiGeom_createPrism(mInstance, height, num_sides, maj_radius, min_radius, 01726 &prism, &err); 01727 return (Error) err; 01728 } 01729 01730 inline FBiGeom::Error FBiGeom::createBrick(double x, double y, double z, 01731 EntityHandle& brick) 01732 { 01733 int err; 01734 FBiGeom_createBrick(mInstance, x, y, z, &brick, &err); 01735 return (Error) err; 01736 } 01737 01738 inline FBiGeom::Error FBiGeom::createCylinder(double height, double maj_rad, 01739 double min_rad, EntityHandle& cylinder) 01740 { 01741 int err; 01742 FBiGeom_createCylinder(mInstance, height, maj_rad, min_rad, &cylinder, &err); 01743 return (Error) err; 01744 } 01745 01746 inline FBiGeom::Error FBiGeom::createTorus(double maj_rad, double min_rad, 01747 EntityHandle& torus) 01748 { 01749 int err; 01750 FBiGeom_createTorus(mInstance, maj_rad, min_rad, &torus, &err); 01751 return (Error) err; 01752 } 01753 01754 inline FBiGeom::Error FBiGeom::moveEnt(EntityHandle entity, double x, double y, 01755 double z) 01756 { 01757 int err; 01758 FBiGeom_moveEnt(mInstance, entity, x, y, z, &err); 01759 return (Error) err; 01760 } 01761 01762 inline FBiGeom::Error FBiGeom::rotateEnt(EntityHandle entity, double angle, 01763 double axis_x, double axis_y, double axis_z) 01764 { 01765 int err; 01766 FBiGeom_rotateEnt(mInstance, entity, angle, axis_x, axis_y, axis_z, &err); 01767 return (Error) err; 01768 } 01769 01770 inline FBiGeom::Error FBiGeom::reflectEnt(EntityHandle entity, double norm_x, 01771 double norm_y, double norm_z) 01772 { 01773 int err; 01774 FBiGeom_reflectEnt(mInstance, entity, norm_x, norm_y, norm_z, &err); 01775 return (Error) err; 01776 } 01777 01778 inline FBiGeom::Error FBiGeom::scaleEnt(EntityHandle entity, double x_factor, 01779 double y_factor, double z_factor) 01780 { 01781 int err; 01782 FBiGeom_scaleEnt(mInstance, entity, x_factor, y_factor, z_factor, &err); 01783 return (Error) err; 01784 } 01785 01786 inline FBiGeom::Error FBiGeom::uniteEnts(const EntityHandle* entities, 01787 int entities_size, EntityHandle& result_entity) 01788 { 01789 int err; 01790 FBiGeom_uniteEnts(mInstance, entities, entities_size, &result_entity, &err); 01791 return (Error) err; 01792 } 01793 01794 inline FBiGeom::Error FBiGeom::subtractEnts(EntityHandle blank, EntityHandle tool, 01795 EntityHandle& result) 01796 { 01797 int err; 01798 FBiGeom_subtractEnts(mInstance, blank, tool, &result, &err); 01799 return (Error) err; 01800 } 01801 01802 inline FBiGeom::Error FBiGeom::intersectEnts(EntityHandle entity1, 01803 EntityHandle entity2, EntityHandle& result) 01804 { 01805 int err; 01806 FBiGeom_intersectEnts(mInstance, entity1, entity2, &result, &err); 01807 return (Error) err; 01808 } 01809 01810 inline FBiGeom::Error FBiGeom::sectionEnt(EntityHandle entity, double plane_x, 01811 double plane_y, double plane_z, double offset, bool reverse, 01812 EntityHandle& result) 01813 { 01814 int err; 01815 FBiGeom_sectionEnt(mInstance, entity, plane_x, plane_y, plane_z, offset, 01816 reverse, &result, &err); 01817 return (Error) err; 01818 } 01819 01820 inline FBiGeom::Error FBiGeom::sweepEntAboutAxis(EntityHandle entity, double angle, 01821 double axis_x, double axis_y, double axis_z, EntityHandle& swept_entity) 01822 { 01823 int err; 01824 FBiGeom_sweepEntAboutAxis(mInstance, entity, angle, axis_x, axis_y, axis_z, 01825 &swept_entity, &err); 01826 return (Error) err; 01827 } 01828 01829 inline FBiGeom::Error FBiGeom::imprintEnts(const EntityHandle* entities, 01830 int entities_size) 01831 { 01832 int err; 01833 FBiGeom_imprintEnts(mInstance, entities, entities_size, &err); 01834 return (Error) err; 01835 } 01836 01837 inline FBiGeom::Error FBiGeom::mergeEnts(const EntityHandle* entities, 01838 int entities_size, double tolerance) 01839 { 01840 int err; 01841 FBiGeom_mergeEnts(mInstance, entities, entities_size, tolerance, &err); 01842 return (Error) err; 01843 } 01844 01845 01846 FBiGeom::Error 01847 FBiGeom::getErrorType() const 01848 { 01849 int err; 01850 FBiGeom_getErrorType( mInstance, &err ); 01851 return (Error)err; 01852 } 01853 01854 std::string 01855 FBiGeom::getDescription() const 01856 { 01857 std::vector<char> buffer(1024); 01858 FBiGeom_getDescription( mInstance, &buffer[0], buffer.size() ); 01859 return std::string(&buffer[0]); 01860 } 01861 01862 01863 01864 01865 FBiGeom::EntitySetHandle 01866 FBiGeom::getRootSet() const 01867 { 01868 int err; 01869 EntitySetHandle result; 01870 FBiGeom_getRootSet( mInstance, &result, &err ); 01871 return iBase_SUCCESS == err ? result : 0; 01872 } 01873 01874 01875 01876 FBiGeom::Error 01877 FBiGeom::createEntSet( bool is_list, EntitySetHandle& handle_out ) 01878 { 01879 int err; 01880 FBiGeom_createEntSet( mInstance, is_list, &handle_out, &err ); 01881 return (Error)err; 01882 } 01883 01884 FBiGeom::Error 01885 FBiGeom::destroyEntSet( EntitySetHandle handle ) 01886 { 01887 int err; 01888 FBiGeom_destroyEntSet( mInstance, handle, &err ); 01889 return (Error)err; 01890 } 01891 01892 FBiGeom::Error 01893 FBiGeom::isList( EntitySetHandle handle, bool& is_list ) 01894 { 01895 int err, result; 01896 FBiGeom_isList( mInstance, handle, &result, &err ); 01897 is_list = (result != 0); 01898 return (Error)err; 01899 } 01900 01901 FBiGeom::Error 01902 FBiGeom::getNumEntSets( EntitySetHandle set, int num_hops, int& num_sets_out ) const 01903 { 01904 int err; 01905 FBiGeom_getNumEntSets( mInstance, set, num_hops, &num_sets_out, &err ); 01906 return (Error)err; 01907 } 01908 01909 FBiGeom::Error 01910 FBiGeom::getEntSets( EntitySetHandle set, int num_hops, 01911 std::vector<EntitySetHandle>& contained_sets_out ) const 01912 { 01913 int err, count; 01914 FBiGeom_getNumEntSets( mInstance, set, num_hops, &count, &err ); 01915 if (iBase_SUCCESS != err) 01916 return (Error)err; 01917 contained_sets_out.resize(count); 01918 int alloc = contained_sets_out.size(), size; 01919 EntitySetHandle* ptr = &contained_sets_out[0]; 01920 FBiGeom_getEntSets( mInstance, set, num_hops, &ptr, &alloc, &size, &err ); 01921 return (Error)err; 01922 } 01923 01924 FBiGeom::Error 01925 FBiGeom::addEntToSet( EntityHandle entity, EntitySetHandle set ) 01926 { 01927 int err; 01928 FBiGeom_addEntToSet( mInstance, entity,set, &err ); 01929 return (Error)err; 01930 } 01931 01932 FBiGeom::Error 01933 FBiGeom::rmvEntFromSet( EntityHandle entity, EntitySetHandle set ) 01934 { 01935 int err; 01936 FBiGeom_rmvEntFromSet( mInstance, entity,set, &err ); 01937 return (Error)err; 01938 } 01939 01940 FBiGeom::Error 01941 FBiGeom::addEntArrToSet( const EntityHandle* entity_handles, 01942 int entity_handles_size, 01943 EntitySetHandle entity_set ) 01944 { 01945 int err; 01946 FBiGeom_addEntArrToSet( mInstance, entity_handles, entity_handles_size, entity_set, &err ); 01947 return (Error)err; 01948 } 01949 01950 FBiGeom::Error 01951 FBiGeom::rmvEntArrFromSet( const EntityHandle* entity_handles, 01952 int entity_handles_size, 01953 EntitySetHandle entity_set ) 01954 { 01955 int err; 01956 FBiGeom_rmvEntArrFromSet( mInstance, entity_handles, entity_handles_size, entity_set, &err ); 01957 return (Error)err; 01958 } 01959 01960 FBiGeom::Error 01961 FBiGeom::addEntSet( EntitySetHandle to_add, EntitySetHandle add_to ) 01962 { 01963 int err; 01964 FBiGeom_addEntSet( mInstance, to_add, add_to, &err ); 01965 return (Error)err; 01966 } 01967 01968 FBiGeom::Error 01969 FBiGeom::rmvEntSet( EntitySetHandle to_rmv, EntitySetHandle rmv_from ) 01970 { 01971 int err; 01972 FBiGeom_rmvEntSet( mInstance, to_rmv, rmv_from, &err ); 01973 return (Error)err; 01974 } 01975 01976 FBiGeom::Error 01977 FBiGeom::isEntContained( EntitySetHandle set, EntityHandle ent, bool& contained_out ) const 01978 { 01979 int err, result; 01980 FBiGeom_isEntContained( mInstance, set, ent, &result, &err ); 01981 contained_out = (result != 0); 01982 return (Error)err; 01983 } 01984 01985 FBiGeom::Error 01986 FBiGeom::isEntArrContained( EntitySetHandle containing_set, 01987 const EntityHandle* entity_handles, 01988 int num_entity_handles, 01989 bool* is_contained_out ) const 01990 { 01991 int err, *ptr = 0, alloc = 0, size = 0; 01992 FBiGeom_isEntArrContained( mInstance, containing_set, 01993 entity_handles, num_entity_handles, 01994 &ptr, &alloc, &size, &err ); 01995 if (iBase_SUCCESS != err) 01996 return (Error)err; 01997 for (int i = 0; i < num_entity_handles; ++i) 01998 is_contained_out[i] = (ptr[i] != 0); 01999 free(ptr); 02000 return iBase_SUCCESS; 02001 } 02002 02003 FBiGeom::Error 02004 FBiGeom::isEntSetContained( EntitySetHandle containing_set, 02005 EntitySetHandle contained_set, 02006 bool& contained_out ) const 02007 { 02008 int err, result; 02009 FBiGeom_isEntSetContained( mInstance, containing_set, contained_set, &result, &err ); 02010 contained_out = (result != 0); 02011 return (Error)err; 02012 } 02013 02014 FBiGeom::Error 02015 FBiGeom::addPrntChld( EntitySetHandle parent, EntitySetHandle child ) 02016 { 02017 int err; 02018 FBiGeom_addPrntChld( mInstance, parent, child, &err ); 02019 return (Error)err; 02020 } 02021 02022 FBiGeom::Error 02023 FBiGeom::rmvPrntChld( EntitySetHandle parent, EntitySetHandle child ) 02024 { 02025 int err; 02026 FBiGeom_rmvPrntChld( mInstance, parent, child, &err ); 02027 return (Error)err; 02028 } 02029 02030 FBiGeom::Error 02031 FBiGeom::isChildOf( EntitySetHandle parent, EntitySetHandle child, bool& is_child_out ) const 02032 { 02033 int err, result; 02034 FBiGeom_isChildOf( mInstance, parent, child, &result, &err ); 02035 is_child_out = (result != 0); 02036 return (Error)err; 02037 } 02038 02039 FBiGeom::Error 02040 FBiGeom::getNumChld( EntitySetHandle parent, int num_hops, int& num_child_out ) const 02041 { 02042 int err; 02043 FBiGeom_getNumChld( mInstance, parent, num_hops, &num_child_out, &err ); 02044 return (Error)err; 02045 } 02046 02047 FBiGeom::Error 02048 FBiGeom::getNumPrnt( EntitySetHandle child, int num_hops, int& num_parent_out ) const 02049 { 02050 int err; 02051 FBiGeom_getNumPrnt( mInstance, child, num_hops, &num_parent_out, &err ); 02052 return (Error)err; 02053 } 02054 02055 FBiGeom::Error 02056 FBiGeom::getChldn( EntitySetHandle parent, int num_hops, 02057 std::vector<EntitySetHandle>& children_out ) const 02058 { 02059 int err, count; 02060 FBiGeom_getNumChld( mInstance, parent, num_hops, &count, &err ); 02061 if (iBase_SUCCESS != err) 02062 return (Error)err; 02063 children_out.resize(count); 02064 int alloc = children_out.size(), size; 02065 EntitySetHandle* ptr = &children_out[0]; 02066 FBiGeom_getEntSets( mInstance, parent, num_hops, &ptr, &alloc, &size, &err ); 02067 return (Error)err; 02068 } 02069 02070 FBiGeom::Error 02071 FBiGeom::getPrnts( EntitySetHandle child, int num_hops, 02072 std::vector<EntitySetHandle>& parents_out ) const 02073 { 02074 int err, count; 02075 FBiGeom_getNumPrnt( mInstance, child, num_hops, &count, &err ); 02076 if (iBase_SUCCESS != err) 02077 return (Error)err; 02078 parents_out.resize(count); 02079 int alloc = parents_out.size(), size; 02080 EntitySetHandle* ptr = &parents_out[0]; 02081 FBiGeom_getEntSets( mInstance, child, num_hops, &ptr, &alloc, &size, &err ); 02082 return (Error)err; 02083 } 02084 02085 02086 FBiGeom::Error 02087 FBiGeom::subtract( EntitySetHandle set1, EntitySetHandle set2, 02088 EntitySetHandle& result_set_out ) 02089 { 02090 int err; 02091 FBiGeom_subtract( mInstance, set1, set1, &result_set_out, &err ); 02092 return (Error)err; 02093 } 02094 02095 FBiGeom::Error 02096 FBiGeom::intersect( EntitySetHandle set1, EntitySetHandle set2, 02097 EntitySetHandle& result_set_out ) 02098 { 02099 int err; 02100 FBiGeom_intersect( mInstance, set1, set1, &result_set_out, &err ); 02101 return (Error)err; 02102 } 02103 02104 FBiGeom::Error 02105 FBiGeom::unite( EntitySetHandle set1, EntitySetHandle set2, 02106 EntitySetHandle& result_set_out ) 02107 { 02108 int err; 02109 FBiGeom_unite( mInstance, set1, set1, &result_set_out, &err ); 02110 return (Error)err; 02111 } 02112 02113 02114 FBiGeom::Error 02115 FBiGeom::createTag( const char* tag_name, 02116 int tag_num_type_values, 02117 TagValueType tag_type, 02118 TagHandle& tag_handle_out ) 02119 { 02120 int err; 02121 FBiGeom_createTag( mInstance, tag_name, tag_num_type_values, tag_type, 02122 &tag_handle_out, &err, strlen(tag_name) ); 02123 return (Error)err; 02124 } 02125 02126 02127 FBiGeom::Error 02128 FBiGeom::destroyTag( TagHandle tag_handle, bool forced ) 02129 { 02130 int err; 02131 FBiGeom_destroyTag( mInstance, tag_handle, forced, &err ); 02132 return (Error)err; 02133 } 02134 02135 FBiGeom::Error 02136 FBiGeom::getTagName( TagHandle tag_handle, std::string& name_out ) const 02137 { 02138 int err; 02139 char buffer[1024]; 02140 memset( buffer, 0, sizeof(buffer) ); 02141 FBiGeom_getTagName( mInstance, tag_handle, buffer, &err, sizeof(buffer) ); 02142 name_out = buffer; 02143 return (Error)err; 02144 } 02145 02146 FBiGeom::Error 02147 FBiGeom::getTagSizeValues( TagHandle tag_handle, int& size_out ) const 02148 { 02149 int err; 02150 FBiGeom_getTagSizeValues( mInstance, tag_handle, &size_out, &err ); 02151 return (Error)err; 02152 } 02153 02154 FBiGeom::Error 02155 FBiGeom::getTagSizeBytes( TagHandle tag_handle, int& size_out ) const 02156 { 02157 int err; 02158 FBiGeom_getTagSizeBytes( mInstance, tag_handle, &size_out, &err ); 02159 return (Error)err; 02160 } 02161 02162 FBiGeom::Error 02163 FBiGeom::getTagHandle( const char* name, TagHandle& handle_out ) const 02164 { 02165 int err; 02166 FBiGeom_getTagHandle( mInstance, name, &handle_out, &err, strlen(name) ); 02167 return (Error)err; 02168 } 02169 02170 FBiGeom::Error 02171 FBiGeom::getTagType( TagHandle tag_handle, TagValueType& type_out ) const 02172 { 02173 int err, result; 02174 FBiGeom_getTagType( mInstance, tag_handle, &result, &err ); 02175 type_out = (TagValueType)result; 02176 return (Error)err; 02177 } 02178 02179 02180 FBiGeom::Error 02181 FBiGeom::setEntSetData( EntitySetHandle set_handle, 02182 TagHandle tag_handle, 02183 const void* tag_value ) 02184 { 02185 int err, size = 1; 02186 FBiGeom_getTagSizeBytes( mInstance, tag_handle, &size, &err ); 02187 FBiGeom_setEntSetData( mInstance, set_handle, tag_handle, 02188 tag_value, size, &err); 02189 return (Error)err; 02190 } 02191 02192 FBiGeom::Error 02193 FBiGeom::setEntSetIntData( EntitySetHandle set_handle, 02194 TagHandle tag_handle, 02195 int value ) 02196 { 02197 int err; 02198 FBiGeom_setEntSetIntData( mInstance, set_handle, tag_handle, value, &err ); 02199 return (Error)err; 02200 } 02201 02202 FBiGeom::Error 02203 FBiGeom::setEntSetDblData( EntitySetHandle set_handle, 02204 TagHandle tag_handle, 02205 double value ) 02206 { 02207 int err; 02208 FBiGeom_setEntSetDblData( mInstance, set_handle, tag_handle, value, &err ); 02209 return (Error)err; 02210 } 02211 02212 FBiGeom::Error 02213 FBiGeom::setEntSetEHData( EntitySetHandle set_handle, 02214 TagHandle tag_handle, 02215 EntityHandle value ) 02216 02217 { 02218 int err; 02219 FBiGeom_setEntSetEHData( mInstance, set_handle, tag_handle, value, &err ); 02220 return (Error)err; 02221 } 02222 02223 FBiGeom::Error 02224 FBiGeom::setEntSetESHData( EntitySetHandle set_handle, 02225 TagHandle tag_handle, 02226 EntitySetHandle value ) 02227 02228 { 02229 int err; 02230 FBiGeom_setEntSetESHData( mInstance, set_handle, tag_handle, value, &err ); 02231 return (Error)err; 02232 } 02233 02234 FBiGeom::Error 02235 FBiGeom::getEntSetData( EntitySetHandle set_handle, 02236 TagHandle tag_handle, 02237 void* tag_value_out ) const 02238 { 02239 int err, alloc = std::numeric_limits<int>::max(), size; 02240 FBiGeom_getEntSetData( mInstance, set_handle, tag_handle, 02241 &tag_value_out, &alloc, &size, &err); 02242 return (Error)err; 02243 } 02244 02245 FBiGeom::Error 02246 FBiGeom::getEntSetIntData( EntitySetHandle set_handle, 02247 TagHandle tag_handle, 02248 int& value_out ) const 02249 { 02250 int err; 02251 FBiGeom_getEntSetIntData( mInstance, set_handle, tag_handle, &value_out, &err ); 02252 return (Error)err; 02253 } 02254 02255 FBiGeom::Error 02256 FBiGeom::getEntSetDblData( EntitySetHandle set_handle, 02257 TagHandle tag_handle, 02258 double& value_out ) const 02259 { 02260 int err; 02261 FBiGeom_getEntSetDblData( mInstance, set_handle, tag_handle, &value_out, &err ); 02262 return (Error)err; 02263 } 02264 02265 FBiGeom::Error 02266 FBiGeom::getEntSetEHData( EntitySetHandle set_handle, 02267 TagHandle tag_handle, 02268 EntityHandle& value_out ) const 02269 02270 { 02271 int err; 02272 FBiGeom_getEntSetEHData( mInstance, set_handle, tag_handle, &value_out, &err ); 02273 return (Error)err; 02274 } 02275 02276 FBiGeom::Error 02277 FBiGeom::getEntSetESHData( EntitySetHandle set_handle, 02278 TagHandle tag_handle, 02279 EntitySetHandle& value_out ) const 02280 02281 { 02282 int err; 02283 FBiGeom_getEntSetESHData( mInstance, set_handle, tag_handle, &value_out, &err ); 02284 return (Error)err; 02285 } 02286 02287 FBiGeom::Error 02288 FBiGeom::getAllEntSetTags( EntitySetHandle set, 02289 std::vector<TagHandle>& tags_out ) const 02290 { 02291 if (tags_out.capacity() == 0) 02292 tags_out.resize( 32 ); 02293 else 02294 tags_out.resize( tags_out.capacity() ); 02295 02296 int err, alloc = tags_out.size(), size = 0; 02297 TagHandle* ptr = &tags_out[0]; 02298 FBiGeom_getAllEntSetTags( mInstance, set, &ptr, &alloc, &size, &err ); 02299 tags_out.resize(size); 02300 02301 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 02302 alloc = tags_out.size(); 02303 ptr = &tags_out[0]; 02304 FBiGeom_getAllEntSetTags( mInstance, set, &ptr, &alloc, &size, &err ); 02305 } 02306 02307 return (Error)err; 02308 } 02309 02310 FBiGeom::Error 02311 FBiGeom::getAllTags( EntityHandle entity, 02312 std::vector<TagHandle>& tags_out ) const 02313 02314 { 02315 if (tags_out.capacity() == 0) 02316 tags_out.resize( 32 ); 02317 else 02318 tags_out.resize( tags_out.capacity() ); 02319 02320 int err, alloc = tags_out.size(), size = 0; 02321 TagHandle* ptr = &tags_out[0]; 02322 FBiGeom_getAllTags( mInstance, entity, &ptr, &alloc, &size, &err ); 02323 tags_out.resize(size); 02324 02325 if (iBase_BAD_ARRAY_DIMENSION == err || iBase_BAD_ARRAY_SIZE == err) { 02326 alloc = tags_out.size(); 02327 ptr = &tags_out[0]; 02328 FBiGeom_getAllTags( mInstance, entity, &ptr, &alloc, &size, &err ); 02329 } 02330 02331 return (Error)err; 02332 } 02333 02334 FBiGeom::Error 02335 FBiGeom::rmvEntSetTag( EntitySetHandle set, TagHandle tag ) 02336 { 02337 int err; 02338 FBiGeom_rmvEntSetTag( mInstance, set, tag, &err ); 02339 return (Error)err; 02340 } 02341 02342 FBiGeom::Error 02343 FBiGeom::rmvTag( EntityHandle entity, TagHandle tag ) 02344 { 02345 int err; 02346 FBiGeom_rmvTag( mInstance, entity, tag, &err ); 02347 return (Error)err; 02348 } 02349 02350 FBiGeom::Error 02351 FBiGeom::rmvArrTag( const EntityHandle* handles, int size, TagHandle tag ) 02352 { 02353 int err; 02354 FBiGeom_rmvArrTag( mInstance, handles, size, tag, &err ); 02355 return (Error)err; 02356 } 02357 02358 02359 FBiGeom::Error 02360 FBiGeom::getArrData( const EntityHandle* entity_handles, 02361 int entity_handles_size, 02362 TagHandle tag_handle, 02363 void* tag_values_out ) const 02364 { 02365 int err, alloc = std::numeric_limits<int>::max(), size; 02366 FBiGeom_getArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02367 &tag_values_out, &alloc, &size, &err); 02368 return (Error)err; 02369 } 02370 02371 FBiGeom::Error 02372 FBiGeom::getIntArrData( const EntityHandle* entity_handles, 02373 int entity_handles_size, 02374 TagHandle tag_handle, 02375 int* tag_values_out ) const 02376 { 02377 int err, alloc = std::numeric_limits<int>::max(), size; 02378 FBiGeom_getIntArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02379 &tag_values_out, &alloc, &size, &err); 02380 return (Error)err; 02381 } 02382 02383 FBiGeom::Error FBiGeom::getFacets(EntityHandle entity_handle, double dist_tolerance, 02384 std::vector<double> &point, std::vector<int> &facets) const 02385 { 02386 int err=1; //, alloc_f = std::numeric_limits<int>::max(), 02387 //alloc_p = std::numeric_limits<double>::max(), size_f, size_p; 02388 /*FBiGeom_getFacets(mInstance, entity_handle, dist_tolerance, &point, &alloc_p, &size_p, 02389 &facets, &alloc_f, &size_f, &err);*/ 02390 02391 return (Error)err; 02392 } 02393 02394 FBiGeom::Error 02395 FBiGeom::getDblArrData( const EntityHandle* entity_handles, 02396 int entity_handles_size, 02397 TagHandle tag_handle, 02398 double* tag_values_out ) const 02399 { 02400 int err, alloc = std::numeric_limits<int>::max(), size; 02401 FBiGeom_getDblArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02402 &tag_values_out, &alloc, &size, &err); 02403 return (Error)err; 02404 } 02405 02406 FBiGeom::Error 02407 FBiGeom::getEHArrData( const EntityHandle* entity_handles, 02408 int entity_handles_size, 02409 TagHandle tag_handle, 02410 EntityHandle* tag_values_out ) const 02411 02412 { 02413 int err, alloc = std::numeric_limits<int>::max(), size; 02414 FBiGeom_getEHArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02415 &tag_values_out, &alloc, &size, &err); 02416 return (Error)err; 02417 } 02418 02419 FBiGeom::Error 02420 FBiGeom::getESHArrData( const EntityHandle* entity_handles, 02421 int entity_handles_size, 02422 TagHandle tag_handle, 02423 EntitySetHandle* tag_values_out ) const 02424 02425 { 02426 int err, alloc = std::numeric_limits<int>::max(), size; 02427 FBiGeom_getESHArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02428 &tag_values_out, &alloc, &size, &err); 02429 return (Error)err; 02430 } 02431 02432 FBiGeom::Error 02433 FBiGeom::setArrData( const EntityHandle* entity_handles, 02434 int entity_handles_size, 02435 TagHandle tag_handle, 02436 const void* tag_values ) 02437 { 02438 int err, size = 1; 02439 FBiGeom_getTagSizeBytes( mInstance, tag_handle, &size, &err ); 02440 FBiGeom_setArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02441 tag_values, size*entity_handles_size, 02442 &err ); 02443 return (Error)err; 02444 } 02445 02446 FBiGeom::Error 02447 FBiGeom::setIntArrData( const EntityHandle* entity_handles, 02448 int entity_handles_size, 02449 TagHandle tag_handle, 02450 const int* tag_values ) 02451 { 02452 int err, size = 1; 02453 FBiGeom_getTagSizeValues( mInstance, tag_handle, &size, &err ); 02454 FBiGeom_setIntArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02455 tag_values, size*entity_handles_size, &err ); 02456 return (Error)err; 02457 } 02458 02459 FBiGeom::Error 02460 FBiGeom::setDblArrData( const EntityHandle* entity_handles, 02461 int entity_handles_size, 02462 TagHandle tag_handle, 02463 const double* tag_values ) 02464 { 02465 int err, size = 1; 02466 FBiGeom_getTagSizeValues( mInstance, tag_handle, &size, &err ); 02467 FBiGeom_setDblArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02468 tag_values, size*entity_handles_size, &err ); 02469 return (Error)err; 02470 } 02471 02472 FBiGeom::Error 02473 FBiGeom::setEHArrData( const EntityHandle* entity_handles, 02474 int entity_handles_size, 02475 TagHandle tag_handle, 02476 const EntityHandle* tag_values ) 02477 { 02478 int err, size = 1; 02479 FBiGeom_getTagSizeValues( mInstance, tag_handle, &size, &err ); 02480 FBiGeom_setEHArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02481 tag_values, size*entity_handles_size, &err ); 02482 return (Error)err; 02483 } 02484 02485 FBiGeom::Error 02486 FBiGeom::setESHArrData( const EntityHandle* entity_handles, 02487 int entity_handles_size, 02488 TagHandle tag_handle, 02489 const EntitySetHandle* tag_values ) 02490 { 02491 int err, size = 1; 02492 FBiGeom_getTagSizeValues( mInstance, tag_handle, &size, &err ); 02493 FBiGeom_setESHArrData( mInstance, entity_handles, entity_handles_size, tag_handle, 02494 tag_values, size*entity_handles_size, &err ); 02495 return (Error)err; 02496 } 02497 02498 02499 02500 FBiGeom::Error 02501 FBiGeom::setData( EntityHandle entity_handle, 02502 TagHandle tag_handle, 02503 const void* tag_value ) 02504 { 02505 int err, size = 1; 02506 FBiGeom_getTagSizeBytes( mInstance, tag_handle, &size, &err ); 02507 FBiGeom_setData( mInstance, entity_handle, tag_handle, 02508 tag_value, size, &err); 02509 return (Error)err; 02510 } 02511 02512 FBiGeom::Error 02513 FBiGeom::setIntData( EntityHandle entity_handle, 02514 TagHandle tag_handle, 02515 int value ) 02516 { 02517 int err; 02518 FBiGeom_setIntData( mInstance, entity_handle, tag_handle, value, &err ); 02519 return (Error)err; 02520 } 02521 02522 FBiGeom::Error 02523 FBiGeom::setDblData( EntityHandle entity_handle, 02524 TagHandle tag_handle, 02525 double value ) 02526 { 02527 int err; 02528 FBiGeom_setDblData( mInstance, entity_handle, tag_handle, value, &err ); 02529 return (Error)err; 02530 } 02531 02532 FBiGeom::Error 02533 FBiGeom::setEHData( EntityHandle entity_handle, 02534 TagHandle tag_handle, 02535 EntityHandle value ) 02536 02537 { 02538 int err; 02539 FBiGeom_setEHData( mInstance, entity_handle, tag_handle, value, &err ); 02540 return (Error)err; 02541 } 02542 02543 FBiGeom::Error 02544 FBiGeom::setESHData( EntityHandle entity_handle, 02545 TagHandle tag_handle, 02546 EntitySetHandle value ) 02547 02548 { 02549 int err; 02550 FBiGeom_setESHData( mInstance, entity_handle, tag_handle, value, &err ); 02551 return (Error)err; 02552 } 02553 02554 FBiGeom::Error 02555 FBiGeom::getData( EntityHandle entity_handle, 02556 TagHandle tag_handle, 02557 void* tag_value_out ) const 02558 { 02559 int err, alloc = std::numeric_limits<int>::max(), size; 02560 FBiGeom_getData( mInstance, entity_handle, tag_handle, 02561 &tag_value_out, &alloc, &size, &err); 02562 return (Error)err; 02563 } 02564 02565 FBiGeom::Error 02566 FBiGeom::getIntData( EntityHandle entity_handle, 02567 TagHandle tag_handle, 02568 int& value_out ) const 02569 { 02570 int err; 02571 FBiGeom_getIntData( mInstance, entity_handle, tag_handle, &value_out, &err ); 02572 return (Error)err; 02573 } 02574 02575 FBiGeom::Error 02576 FBiGeom::getDblData( EntityHandle entity_handle, 02577 TagHandle tag_handle, 02578 double& value_out ) const 02579 { 02580 int err; 02581 FBiGeom_getDblData( mInstance, entity_handle, tag_handle, &value_out, &err ); 02582 return (Error)err; 02583 } 02584 02585 FBiGeom::Error 02586 FBiGeom::getEHData( EntityHandle entity_handle, 02587 TagHandle tag_handle, 02588 EntityHandle& value_out ) const 02589 { 02590 int err; 02591 FBiGeom_getEHData( mInstance, entity_handle, tag_handle, &value_out, &err ); 02592 return (Error)err; 02593 } 02594 02595 FBiGeom::Error 02596 FBiGeom::getESHData( EntityHandle entity_handle, 02597 TagHandle tag_handle, 02598 EntitySetHandle& value_out ) const 02599 { 02600 int err; 02601 FBiGeom_getESHData( mInstance, entity_handle, tag_handle, &value_out, &err ); 02602 return (Error)err; 02603 } 02604 02605 #endif