cgma
|
00001 //------------------------------------------------------------------------- 00002 // Filename : OCCModifyEngine.hpp 00003 // 00004 // Purpose : ModifyEngine for OCC geometry 00005 // 00006 // Special Notes : Modeled after GeometryModifyEngine 00007 // 00008 // Creator : Jane Hu 00009 // 00010 // Creation Date : 6/08 00011 // 00012 //------------------------------------------------------------------------- 00013 00014 #ifndef OCC_MODIFY_ENGINE_HPP 00015 #define OCC_MODIFY_ENGINE_HPP 00016 00017 #include "GeometryModifyEngine.hpp" 00018 #include <vector> 00019 #include <map> 00020 #include "DLIList.hpp" 00021 00022 class TBPoint; 00023 class TopologyBridge; 00024 class CoEdgeSM; 00025 class ShellSM; 00026 class OCCBody; 00027 class OCCSurface; 00028 class OCCCurve; 00029 class OCCPoint; 00030 class TopoDS_Shape; 00031 class TopoDS_Edge; 00032 class TopoDS_Wire; 00033 class TopoDS_Face; 00034 class CubitBox; 00035 class BRepAlgoAPI_BooleanOperation; 00036 class BRepOffsetAPI_ThruSections; 00037 class BRepBuilderAPI_Copy; 00038 //class OCCHistory; 00039 00040 class OCCModifyEngine : public GeometryModifyEngine 00041 { 00042 00043 public: 00044 00045 //HEADER- Constructor and Destructor 00046 private: 00047 00048 OCCModifyEngine(); 00049 00050 static OCCModifyEngine* instance_; 00051 00052 CubitStatus copy_body_attributes(TopoDS_Shape orig_shape, 00053 BRepBuilderAPI_Copy& api_copy)const; 00054 00055 Surface* make_Surface(Surface *old_surface_ptr, 00056 CubitBoolean extended_from) const; 00057 00058 public: 00059 static inline OCCModifyEngine* instance() 00060 { 00061 if( !instance_ ) 00062 instance_ = new OCCModifyEngine; 00063 return instance_; 00064 } 00065 00066 virtual ~OCCModifyEngine(); 00067 //- virtual destructor 00068 00069 virtual TBPoint* make_Point( CubitVector const& point) const ; 00070 00071 virtual Curve* make_Curve( DLIList<CubitVector*>& point_list, 00072 DLIList<CubitVector*>& point_tangents) const; 00073 00074 virtual Curve* make_Curve(Curve *curve_ptr, 00075 std::map<TopologyBridge*, TopologyBridge*> *old_tb_to_new_tb = NULL) const; 00076 //- creates a curve from an existing curve. This creates totally 00077 //- new topology. This function is useful for constructing geometry 00078 //- from existing geometry. 00079 00080 virtual Curve* make_Curve( TBPoint const* point1_ptr, 00081 TBPoint const* point2_ptr, 00082 Surface* ref_face_ptr = NULL, 00083 const CubitVector *third_point = NULL) const; 00084 //- Create a curve exactly on the give ref_face. 00085 //- Make sure the points are on the underlying surface. 00086 00087 virtual Curve* make_Curve( GeometryType curve_type, 00088 TBPoint const* point1_ptr, 00089 TBPoint const* point2_ptr, 00090 DLIList<CubitVector*>& vector_list, 00091 Surface* ref_face_ptr = NULL) const; 00092 00093 virtual Curve* make_Curve( GeometryType curve_type, 00094 TBPoint const* point1_ptr, 00095 TBPoint const* point2_ptr, 00096 CubitVector const* intermediate_point_ptr) const; 00097 00098 virtual BodySM* make_extended_sheet( DLIList<Surface*> &surface_list, 00099 CubitBox *clip_box = NULL, 00100 bool preview = false) const; 00101 //R BodySM* 00102 //R- Pointer to a newly created BodySM object. 00103 //I surface_list 00104 //I- The surface_list from which we want to create an extended sheet. 00105 //I clip_box 00106 //I- An optional bounding box to clip the resultant sheet body by. 00107 //I preview 00108 //I- If true just draw the sheet instead of creating it 00109 //- This function creates a sheet body by extending the input surfaces. 00110 //- The result can be optionally clipped to fit inside of the given 00111 //- bounding box. 00112 00113 virtual Surface* make_Surface( Surface *old_surface_ptr, 00114 std::map< TopologyBridge*, TopologyBridge* > *old_tb_to_new_tb = NULL) const; 00115 00116 virtual Surface* make_Surface( GeometryType surface_type, 00117 DLIList<Curve*>& curve_list, 00118 Surface *old_surface_ptr = NULL, 00119 bool check_edges = true ) const; 00120 00121 CubitStatus create_rectangle_surface( double width, 00122 double height, 00123 CubitVector plane, 00124 BodySM *&sheet_body) const; 00125 00126 CubitStatus create_ellipse_surface( TBPoint *pt1, 00127 TBPoint *pt3, 00128 CubitVector center_point, 00129 BodySM *&sheet_body) const; 00130 00131 CubitStatus create_ellipse_surface( double major_radius, 00132 double minor_radius, 00133 CubitVector plane, 00134 BodySM *&sheet_body) const; 00135 00136 Curve* make_elliptical_Curve( TBPoint const* point1, 00137 TBPoint const* point2, 00138 CubitVector ¢er_point, 00139 double start_angle, 00140 double end_angle, 00141 CubitSense sense) const; 00142 00143 CubitStatus create_circle_surface( TBPoint *pt1, 00144 CubitVector center_point, 00145 TBPoint *pt3, 00146 BodySM *&sheet_body) const; 00147 00148 CubitStatus create_circle_surface( TBPoint *pt1, 00149 TBPoint *pt3, 00150 CubitVector center_point, 00151 BodySM *&sheet_body) const; 00152 00153 CubitStatus create_circle_surface( double radius, 00154 CubitVector plane, 00155 BodySM *&sheet_body) const; 00156 00157 virtual Lump* make_Lump( DLIList<Surface*>& surface_list ) const; 00158 00159 //virtual Body *make_Body(Surface *) const; 00160 00161 virtual BodySM* make_BodySM( Surface * ) const; 00162 00163 virtual BodySM* make_BodySM( DLIList<Lump*>& /*lump_list*/ ) const; 00164 00165 //virtual Chain *make_Chain(Curve *) const; 00166 00167 virtual BodySM* sphere(double radius) const ; 00168 00169 virtual BodySM* brick( double wid, double dep, double hi ) const ; 00170 00171 virtual BodySM* brick( const CubitVector ¢er, 00172 const CubitVector axes[3], 00173 const CubitVector &extension) const ; 00174 00175 virtual BodySM* prism( double height, int sides, double major, 00176 double minor) const ; 00177 00178 virtual BodySM* pyramid( double height, int sides, double major, 00179 double minor, double top=0.0) const ; 00180 00181 virtual BodySM* cylinder( double hi, double r1, double r2, 00182 double r3 ) const ; 00183 00184 virtual BodySM* torus( double r1, double r2 ) const ; 00185 00186 virtual BodySM* planar_sheet ( const CubitVector& p1, 00187 const CubitVector& p2, 00188 const CubitVector& p3, 00189 const CubitVector& p4 ) const; 00190 00191 virtual BodySM* copy_body( BodySM* body_sm, 00192 std::map<TopologyBridge*, TopologyBridge*> *old_tb_to_new_tb = NULL ) const; 00193 00194 virtual BodySM* create_body( VolumeFacets& volume, 00195 std::map<FacetShapes*, GeometryEntity*>& entity_map, 00196 const FacetPointSet& points, 00197 int interp_order) const ; 00198 //- creates a body with a volume from facet data 00199 //- VolumeFacets is populated with return data to associate sets of facets with newly created geometry entities 00200 00201 virtual CubitStatus subtract(DLIList<BodySM*> &tool_body_list, 00202 DLIList<BodySM*> &from_bodies, 00203 DLIList<BodySM*> &new_bodies, 00204 bool imprint = false, 00205 bool keep_old = false) const; 00206 00207 virtual CubitStatus imprint(BodySM* BodyPtr1, BodySM* BodyPtr2, 00208 BodySM*& newBody1, BodySM*& newBody2, 00209 bool keep_old) const; 00210 00211 virtual CubitStatus imprint(DLIList<BodySM*> &from_body_list, 00212 DLIList<BodySM*> &new_from_body_list, 00213 bool keep_old, 00214 DLIList<TopologyBridge*> *new_tbs = NULL, 00215 DLIList<TopologyBridge*> *att_tbs = NULL) const; 00216 00217 virtual CubitStatus imprint( DLIList<BodySM*> &body_list, 00218 DLIList<Curve*> &ref_edge_list, 00219 DLIList<BodySM*>& new_body_list, 00220 DLIList<TopologyBridge*> &temporary_bridges, 00221 bool keep_old_body, 00222 bool show_messages = true) const; 00223 //- Imprints a list of Bodies with a list of RefEdges. All entities must 00224 //- be entities. Useful for splitting surfaces. If edge pierces a 00225 //- surface a hardpoint will result at the pierce location. 00226 00227 virtual CubitStatus imprint( DLIList<Surface*> &surface_list, 00228 DLIList<Curve*> &curve_list, 00229 DLIList<TopologyBridge*> &temporary_bridges, 00230 DLIList<BodySM*>& new_body_list, 00231 bool keep_old_body ) const; 00232 //- Imprints a list of RefFaces with a list of RefEdges. This is 00233 //- useful if the user has a curve which spans several surfaces on 00234 //- a body and only wants to imprint to selected surfaces. Algorithm 00235 //- does not support imprinting to free surfaces. 00236 00237 virtual CubitStatus imprint( DLIList<Surface*> &surface_list, 00238 DLIList<DLIList<Curve*>*> &curve_lists_list, 00239 BodySM*& new_body, 00240 bool keep_old_body, 00241 bool expand = true, 00242 DLIList<TopologyBridge*> *new_tbs = NULL, 00243 DLIList<TopologyBridge*> *att_tbs = NULL ) const; 00244 //- Imprints a list of Surfaces with list of Curves, sorted per 00245 //- Surface (ie., curve_lists_list is same length as surface_list). 00246 00247 virtual CubitStatus imprint( DLIList<BodySM*> &body_list, 00248 DLIList<CubitVector> &vector_list, 00249 DLIList<BodySM*>& new_body_list, 00250 bool keep_old_body, 00251 DLIList<TopologyBridge*> *new_tbs = NULL, 00252 DLIList<TopologyBridge*> *att_tbs = NULL, 00253 double *tol_in = NULL, 00254 bool clean_up_slivers = true) const; 00255 //- Imprints a list of bodies with a list of vectors. Useful for 00256 //- splitting curves and creating hardpoints on surfaces. 00257 00258 virtual CubitStatus imprint_projected_edges( DLIList<Surface*> &ref_face_list, 00259 DLIList<Curve*> &ref_edge_list, 00260 DLIList<BodySM*>& new_body_list, 00261 DLIList<Curve*>& kept_free_edges, 00262 bool keep_old_body, 00263 bool keep_free_edges) const; 00264 00265 virtual CubitStatus imprint_projected_edges(DLIList<Surface*> &ref_face_list, 00266 DLIList<BodySM*> &body_list, 00267 DLIList<Curve*> &ref_edge_list, 00268 DLIList<BodySM*>& new_body_list, 00269 bool keep_old_body, 00270 bool keep_free_edges) const; 00271 00272 virtual CubitStatus project_edges( DLIList<Surface*> &ref_face_list, 00273 DLIList<Curve*> &ref_edge_list_in, 00274 DLIList<Curve*> &ref_edge_list_new, 00275 bool print_error = true ) const; 00276 00277 virtual CubitStatus intersect(BodySM* tool_body_ptr, 00278 DLIList<BodySM*> &from_bodies, 00279 DLIList<BodySM*> &new_bodies, 00280 bool keep_old = CUBIT_FALSE, 00281 bool preview = false) const; 00282 00283 virtual CubitStatus chop(DLIList<BodySM*> &bodies, 00284 DLIList<BodySM*> &intersectBodies, 00285 DLIList<BodySM*> &outsideBody, 00286 BodySM*& leftoversBody, 00287 bool keep_old = CUBIT_FALSE, 00288 bool nonreg = CUBIT_FALSE) const; 00289 00290 virtual CubitStatus unite(DLIList<BodySM*> &bodies, 00291 DLIList<BodySM*> &newBodies, 00292 bool keep_old = CUBIT_FALSE) const; 00293 00294 virtual CubitStatus thicken(DLIList<BodySM*>& bodies, 00295 DLIList<BodySM*>& new_bodies, 00296 double depth, 00297 bool both = CUBIT_FALSE) const ; 00298 00299 virtual CubitStatus hollow( DLIList<BodySM*>& bodies, 00300 DLIList<Surface*>& surfs_to_remove, 00301 DLIList<BodySM*>& new_bodies, 00302 double depth) const ; 00303 00304 virtual CubitStatus flip_normals( DLIList<Surface*>& face_list ) const; 00305 00306 virtual CubitStatus sweep_translational( 00307 DLIList<GeometryEntity*>& ref_ent_list, 00308 DLIList<BodySM*>& result_body_list, 00309 const CubitVector& sweep_vector, 00310 double draft_angle, 00311 int draft_type, 00312 bool switchside, 00313 bool rigid, 00314 bool anchor_entity=CUBIT_FALSE, 00315 bool keep_old=CUBIT_FALSE) const; 00316 00317 virtual CubitStatus sweep_perpendicular( 00318 DLIList<GeometryEntity*>& ref_ent_list, 00319 DLIList<BodySM*>& result_body_list, 00320 double distance, 00321 double draft_angle, 00322 int draft_type, 00323 bool switchside, 00324 bool rigid, 00325 bool anchor_entity=CUBIT_FALSE, 00326 bool keep_old=CUBIT_FALSE) const; 00327 00328 virtual CubitStatus sweep_rotational( 00329 DLIList<GeometryEntity*>& ref_ent_list, 00330 DLIList<BodySM*>& result_body_list, 00331 const CubitVector& point, 00332 const CubitVector& direction, 00333 double angle, 00334 int steps = 0, 00335 double draft_angle = 0.0, 00336 int draft_type = 0, 00337 bool switchside = CUBIT_FALSE, 00338 bool make_solid = CUBIT_FALSE, 00339 bool rigid = CUBIT_FALSE, 00340 bool anchor_entity=CUBIT_FALSE, 00341 bool keep_old=CUBIT_FALSE ) const; 00342 00343 virtual CubitStatus sweep_along_curve( 00344 DLIList<GeometryEntity*>& ref_ent_list, 00345 DLIList<BodySM*>& result_body_list, 00346 DLIList<Curve*>& ref_edge_list, 00347 double draft_angle = 0.0, 00348 int draft_type = 0, 00349 bool rigid = CUBIT_FALSE, 00350 bool anchor_entity=CUBIT_FALSE, 00351 bool keep_old=CUBIT_FALSE ) const; 00352 00353 virtual CubitStatus sweep_to_body( 00354 DLIList<Curve*> curve_list, 00355 BodySM *target_body, 00356 CubitVector distance, 00357 DLIList<BodySM*> &new_bodies, 00358 bool unite) const ; 00359 virtual CubitStatus sweep_to_body( 00360 Surface *source_surface, 00361 BodySM *target_body, 00362 CubitVector distance, 00363 DLIList<BodySM*> &new_bodies ) const ; 00364 00365 //HEADER- Webcut-related functions 00366 virtual CubitStatus webcut( 00367 DLIList<BodySM*>& webcut_body_list, 00368 const CubitVector &v1, 00369 const CubitVector &v2, 00370 const CubitVector &v3, 00371 DLIList<BodySM*>& neighbor_imprint_list, 00372 DLIList<BodySM*>& results_list, 00373 ImprintType imprint_type = NO_IMPRINT, 00374 bool preview = false) const ; 00375 //R int 00376 //R- Number of bodies that were webcut ( >= 0 ) 00377 //I webcut_body_list 00378 //I- The list of bodies to be webcut 00379 //I plane 00380 //I- The plane to be used for webcutting. 00381 //I merge 00382 //I- A flag to decide whether the new bodies created by the 00383 //I- webcutting process should be merged or not. 00384 //I imprint 00385 //I- A flag to decide whether the new bodies created by the 00386 //I- webcutting process should be imprinted or not. 00387 //- This functions webcuts a list of bodies through a plane. 00388 //- The newly created bodies are merged and imprinted depeding on 00389 //- the respective flags. 00390 00391 virtual CubitStatus webcut_with_sheet(DLIList<BodySM*>& webcut_body_list, 00392 BodySM *sheet_body, 00393 DLIList<BodySM*>& neighbor_imprint_list, 00394 DLIList<BodySM*> &new_bodies, 00395 ImprintType imprint_type = NO_IMPRINT, 00396 bool preview = false) ; 00397 //- webcuts a body using a sheet body. 00398 //- It splits the sheet into two single sided bodies. 00399 //- it then subtracts this with the webcut body. 00400 //- The result is splitting the webcut_body into halves. 00401 //- if the webcut body is a topological torus, this routine 00402 //- will fail... 00403 00404 virtual CubitStatus webcut_with_extended_sheet( 00405 DLIList<BodySM*> &webcut_body_list, 00406 DLIList<Surface*> &surface_list, 00407 DLIList<BodySM*>& neighbor_imprint_list, 00408 DLIList<BodySM*> &new_bodies, 00409 int &num_cut, 00410 ImprintType imprint_type = NO_IMPRINT, 00411 bool preview = false) ; 00412 //- creates a sheet by extending the given surfaces then webcuts using 00413 //- this sheet.(see webcut_with_sheet). 00414 00415 virtual CubitStatus webcut_with_sweep_surfaces( 00416 DLIList<BodySM*> &blank_bodies, 00417 DLIList<Surface*> &surfaces, 00418 const CubitVector& sweep_vector, 00419 bool sweep_perp, 00420 bool through_all, 00421 bool outward, 00422 bool up_to_next, 00423 Surface *stop_surf, 00424 Curve *curve_to_sweep_along, 00425 DLIList<BodySM*>& neighbor_imprint_list, 00426 DLIList<BodySM*> &results_list, 00427 ImprintType imprint_type = NO_IMPRINT, 00428 CubitBoolean preview = false) ; 00429 00430 virtual CubitStatus webcut_with_sweep_curves( 00431 DLIList<BodySM*> &blank_bodies, 00432 DLIList<Curve*> &curves, 00433 const CubitVector& sweep_vector, 00434 bool through_all, 00435 Surface *stop_surf, 00436 Curve *curve_to_sweep_along, 00437 DLIList<BodySM*>& neighbor_imprint_list, 00438 DLIList<BodySM*> &results_list, 00439 ImprintType imprint_type = NO_IMPRINT, 00440 CubitBoolean preview = false) ; 00441 00442 virtual CubitStatus webcut_with_sweep_curves_rotated( 00443 DLIList<BodySM*> &blank_bodies, 00444 DLIList<Curve*> &curves, 00445 const CubitVector &point, 00446 const CubitVector &sweep_axis, 00447 double angle, 00448 Surface *stop_surf, 00449 DLIList<BodySM*>& neighbor_imprint_list, 00450 DLIList<BodySM*> &results_list, 00451 ImprintType imprint_type = NO_IMPRINT, 00452 CubitBoolean preview = false) ; 00453 00454 virtual CubitStatus webcut_with_sweep_surfaces_rotated( 00455 DLIList<BodySM*> &blank_bodies, 00456 DLIList<Surface*> &surfaces, 00457 const CubitVector &point, 00458 const CubitVector &sweep_axis, 00459 double angle, 00460 Surface *stop_surf, 00461 bool up_to_next, 00462 DLIList<BodySM*>& neighbor_imprint_list, 00463 DLIList<BodySM*> &results_list, 00464 ImprintType imprint_type = NO_IMPRINT, 00465 CubitBoolean preview = false) ; 00466 00467 virtual CubitStatus webcut_with_cylinder( 00468 DLIList<BodySM*> &webcut_body_list, 00469 double radius, 00470 const CubitVector &axis, 00471 const CubitVector ¢er, 00472 DLIList<BodySM*>& neighbor_imprint_list, 00473 DLIList<BodySM*>& results_list, 00474 ImprintType imprint_type = NO_IMPRINT, 00475 CubitBoolean preview = false) ; 00476 //- webcuts a body using a cylinder give the input parameters. 00477 00478 virtual CubitStatus webcut_with_brick( 00479 DLIList<BodySM*>& webcut_body_list, 00480 const CubitVector ¢er, 00481 const CubitVector axes[3], 00482 const CubitVector &extension, 00483 DLIList<BodySM*>& neighbor_imprint_list, 00484 DLIList<BodySM*> &results_list, 00485 ImprintType imprint_type = NO_IMPRINT, 00486 CubitBoolean preview = false) ; 00496 virtual CubitStatus webcut_with_planar_sheet( 00497 DLIList<BodySM*>& webcut_body_list, 00498 const CubitVector ¢er, 00499 const CubitVector axes[2], 00500 double width, double height, 00501 DLIList<BodySM*>& neighbor_imprint_list, 00502 DLIList<BodySM*> &results_list, 00503 ImprintType imprint_type = NO_IMPRINT, 00504 bool preview = false) ; 00510 virtual CubitStatus webcut_with_curve_loop( 00511 DLIList<BodySM*> &webcut_body_list, 00512 DLIList<Curve*> &ref_edge_list, 00513 DLIList<BodySM*>& neighbor_imprint_list, 00514 DLIList<BodySM*>& results_list, 00515 ImprintType imprint_type = NO_IMPRINT, 00516 bool preview = false) ; 00517 //- webcuts a body list using a temp sheet body created from the curve loop 00518 00519 virtual CubitStatus webcut( DLIList<BodySM*>& webcut_body_list, 00520 BodySM const* tool_body, 00521 DLIList<BodySM*>& neighbor_imprint_list, 00522 DLIList<BodySM*>& results_list, 00523 ImprintType imprint_type = NO_IMPRINT, 00524 bool preview = false) const ; 00525 //R int 00526 //R- Number of bodies that were webcut ( >= 0 ) 00527 //I webcut_body_list 00528 //I- The list of bodies to be webcut 00529 //I tool_body 00530 //I- The body to be used for webcutting. 00531 //I merge 00532 //I- A flag to decide whether the new bodies created by the 00533 //I- webcutting process should be merged or not. 00534 //I imprint 00535 //I- A flag to decide whether the new bodies created by the 00536 //I- webcutting process should be imprinted or not. 00537 //- This functions webcuts a list of bodies using another body 00538 //- as the webcutting tool. The newly created bodies are 00539 //- merged and imprinted depeding on the respective flags. 00540 00541 virtual CubitStatus webcut_across_translate( DLIList<BodySM*>& body_list, 00542 Surface* plane_surf1, 00543 Surface* plane_surf2, 00544 DLIList<BodySM*>& neighbor_imprint_list, 00545 DLIList<BodySM*>& results_list, 00546 ImprintType imprint_type = NO_IMPRINT, 00547 bool preview = false) const; 00548 // In-process function to webcut a flat plate suitable for singe-single sweeping. 00549 00550 virtual CubitStatus separate_surfaces( DLIList<Surface*> &surf_list, 00551 DLIList<BodySM*> &new_bodies ); 00552 //- Separates surfaces from sheet bodies into separate bodies. Connected 00553 //- surfaces will remain connected but be placed in a new body. 00554 00555 virtual CubitStatus section( DLIList<BodySM*> §ion_body_list, 00556 const CubitVector &point_1, 00557 const CubitVector &point_2, 00558 const CubitVector &point_3, 00559 DLIList<BodySM*>& new_body_list, 00560 bool keep_normal_side, 00561 bool keep_old = false, 00562 bool keep_both_sides = false); 00563 00564 virtual CubitStatus split_body( BodySM *body_ptr, 00565 DLIList<BodySM*> &new_bodies ); 00566 00567 virtual CubitStatus reverse_body( BodySM *body_to_reverse ); 00568 00569 virtual CubitStatus split_periodic( BodySM *body_ptr, 00570 BodySM *&new_body ); 00571 00572 virtual CubitStatus regularize_body( BodySM *body_ptr, 00573 BodySM *&new_body_ptr ); 00574 00575 virtual CubitStatus regularize_entity(GeometryEntity *old_entity_ptr, 00576 BodySM *&new_body_ptr); 00577 00578 virtual CubitStatus offset_curves( DLIList<Curve*>& ref_edge_list, 00579 DLIList<Curve*>& result_curve_list, 00580 double offset_distance, 00581 const CubitVector& offset_direction, 00582 int gap_type = 1 ); 00583 00584 virtual CubitStatus scale ( BodySM *&body, const CubitVector& factors ); 00585 00586 virtual Curve* trim_curve( Curve* trim_curve, 00587 const CubitVector& trim_vector, 00588 const CubitVector& keep_vector, 00589 bool keep_old = false ); 00590 00591 virtual CubitStatus create_solid_bodies_from_surfs( 00592 DLIList<Surface*> &ref_face_list, 00593 DLIList<BodySM*> &new_bodies, 00594 bool keep_old = false, 00595 bool heal = true, 00596 bool sheet = false) const; 00597 //- This function assumes that the reffaces sent into 00598 //- this function are either sheet bodies, or free surfaces. This 00599 //- Will have been taken care of in the calling function. GT? 00600 00601 CubitStatus tweak_bend( DLIList<BodySM*> &bend_bodies, 00602 DLIList<BodySM*> &new_bodysm_list, 00603 CubitVector& neutral_root, 00604 CubitVector& bend_axis, 00605 CubitVector& bend_direction, 00606 double radius, 00607 double angle, 00608 DLIList<CubitVector>& bend_regions, 00609 double width = -1, 00610 CubitBoolean center_bend = CUBIT_FALSE, 00611 int num_points = 0, 00612 CubitBoolean keep_old_body = CUBIT_FALSE, 00613 CubitBoolean preview = CUBIT_FALSE ) const 00616 { return CUBIT_FAILURE;} 00617 00618 virtual Curve* create_arc(const CubitVector& position, 00619 double radius, 00620 double start_angle, 00621 double end_angle, 00622 CubitVector plane, 00623 CubitBoolean preview = CUBIT_FALSE ); 00624 00625 virtual Curve* create_arc_radius(const CubitVector ¢er, 00626 TBPoint* ref_vertex_start, 00627 TBPoint* ref_vertex_end, 00628 const CubitVector &normal, 00629 double radius, 00630 bool full = false, 00631 CubitBoolean preview = CUBIT_FALSE ); 00632 00633 virtual Curve* create_arc_three( TBPoint* ref_vertex1, 00634 TBPoint* ref_vertex2, 00635 TBPoint* ref_vertex3, 00636 bool full = false, 00637 CubitBoolean preview = CUBIT_FALSE ); 00638 00639 virtual Curve* create_arc_three( Curve* ref_edge1, 00640 Curve* ref_edge2, 00641 Curve* ref_edge3, 00642 bool full = false, 00643 CubitBoolean preview = CUBIT_FALSE ); 00644 00645 virtual Curve* create_arc_center_edge( 00646 TBPoint* ref_vertex1, 00647 TBPoint* ref_vertex2, 00648 TBPoint* ref_vertex3, 00649 const CubitVector &normal, 00650 double radius = CUBIT_DBL_MAX, 00651 bool full = false, 00652 CubitBoolean preview = CUBIT_FALSE ); 00653 00654 virtual CubitStatus create_curve_combine( DLIList<Curve*>& curve_list, 00655 Curve *&new_curve_ptr ); 00656 //- Uses the solid modeller to create a new RefEdge that is a combination 00657 //- of the input chain of edges. 00658 //- 00659 00660 virtual GeometryQueryEngine *get_gqe(); 00661 00662 virtual CubitBoolean is_modify_engine(const TopologyBridge *tb_ptr) const; 00663 00664 virtual CubitStatus get_offset_intersections( 00665 Curve* ref_edge1, 00666 Curve* ref_edge2, 00667 DLIList<CubitVector>& intersection_list, 00668 double offset, 00669 bool ext_first = true ); 00670 00671 virtual CubitStatus get_offset_intersections( 00672 Curve* ref_edge_ptr, 00673 Surface* ref_face_ptr, 00674 DLIList<CubitVector> &intersection_list, 00675 double offset = 0.0, 00676 bool ext_surf = true ); 00677 00678 virtual CubitStatus surface_intersection( Surface *surface1_ptr, 00679 Surface *surface2_ptr, 00680 DLIList<Curve*> &inter_graph, 00681 const double tol) const; 00682 00683 CubitStatus get_3_point_plane( const CubitVector & point_1, 00684 const CubitVector & point_2, 00685 const CubitVector & point_3, 00686 TopoDS_Face*& face)const; 00687 00688 virtual CubitStatus get_mid_plane( const CubitVector &point_1, 00689 const CubitVector &point_2, 00690 const CubitVector &point_3, 00691 BodySM *body_to_trim_to, 00692 BodySM *&midplane_body ) const; 00693 00694 virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1, 00695 Surface *surface_ptr2, 00696 BodySM *body_to_trim_to, 00697 BodySM *&midsurface_body ) const; 00698 00699 virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1, 00700 Surface *surface_ptr2, 00701 BodySM *body_to_trim_to, 00702 BodySM *&midsurface_body ) const; 00703 00704 00705 virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1, 00706 Surface *surface_ptr2, 00707 BodySM *body_to_trim_to, 00708 BodySM *&midsurface_body ) const; 00709 00710 virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list, 00711 double left_offset, 00712 DLIList<BodySM*> &new_bodysm_list, 00713 double right_offset = -1.0, 00714 CubitBoolean keep_old_body = CUBIT_FALSE, 00715 CubitBoolean preview = CUBIT_FALSE ) const; 00722 virtual CubitStatus tweak_chamfer( DLIList<TBPoint*> &point_list, 00723 double offset1, 00724 DLIList<BodySM*> &new_bodysm_list, 00725 Curve *edge1 = NULL, 00726 double offset2 = -1.0, 00727 Curve *edge2 = NULL, 00728 double offset3 = -1.0, 00729 Curve *edge3 = NULL, 00730 CubitBoolean keep_old_body = CUBIT_FALSE, 00731 CubitBoolean preview = CUBIT_FALSE )const ; 00738 virtual CubitStatus tweak_fillet( DLIList<Curve*> &curve_list, 00739 double radius, 00740 DLIList<BodySM*> &new_bodysm_list, 00741 CubitBoolean keep_old_body = CUBIT_FALSE, 00742 CubitBoolean preview = CUBIT_FALSE ) const; 00746 virtual CubitStatus tweak_fillet( Curve *curve_ptr, 00747 double start_radius, 00748 double end_radius, 00749 BodySM *&new_body_ptr, 00750 CubitBoolean keep_old_body = CUBIT_FALSE, 00751 CubitBoolean preview = CUBIT_FALSE ) const; 00756 virtual CubitStatus tweak_fillet( DLIList<TBPoint*> &point_list, 00757 double radius, 00758 DLIList<BodySM*> &new_bodysm_list, 00759 CubitBoolean keep_old_body = CUBIT_FALSE, 00760 CubitBoolean preview = CUBIT_FALSE ) const; 00764 virtual CubitStatus tweak_move( DLIList<Surface*> &surface_list, 00765 const CubitVector &delta, 00766 DLIList<BodySM*> &new_bodysm_list, 00767 CubitBoolean keep_old_body = CUBIT_FALSE, 00768 CubitBoolean preview = CUBIT_FALSE ) const; 00772 virtual CubitStatus tweak_move( DLIList<Curve*> &curve_list, 00773 const CubitVector &delta, 00774 DLIList<BodySM*> &new_bodysm_list, 00775 CubitBoolean keep_old_body = CUBIT_FALSE, 00776 CubitBoolean preview = CUBIT_FALSE ) const; 00780 virtual CubitStatus tweak_offset( DLIList<Surface*> &surface_list, 00781 double offset_distance, 00782 DLIList<Surface*> *add_surface_list_ptr, 00783 DLIList<double>*, 00784 DLIList<BodySM*>&, 00785 CubitBoolean keep_old_body = CUBIT_FALSE, 00786 CubitBoolean preview = CUBIT_FALSE ) const; 00791 virtual CubitStatus tweak_offset( DLIList<Curve*> &curve_list, 00792 double offset_distance, 00793 DLIList<Curve*>*, 00794 DLIList<double>*, 00795 DLIList<BodySM*> &new_bodysm_list, 00796 CubitBoolean keep_old_body = CUBIT_FALSE, 00797 CubitBoolean preview = CUBIT_FALSE ) const; 00802 virtual CubitStatus tweak_remove( DLIList<Surface*> &surface_list, 00803 DLIList<BodySM*> &new_bodysm_list, 00804 CubitBoolean extend_adjoining = CUBIT_TRUE, 00805 CubitBoolean keep_old_body = CUBIT_FALSE, 00806 CubitBoolean preview = CUBIT_FALSE ) const; 00811 virtual CubitStatus tweak_remove( DLIList<Curve*> &curve_list, 00812 DLIList<BodySM*> &new_bodysm_list, 00813 CubitBoolean keep_old_body = CUBIT_FALSE, 00814 CubitBoolean preview = CUBIT_FALSE ) const; 00820 virtual CubitStatus tweak_target( DLIList<Surface*> &surface_list, 00821 DLIList<Surface*> &target_surfs, 00822 DLIList<BodySM*> &new_bodysm_list, 00823 CubitBoolean extend_flg = CUBIT_TRUE, 00824 CubitPlane *limit_plane = NULL, 00825 CubitBoolean reverse_flg = CUBIT_FALSE, 00826 CubitBoolean keep_old_body = CUBIT_FALSE, 00827 CubitBoolean preview = CUBIT_FALSE ) const; 00831 virtual CubitStatus tweak_target( DLIList<Curve*> &curve_list, 00832 DLIList<Surface*> &target_surf_list, 00833 DLIList<BodySM*> &new_bodysm_list, 00834 CubitBoolean extend_flg = CUBIT_TRUE, 00835 CubitPlane *limit_plane = NULL, 00836 CubitBoolean reverse_flg = CUBIT_FALSE, 00837 CubitBoolean keep_old_body = CUBIT_FALSE, 00838 CubitBoolean preview = CUBIT_FALSE, 00839 double max_area_increase = 0 ) const; 00845 virtual CubitStatus tweak_target( DLIList<Curve*> &curve_list, 00846 DLIList<Curve*> &target_curves, 00847 DLIList<BodySM*> &new_bodysm_list, 00848 CubitBoolean extend_flg = CUBIT_TRUE, 00849 CubitPlane *limit_plane = NULL, 00850 CubitBoolean reverse_flg = CUBIT_FALSE, 00851 CubitBoolean keep_old_body = CUBIT_FALSE, 00852 CubitBoolean preview = CUBIT_FALSE, 00853 double max_area_increase = 0 ) const; 00859 virtual CubitStatus tweak_target( TBPoint *point_ptr, 00860 DLIList<Surface*> &modify_surface_list, 00861 CubitVector &target_loc, 00862 BodySM *&new_bodysm_ptr, 00863 CubitBoolean keep_old_body = CUBIT_FALSE, 00864 CubitBoolean preview = CUBIT_FALSE ) const ; 00873 virtual CubitStatus split_curve( Curve* curve_to_split, 00874 const CubitVector& split_location, 00875 DLIList<Curve*>& created_curves ) ; 00876 //- Splits a curve at the specified location. 00877 //- the single passed in curve is split into two curves at the split location 00878 //- the two resulting curves are added to the passed in list 00879 00880 00881 virtual CubitStatus remove_curve_slivers( BodySM *body, double lengthlimit ) const; 00882 00883 virtual CubitStatus create_net_surface( DLIList<Surface*>& ref_face_list, BodySM *& new_body, 00884 DLIList<DLIList<CubitVector*>*> &vec_lists_u, 00885 DLIList<DLIList<CubitVector*>*> &vec_lists_v, 00886 double net_tol = 1e-3, 00887 CubitBoolean heal = CUBIT_TRUE ) const; 00888 00889 virtual CubitStatus create_net_surface( DLIList<Curve*>& u_curves, DLIList<Curve*>& v_curves, 00890 BodySM *& new_body, 00891 double net_tol = 1e-3, 00892 CubitBoolean heal = CUBIT_TRUE ) const; 00893 00894 virtual CubitStatus create_offset_surface( Surface* ref_face_ptr, BodySM*& new_body, double offset_distance ) const; 00895 00896 virtual CubitStatus create_offset_body( BodySM* body_ptr, BodySM*& new_body, double offset_distance ) const; 00897 00898 virtual CubitStatus create_skin_surface( DLIList<Curve*>& curves, BodySM*& new_body, DLIList<Curve*>& ) const; 00899 00900 /* 00901 virtual CubitStatus loft_surfaces( Surface *face1, const double &takeoff1, 00902 Surface *face2, const double &takeoff2, 00903 BodySM*& new_body, 00904 CubitBoolean arc_length_option = CUBIT_FALSE, 00905 CubitBoolean twist_option = CUBIT_FALSE, 00906 CubitBoolean align_direction = CUBIT_TRUE, 00907 CubitBoolean perpendicular = CUBIT_TRUE, 00908 CubitBoolean simplify_option = CUBIT_FALSE) const; 00909 00910 virtual CubitStatus loft_surfaces_to_body( Surface *face1, const double &takeoff1, 00911 Surface *face2, const double &takeoff2, 00912 BodySM*& new_body, 00913 CubitBoolean arc_length_option, 00914 CubitBoolean twist_option, 00915 CubitBoolean align_direction, 00916 CubitBoolean perpendicular, 00917 CubitBoolean simplify_option) const; 00918 */ 00919 00920 virtual CubitStatus loft_surfaces_to_body( 00921 DLIList<Surface*> &surfaces, 00922 DLIList<double> &takeoff_factor_list, 00923 DLIList<Surface*> &takeoff_vector_surface_list, 00924 DLIList<CubitVector> &surface_takeoff_vector_list, 00925 DLIList<Curve*> &takeoff_vector_curve_list, 00926 DLIList<CubitVector> &curve_takeoff_vector_list, 00927 DLIList<Curve*> &guides, 00928 DLIList<TBPoint*> &match_vertices_list, 00929 BodySM*& new_body, 00930 CubitBoolean global_guides, 00931 CubitBoolean closed, 00932 CubitBoolean show_matching_curves, 00933 CubitBoolean preview ) const; 00934 00935 virtual CubitStatus create_surface( DLIList<CubitVector*>& vec_list, 00936 BodySM *&new_body, 00937 Surface *ref_face_ptr, 00938 CubitBoolean project_points ) const; 00939 00940 virtual CubitStatus create_surface( DLIList<TBPoint*> &points, 00941 BodySM *&new_body, 00942 Surface *on_surface ) const; 00943 00944 00945 virtual CubitStatus create_weld_surface( CubitVector &root, 00946 Surface *ref_face1, double leg1, Surface *ref_face2, double leg2, 00947 BodySM *&new_body ) const; 00948 00949 CubitStatus tolerant_imprint( DLIList<BodySM*> &bodies_in, 00950 DLIList<BodySM*> &new_bodies, 00951 DLIList<TopologyBridge*>*, 00952 DLIList<TopologyBridge*>* ) const; 00953 00954 virtual CubitStatus tolerant_imprint(DLIList<Surface*> &surfs_in, 00955 DLIList<BodySM*> &new_bodysm_list) const; 00956 00957 virtual CubitStatus tolerant_imprint_surface_with_curves( 00958 Surface *surface_to_imprint, 00959 DLIList<Curve*> &curves, 00960 DLIList<TopologyBridge*> &temporary_bridges, 00961 BodySM *&new_body, 00962 DLIList<TopologyBridge*> *new_tbs = NULL, 00963 DLIList<TopologyBridge*> *att_tbs = NULL ) const; 00964 //Imprints a surface with passed-in curves. Can imprint successfully 00965 //and expectedly with sloppy/dirty geometry. 00966 virtual CubitStatus tolerant_imprint( DLIList<BodySM*> &bodies_in, 00967 DLIList<BodySM*> &new_bodies, 00968 double overlap_tol, 00969 double imprint_tol, 00970 DLIList<TopologyBridge*> *new_tbs = NULL, 00971 DLIList<TopologyBridge*> *att_tbs = NULL ) const; 00972 00973 virtual CubitStatus remove_topology(DLIList<Curve*> &curves_to_remove, 00974 DLIList<Surface*> &surfs_to_remove, 00975 double backoff_distance, 00976 double small_edge_size, 00977 DLIList<BodySM*> &new_bodysm_list, 00978 CubitBoolean preview) const; 00979 00980 virtual CubitStatus curve_surface_intersection( Surface *surface, 00981 Curve* curve, 00982 DLIList<Curve*> &new_curves ) const; 00983 //Intersects input surface with input curve to produce intersection curve(s). 00984 //If intersection results is nothing or a point, CUBIT_FAILURE is returned. 00985 00986 virtual void get_possible_invalid_tbs(DLIList<TopologyBridge*> &bridges_in, 00987 DLIList<TopologyBridge*> &bridges_out); 00988 00989 virtual CubitStatus create_offset_sheet( DLIList<Surface*> &surface_list, 00990 double offset_distance, 00991 DLIList<Surface*> *add_surface_list_ptr, 00992 DLIList<double> *add_offset_list_ptr, 00993 DLIList<BodySM*> &new_body_list, 00994 CubitBoolean preview = CUBIT_FALSE ) const 01002 { return CUBIT_FAILURE; } 01003 01004 virtual CubitBoolean bodies_interfering( BodySM *body1, BodySM *body2 ) const 01005 {return CUBIT_FAILURE; } 01006 01007 virtual CubitStatus stitch( DLIList<BodySM*> &bodies_to_stitch, 01008 DLIList<BodySM*> &new_bodies, 01009 bool tighten_gaps, 01010 double tolerance )const; 01011 01012 #ifdef CGM_KCM 01013 virtual CubitStatus mesh2brep(std::vector<double> &xvals, 01014 std::vector<double> &yvals, 01015 std::vector<double> &zvals, 01016 std::vector<unsigned int> &tri_connectivity, 01017 DLIList<BodySM*> &new_body_sms) const; 01018 #endif 01019 protected: 01020 01021 TopoDS_Face* make_TopoDS_Face( GeometryType surface_type, 01022 DLIList<DLIList<TopoDS_Edge*>*> topo_edges, 01023 Surface* old_surface_ptr) const; 01024 01025 int imprint_toposhapes(TopoDS_Shape*&, TopoDS_Shape*, 01026 DLIList<TopoDS_Face*>&on_faces ) const; 01027 01028 TopoDS_Edge* find_imprinting_edge(TopoDS_Shape& from_shape, 01029 TopoDS_Edge& tool_shape, 01030 DLIList<TopoDS_Face*>& faces)const; 01031 01032 CubitStatus sort_curves(DLIList<Curve*> curve_list, 01033 DLIList<DLIList<TopoDS_Edge*>*>& topo_edges_loops)const; 01034 01035 CubitStatus stitch_surfs(DLIList<BodySM*>& surf_bodies, 01036 TopoDS_Shape& stitched_shape) const; 01037 01038 private: 01039 CubitStatus result_1_imprint(BodySM* from_body, 01040 BodySM* tool_body, 01041 BodySM*& newBody)const; 01042 01043 CubitStatus result_3_imprint(BodySM* from_body, 01044 BodySM* tool_body, 01045 BodySM*& newBody)const; 01046 01047 //- for periodic surfaces, use webcut first and then unite to get imprints 01048 01049 virtual bool supports_interoperability() { return true; } 01050 //- Returns whether intermixing of real and virtual geometry operations 01051 //- is supported for the current geometry kernel. 01052 01053 CubitStatus tweak_chamfer_sheet(TBPoint* pnt, 01054 OCCSurface* face, 01055 double d1, 01056 Curve* edge1, 01057 double d2, 01058 Curve* edge2, 01059 DLIList<BodySM*> & new_bodysm_list, 01060 CubitBoolean keep_old_body, 01061 CubitBoolean preview ) const; 01062 01063 CubitStatus tweak_fillet_chamfer_sheet( DLIList<TBPoint*> & ref_vertex_list, 01064 DLIList<OCCSurface*> faces, 01065 double radius, 01066 CubitBoolean is_fillet, 01067 DLIList<BodySM*> & new_bodysm_list, 01068 CubitBoolean keep_old_body, 01069 CubitBoolean preview ) const; 01070 01071 CubitStatus tweak_chamfer_solid( TBPoint* point_ptr, 01072 OCCBody* body, 01073 double r1, 01074 Curve *c1, 01075 double r2, 01076 Curve *c2, 01077 double r3, 01078 Curve *c3, 01079 DLIList<BodySM *> &new_bodysm_list, 01080 CubitBoolean keep_old_body, 01081 CubitBoolean preview ) const; 01082 01083 CubitStatus tweak_chamfer_solid( DLIList<TBPoint*> &point_list, 01084 DLIList<OCCBody*> &bodies, 01085 double radius, 01086 DLIList<BodySM*> &new_bodysm_list, 01087 CubitBoolean keep_old_body, 01088 CubitBoolean preview )const; 01089 01090 CubitStatus sort_points_by_body_type( DLIList<TBPoint*> &point_list, 01091 DLIList<TBPoint*> &solid_points, 01092 DLIList<TBPoint*> &sheet_points, 01093 DLIList<OCCSurface*> &s_list, 01094 DLIList<OCCBody*> &bodies )const; 01095 01096 CubitStatus tweak_fillet( Curve * curve_ptr, 01097 double start_radius, 01098 double end_radius, 01099 BodySM *& new_bodysm_ptr, 01100 CubitBoolean keep_old_body, 01101 CubitBoolean preview, 01102 CubitBoolean if_fillet ) const; 01103 01104 CubitStatus do_loft(BRepOffsetAPI_ThruSections& loft, 01105 DLIList<Surface*>& surf_list) const; 01106 01107 CubitStatus do_loft(BRepOffsetAPI_ThruSections& loft, 01108 DLIList<DLIList<TopoDS_Edge*>*> loops) const; 01109 01110 void make_base_for_prim_pyramid(double major, 01111 double minor, 01112 double height, 01113 int sides, 01114 TopoDS_Wire& wire)const; 01115 01116 int check_intersection(DLIList<TopoDS_Edge*>*& edge_list, 01117 TopoDS_Face from_face)const; 01118 01119 CubitStatus get_shape_list(DLIList<BodySM*>& BodySM_list, 01120 DLIList<TopoDS_Shape*>& shape_list, 01121 DLIList<CubitBoolean>& is_volume, 01122 bool keep_old, 01123 DLIList<CubitBox*>* b_boxes = NULL) const; 01124 01125 CubitStatus face_edge_imprint( DLIList<Surface*> &ref_face_list, 01126 DLIList<Curve*> &edge_list, 01127 DLIList<TopoDS_Face*>& face_list, 01128 DLIList<TopoDS_Shape*>& shape_list, 01129 bool keep_old ) const; 01130 void shape_to_bodySM( DLIList<TopoDS_Shape*> shape_list, 01131 DLIList<BodySM*>& new_body_list)const; 01132 01133 void check_operation(TopoDS_Shape& cut_shape, 01134 TopoDS_Shape*& from_shape, //output 01135 CubitBoolean is_volume, 01136 CubitBoolean& has_changed, //output 01137 BRepAlgoAPI_BooleanOperation* op, 01138 CubitBoolean keep_old) const; 01139 01140 CubitStatus get_sweepable_toposhape(OCCSurface*& surface, 01141 const CubitVector* sweep_v_p, 01142 TopoDS_Shape& toposhape)const; 01143 01144 CubitStatus get_sweepable_toposhape(OCCCurve*& curve, 01145 TopoDS_Shape& toposhape)const; 01146 01147 CubitStatus do_subtract(DLIList<BodySM*> &from_bodies, 01148 DLIList<TopoDS_Shape*> &tool_bodies_copy, 01149 DLIList<CubitBoolean> &is_tool_volume, 01150 DLIList<CubitBox*>* tool_boxes, 01151 DLIList<BodySM*> &new_bodies, 01152 bool keep_old, 01153 bool imprint = CUBIT_FALSE) const; 01154 01155 void get_new_tbs( 01156 std::map<OCCSurface*, std::pair<CubitVector, double> >& surf_property_map, 01157 std::map<OCCCurve*, std::pair<CubitVector, double> >& curve_property_map, 01158 DLIList<OCCPoint*> &points, 01159 DLIList<OCCSurface*> &new_surfaces, 01160 DLIList<OCCCurve*> &new_curves, 01161 DLIList<OCCPoint*> &new_points, 01162 DLIList<TopologyBridge*> *new_tbs)const; 01163 01164 void get_att_tbs(DLIList<OCCSurface*> &new_surfaces, 01165 DLIList<OCCCurve*> &new_curves, 01166 DLIList<OCCPoint*> &new_points, 01167 const CubitString& name, 01168 DLIList<TopologyBridge*> *att_tbs)const; 01169 01170 CubitStatus split_shape_by_location(TopoDS_Shape *&from_shape, 01171 Curve* curve_to_split, 01172 const CubitVector& split_location, 01173 DLIList<Curve*>& created_curves )const; 01174 01175 //- Removes all all unnessesary faces, curves, vertices and associated 01176 //- data from a refentity. 01177 virtual CubitStatus test_regularize_entity( GeometryEntity *old_entity_ptr) 01178 {return CUBIT_FAILURE; } 01179 01180 int countEdges(TopoDS_Wire &wire); 01181 } ; 01182 01183 #endif