LCOV - code coverage report
Current view: top level - geom/facet/cgm - FacetModifyEngine.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 6 10 60.0 %
Date: 2020-06-30 00:58:45 Functions: 2 5 40.0 %
Branches: 3 4 75.0 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : FacetModifyEngine.hpp
       3                 :            : //
       4                 :            : // Purpose       : ModifyEngine for faceted geometry
       5                 :            : //
       6                 :            : // Special Notes : Modeled after GeometryModifyEngine and OCCModifyEngine.
       7                 :            : //
       8                 :            : // Creator       : John Fowler
       9                 :            : //
      10                 :            : // Creation Date : 6/02
      11                 :            : //
      12                 :            : // Owner         : John Fowler
      13                 :            : //-------------------------------------------------------------------------
      14                 :            : 
      15                 :            : #ifndef FACET_MODIFY_ENGINE_HPP
      16                 :            : #define FACET_MODIFY_ENGINE_HPP 
      17                 :            : 
      18                 :            : #include "GeometryModifyEngine.hpp"
      19                 :            : #include <vector>
      20                 :            : #include <map> 
      21                 :            : 
      22                 :            : class TBPoint;
      23                 :            : class TopologyBridge;
      24                 :            : class TopologyEntity;
      25                 :            : class ChollaSurface;
      26                 :            : class ChollaCurve;
      27                 :            : class ChollaPoint;
      28                 :            : class ChollaEngine;
      29                 :            : class CurveFacetEvalTool;
      30                 :            : class FacetEvalTool;
      31                 :            : class CubitPoint;
      32                 :            : class CubitFacet;
      33                 :            : class CubitFacetEdge;
      34                 :            : class CubitQuadFacet;
      35                 :            : class TBPoint;
      36                 :            : class CoEdgeSM;
      37                 :            : class ShellSM;
      38                 :            : class FacetBody;
      39                 :            : class Body;
      40                 :            : class RefFace;
      41                 :            : class FacetSurface;
      42                 :            : class FacetCurve;
      43                 :            : class FacetPoint;
      44                 :            : class CubitEvaluatorData;
      45                 :            : class SphereEvaluatorData;
      46                 :            : class CylinderEvaluatorData;
      47                 :            : 
      48                 :            : class FacetModifyEngine : public GeometryModifyEngine
      49                 :            : {
      50                 :            :   
      51                 :            : public:
      52                 :            :   
      53                 :            :   //HEADER- Constructor and Destructor
      54                 :            : private:
      55                 :            :   
      56                 :            :   FacetModifyEngine();
      57                 :            :   
      58                 :            :   static FacetModifyEngine* instance_;
      59                 :            :   
      60                 :            : public:
      61                 :            :   
      62                 :        962 :   static inline FacetModifyEngine* instance()
      63                 :            :   {
      64         [ +  + ]:        962 :     if( !instance_ )
      65         [ +  - ]:        874 :       instance_ = new FacetModifyEngine;
      66                 :        962 :     return instance_;
      67                 :            :   }
      68                 :            :   
      69                 :            :   static void initialize_settings();
      70                 :            :   
      71                 :            :   virtual ~FacetModifyEngine();
      72                 :            :   //- virtual destructor
      73                 :            :   
      74                 :          0 :   virtual bool supports_interoperability() { return false; }
      75                 :            :     //- Returns whether intermixing of real and virtual geometry operations
      76                 :            :     //- is supported for the current geometry kernel.
      77                 :            : 
      78                 :          0 :   virtual bool supports_facets() { return true; }
      79                 :            : 
      80                 :            :   virtual TBPoint* make_Point( CubitVector const& point) const ;
      81                 :            :   
      82                 :            :   virtual Curve* make_Curve(Curve *curve_ptr,
      83                 :            :     std::map<TopologyBridge*, TopologyBridge*> *old_tb_to_new_tb = NULL) const;
      84                 :            :   //- creates a curve from an existing curve.  This creates totally
      85                 :            :   //- new topology.  This function is useful for constructing geometry
      86                 :            :   //- from existing geometry.
      87                 :            :   
      88                 :            :   virtual Curve* make_Curve( TBPoint const* point1_ptr,
      89                 :            :     TBPoint const* point2_ptr,
      90                 :            :     Surface* ref_face_ptr,
      91                 :            :     const CubitVector *third_point = NULL) const;
      92                 :            :   //- Create a curve exactly on the give ref_face.
      93                 :            :   //- Make sure the points are on the underlying surface.
      94                 :            :   
      95                 :            :   virtual Curve* make_Curve( GeometryType curve_type,
      96                 :            :     TBPoint const* point1_ptr,
      97                 :            :     TBPoint const* point2_ptr,
      98                 :            :     DLIList<CubitVector*>& vector_list,
      99                 :            :     Surface* ref_face_ptr = NULL) const;
     100                 :            :   
     101                 :            :   virtual Curve* make_Curve( GeometryType curve_type,
     102                 :            :     TBPoint const* point1_ptr,
     103                 :            :     TBPoint const* point2_ptr,
     104                 :            :     CubitVector const* intermediate_point_ptr) const;
     105                 :            : 
     106                 :            :   virtual Curve* make_Curve( DLIList<CubitVector*>& point_list,
     107                 :            :                              DLIList<CubitVector*>& point_tangents) const;
     108                 :            :   
     109                 :            :   
     110                 :            :   virtual Surface* make_Surface( Surface *old_surface_ptr,
     111                 :            :     std::map< TopologyBridge*, TopologyBridge* > *old_tb_to_new_tb = NULL) const;
     112                 :            : 
     113                 :            :   virtual BodySM* make_extended_sheet( DLIList<Surface*> &surface_list,
     114                 :            :                                        CubitBox *clip_box = NULL,
     115                 :            :                                        bool preview = false ) const;
     116                 :            :   
     117                 :            : #ifdef KCM_MESH_TO_GEOM
     118                 :            :   virtual CubitStatus mesh2brep(std::vector<double> &xvals,
     119                 :            :                         std::vector<double> &yvals,
     120                 :            :                         std::vector<double> &zvals,
     121                 :            :                         std::vector<unsigned int> &tri_connectivity,
     122                 :            :                         DLIList<BodySM*> &new_body_sms) const;
     123                 :            : #endif
     124                 :            : 
     125                 :            :   virtual Surface* make_Surface( GeometryType surface_type,
     126                 :            :     DLIList<Curve*>& curve_list,
     127                 :            :     Surface *old_surface_ptr = NULL,
     128                 :            :     bool check_edges = true ) const;
     129                 :            :   
     130                 :            :   virtual Lump* make_Lump( DLIList<Surface*>& surface_list ) const;
     131                 :            :   
     132                 :            :   //virtual Body *make_Body(Surface *) const;
     133                 :            :   
     134                 :            :   virtual BodySM* make_BodySM( Surface * ) const;
     135                 :            :   
     136                 :            :   virtual BodySM* make_BodySM( DLIList<Lump*>& /*lump_list*/ ) const;
     137                 :            :   
     138                 :            :   //virtual Chain *make_Chain(Curve *) const;
     139                 :            :   
     140                 :            :   virtual BodySM* sphere(double radius) const ;
     141                 :            :   
     142                 :            :   virtual BodySM* brick( double wid, double dep, double hi ) const ;
     143                 :            :   
     144                 :            :   virtual BodySM* brick( const CubitVector &center, 
     145                 :            :                          const CubitVector axes[3],
     146                 :            :                          const CubitVector &extension) const ;
     147                 :            :   
     148                 :            :   virtual BodySM* prism( double height, int sides, double major,
     149                 :            :     double minor) const ;
     150                 :            :   
     151                 :            :   virtual BodySM* pyramid( double height, int sides, double major,
     152                 :            :     double minor, double top=0.0) const ;
     153                 :            :   
     154                 :            :   virtual BodySM* cylinder( double hi, double r1, double r2,
     155                 :            :     double r3 ) const ;
     156                 :            :   
     157                 :            :   virtual BodySM* torus( double r1, double r2 ) const ;
     158                 :            :   
     159                 :            :   virtual BodySM* planar_sheet ( const CubitVector& p1,
     160                 :            :     const CubitVector& p2,
     161                 :            :     const CubitVector& p3,
     162                 :            :     const CubitVector& p4 ) const;
     163                 :            :   
     164                 :            :   virtual BodySM* copy_body( BodySM* body_sm,
     165                 :            :         std::map<TopologyBridge*, TopologyBridge*> *old_tb_to_new_tb = NULL ) const;
     166                 :            : /*      
     167                 :            :   virtual CubitStatus stitch_surfs(
     168                 :            :                       DLIList<BodySM*>& surf_bodies,
     169                 :            :                       BodySM*& stitched_body)const;
     170                 :            : */
     171                 :            :   virtual BodySM* create_body( VolumeFacets& volume, std::map<FacetShapes*, GeometryEntity*>& entity_map, 
     172                 :            :                                const FacetPointSet& points, int interp_order) const;
     173                 :            :       
     174                 :            :   virtual CubitStatus subtract(DLIList<BodySM*> &tool_body_list,
     175                 :            :     DLIList<BodySM*> &from_bodies,
     176                 :            :     DLIList<BodySM*> &new_bodies,
     177                 :            :     bool imprint = false,
     178                 :            :     bool keep_old = false) const;
     179                 :            :   
     180                 :            :   virtual CubitStatus imprint(BodySM* BodyPtr1, BodySM* BodyPtr2,
     181                 :            :     BodySM*& newBody1, BodySM*& newBody2,
     182                 :            :     bool keep_old) const;
     183                 :            :   
     184                 :            :   virtual CubitStatus imprint(DLIList<BodySM*> &from_body_list,
     185                 :            :     DLIList<BodySM*> &new_from_body_list,
     186                 :            :     bool keep_old, DLIList<TopologyBridge*> *new_tbs = NULL,
     187                 :            :     DLIList<TopologyBridge*> *att_tbs = NULL) const;
     188                 :            :   
     189                 :            :   virtual CubitStatus imprint( DLIList<BodySM*> &body_list,
     190                 :            :     DLIList<Curve*> &ref_edge_list,
     191                 :            :     DLIList<BodySM*>& new_body_list,
     192                 :            :     DLIList<TopologyBridge*> &temporary_bridges,
     193                 :            :     bool keep_old_body,
     194                 :            :     bool show_messages=CUBIT_TRUE) const;
     195                 :            :   
     196                 :            :   virtual CubitStatus imprint( DLIList<Surface*> &ref_face_list,
     197                 :            :     DLIList<Curve*> &ref_edge_list,
     198                 :            :     DLIList<TopologyBridge*> &temporary_bridges,
     199                 :            :     DLIList<BodySM*>& new_body_list,
     200                 :            :     bool keep_old_body ) const;
     201                 :            : 
     202                 :            :   virtual CubitStatus imprint( DLIList<Surface*> &surface_list,
     203                 :            :     DLIList<DLIList<Curve*>*> &curve_lists_list,
     204                 :            :     BodySM*& new_body,
     205                 :            :     bool keep_old_body,
     206                 :            :     bool expand = true,
     207                 :            :     DLIList<TopologyBridge*> *new_tbs = NULL,
     208                 :            :     DLIList<TopologyBridge*> *att_tbs = NULL ) const;
     209                 :            :   
     210                 :            :   virtual CubitStatus imprint( DLIList<BodySM*> &body_list,
     211                 :            :     DLIList<CubitVector> &vector_list,
     212                 :            :     DLIList<BodySM*>& new_body_list,
     213                 :            :     bool keep_old_body,
     214                 :            :     DLIList<TopologyBridge*> *new_tbs = NULL,
     215                 :            :     DLIList<TopologyBridge*> *att_tbs = NULL,
     216                 :            :     double *tol_in = NULL,
     217                 :            :     bool clean_up_slivers = true) const;
     218                 :            :   
     219                 :            :   virtual CubitStatus imprint_projected_edges( DLIList<Surface*> &ref_face_list,
     220                 :            :     DLIList<Curve*> &ref_edge_list,
     221                 :            :     DLIList<BodySM*>& new_body_list,
     222                 :            :     DLIList<Curve*> &kept_edge_list,
     223                 :            :     bool keep_old_body,
     224                 :            :     bool keep_free_edges) const;
     225                 :            :   
     226                 :            :   virtual CubitStatus imprint_projected_edges(DLIList<Surface*> &ref_face_list,
     227                 :            :     DLIList<BodySM*> &body_list,
     228                 :            :     DLIList<Curve*> &ref_edge_list,
     229                 :            :     DLIList<BodySM*>& new_body_list,
     230                 :            :     bool keep_old_body,
     231                 :            :     bool keep_free_edges) const;
     232                 :            :   
     233                 :            :   virtual CubitStatus project_edges( DLIList<Surface*> &ref_face_list,
     234                 :            :     DLIList<Curve*> &ref_edge_list_in,
     235                 :            :     DLIList<Curve*> &ref_edge_list_new,
     236                 :            :     bool print_error = true ) const;
     237                 :            :  
     238                 :            :   virtual CubitStatus remove_topology(DLIList<Curve*> &curves_to_remove,
     239                 :            :                                        DLIList<Surface*> &surfs_to_remove,
     240                 :            :                                        double backoff_distance,
     241                 :            :                                        double small_edge_size,
     242                 :            :                                        DLIList<BodySM*> &new_bodysm_list,
     243                 :            :                                        CubitBoolean preview) const;
     244                 :            : 
     245                 :            :   virtual CubitStatus curve_surface_intersection( Surface *surface, 
     246                 :            :                                                   Curve* curve,
     247                 :            :                                                   DLIList<Curve*> &new_curves ) const;
     248                 :            : 
     249                 :            :   virtual CubitStatus intersect(BodySM* tool_body_ptr,
     250                 :            :     DLIList<BodySM*> &from_bodies,
     251                 :            :     DLIList<BodySM*> &new_bodies,
     252                 :            :     bool keep_old = CUBIT_FALSE,
     253                 :            :     bool preview = CUBIT_FALSE ) const;
     254                 :            :   
     255                 :            :   virtual CubitStatus chop(DLIList<BodySM*> &bodies, 
     256                 :            :                            DLIList<BodySM*> &intersectBodies,
     257                 :            :                            DLIList<BodySM*> &outsideBody, 
     258                 :            :                            BodySM*& leftoversBody,
     259                 :            :                            bool keep_old = CUBIT_FALSE,
     260                 :            :                            bool nonreg = CUBIT_FALSE) const;
     261                 :            :   
     262                 :            :   virtual CubitStatus unite(DLIList<BodySM*> &bodies, 
     263                 :            :                             DLIList<BodySM*> &newBodies,
     264                 :            :                             bool keep_old = CUBIT_FALSE) const;
     265                 :            : 
     266                 :            :   virtual void get_possible_invalid_tbs(DLIList<TopologyBridge*> &bridges_in,
     267                 :            :                              DLIList<TopologyBridge*> &bridges_out);
     268                 :            :   
     269                 :            :   virtual CubitStatus thicken(DLIList<BodySM*>& bodies, 
     270                 :            :     DLIList<BodySM*>& new_bodies,
     271                 :            :     double depth,
     272                 :            :     bool both = CUBIT_FALSE) const ;
     273                 :            : 
     274                 :            :   virtual CubitStatus hollow(DLIList<BodySM*>& bodies,
     275                 :            :                              DLIList<Surface*>& surfs_to_remove,
     276                 :            :                              DLIList<BodySM*>& new_bodies,
     277                 :            :                              double depth) const ;
     278                 :            : 
     279                 :            :   virtual CubitStatus flip_normals( DLIList<Surface*>& face_list ) const;
     280                 :            :   
     281                 :            :   virtual CubitStatus  sweep_translational(
     282                 :            :     DLIList<GeometryEntity*>& ref_ent_list,
     283                 :            :     DLIList<BodySM*>& result_body_list,
     284                 :            :     const CubitVector& sweep_vector,
     285                 :            :     double draft_angle,
     286                 :            :     int draft_type,
     287                 :            :     bool switchside,
     288                 :            :     bool rigid,
     289                 :            :     bool anchor_entity=CUBIT_FALSE,
     290                 :            :     bool keep_old=CUBIT_FALSE ) const;
     291                 :            :   
     292                 :            :   virtual CubitStatus  sweep_perpendicular(
     293                 :            :     DLIList<GeometryEntity*>& ref_ent_list,
     294                 :            :     DLIList<BodySM*>& result_body_list,
     295                 :            :     double distance,
     296                 :            :     double draft_angle,
     297                 :            :     int draft_type,
     298                 :            :     bool switchside,
     299                 :            :     bool rigid,
     300                 :            :     bool anchor_entity=CUBIT_FALSE,
     301                 :            :     bool keep_old=CUBIT_FALSE ) const;
     302                 :            :   
     303                 :            :   virtual CubitStatus  sweep_rotational(
     304                 :            :     DLIList<GeometryEntity*>& ref_ent_list,
     305                 :            :     DLIList<BodySM*>& result_body_list,
     306                 :            :     const CubitVector& point,
     307                 :            :     const CubitVector& direction,
     308                 :            :     double angle,
     309                 :            :     int steps = 0,
     310                 :            :     double draft_angle = 0.0,
     311                 :            :     int draft_type = 0,
     312                 :            :     bool switchside = CUBIT_FALSE,
     313                 :            :     bool make_solid = CUBIT_FALSE,
     314                 :            :     bool rigid = CUBIT_FALSE,
     315                 :            :     bool anchor_entity=CUBIT_FALSE,
     316                 :            :     bool keep_old=CUBIT_FALSE ) const;
     317                 :            :   
     318                 :            :   virtual CubitStatus sweep_along_curve(
     319                 :            :     DLIList<GeometryEntity*>& ref_ent_list,
     320                 :            :     DLIList<BodySM*>& result_body_list,
     321                 :            :     DLIList<Curve*>& ref_edge_list,
     322                 :            :     double draft_angle = 0.0,
     323                 :            :     int draft_type = 0,
     324                 :            :     bool rigid = CUBIT_FALSE,
     325                 :            :     bool anchor_entity=CUBIT_FALSE,
     326                 :            :     bool keep_old=CUBIT_FALSE ) const;
     327                 :            : 
     328                 :            :   virtual CubitStatus sweep_to_body(
     329                 :            :     DLIList<Curve*> curve_list,
     330                 :            :     BodySM *target_body,
     331                 :            :     CubitVector distance,
     332                 :            :     DLIList<BodySM*> &new_bodies,
     333                 :            :     bool unite) const;
     334                 :            : 
     335                 :            :   virtual CubitStatus sweep_to_body(
     336                 :            :     Surface *source_surface,
     337                 :            :     BodySM *target_body,
     338                 :            :     CubitVector distance,
     339                 :            :     DLIList<BodySM*> &new_bodies) const;
     340                 :            :  
     341                 :            : 
     342                 :            :     virtual CubitStatus webcut_with_sweep_surfaces(
     343                 :            :                           DLIList<BodySM*> &blank_bodies,
     344                 :            :                           DLIList<Surface*> &surfaces,
     345                 :            :                           const CubitVector& sweep_vector,
     346                 :            :                           bool sweep_perp, 
     347                 :            :                           bool through_all,
     348                 :            :                           bool outward,
     349                 :            :                           bool up_to_next, 
     350                 :            :                           Surface *stop_surf, 
     351                 :            :                           Curve *curve_to_sweep_along, 
     352                 :            :                           DLIList<BodySM*> &neighbor_imprint_list,
     353                 :            :                           DLIList<BodySM*> &results_list,
     354                 :            :                           ImprintType imprint_type = NO_IMPRINT,
     355                 :            :                           CubitBoolean preview = false);
     356                 :            : 
     357                 :            :     virtual CubitStatus webcut_with_sweep_curves(
     358                 :            :                           DLIList<BodySM*> &blank_bodies,
     359                 :            :                           DLIList<Curve*> &curves,
     360                 :            :                           const CubitVector& sweep_vector,
     361                 :            :                           bool through_all, 
     362                 :            :                           Surface *stop_surf, 
     363                 :            :                           Curve *curve_to_sweep_along, 
     364                 :            :                           DLIList<BodySM*> &neighbor_imprint_list,
     365                 :            :                           DLIList<BodySM*> &results_list,
     366                 :            :                           ImprintType imprint_type = NO_IMPRINT,
     367                 :            :                           CubitBoolean preview = false);
     368                 :            : 
     369                 :            :     virtual CubitStatus webcut_with_sweep_curves_rotated(
     370                 :            :                           DLIList<BodySM*> &blank_bodies,
     371                 :            :                           DLIList<Curve*> &curves,
     372                 :            :                           const CubitVector &point,
     373                 :            :                           const CubitVector &sweep_axis,
     374                 :            :                           double angle,
     375                 :            :                           Surface *stop_surf, 
     376                 :            :                           DLIList<BodySM*> &neighbor_imprint_list,
     377                 :            :                           DLIList<BodySM*> &results_list,
     378                 :            :                           ImprintType imprint_type = NO_IMPRINT,
     379                 :            :                           CubitBoolean preview = false);
     380                 :            : 
     381                 :            :     virtual CubitStatus webcut_with_sweep_surfaces_rotated(
     382                 :            :                             DLIList<BodySM*> &blank_bodies,
     383                 :            :                             DLIList<Surface*> &surfaces,
     384                 :            :                             const CubitVector &point, 
     385                 :            :                             const CubitVector &sweep_axis, 
     386                 :            :                             double angle, 
     387                 :            :                             Surface *stop_surf, 
     388                 :            :                             bool up_to_next, 
     389                 :            :                             DLIList<BodySM*> &neighbor_imprint_list,
     390                 :            :                             DLIList<BodySM*> &results_list,
     391                 :            :                             ImprintType imprint_type = NO_IMPRINT,
     392                 :            :                             CubitBoolean preview = false); 
     393                 :            : 
     394                 :            :   //HEADER- Webcut-related functions
     395                 :            :   virtual CubitStatus webcut(DLIList<BodySM*>& webcut_body_list,
     396                 :            :     const CubitVector &v1,
     397                 :            :     const CubitVector &v2,
     398                 :            :     const CubitVector &v3,
     399                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     400                 :            :     DLIList<BodySM*>& results_list,
     401                 :            :     ImprintType imprint_type = NO_IMPRINT,
     402                 :            :     bool preview = false) const;
     403                 :            :   
     404                 :            :   virtual CubitStatus webcut(DLIList<BodySM*>& webcut_body_list,
     405                 :            :     BodySM const* tool_body,
     406                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     407                 :            :     DLIList<BodySM*>& results_list,
     408                 :            :     ImprintType imprint_type = NO_IMPRINT,
     409                 :            :     bool preview = false) const;
     410                 :            :   
     411                 :            :   virtual CubitStatus webcut_across_translate( DLIList<BodySM*>& body_list,
     412                 :            :     Surface* plane_surf1,
     413                 :            :     Surface* plane_surf2,
     414                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     415                 :            :     DLIList<BodySM*>& results_list,
     416                 :            :     ImprintType imprint_type = NO_IMPRINT,
     417                 :            :     bool preview = false) const;
     418                 :            :   
     419                 :            :   virtual CubitStatus webcut_with_sheet(DLIList<BodySM*> &webcut_body_list,
     420                 :            :     BodySM *sheet_body,
     421                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     422                 :            :     DLIList<BodySM*> &new_bodies,
     423                 :            :     ImprintType imprint_type = NO_IMPRINT,
     424                 :            :     bool preview = false);
     425                 :            :   
     426                 :            :   virtual CubitStatus webcut_with_extended_sheet(DLIList<BodySM*> &webcut_body_list,
     427                 :            :     DLIList<Surface*> &surface_list,
     428                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     429                 :            :     DLIList<BodySM*> &new_bodies,
     430                 :            :     int &num_cut,
     431                 :            :     ImprintType imprint_type = NO_IMPRINT,
     432                 :            :     bool preview = false);
     433                 :            :   
     434                 :            :   virtual CubitStatus webcut_with_cylinder(DLIList<BodySM*> &webcut_body_list,
     435                 :            :     double radius,
     436                 :            :     const CubitVector &axis,
     437                 :            :     const CubitVector &center,
     438                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     439                 :            :     DLIList<BodySM*>& results_list,
     440                 :            :     ImprintType imprint_type = NO_IMPRINT,
     441                 :            :     bool preview = false);
     442                 :            :   
     443                 :            :   virtual CubitStatus webcut_with_brick( DLIList<BodySM*>& webcut_body_list, 
     444                 :            :     const CubitVector &center,
     445                 :            :     const CubitVector axes[3], 
     446                 :            :     const CubitVector &extension,
     447                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     448                 :            :     DLIList<BodySM*> &results_list,
     449                 :            :     ImprintType imprint_type = NO_IMPRINT,
     450                 :            :     bool preview = false);
     451                 :            :   
     452                 :            :   virtual CubitStatus webcut_with_planar_sheet( DLIList<BodySM*>& webcut_body_list,
     453                 :            :     const CubitVector &center,
     454                 :            :     const CubitVector axes[2],
     455                 :            :     double width, double height,
     456                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     457                 :            :     DLIList<BodySM*> &results_list,
     458                 :            :     ImprintType imprint_type = NO_IMPRINT,
     459                 :            :     bool preview = false);
     460                 :            :   
     461                 :            :   virtual CubitStatus webcut_with_curve_loop(DLIList<BodySM*> &webcut_body_list,
     462                 :            :     DLIList<Curve*> &ref_edge_list,
     463                 :            :     DLIList<BodySM*>& results_list,
     464                 :            :     DLIList<BodySM*>& neighbor_imprint_list,
     465                 :            :     ImprintType imprint_type = NO_IMPRINT,
     466                 :            :     bool preview = false);
     467                 :            :   
     468                 :            :   virtual CubitStatus section( DLIList<BodySM*> &section_body_list,
     469                 :            :     const CubitVector &point_1,
     470                 :            :     const CubitVector &point_2,
     471                 :            :     const CubitVector &point_3,
     472                 :            :     DLIList<BodySM*>& new_body_list,
     473                 :            :     bool keep_normal_side,
     474                 :            :     bool keep_old = false,
     475                 :            :     bool keep_both_sides = false);
     476                 :            :   
     477                 :            :   virtual CubitStatus split_body( BodySM *body_ptr,
     478                 :            :     DLIList<BodySM*> &new_bodies );
     479                 :            : 
     480                 :            :   virtual CubitStatus separate_surfaces( DLIList<Surface*> &surf_list,
     481                 :            :                                          DLIList<BodySM*> &new_bodies );
     482                 :            :   
     483                 :            :   virtual CubitStatus reverse_body( BodySM *body_to_reverse );
     484                 :            :   
     485                 :            :   virtual CubitStatus split_periodic( BodySM *body_ptr,
     486                 :            :     BodySM *&new_body );
     487                 :            :   
     488                 :            :   virtual CubitStatus regularize_body( BodySM *body_ptr,
     489                 :            :     BodySM *&new_body_ptr );
     490                 :            :   
     491                 :            :   virtual CubitStatus regularize_entity(GeometryEntity *old_entity_ptr,  
     492                 :            :                                            BodySM *&new_body_ptr);
     493                 :            :   virtual CubitStatus test_regularize_entity( GeometryEntity *old_refentity_ptr);
     494                 :            :   
     495                 :            :   virtual CubitStatus offset_curves( DLIList<Curve*>& ref_edge_list, 
     496                 :            :                                      DLIList<Curve*>& result_curve_list,
     497                 :            :                                      double offset_distance,
     498                 :            :                                      const CubitVector& offset_direction, 
     499                 :            :                                      int gap_type = 1 );
     500                 :            :   
     501                 :            :   virtual CubitStatus scale ( BodySM *&body, const CubitVector& factors );
     502                 :            : 
     503                 :            :   virtual CubitStatus  split_curve( Curve* curve_to_split,
     504                 :            :                                                                                 const CubitVector& split_location,
     505                 :            :                                                                                 DLIList<Curve*>& created_curves );
     506                 :            :   
     507                 :            :   virtual Curve* trim_curve( Curve* trim_curve, 
     508                 :            :                              const CubitVector& trim_vector,
     509                 :            :                              const CubitVector& keep_vector,
     510                 :            :                              bool keep_old = false );
     511                 :            :   
     512                 :            :   virtual CubitStatus create_solid_bodies_from_surfs(DLIList<Surface*> &ref_face_list,
     513                 :            :                                                      DLIList<BodySM*> &new_bodies,
     514                 :            :                                                      bool keep_old = false,
     515                 :            :                                                      bool heal = true,
     516                 :            :                                                      bool sheet = false ) const;
     517                 :            :     
     518                 :            :   virtual Curve* create_arc(const CubitVector& position,
     519                 :            :                                double radius,
     520                 :            :                                double start_angle,
     521                 :            :                                double end_angle,
     522                 :            :                                CubitVector plane,
     523                 :            :                                bool preview = false  );
     524                 :            : 
     525                 :            : virtual Curve* create_arc_radius(const CubitVector &center,
     526                 :            :                                  TBPoint* ref_vertex_start,
     527                 :            :                                  TBPoint* ref_vertex_end, 
     528                 :            :                                  const CubitVector &normal,
     529                 :            :                                  double radius,
     530                 :            :                                  bool full = false,
     531                 :            :                                  bool preview = false);
     532                 :            : 
     533                 :            : 
     534                 :            :   virtual Curve* create_arc_three( TBPoint* ref_vertex1, 
     535                 :            :                                    TBPoint* ref_vertex2,
     536                 :            :                                    TBPoint* ref_vertex3, 
     537                 :            :                                    bool full = false,
     538                 :            :                                    bool preview = false  );
     539                 :            :   
     540                 :            :   virtual Curve* create_arc_three( Curve* ref_edge1, 
     541                 :            :                                    Curve* ref_edge2,
     542                 :            :                                    Curve* ref_edge3, 
     543                 :            :                                    bool full = false ,
     544                 :            :                                    bool preview = false  );
     545                 :            :   
     546                 :            :   virtual Curve* create_arc_center_edge( 
     547                 :            :                                    TBPoint* ref_vertex1, 
     548                 :            :                                    TBPoint* ref_vertex2,
     549                 :            :                                    TBPoint* ref_vertex3, 
     550                 :            :                                    const CubitVector &normal,
     551                 :            :                                    double radius = CUBIT_DBL_MAX,
     552                 :            :                                    bool full = false,
     553                 :            :                                    bool preview = false   );
     554                 :            :   
     555                 :            :   virtual CubitStatus create_curve_combine( DLIList<Curve*>& curve_list, 
     556                 :            :                                     Curve *&new_curve_ptr );
     557                 :            :     //-  Uses the solid modeller to create a new RefEdge that is a combination 
     558                 :            :     //- of the input chain of edges.  
     559                 :            :     //-
     560                 :            : 
     561                 :            :   virtual GeometryQueryEngine *get_gqe();
     562                 :            :   
     563                 :            :   virtual CubitBoolean is_modify_engine(const TopologyBridge *tb_ptr) const;
     564                 :            :   
     565                 :            :   virtual CubitStatus get_offset_intersections( 
     566                 :            :                                Curve* ref_edge1, 
     567                 :            :                                Curve* ref_edge2,
     568                 :            :                                DLIList<CubitVector>& intersection_list,
     569                 :            :                                double offset,
     570                 :            :                                bool ext_first = true );
     571                 :            :   
     572                 :            :   virtual CubitStatus get_offset_intersections( 
     573                 :            :                                Curve* ref_edge_ptr, 
     574                 :            :                                Surface* ref_face_ptr,
     575                 :            :                                DLIList<CubitVector> &intersection_list,
     576                 :            :                                double offset = 0.0,
     577                 :            :                                bool ext_surf = true );
     578                 :            :   
     579                 :            :   virtual CubitStatus surface_intersection( Surface *surface1_ptr,
     580                 :            :     Surface *surface2_ptr,
     581                 :            :     DLIList<Curve*> &inter_graph,
     582                 :            :     const double tol) const;
     583                 :            :   
     584                 :            :   virtual CubitStatus get_mid_plane( const CubitVector &point_1,
     585                 :            :     const CubitVector &point_2,
     586                 :            :     const CubitVector &point_3,
     587                 :            :     BodySM *body_to_trim_to,
     588                 :            :     BodySM *&midplane_body ) const;
     589                 :            : 
     590                 :            :   virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1,
     591                 :            :                                                Surface *surface_ptr2,
     592                 :            :                                                BodySM *body_to_trim_to,
     593                 :            :                                                BodySM *&midsurface_body ) const;
     594                 :            :   
     595                 :            :   virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1,
     596                 :            :                                                Surface *surface_ptr2,
     597                 :            :                                                BodySM *body_to_trim_to,
     598                 :            :                                                BodySM *&midsurface_body ) const;
     599                 :            :   
     600                 :            :   virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1,
     601                 :            :                                                Surface *surface_ptr2,
     602                 :            :                                                BodySM *body_to_trim_to,
     603                 :            :                                                BodySM *&midsurface_body ) const;
     604                 :            :   
     605                 :            :   virtual CubitStatus tweak_bend( DLIList<BodySM*> &bend_bodies,
     606                 :            :                                       DLIList<BodySM*> &new_bodysm_list,
     607                 :            :                                                                   CubitVector& neutral_root,
     608                 :            :                                                                   CubitVector& bend_axis,
     609                 :            :                                                                   CubitVector& bend_direction,
     610                 :            :                                                                   double radius,
     611                 :            :                                                                   double angle,
     612                 :            :                                   DLIList<CubitVector>& bend_regions,
     613                 :            :                                   double width = -1,
     614                 :            :                                   CubitBoolean center_bend = CUBIT_FALSE,
     615                 :            :                                   int num_points = 0,
     616                 :            :                                   CubitBoolean keep_old_body = CUBIT_FALSE,
     617                 :            :                                   CubitBoolean preview = CUBIT_FALSE ) const;
     618                 :            :   /**<  Bend solid bodies based on a bend radius and angle.
     619                 :            :     */
     620                 :            : 
     621                 :            :   virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list, 
     622                 :            :                                      double left_offset,
     623                 :            :                                      DLIList<BodySM*> &new_bodysm_list,
     624                 :            :                                      double right_offset = -1.0,
     625                 :            :                                      CubitBoolean keep_old_body = CUBIT_FALSE,
     626                 :            :                                      CubitBoolean preview = CUBIT_FALSE ) const;
     627                 :            :   /**<  Chamfer curves on solid bodies.  The left and right offsets are with 
     628                 :            :     *   respect to the curve direction.  If the given right offset is negative,
     629                 :            :     *   the left offset is used.  Users can preview to clarify the meaning of
     630                 :            :     *   left and right.
     631                 :            :     */
     632                 :            : 
     633                 :            :   virtual CubitStatus tweak_chamfer( DLIList<TBPoint*> &point_list, 
     634                 :            :                                      double offset1, 
     635                 :            :                                      DLIList<BodySM*> &new_bodysm_list,
     636                 :            :                                      Curve *edge1 = NULL,
     637                 :            :                                      double offset2 = -1.0,
     638                 :            :                                      Curve *edge2 = NULL,
     639                 :            :                                      double offset3 = -1.0,
     640                 :            :                                      Curve *edge3 = NULL,
     641                 :            :                                      CubitBoolean keep_old_body = CUBIT_FALSE,
     642                 :            :                                      CubitBoolean preview = CUBIT_FALSE ) const;
     643                 :            :   /**<  Chamfer vertices on solid or sheet bodies.  On a solid body there can
     644                 :            :     *   be up to 3 offsets; on a sheet body up to 2 offsets.  The offsets are
     645                 :            :     *   in the direction of the supplied edges.  If multiple vertices are 
     646                 :            :     *   supplied, only one offset value is allowed and the edges are not used.
     647                 :            :     */
     648                 :            : 
     649                 :            :   virtual CubitStatus tweak_fillet( DLIList<Curve*> &curve_list, 
     650                 :            :                                     double radius,
     651                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     652                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     653                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     654                 :            :   /**<  Create a round fillet (or blend) at the given curves on solid bodies.
     655                 :            :     */
     656                 :            : 
     657                 :            :   virtual CubitStatus tweak_fillet( Curve *curve_ptr, 
     658                 :            :                                     double start_radius,
     659                 :            :                                     double end_radius,
     660                 :            :                                     BodySM *&new_body_ptr,
     661                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     662                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     663                 :            :   /**<  Create a round fillet (or blend) at the given curve on a solid body.
     664                 :            :     *   The fillet has a variable radius from the start to the end of the curve.
     665                 :            :     */
     666                 :            : 
     667                 :            :   virtual CubitStatus tweak_fillet( DLIList<TBPoint*> &point_list, 
     668                 :            :                                     double radius,
     669                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     670                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     671                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     672                 :            :   /**<  Create a round fillet (or blend) at the given vertices on sheet bodies.
     673                 :            :     */
     674                 :            : 
     675                 :            :   virtual CubitStatus tweak_move( DLIList<Surface*> &surface_list,
     676                 :            :                                   const CubitVector &delta,
     677                 :            :                                   DLIList<BodySM*> &new_bodysm_list,
     678                 :            :                                   CubitBoolean keep_old_body = CUBIT_FALSE,
     679                 :            :                                   CubitBoolean preview = CUBIT_FALSE ) const;
     680                 :            :   /**<  Tweak specified faces of a volume or volumes along a vector.
     681                 :            :     */
     682                 :            : 
     683                 :            :   virtual CubitStatus tweak_move( DLIList<Curve*> &curve_list,
     684                 :            :                                   const CubitVector &delta,
     685                 :            :                                   DLIList<BodySM*> &new_bodysm_list,
     686                 :            :                                   CubitBoolean keep_old_body = CUBIT_FALSE,
     687                 :            :                                   CubitBoolean preview = CUBIT_FALSE ) const;
     688                 :            :   /**<  Tweak specified curves of a sheet body along a vector.
     689                 :            :     */
     690                 :            : 
     691                 :            :   virtual CubitStatus tweak_offset( DLIList<Surface*> &surface_list,
     692                 :            :                                     double offset_distance,
     693                 :            :                                     DLIList<Surface*> *add_surface_list_ptr, 
     694                 :            :                                     DLIList<double> *add_offset_list_ptr,
     695                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     696                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     697                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     698                 :            :   /**<  Tweak specified faces of a volume or volumes by offsetting those faces
     699                 :            :     *   by the offset distance(s).
     700                 :            :     */
     701                 :            : 
     702                 :            :   virtual CubitStatus tweak_offset( DLIList<Curve*> &curve_list,
     703                 :            :                                     double offset_distance,
     704                 :            :                                     DLIList<Curve*> *add_curve_list_ptr, 
     705                 :            :                                     DLIList<double> *add_offset_list_ptr,
     706                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     707                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     708                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     709                 :            :   /**<  Tweak specified curves of a sheet body or bodies by offsetting those
     710                 :            :     *   curves by the offset distance(s).
     711                 :            :     */
     712                 :            : 
     713                 :            :   virtual CubitStatus tweak_remove( DLIList<Surface*> &surface_list,
     714                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     715                 :            :                                     CubitBoolean extend_adjoining = CUBIT_TRUE,
     716                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     717                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     718                 :            :   /**<  Remove surfaces from a body or bodies and then extend the adjoining
     719                 :            :     *   surfaces to fill the gap or remove the hole.
     720                 :            :     */
     721                 :            : 
     722                 :            :   virtual CubitStatus tweak_remove( DLIList<Curve*> &curve_list,
     723                 :            :                                     DLIList<BodySM*> &new_bodysm_list, 
     724                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     725                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     726                 :            :   /**<  Remove curves from a sheet body or bodies and then extend the remaining
     727                 :            :     *   curves to fill the gap.  If an internal loop of curves is removed the
     728                 :            :     *   hole is removed.
     729                 :            :     */
     730                 :            : 
     731                 :            :   virtual CubitStatus tweak_target( DLIList<Surface*> &surface_list,
     732                 :            :                                     DLIList<Surface*> &target_surf_list,
     733                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     734                 :            :                                     CubitBoolean extend_flg = CUBIT_TRUE,
     735                 :            :                                     CubitPlane *limit_plane = NULL,
     736                 :            :                                     CubitBoolean reverse_flg = CUBIT_FALSE,
     737                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     738                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     739                 :            :   /**<  Tweak specified faces of a volume or volumes up to target surfaces.
     740                 :            :     */
     741                 :            : 
     742                 :            :   virtual CubitStatus tweak_target( DLIList<Curve*> &curve_list,
     743                 :            :                                     DLIList<Surface*> &target_surf_list, 
     744                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     745                 :            :                                     CubitBoolean extend_flg = CUBIT_TRUE,
     746                 :            :                                     CubitPlane *limit_plane = NULL,
     747                 :            :                                     CubitBoolean reverse_flg = CUBIT_FALSE,
     748                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     749                 :            :                                     CubitBoolean preview = CUBIT_FALSE,
     750                 :            :                                     double surface_area_increase_allowed = 0 ) const;
     751                 :            :   /**<  Tweak specified edges of a surface or set of surfaces (in sheet
     752                 :            :     *   bodies) up to a set of target surfaces.  This essentially extends or
     753                 :            :     *   trims the attached surfaces of the sheet body.
     754                 :            :     */
     755                 :            : 
     756                 :            :   virtual CubitStatus tweak_target( DLIList<Curve*> &curve_list,
     757                 :            :                                     DLIList<Curve*> &target_curve_list, 
     758                 :            :                                     DLIList<BodySM*> &new_bodysm_list,
     759                 :            :                                     CubitBoolean extend_flg = CUBIT_TRUE,
     760                 :            :                                     CubitPlane *limit_plane = NULL,
     761                 :            :                                     CubitBoolean reverse_flg = CUBIT_FALSE,
     762                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     763                 :            :                                     CubitBoolean preview = CUBIT_FALSE,
     764                 :            :                                     double surface_area_increase_allowed = 0 ) const;
     765                 :            :   /**<  Tweak specified edges of a sheet body or bodies up to a list of target
     766                 :            :     *   curves that are part of a sheet body.  The target is a surface created by
     767                 :            :     *   thickening the owning surfaces of the target curves.
     768                 :            :     */
     769                 :            : 
     770                 :            :   virtual CubitStatus tweak_target( TBPoint *point_ptr,
     771                 :            :                                     DLIList<Surface*> &modify_surface_list,
     772                 :            :                                     CubitVector &target_loc,
     773                 :            :                                     BodySM *&new_bodysm_ptr,
     774                 :            :                                     CubitBoolean keep_old_body = CUBIT_FALSE,
     775                 :            :                                     CubitBoolean preview = CUBIT_FALSE ) const;
     776                 :            :   /**<  Tweak specified vertex of a sheet body to a given location.  The
     777                 :            :     *   given vertex must be part of a planar surface or surfaces attached to
     778                 :            :     *   linear curves only.  The user specified which of those surfaces to
     779                 :            :     *   actually modify.  The given location will be projected to be on the
     780                 :            :     *   given planar surface(s) before being used - this projected location
     781                 :            :     *   must be the same on all surfaces.
     782                 :            :     */
     783                 :            :   
     784                 :            :   virtual CubitStatus remove_curve_slivers( BodySM *body, double lengthlimit ) const;
     785                 :            : 
     786                 :            :   virtual CubitStatus create_net_surface( DLIList<Surface*>& ref_face_list, BodySM *& new_body,
     787                 :            :                                           DLIList<DLIList<CubitVector*>*> &vec_lists_u, 
     788                 :            :                                           DLIList<DLIList<CubitVector*>*> &vec_lists_v, 
     789                 :            :                                           double net_tol = 1e-3,
     790                 :            :                                           CubitBoolean heal = CUBIT_TRUE ) const;
     791                 :            : 
     792                 :            :   virtual CubitStatus create_net_surface( DLIList<Curve*>& u_curves, DLIList<Curve*>& v_curves,
     793                 :            :                                           BodySM *& new_body,
     794                 :            :                                           double net_tol = 1e-3, 
     795                 :            :                                           CubitBoolean heal = CUBIT_TRUE ) const;
     796                 :            : 
     797                 :            :   virtual CubitStatus create_offset_surface( Surface* ref_face_ptr, BodySM*& new_body, double offset_distance ) const;
     798                 :            : 
     799                 :            :   virtual CubitStatus create_offset_sheet( DLIList<Surface*> &surface_list,
     800                 :            :                                            double offset_distance,
     801                 :            :                                            DLIList<Surface*> *add_surface_list_ptr,
     802                 :            :                                            DLIList<double> *add_offset_list_ptr,
     803                 :            :                                            DLIList<BodySM*> &new_body_list,
     804                 :            :                                            CubitBoolean preview = CUBIT_FALSE ) const;
     805                 :            :   /**< Create a sheet body (or bodies) by offsetting the given faces. The
     806                 :            :     *  optional additional face list and double list (must be same length)
     807                 :            :     *  allow different offset distances for different faces. Adjoining faces
     808                 :            :     *  are extended or trimmed to remain joined in the new sheet body.  Radial
     809                 :            :     *  faces that cannot be so offset are removed and the resulting wound
     810                 :            :     *  healed by the surrounding faces.
     811                 :            :     */
     812                 :            : 
     813                 :            :   virtual CubitStatus create_offset_body( BodySM* body_ptr, BodySM*& new_body, double offset_distance ) const;
     814                 :            : 
     815                 :            :   virtual CubitStatus create_skin_surface( DLIList<Curve*>& curves, BodySM*& new_body,
     816                 :            :                                            DLIList<Curve*>& guides) const;
     817                 :            : 
     818                 :            : 
     819                 :            : 
     820                 :            :   
     821                 :            :   virtual CubitStatus loft_surfaces_to_body( DLIList<Surface*> &surfaces,
     822                 :            :                                              DLIList<double> &takeoff_factor_list,
     823                 :            :                                              DLIList<Surface*> &takeoff_vector_surface_list,
     824                 :            :                                              DLIList<CubitVector> &surface_takeoff_vector_list,
     825                 :            :                                              DLIList<Curve*> &takeoff_vector_curve_list,
     826                 :            :                                              DLIList<CubitVector> &curve_takeoff_vector_list,
     827                 :            :                                              DLIList<Curve*> &guides,
     828                 :            :                                              DLIList<TBPoint*> &match_vertices_list,
     829                 :            :                                              BodySM*& new_body,
     830                 :            :                                              CubitBoolean global_guides,
     831                 :            :                                              CubitBoolean closed,
     832                 :            :                                              CubitBoolean show_matching_curves,
     833                 :            :                                              CubitBoolean preview
     834                 :            :                                              ) const ;
     835                 :            :   
     836                 :            :   virtual CubitStatus create_surface( DLIList<CubitVector*>& vec_list,
     837                 :            :                                       BodySM *&new_body,
     838                 :            :                                       Surface *ref_face_ptr, 
     839                 :            :                                       CubitBoolean project_points ) const;
     840                 :            : 
     841                 :            :   virtual CubitStatus create_surface( DLIList<TBPoint*> &points,
     842                 :            :                                       BodySM *&new_body,
     843                 :            :                                       Surface *on_surface ) const;
     844                 :            : 
     845                 :            :   virtual CubitStatus create_weld_surface( CubitVector &root,
     846                 :            :                                            Surface *ref_face1, double leg1, Surface *ref_face2, double leg2,
     847                 :            :                                            BodySM *&new_body ) const;
     848                 :            : 
     849                 :            :   virtual CubitStatus stitch( DLIList<BodySM*> &bodies_to_stitch,
     850                 :            :                               DLIList<BodySM*> &new_bodies,
     851                 :            :                               bool tighten_gaps,
     852                 :            :                               double tolerance )const; 
     853                 :            : 
     854                 :            : 
     855                 :            :   //--------------------------------------------------------------
     856                 :            :    //- Methods for building specific facet-based geometry entities
     857                 :            :    //--------------------------------------------------------------
     858                 :            :   CubitStatus make_facet_point( CubitPoint *thePoint,
     859                 :            :                                 TBPoint *&new_point_ptr );
     860                 :            :   CubitStatus make_facet_point( const CubitVector &location,
     861                 :            :                                 TBPoint *&new_point_ptr );
     862                 :            :     //- create a new facet point
     863                 :            : 
     864                 :            :   CubitStatus make_facet_curve( TBPoint *start_ptr,
     865                 :            :                                 TBPoint *end_ptr,
     866                 :            :                                 Curve *&new_curve_ptr,
     867                 :            :                                 CurveFacetEvalTool *eval_tool_ptr = NULL);
     868                 :            :   CubitStatus make_facet_curve( TBPoint *start_ptr,
     869                 :            :                                 TBPoint *end_ptr,
     870                 :            :                                 DLIList<CubitFacetEdge*> &edge_list,
     871                 :            :                                 DLIList<CubitPoint*> &point_list,
     872                 :            :                                 Curve *&new_curve_ptr,
     873                 :            :                                 CurveFacetEvalTool *eval_tool_ptr = NULL);
     874                 :            :    //- create a new facet curve 
     875                 :            : 
     876                 :            :   CubitStatus make_facet_coedge( Curve *curv_ptr,
     877                 :            :                                  CubitSense sense,
     878                 :            :                                  CoEdgeSM *&new_coedge_ptr );
     879                 :            :    //- create a new facet coedge
     880                 :            : 
     881                 :            :   CubitStatus make_facet_loop( DLIList<CoEdgeSM*> &coedge_list,
     882                 :            :                                LoopSM *&new_loop_ptr );
     883                 :            :    //- create a new facet loop
     884                 :            : 
     885                 :            :   CubitStatus make_facet_surface(const CubitEvaluatorData *eval_data,
     886                 :            :                                  DLIList<CubitFacet*> &facet_list,
     887                 :            :                                  DLIList<CubitPoint*> &point_list,
     888                 :            :                                  DLIList<LoopSM*> &my_loops,
     889                 :            :                                  int interp_order,
     890                 :            :                                  double min_dot,
     891                 :            :                                  Surface *&new_surface_ptr,
     892                 :            :                                  CubitBoolean use_point_addresses = CUBIT_TRUE,
     893                 :            :                                  FacetEvalTool *eval_tool_ptr = NULL,
     894                 :            :                                  std::map<FacetCurve*, FacetCurve*> *hard_line_curve_map = NULL );
     895                 :            :     //-creates a new FacetSurface given the points and facet list.
     896                 :            : 
     897                 :            :   CubitStatus make_facet_surface(DLIList<CubitQuadFacet*> &facet_list,
     898                 :            :                                  DLIList<CubitPoint*> &point_list,
     899                 :            :                                  DLIList<LoopSM*> &my_loops,
     900                 :            :                                  int interp_order,
     901                 :            :                                  double min_dot,
     902                 :            :                                  Surface *&new_surface_ptr);
     903                 :            :     //-creates a new FacetSurface given the points and quad facet list.
     904                 :            : 
     905                 :            :   CubitStatus make_facet_shell(DLIList<Surface*> &surface_list,
     906                 :            :                                ShellSM *&new_shell_ptr);
     907                 :            :     //-creates a new shell, given the list of surfaces.
     908                 :            : 
     909                 :            :   CubitStatus make_facet_lump(DLIList<ShellSM*> &shell_list,
     910                 :            :                               Lump*& new_lump_ptr);
     911                 :            :     //-creates a new lump, given the list of shells.
     912                 :            : 
     913                 :            :   CubitStatus make_facet_body(DLIList<Lump*> &lump_list,
     914                 :            :                               BodySM *&new_body_ptr);
     915                 :            :     //-creates a new body, given the list of lump.
     916                 :            : 
     917                 :            :   CubitStatus build_facet_surface( const CubitEvaluatorData **eval_data,
     918                 :            :                                    DLIList<CubitFacet *> &facet_list,
     919                 :            :                                    DLIList<CubitPoint *> &point_list,
     920                 :            :                                    double feature_angle,
     921                 :            :                                    int interp_order,
     922                 :            :                                    CubitBoolean smooth_non_manifold,
     923                 :            :                                    CubitBoolean split_surfaces,
     924                 :            :                                    DLIList<Surface *> &surface_list);
     925                 :            :   CubitStatus build_facet_surface( DLIList<CubitQuadFacet *> &qfacet_list,
     926                 :            :                                    DLIList<CubitFacet *> &tfacet_list,
     927                 :            :                                    DLIList<CubitPoint *> &point_list,
     928                 :            :                                    double feature_angle,
     929                 :            :                                    int interp_order,
     930                 :            :                                    CubitBoolean smooth_non_manifold,
     931                 :            :                                    CubitBoolean split_surfaces,
     932                 :            :                                    DLIList<Surface *> &surface_list);
     933                 :            :   CubitStatus build_facet_surface( DLIList<CubitQuadFacet *> &facet_list,
     934                 :            :                                    DLIList<CubitPoint *> &point_list,
     935                 :            :                                    double feature_angle,
     936                 :            :                                    int interp_order,
     937                 :            :                                    CubitBoolean smooth_non_manifold,
     938                 :            :                                    CubitBoolean split_surfaces,
     939                 :            :                                    DLIList<Surface *> &surface_list);
     940                 :            :     //- creates one or more new FacetSurfaces with all of its lower
     941                 :            :     //- order entities.  Use an optional feature_angle to break
     942                 :            :     //- surface
     943                 :            : 
     944                 :            :     //- Define separate CubitPoint* for the CubitFacet list and CubitQuadFacet 
     945                 :            :     //- list if they are going to create different surfaces.
     946                 :            :     //- Facets sharing the same CubitPoint* will be created into one surfaces.
     947                 :            :     //- Separate call of build_facet_surface will try to build different
     948                 :            :     //- surfaces, and won't be able to use shared CubitPoint* from other 
     949                 :            :     //- build_facet_surface call.
     950                 :            :     //- As long as facets are defined, the CubitPoint list should be left empty
     951                 :            :     
     952                 :            :   CubitStatus smooth_facets( RefFace *ref_face_ptr, int niter, CubitBoolean free_laplacian );
     953                 :            :     //- attempt to clean up facets by smoothing the points on the surface
     954                 :            :   CubitStatus create_shell_offset( BodySM *bodysm_ptr, BodySM *&new_bodysm, double offset );
     955                 :            :     // create a shell offset from body
     956                 :            :   CubitStatus improve_facets( RefFace *ref_face_ptr );
     957                 :            :     // improve the facets by local swaps
     958                 :            : 
     959                 :            :   CubitStatus build_cholla_surfaces( DLIList<CubitFacet *> facet_list,
     960                 :            :                                      DLIList<CubitPoint *> point_list,
     961                 :            :                                      double feature_angle,
     962                 :            :                                      int interp_order,
     963                 :            :                                      CubitBoolean smooth_non_manifold,
     964                 :            :                                      CubitBoolean split_surfaces,
     965                 :            :                                      ChollaEngine *&cholla_ptr );
     966                 :            : 
     967                 :            : /*  virtual CubitStatus finish_facet_Body(
     968                 :            :     GeometryType surface_type,
     969                 :            :     const CubitEvaluatorData *eval_data,
     970                 :            :     DLIList <CubitFacet *>facet_list,
     971                 :            :     DLIList <CubitPoint *>point_list,
     972                 :            :     double feature_angle,
     973                 :            :     int interp_order,
     974                 :            :     CubitBoolean smooth_non_manifold, 
     975                 :            :     CubitBoolean split_surfaces,
     976                 :            :     BodySM *&body_ptr) const;
     977                 :            : */
     978                 :            :   virtual CubitStatus finish_facet_Body( ChollaEngine *cholla_ptr,
     979                 :            :                                          const CubitEvaluatorData **eval_data,
     980                 :            :                                          double feature_angle,
     981                 :            :                                          int interp_order,
     982                 :            :                                          BodySM *&bodysm_ptr) const;
     983                 :            :   
     984                 :            :   virtual CubitStatus finish_facet_Body( DLIList<Surface*>& surfaces, DLIList<CubitSense>& surface_sense,
     985                 :            :                                          BodySM *&bodysm_ptr) const;
     986                 :            : 
     987                 :            :   void set_sphere_eval_data( ChollaEngine *cholla_ptr,
     988                 :            :                              double radius,
     989                 :            :                              CubitEvaluatorData **&eval_data ) const;
     990                 :            : 
     991                 :            :   void set_cylinder_eval_data( ChollaEngine *cholla_ptr,
     992                 :            :                                double height,
     993                 :            :                                double base_radius_xdir,
     994                 :            :                                double base_radius_ydir,
     995                 :            :                                double top_radius,
     996                 :            :                                CubitEvaluatorData **&eval_data ) const;
     997                 :            : 
     998                 :            :   // non-virtual specific functions for building facet-based geometry
     999                 :            :   // from Cholla geometry
    1000                 :            : 
    1001                 :            :   CubitStatus build_cholla_geometry(
    1002                 :            :     const CubitEvaluatorData **eval_data,
    1003                 :            :     DLIList<ChollaSurface*> &cholla_surface_list,
    1004                 :            :     DLIList<ChollaCurve*> &cholla_curve_list,
    1005                 :            :     DLIList<ChollaPoint*> &cholla_point_list,
    1006                 :            :     CubitBoolean use_feature_angle, 
    1007                 :            :     double feature_angle, 
    1008                 :            :     int interp_order,
    1009                 :            :     DLIList<Surface *> &surface_list);
    1010                 :            :     // build the CUBIT geometry based on the Cholla entity class lists
    1011                 :            : 
    1012                 :            :   CubitStatus build_cholla_point_geometry(
    1013                 :            :     DLIList<ChollaPoint*> &cholla_point_list );
    1014                 :            :     // From the cholla point list, create geometric points for each
    1015                 :            : 
    1016                 :            :   CubitStatus build_cholla_curve_geometry(
    1017                 :            :     DLIList<ChollaCurve*> &cholla_curve_list );
    1018                 :            :     // From the cholla curve list, create geometric curves for each
    1019                 :            : 
    1020                 :            :   CubitStatus build_cholla_surface_geometry(
    1021                 :            :     const CubitEvaluatorData **eval_data,
    1022                 :            :     DLIList<ChollaSurface*> &cholla_surface_list,
    1023                 :            :     int interp_order,
    1024                 :            :     double min_dot,
    1025                 :            :     DLIList<Surface *> &surface_list);
    1026                 :            :     // From the facet surface list, create geometric surface,
    1027                 :            :     // loops and coedges for each surface in the list  
    1028                 :            : 
    1029                 :            :     virtual CubitStatus tolerant_imprint(DLIList<Surface*> &surfs_in,
    1030                 :            :       DLIList<BodySM*> &new_bodysm_list) const;
    1031                 :            :     CubitStatus tolerant_imprint_surface_with_curves( Surface *surface_to_imprint,
    1032                 :            :                                                       DLIList<Curve*> &curves,
    1033                 :            :                                          DLIList<TopologyBridge*> &temporary_bridges,
    1034                 :            :                                                       BodySM *&new_body, 
    1035                 :            :                                                       DLIList<TopologyBridge*> *new_tbs = NULL,
    1036                 :            :                                                       DLIList<TopologyBridge*> *att_tbs = NULL ) const; 
    1037                 :            : 
    1038                 :            :     CubitStatus tolerant_imprint( DLIList<BodySM*> &bodies_in,
    1039                 :            :                                   DLIList<BodySM*> &new_bodies,
    1040                 :            :                                   double overlap_tol,
    1041                 :            :                                   double imprint_tol,
    1042                 :            :                                    DLIList<TopologyBridge*> *new_tbs = NULL,
    1043                 :            :                                    DLIList<TopologyBridge*> *att_tbs = NULL ) const;
    1044                 :            : 
    1045                 :          0 :   static CubitBoolean is_modify_enabled()
    1046                 :          0 :     {return modifyEnabled;}
    1047                 :            : 
    1048                 :         22 :   static void set_modify_enabled(CubitBoolean my_bool)
    1049                 :         22 :     {modifyEnabled = my_bool;}
    1050                 :            :   
    1051                 :            :       
    1052                 :            :   
    1053                 :            :   
    1054                 :            : protected:
    1055                 :            :      
    1056                 :            : private:
    1057                 :            :   
    1058                 :            :   static CubitBoolean modifyEnabled;
    1059                 :            :   
    1060                 :            :   CubitStatus build_cholla_loop_geometry(
    1061                 :            :     DLIList<ChollaCurve*> &cholla_curve_list,
    1062                 :            :     ChollaSurface *chsurf_ptr,
    1063                 :            :     DLIList<LoopSM*> &loop_list,
    1064                 :            :     int debug_draw = 0 );
    1065                 :            :     // From the cholla curve list of a surface, create geometric loops 
    1066                 :            :  
    1067                 :            :   void fillinedge( 
    1068                 :            :     int *edge, 
    1069                 :            :     int numpointsonanedge, 
    1070                 :            :     double radius, 
    1071                 :            :     std::vector<CubitPoint *>& points) const;
    1072                 :            :     //!  Put points on this edge of a triangle being refined.
    1073                 :            :     
    1074                 :            :   void refinetriangle(
    1075                 :            :     int level, 
    1076                 :            :     int numpointsonanedge, 
    1077                 :            :     int *iedge1, 
    1078                 :            :     int *iedge2, 
    1079                 :            :     int *iedge3,
    1080                 :            :     int isign1, 
    1081                 :            :     int isign2, 
    1082                 :            :     int isign3, 
    1083                 :            :     double radius, 
    1084                 :            :     std::vector<CubitPoint *>& points,
    1085                 :            :     DLIList<CubitFacet *>& facet_list) const;    
    1086                 :            :     //! add internal points and make connections for this triangle
    1087                 :            : 
    1088                 :            :   void create_facets(
    1089                 :            :       const std::vector<std::pair<SurfaceFacets*, CubitSense> >& surfaceTopology,
    1090                 :            :       const FacetPointSet& points,
    1091                 :            :       int interp_order,
    1092                 :            :       DLIList<CubitPoint*>& c_points,
    1093                 :            :       std::map<SurfaceFacets*, DLIList<CubitFacet*> >& facet_map,
    1094                 :            :       std::map<CurveFacets*, DLIList<CubitFacetEdge*> >& facet_edge_map
    1095                 :            :       );
    1096                 :            :   
    1097                 :            :   CubitStatus process_topology(SurfaceFacets* surface, CubitSense& coface_sense,
    1098                 :            :       int interp_order, const DLIList<CubitPoint*>& c_points,
    1099                 :            :       std::map<SurfaceFacets*, DLIList<CubitFacet*> >& facet_map,
    1100                 :            :       std::map<CurveFacets*, DLIList<CubitFacetEdge*> >& facet_edge_map,
    1101                 :            :       std::map<FacetShapes*, GeometryEntity*>& entity_map
    1102                 :            :       );
    1103                 :            : 
    1104                 :            :   void process_topology(CurveFacets* curve, const DLIList<CubitPoint*>& c_points,
    1105                 :            :       FacetEvalTool* eval, CubitSense sense, 
    1106                 :            :       std::map<CurveFacets*, DLIList<CubitFacetEdge*> >& facet_edge_map,
    1107                 :            :       std::map<FacetShapes*, GeometryEntity*>& entity_map);
    1108                 :            : 
    1109                 :            : } ;
    1110                 :            : 
    1111                 :            : #endif

Generated by: LCOV version 1.11