LCOV - code coverage report
Current view: top level - geom/virtual/cgm - CompositeEngine.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 1 1 100.0 %
Date: 2020-06-30 00:58:45 Functions: 1 1 100.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : #ifndef COMPOSITE_ENGINE_HPP
       2                 :            : #define COMPOSITE_ENGINE_HPP
       3                 :            : 
       4                 :            : #include "CubitDefines.h"
       5                 :            : #include "GeometryDefines.h"
       6                 :            : #include "CubitString.hpp"
       7                 :            : #include <map>
       8                 :            : #include "DLIList.hpp"
       9                 :            : #include "IntermediateGeomEngine.hpp"
      10                 :            : #include "VGDefines.h"
      11                 :            : #include "TopologyBridge.hpp"
      12                 :            : 
      13                 :            : class TBPoint;
      14                 :            : class Curve;
      15                 :            : class Surface;
      16                 :            : class Lump;
      17                 :            : 
      18                 :            : class BodySM;
      19                 :            : class ShellSM;
      20                 :            : class LoopSM;
      21                 :            : class CoEdgeSM;
      22                 :            : 
      23                 :            : class CompositePoint;
      24                 :            : class CompositeCurve;
      25                 :            : class CompositeSurface;
      26                 :            : class CompositeLump;
      27                 :            : class CompositeBody;
      28                 :            : class CompositeCoEdge;
      29                 :            : class CompositeLoop;
      30                 :            : class CompositeShell;
      31                 :            : class Body;
      32                 :            : 
      33                 :            : class GeometryEntity;
      34                 :            : class TopologyBridge;
      35                 :            : class CubitSimpleAttrib;
      36                 :            : class CubitVector;
      37                 :            : class CubitTransformMatrix;
      38                 :            : 
      39                 :            : class CompositeEngine : public IntermediateGeomEngine
      40                 :            : {
      41                 :            :         public:
      42                 :            :     void get_all_curves_and_points(DLIList<TopologyBridge*> &tb_list,
      43                 :            :                                    DLIList<Curve*> &curves,
      44                 :            :                                    DLIList<TBPoint*> &points);
      45                 :            :     bool is_composite(TBOwner *bridge_owner);
      46                 :            :     bool is_composite(TopologyBridge *bridge);
      47                 :            :     bool is_partition(TBOwner *bridge_owner);
      48                 :            : 
      49                 :            :     virtual void remove_imprint_attributes_after_modify
      50                 :            :                                 ( DLIList<BodySM*> &old_sms,
      51                 :            :                                 DLIList<BodySM*> &new_sms );
      52                 :            :     virtual void push_named_attributes_to_curves_and_points
      53                 :            :                      ( DLIList<TopologyBridge*> &tb_list, const char *name_in);
      54                 :            :     virtual void push_imprint_attributes_before_modify
      55                 :            :                      ( DLIList<BodySM*> &body_sms );
      56                 :            :     virtual void attribute_after_imprinting(DLIList<TopologyBridge*> &tb_list,
      57                 :            :                                             DLIList<Body*> &old_bodies);
      58                 :            : 
      59                 :            :     // This is a copy of the function in MergeTool with the difference that it
      60                 :            :     // accepts a layer flag to dictate at which level the topology is traversed
      61                 :            :     // (solid modeler level or virtual level).
      62                 :            :     CubitBoolean about_spatially_equal( Curve *curve_1, Curve *curve_2,
      63                 :            :                                                   CubitSense &relative_sense, 
      64                 :            :                                                   double tolerance_factor,
      65                 :            :                                                   int layer = TopologyBridge::MAX_TB_LAYER);
      66                 :            :     virtual void remove_attributes_from_unmodifed_virtual(DLIList<TopologyBridge*> &bridges);
      67                 :            : 
      68                 :            :     virtual ~CompositeEngine();
      69                 :            :         
      70                 :            :     static CompositeEngine& instance();
      71                 :            :     static void delete_instance();
      72                 :            : 
      73                 :       3364 :     int level() const { return COMPOSITE_LAYER; }
      74                 :            :                 
      75                 :            :     CubitStatus import_geometry( DLIList<TopologyBridge*>& imported_geometry );
      76                 :            :       //- Recreate saved composite geometry and update the passed
      77                 :            :       //- list.
      78                 :            : 
      79                 :            :     int is_hidden(TopologyBridge *tb);
      80                 :            :     
      81                 :            :     CubitStatus export_geometry( DLIList<TopologyBridge*>& geometry_to_save );
      82                 :            :       //- Save composite geometry and update the passed list such
      83                 :            :       //- that it contains the underlying real geometry.
      84                 :            :                 
      85                 :            :     CompositeCurve* composite( Curve* survivor, 
      86                 :            :                                Curve* dead,
      87                 :            :                                TBPoint* keep_point = 0,
      88                 :            :                                bool remove_partitions = false );
      89                 :            :       //- Combine two curves.  The curves share both end vertices,
      90                 :            :       //- the retained vertex can be specified in keep_point.
      91                 :            :       
      92                 :            :     CompositePoint* stitch_points( TBPoint* point1, TBPoint* point2 );
      93                 :            :     CompositeCurve* stitch_curves( Curve* curve1, Curve* curve2 );
      94                 :            :     CompositeSurface* stitch_surfaces( Surface* surf, Surface* surf2 );
      95                 :            :     
      96                 :            :     CompositeCurve* remove_point( TBPoint* dead_point,
      97                 :            :                                   bool remove_partitions = false,
      98                 :            :                                   Curve* survivor = 0 );
      99                 :            :       //- Create a composite curve by removing the specified TBPoint.
     100                 :            :                                     
     101                 :            :                                     
     102                 :            :     CompositeSurface* remove_curve( Curve* dead_curve,
     103                 :            :                                     bool remove_partitions = false,
     104                 :            :                                     Surface* survivor = 0 );
     105                 :            :       //- Create a composite surface by removing the specified Curve
     106                 :            :     
     107                 :            :     CompositeLump* remove_surface( Surface* dead_surf,
     108                 :            :                                    Surface* stitch_partner = 0,
     109                 :            :                                    bool remove_partitions = false );
     110                 :            :       //- Create a composite lump by removing the specified Surface.
     111                 :            :       //- Note:  If stitch_partner is non-null, you need to call
     112                 :            :       //-        combine_bodies on the owning bodies first.
     113                 :            :                                    
     114                 :            :     CompositeBody* combine_bodies( BodySM* body1, BodySM* body2 );
     115                 :            :       //- Combine two BodySMs into one Composite Body.
     116                 :            :     
     117                 :            :     CubitStatus split_body( CompositeBody* body_to_split,
     118                 :            :                             DLIList<BodySM*>& resulting_bodies );
     119                 :            :       //- Split a CompositeBody into several Bodies 
     120                 :            :       //- as permissible by common child topology and 
     121                 :            :       //- existing real Bodies.
     122                 :            :     
     123                 :            :     CubitStatus restore_point( TBPoint* point );
     124                 :            :       //- Split a composite curve by restoring the
     125                 :            :       //- passed, previously removed TBPoint.
     126                 :            :     
     127                 :            :     CubitStatus restore_curve( Curve* curve );
     128                 :            :       //- Split a composite surface by restoring the
     129                 :            :       //- passed, previously removed Curve.
     130                 :            :     
     131                 :            :     CubitStatus restore_surface( Surface* surface, Surface*& stitch_parnter );
     132                 :            :       //- Split a composite lump by restoring the
     133                 :            :       //- passed, previously removed surface.
     134                 :            :       
     135                 :            : /*      
     136                 :            :     static void fix_up_query_results( DLIList<TopologyBridge*>& list,
     137                 :            :                                       bool keep_hidden_entities = false );
     138                 :            :       //- Update TB-level query results obtained from calling 
     139                 :            :       //- get_parents/children_virt such that the results are at the
     140                 :            :       //- "composite level" of the TB graph.
     141                 :            : */    
     142                 :            :     static CubitSimpleAttrib
     143                 :            :     find_attribute_by_name( TopologyBridge* bridge, const CubitString name );     
     144                 :            :       //- Find the attribute with the specified name.
     145                 :            :       //- Caller is responsible for freeing the returned, heap-allocated
     146                 :            :       //- CubitSimpleAttrib object.
     147                 :            :       
     148                 :            :     CompositePoint* replace_point( TBPoint* dead_point );
     149                 :            :     CompositeCurve* replace_curve( Curve* dead_curve );
     150                 :            :     CompositeSurface* replace_surface( Surface* surface );
     151                 :            :     CompositeLump* replace_lump( Lump* lump );
     152                 :            :     CompositeBody* replace_body( BodySM* body );
     153                 :            :       //- These methods are public for use by other clases internal
     154                 :            :       //- to the VG code.  
     155                 :            :       
     156                 :            :       /**************** To be called by PartitionEngine *****************/
     157                 :            :       
     158                 :            :     TBPoint* insert_point(CompositeCurve* curve, double u);
     159                 :            :       //- Partition a composite curve.
     160                 :            :       
     161                 :            :     TBPoint* insert_point_curve( CompositeSurface* surface,
     162                 :            :                                const CubitVector& position );
     163                 :            :     
     164                 :            :     CubitStatus insert_curve( DLIList<Surface*>& surfaces,
     165                 :            :                               DLIList<CubitVector*>& polyline,
     166                 :            :                               DLIList<Surface*>& new_surfaces,
     167                 :            :                               DLIList<Curve*>& new_curves );
     168                 :            : 
     169                 :            :     void notify_deactivated (CompositeBody* body);
     170                 :            :     void notify_deactivated (CompositeLump* volume);
     171                 :            :     void notify_deactivated (CompositeSurface* surface);
     172                 :            :     void notify_deactivated (CompositeCurve* curve);
     173                 :            :     void notify_deactivated (CompositePoint* point);
     174                 :            :     void clean_out_deactivated_geometry();
     175                 :            : 
     176                 :            :     CubitStatus restore_point_in_curve( TBPoint* point );
     177                 :            :       //- Restore a point hidden by a curve, splitting the
     178                 :            :       //- curve.
     179                 :            :       
     180                 :            :     CompositeCurve* restore_point_in_surface( TBPoint* point );
     181                 :            :       //- Restore a point hidden by a surface, creating a 
     182                 :            :       //- point-curve.
     183                 :            : 
     184                 :            : 
     185                 :            :     CubitStatus translate( CompositeBody* body, const CubitVector& delta );
     186                 :            :     CubitStatus rotate( CompositeBody* body, const CubitVector& axis, double degrees );
     187                 :            :     CubitStatus scale( CompositeBody* body, const CubitVector& factors );
     188                 :            :     CubitStatus reflect( CompositeBody* body, const CubitVector& axis );
     189                 :            :     CubitStatus restore_transform( CompositeBody* body );
     190                 :            :     
     191                 :            :     CubitStatus translate( CompositeSurface* surface, const CubitVector& delta );
     192                 :            :     CubitStatus rotate( CompositeSurface* surface, const CubitVector& axis, double degrees );
     193                 :            :     CubitStatus scale( CompositeSurface* surface, const CubitVector& factors );
     194                 :            :     CubitStatus reflect( CompositeSurface* surface, const CubitVector& axis );
     195                 :            :     
     196                 :            :     CubitStatus translate( CompositeCurve* curve, const CubitVector& delta );
     197                 :            :     CubitStatus rotate( CompositeCurve* curve, const CubitVector& axis, double degrees );
     198                 :            :     CubitStatus scale( CompositeCurve* curve, const CubitVector& factors );
     199                 :            :     CubitStatus reflect( CompositeCurve* curve, const CubitVector& axis );
     200                 :            : 
     201                 :            :     CubitStatus notify_transform( TopologyBridge* bridge,
     202                 :            :                                   const CubitTransformMatrix& xform );
     203                 :            : 
     204                 :            :     static void strip_attributes( TopologyBridge* bridge );
     205                 :            :       // remove all attributes related to composite geometry
     206                 :            :       // from passed bridge.
     207                 :            : 
     208                 :            :     void remove_attributes( DLIList<TopologyBridge*> &bridge_list );
     209                 :            :       //remove Composite attributes off of topology bridges
     210                 :            :     virtual void remove_modified(DLIList<Surface*> &all_surfs,
     211                 :            :       DLIList<Curve*> &all_curves, DLIList<TBPoint*> &all_pts);
     212                 :            : 
     213                 :            :     void get_tbs_with_bridge_manager_as_owner( TopologyBridge *source_bridge, 
     214                 :            :                                                DLIList<TopologyBridge*> &tbs );
     215                 :            :     
     216                 :            :     
     217                 :            :   protected:
     218                 :            :         
     219                 :            :     TBPoint* remove_composite( CompositePoint* point );
     220                 :            :     Curve* remove_composite( CompositeCurve* composite );
     221                 :            :     Surface* remove_composite( CompositeSurface* composite );
     222                 :            :     Lump* remove_composite( CompositeLump* composite );
     223                 :            :     BodySM* remove_composite( CompositeBody* composite );
     224                 :            :     
     225                 :            :     CubitStatus remove_partition_point( CompositePoint* point_owner );
     226                 :            :     CubitStatus remove_partition_curves( CompositeCurve* curve_owner );
     227                 :            :     
     228                 :            :     CompositePoint* destroy_point_curve( CompositeCurve* curve );
     229                 :            :     
     230                 :            :     CompositeCurve* combine( CompositeCurve* curve1,
     231                 :            :                              CompositeCurve* curve2,
     232                 :            :                              CompositePoint* keep_point = 0,
     233                 :            :                              bool remove_partitions = false );
     234                 :            :     CubitStatus split( CompositeCurve* curve, int after_index,
     235                 :            :                        Curve*& result1, Curve*& resutl2 );
     236                 :            :                        
     237                 :            :       // Shell modification helpers for composite lump creation
     238                 :            :     CompositeShell* split_shell( CompositeShell* shell );
     239                 :            :     void insert_nonmanifold_surfaces( DLIList<CompositeSurface*>& surfs,
     240                 :            :                                       CompositeShell* shell1,
     241                 :            :                                       CompositeShell* shell2 );
     242                 :            :     CubitStatus inside_shell( CompositeShell* const shell,
     243                 :            :                               CompositeSurface* const surf,
     244                 :            :                               bool& result );
     245                 :            :     
     246                 :            :     CubitStatus create_composites( DLIList<BodySM*>& );
     247                 :            :     CubitStatus create_composites( DLIList<Surface*>& );
     248                 :            :     CubitStatus create_composites( DLIList<Curve*>& );
     249                 :            :     CubitStatus create_composites( DLIList<TBPoint*>& );
     250                 :            :       //- Methods called by import(..) to re-create
     251                 :            :       //- composites from saved attributes.
     252                 :            :       
     253                 :            :     CubitStatus save( CompositePoint* );
     254                 :            :     CubitStatus save( CompositeCurve* );
     255                 :            :     CubitStatus save( CompositeSurface* );
     256                 :            :     CubitStatus save( CompositeLump* );
     257                 :            :     CubitStatus save( CompositeBody* );
     258                 :            :     
     259                 :            :     static void append_attrib( TopologyBridge* bridge, 
     260                 :            :                                const CubitSimpleAttrib& attrib );
     261                 :            :     
     262                 :            :     
     263                 :            :     static CubitStatus find_coedges( CompositeSurface* surface,
     264                 :            :                                      CompositeCurve* curve,
     265                 :            :                                      CompositePoint* point,
     266                 :            :                                      CompositeCoEdge*& previous,
     267                 :            :                                      CompositeCoEdge*& next );
     268                 :            :     static CompositeCoEdge* find_next_point_coedge( 
     269                 :            :                                      CompositeSurface* const surface,
     270                 :            :                                      CoEdgeSM* const coedge,
     271                 :            :                                      CompositePoint* point,
     272                 :            :                                      DLIList<CompositeCoEdge*>& point_coedges );
     273                 :            :     
     274                 :            :     static CompositeEngine* instance_;
     275                 :            :                 
     276                 :            :   private:
     277                 :            :     
     278                 :            :     CompositeEngine();
     279                 :            :   
     280                 :            :     CompositeSurface* split_surface( CompositeSurface* surf_to_split,
     281                 :            :                                      CompositeLoop* loop_on_surf,
     282                 :            :                                      CompositeLoop* new_loop );
     283                 :            :     
     284                 :            :     CompositeLump* split_lump( CompositeShell* shell_to_split );
     285                 :            :       // If a shell had a previously-hidden surface inserted into
     286                 :            :       // it due to the un-hiding of that surface, test if the
     287                 :            :       // shell is split by the surface, and if so, split the shell
     288                 :            :       // and corresponding lump.  
     289                 :            :     void process_curves_after_imprint(Curve *att_bridge, 
     290                 :            :                                                    Curve *other_bridge,
     291                 :            :                                                    DLIList<BodySM*> &new_sms);
     292                 :            :     void process_points_after_imprint(TBPoint *att_bridge, 
     293                 :            :                                                    TBPoint *other_bridge,
     294                 :            :                                                    DLIList<BodySM*> &new_sms);
     295                 :            :     
     296                 :            :     DLIList<TopologyBridge*> deactivatedList;
     297                 :            : };
     298                 :            : 
     299                 :            : #endif

Generated by: LCOV version 1.11