cgma
OCCModifyEngine.hpp
Go to the documentation of this file.
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 &center_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 &center, 
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 &center,
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 &center,
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 &center,
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*> &section_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 &center,
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines