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

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : CompositeSurface.hpp
       3                 :            : //
       4                 :            : // Purpose       : A class for composited surface geometry
       5                 :            : //
       6                 :            : // Special Notes : 
       7                 :            : // 
       8                 :            : // Creator       : Jason Kraftcheck
       9                 :            : //
      10                 :            : // Creation Date : 03/10/98
      11                 :            : //
      12                 :            : // Owner         : Jason Kraftcheck
      13                 :            : //-------------------------------------------------------------------------
      14                 :            : 
      15                 :            : #ifndef COMPOSITE_SURFACE_HPP
      16                 :            : #define COMPOSITE_SURFACE_HPP
      17                 :            : 
      18                 :            : #include "VGDefines.h"
      19                 :            : #include "CompositeGeom.hpp"
      20                 :            : #include "Surface.hpp"
      21                 :            : #include "TBOwner.hpp"
      22                 :            : #include "HiddenEntitySet.hpp"
      23                 :            : #include "CompositeLoop.hpp"
      24                 :            : #include "CompositeCoSurf.hpp"
      25                 :            : 
      26                 :            : class CompositeCoSurf;
      27                 :            : class CompositeEngine;
      28                 :            : class CompositePoint;
      29                 :            : class CompositeCurve;
      30                 :            : class CompositeShell;
      31                 :            : class CompositeLump;
      32                 :            : class CompSurfFacets;
      33                 :            : class GMem;
      34                 :            : 
      35                 :            : class CompositeSurface: public Surface, public TBOwner
      36                 :            : {
      37                 :            :   friend class CompositeEngine;
      38                 :            : 
      39                 :            : public:
      40                 :            :   CompositeSurface( Surface* surf_ptr );
      41                 :            :   CompositeSurface( CompositeGeom* geom_ptr );
      42                 :            :   //- Constructor 
      43                 :            :                 
      44                 :            :   virtual ~CompositeSurface();
      45                 :            :   //- Destructor
      46                 :            :         
      47                 :            :   //CubitStatus add( Surface* surface, CubitSense relative_sense );
      48                 :            :   //CubitStatus remove( Surface* surface );     
      49                 :            :   void get_ignored_surfs(DLIList<Surface*> &surfs);
      50                 :            :   int num_surfs() const;
      51                 :            :   int index_of( Surface* surface ) const;
      52                 :            :   void update();
      53                 :            :   Surface* get_surface( int index ) const;
      54                 :            :   CubitSense get_sense( int index ) const;
      55                 :            :   Surface* remove_surface( int index );
      56                 :            :   void ignore_surface(int surface_id);
      57                 :            :   void ignore_surface(Surface *surf);
      58                 :            :   void unignore_surface(int surface_id);
      59                 :            :   CompositeLoop* first_loop() const;
      60                 :            :   CompositeLoop* next_loop( CompositeLoop* after_this = 0 ) const;
      61                 :            :   CubitStatus add( CompositeLoop* loop );
      62                 :            :   CubitStatus remove( CompositeLoop* loop );
      63                 :            :   
      64                 :            :   CubitStatus add( CompositeCoSurf* cosurf );
      65                 :            :   CubitStatus remove( CompositeCoSurf* cosurf );
      66                 :            :   
      67                 :            :   CompositeCoSurf* next_co_surface( CompositeCoSurf* prev = 0 ) const;
      68                 :            :   
      69                 :            :   CompositeCoSurf* find_first( CompositeShell* shell ) const;
      70                 :            :     // Get the first CoSurface connecting this surface w/ the passed shell
      71                 :            :   CompositeCoSurf* find_first( CompositeLump* lump ) const;
      72                 :            :     // Get the first CoSurface connecting this surface w/ a
      73                 :            :     // shell owned by the passed volume
      74                 :            :   CompositeCoSurf* find_next( CompositeCoSurf* cosurf ) const;
      75                 :            :     // Get the next CoSurface after the passed CoSurface and
      76                 :            :     // with the same Shell as the passed CoSurface.
      77                 :            :   
      78                 :            :   void get_curves( DLIList<CompositeCurve*>& curves );
      79                 :            :   
      80                 :            :   HiddenEntitySet& hidden_entities();
      81                 :            :   bool has_hidden_entities() const;
      82                 :            : 
      83                 :            :   CompositeSurface* split( VGArray<int>& indices_to_move );
      84                 :            :   CubitStatus combine( CompositeSurface* dead_surface );
      85                 :            : 
      86                 :            :   CubitStatus stitch( CompositeSurface* stitch_partner );
      87                 :            :   CompositeSurface* unstitch( );
      88                 :          0 :   CompositeSurface* get_stitch_partner() const
      89                 :          0 :     { return stitchPartner; }
      90                 :            :   
      91                 :            : 
      92                 :            :   /************************************************ 
      93                 :            :    **** Methods Inhereted from GeometryEntity ***** 
      94                 :            :    ************************************************/
      95                 :            :   CubitBox bounding_box() const;
      96                 :            :   double measure();
      97                 :            :   GeometryQueryEngine* get_geometry_query_engine() const;
      98                 :            :   GeometryType geometry_type();
      99                 :            : 
     100                 :            : 
     101                 :            :   /************************************************ 
     102                 :            :    ******** Methods Inhereted from TBOwner ******** 
     103                 :            :    ************************************************/
     104                 :            :   CubitStatus remove_bridge( TopologyBridge* bridge );
     105                 :            :   CubitStatus swap_bridge( TopologyBridge* old_tb, TopologyBridge* new_tb,
     106                 :            :                            bool reversed );
     107                 :            :   CubitBoolean contains_bridge( TopologyBridge* bridge ) const;
     108                 :            :   void notify_reversed( TopologyBridge* bridge );
     109                 :            :   void notify_split( TopologyBridge* new_bridge, TopologyBridge* old_bridge );
     110                 :            :   void notify_topology_modified( TopologyBridge* bridge );
     111                 :            : 
     112                 :            :   /************************************************ 
     113                 :            :    **** Methods Inhereted from TopologyBridge ***** 
     114                 :            :    ************************************************/
     115                 :            :   void append_simple_attribute_virt( const CubitSimpleAttrib& simple_attrib_ptr );
     116                 :            :   void remove_simple_attribute_virt( const CubitSimpleAttrib& simple_attrib_ptr );
     117                 :            :   void remove_all_simple_attribute_virt();
     118                 :            :   CubitStatus get_simple_attribute( DLIList<CubitSimpleAttrib>& attrib_list );
     119                 :            :   CubitStatus get_simple_attribute( const CubitString& name,
     120                 :            :                                     DLIList<CubitSimpleAttrib>& attrib_list );
     121                 :            :   
     122                 :            : 
     123                 :            :   void get_parents_virt( DLIList<TopologyBridge*>& parents );
     124                 :            :   void get_children_virt( DLIList<TopologyBridge*>& children );
     125                 :          0 :   int layer() const { return COMPOSITE_LAYER; }
     126                 :            : 
     127                 :            :   /********************************************************** 
     128                 :            :    **** Methods Inhereted from Surface, and implemented ***** 
     129                 :            :    **********************************************************/
     130                 :            :   virtual CubitSense get_shell_sense( ShellSM* shell_ptr ) const;
     131                 :            :    
     132                 :            :   virtual void closest_point_trimmed( CubitVector from_point, 
     133                 :            :                                       CubitVector& result );
     134                 :            :   virtual CubitStatus get_point_normal( CubitVector& origin, 
     135                 :            :                                         CubitVector& normal );
     136                 :            : 
     137                 :            :   virtual CubitStatus closest_point_uv_guess(  
     138                 :            :       CubitVector const& location,
     139                 :            :       double &u, double &v,
     140                 :            :       CubitVector* closest_location = NULL,
     141                 :            :       CubitVector* unit_normal = NULL );
     142                 :            : 
     143                 :            :   virtual CubitStatus evaluate( double u, double v,
     144                 :            :                                 CubitVector *position,                                   
     145                 :            :                                 CubitVector *normal,
     146                 :            :                                 CubitVector *curvature1,
     147                 :            :                                 CubitVector *curvature2 );
     148                 :            : 
     149                 :            :   virtual CubitStatus get_projected_distance_on_surface( CubitVector *pos1,
     150                 :            :                                                          CubitVector *pos2, 
     151                 :            :                                                          double &distance );
     152                 :            : 
     153                 :            :   virtual CubitStatus closest_point( CubitVector const& location,
     154                 :            :                                      CubitVector* closest_location = NULL,
     155                 :            :                                      CubitVector* unit_normal = NULL,
     156                 :            :                                      CubitVector* curvature1 = NULL,
     157                 :            :                                      CubitVector* curvature2 = NULL );
     158                 :            : 
     159                 :            :   virtual CubitStatus closest_point_along_vector(CubitVector& from_point, 
     160                 :            :                                          CubitVector& along_vector,
     161                 :            :                                          CubitVector& point_on_surface);
     162                 :            : 
     163                 :            :   virtual CubitStatus principal_curvatures( CubitVector const& location,
     164                 :            :                                             double& curvature_1, 
     165                 :            :                                             double& curvature_2,
     166                 :            :                                             CubitVector* closest_location );
     167                 :            :   virtual CubitBoolean is_parametric();
     168                 :            :   virtual CubitBoolean is_position_on(CubitVector& position);
     169                 :            :   virtual CubitPointContainment point_containment( const CubitVector &point );
     170                 :            :   virtual CubitPointContainment point_containment( double u, double v );
     171                 :            : //  virtual CubitPointContainment point_containment( CubitVector &point, 
     172                 :            : //                                                   double u, double v );
     173                 :            :   virtual CubitSense get_geometry_sense();
     174                 :            :   virtual void reverse_sense();
     175                 :            :                 
     176                 :            : 
     177                 :            :   /**************************************************************
     178                 :            :    **** Methods Inhereted from Surface, and not implemented ***** 
     179                 :            :    **************************************************************/
     180                 :            :   virtual CubitVector position_from_u_v( double u, double v );
     181                 :            :   virtual CubitStatus u_v_from_position( CubitVector const& position, 
     182                 :            :                                          double& u, double& v,
     183                 :            :                                          CubitVector* closest_point );
     184                 :            :   virtual CubitBoolean is_periodic();
     185                 :            :   virtual CubitBoolean is_periodic_in_U( double& period );
     186                 :            :   virtual CubitBoolean is_periodic_in_V( double& period );
     187                 :            :   virtual CubitBoolean is_singular_in_U( double u_value );
     188                 :            :   virtual CubitBoolean is_singular_in_V( double v_value );
     189                 :            :   virtual CubitBoolean is_closed_in_U();
     190                 :            :   virtual CubitBoolean is_closed_in_V();
     191                 :            :   virtual CubitStatus uv_derivitives( double u, double v,
     192                 :            :                                       CubitVector& du, 
     193                 :            :                                       CubitVector& dv );
     194                 :            :   virtual CubitBoolean get_param_range_U( double& lower, double& upper );
     195                 :            :   virtual CubitBoolean get_param_range_V( double& lower, double& upper );
     196                 :            :                 
     197                 :            :   virtual CubitStatus get_sphere_params( CubitVector &center,
     198                 :            :                                          double &radius ) const;
     199                 :            :     //- Only valid for spherical surfaces
     200                 :            :     //O center
     201                 :            :     //O- The center of the sphere
     202                 :            :     //O radius
     203                 :            :     //O- The radius of the sphere
     204                 :            : 
     205                 :            :   virtual CubitStatus get_cone_params( CubitVector &center,
     206                 :            :                                        CubitVector &normal,
     207                 :            :                                        CubitVector &major_axis,
     208                 :            :                                        double &radius_ratio,
     209                 :            :                                        double &sine_angle,
     210                 :            :                                        double &cos_angle ) const;
     211                 :            :     //- Only valid for conical surfaces.  Cylinders are a special case of conicals.
     212                 :            :     //O center
     213                 :            :     //O- 
     214                 :            :     //O normal
     215                 :            :     //O- 
     216                 :            :     //O major_axis
     217                 :            :     //O- 
     218                 :            :     //O radius_ratio
     219                 :            :     //O- 
     220                 :            :     //O sine_angle
     221                 :            :     //O- 
     222                 :            :     //O cos_angle
     223                 :            :     //O- 
     224                 :            : 
     225                 :            :     virtual CubitStatus get_torus_params( CubitVector &center,
     226                 :            :                                         CubitVector &normal,
     227                 :            :                                         double &major_radius,
     228                 :            :                                         double &minor_radius ) const;
     229                 :            :     //- Only valid for torus surfaces.
     230                 :            :     //O center
     231                 :            :     //O- 
     232                 :            :     //O normal
     233                 :            :     //O- 
     234                 :            :     //O major_radius
     235                 :            :     //O- 
     236                 :            :     //O minor_radius
     237                 :            :     //O- 
     238                 :            : 
     239                 :            :   virtual CubitStatus get_nurb_params( bool &rational,
     240                 :            :                                        int &degree_u,
     241                 :            :                                        int &degree_v,
     242                 :            :                                        int &num_cntrl_pts_u,
     243                 :            :                                        int &num_cntrl_pts_v,
     244                 :            :                                        DLIList<CubitVector> &cntrl_pts,
     245                 :            :                                        DLIList<double> &weights,
     246                 :            :                                        DLIList<double> &u_knots,
     247                 :            :                                        DLIList<double> &v_knots ) const;
     248                 :            :   //- Only valid for nurbs surfaces
     249                 :            :   //O rational
     250                 :            :   //O-   True if the nurb is rational
     251                 :            :   //O degree_u
     252                 :            :   //O-   The degree of the nurb in the u direction
     253                 :            :   //O degree_v
     254                 :            :   //O-   The degree of the nurb in the v direction
     255                 :            :   //O num_cntrl_pts_u
     256                 :            :   //O-   Number of control points in the u direction
     257                 :            :   //O num_cntrl_pts_v
     258                 :            :   //O-   Number of control points in the v direction
     259                 :            :   //O cntrl_pts
     260                 :            :   //O-   The control points stored as
     261                 :            :   //O-           cntrl_pts[0                ] = pt[u=0][v=0]
     262                 :            :   //O-           cntrl_pts[1                ] = pt[u=1][v=0]
     263                 :            :   //O-               ...
     264                 :            :   //O-           cntrl_pts[num_cntrl_pts_u-1] = pt[u=?][v=0]
     265                 :            :   //O-           cntrl_pts[num_cntrl_pts_u  ] = pt[u=0][v=1]
     266                 :            :   //O-               ...
     267                 :            :   //O weights
     268                 :            :   //O-   If rational, weights for each control point, stored in the same
     269                 :            :   //O-   order as the control points.  No weights are returned if
     270                 :            :   //O-   rational == false
     271                 :            :   //O u_knots
     272                 :            :   //O-   knot vector in the u direction
     273                 :            :   //O v_knots
     274                 :            :   //O-   knot vector in the v direction
     275                 :            : 
     276                 :            :   void get_hidden_curves( DLIList<Curve*>& curves );
     277                 :            :   
     278                 :            :   void print_debug_info( const char* line_prefix = 0, bool brief = false );
     279                 :            :                          
     280                 :            :   int closest_underlying_surface( const CubitVector& position );
     281                 :            :   
     282                 :            :   static void print_cpt_stats();
     283                 :            :   static void reset_cpt_stats();
     284                 :            :   
     285                 :          0 :   void read_attributes() { compGeom->read_attributes(); }
     286                 :          0 :   void write_attributes() { compGeom->write_attributes(); }
     287                 :            :   
     288                 :            :   
     289                 :            :   CubitStatus get_graphics( GMem& gmem );
     290                 :            : 
     291                 :            :   // handles transformation of composite surface
     292                 :            :   // child loops, coedges, etc. must be handled separately
     293                 :            :   void notify_transformed();
     294                 :            :   
     295                 :            : protected:
     296                 :            :   
     297                 :            :   void update_facet_tool();
     298                 :            :   void update_facets_to_ignore();
     299                 :            :   CubitStatus closest_trimmed( int underlying_surface,
     300                 :            :                                const CubitVector& position, 
     301                 :            :                                CubitVector& result );
     302                 :            :         
     303                 :            :   void update_modified( Surface* modified_surface, 
     304                 :            :                         DLIList<CompositeCurve*>& new_curves );
     305                 :            :   void update_modified();
     306                 :            :   bool     is_dead_coedge( CompositeCoEdge* coedge );
     307                 :            :   void remove_dead_coedge( CompositeCoEdge* coedge );
     308                 :            : 
     309                 :            : private:
     310                 :            :   int HadBridgeRemoved;
     311                 :            : 
     312                 :            :   DLIList<Surface*> surfacesToIgnore;     
     313                 :            : 
     314                 :            :     // these have no implementation, just private delcarations
     315                 :            :     // to prevent the compiler from generating default implementations
     316                 :            :   CompositeSurface& operator=(const CompositeSurface&);
     317                 :            :   CompositeSurface(const CompositeSurface&);
     318                 :            : 
     319                 :            :   CompositeGeom *compGeom;
     320                 :            :   CompositeSurface *stitchPartner;
     321                 :            :   
     322                 :            :   CompositeCoSurf* firstCoSurf;
     323                 :            : 
     324                 :            :   CompositeLoop* firstLoop;
     325                 :            : 
     326                 :            :   HiddenEntitySet* hiddenSet;
     327                 :            :   
     328                 :            :   CompSurfFacets* facetTool;
     329                 :            : };
     330                 :            : 
     331                 :            : 
     332                 :          0 : inline Surface* CompositeSurface::get_surface( int index )  const
     333         [ #  # ]:          0 :   { return dynamic_cast<Surface*>(compGeom->entity(index)); }
     334                 :            : 
     335                 :          0 : inline CubitSense CompositeSurface::get_sense( int index ) const 
     336                 :          0 :   { return compGeom->sense(index); }
     337                 :            : 
     338                 :          0 : inline int CompositeSurface::num_surfs() const
     339                 :          0 :   { return compGeom->num_entities(); }
     340                 :            : 
     341                 :          0 : inline int CompositeSurface::index_of( Surface* surf ) const
     342                 :          0 :   { return compGeom->index_of( surf ); }
     343                 :            : 
     344                 :          0 : inline void CompositeSurface::update()
     345                 :          0 :   { compGeom->update_cached_data(); }
     346                 :          0 : inline CompositeLoop* CompositeSurface::first_loop( ) const
     347                 :          0 :   { return firstLoop; }
     348                 :            : 
     349                 :          0 : inline CompositeLoop* CompositeSurface::next_loop( CompositeLoop* loop ) const
     350 [ #  # ][ #  # ]:          0 :   { return !loop ? firstLoop : loop->mySurface == this ? loop->loopNext : 0; }
     351                 :            : 
     352                 :          0 : inline CompositeCoSurf* CompositeSurface::next_co_surface( CompositeCoSurf* prev ) const
     353         [ #  # ]:          0 :   { return prev ? prev->surfaceNext : firstCoSurf; }
     354                 :            : 
     355                 :          0 : inline HiddenEntitySet& CompositeSurface::hidden_entities()
     356                 :            : { 
     357         [ #  # ]:          0 :   if( !hiddenSet )
     358         [ #  # ]:          0 :     hiddenSet = new HiddenEntitySet(this);
     359                 :          0 :   return *hiddenSet;
     360                 :            : }
     361                 :            : 
     362                 :            : 
     363                 :            : #endif
     364                 :            : 

Generated by: LCOV version 1.11