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

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : PartitionSurface.hpp
       3                 :            : //
       4                 :            : // Purpose       : 
       5                 :            : //
       6                 :            : // Special Notes : 
       7                 :            : //
       8                 :            : // Creator       : Jason Kraftcheck
       9                 :            : //
      10                 :            : // Creation Date : 04/21/02
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : 
      13                 :            : #ifndef PARTITION_SURFACE_HPP
      14                 :            : #define PARTITION_SURFACE_HPP
      15                 :            : 
      16                 :            : #include <set>
      17                 :            : #include "Surface.hpp"
      18                 :            : #include "PartitionEntity.hpp"
      19                 :            : #include "PartitionCoSurf.hpp"
      20                 :            : #include "PartitionLoop.hpp"
      21                 :            : 
      22                 :            : class FacetEvalTool;
      23                 :            : class CubitFacetData;
      24                 :            : class PartitionShell;
      25                 :            : class PartitionLump;
      26                 :            : class CubitFacetEdge;
      27                 :            : class CubitFacet;
      28                 :            : class CubitFacetEdgeData;
      29                 :            : class CubitPointData;
      30                 :            : 
      31                 :            : class PartitionSurface : public Surface, 
      32                 :            :                          public PartitionEntity
      33                 :            : {
      34                 :            : 
      35                 :            : public:
      36                 :            : 
      37                 :            :   virtual CubitStatus combine( PartitionSurface* dead_surface );
      38                 :            :   
      39                 :            :   static PartitionSurface* construct( const CubitSimpleAttrib& attrib, PartitionLump* vol );
      40                 :            : 
      41                 :            :   PartitionSurface( PartitionLump* owner );
      42                 :            :   
      43                 :            :   PartitionSurface* split( DLIList<CubitFacetData*>& facets_to_move );
      44                 :            : 
      45                 :            :   virtual ~PartitionSurface();
      46                 :            :   
      47                 :            :   int num_loops() const;
      48                 :            :   PartitionLoop* next_loop( const PartitionLoop* prev = 0 ) const;
      49                 :            :   
      50                 :            :   CubitStatus add( PartitionLoop* loop );
      51                 :            :   CubitStatus remove( PartitionLoop* loop );
      52                 :            :   
      53                 :            :   CubitStatus add( PartitionCoSurf* cosurf );
      54                 :            :   CubitStatus remove( PartitionCoSurf* cosurf );
      55                 :            :   
      56                 :            :   PartitionCoSurf* next_co_surface( const PartitionCoSurf* prev = 0 ) const;
      57                 :            :   PartitionCoSurf* find_first( const PartitionShell* shell ) const;
      58                 :            :     // Get the first CoSurface connecting this surface w/ the passed shell
      59                 :            :   PartitionCoSurf* find_first( const PartitionLump* lump ) const;
      60                 :            :     // Get the first CoSurface connecting this surface w/ a
      61                 :            :     // shell owned by the passed volume
      62                 :            :   PartitionCoSurf* find_next( const PartitionCoSurf* cosurf ) const;
      63                 :            :     // Get the next CoSurface after the passed CoSurface and
      64                 :            :     // with the same Shell as the passed CoSurface.
      65                 :            :   PartitionCoSurf* find_first( const PartitionShell* shell, CubitSense sense ) const;
      66                 :            :     // Get the first CoSurface w/ the passed shell and sense
      67                 :            :   
      68                 :            :   void get_points( DLIList<PartitionPoint*>& list ) const;
      69                 :            :   
      70                 :            :   virtual CubitStatus save( CubitSimpleAttrib& attrib );
      71                 :            :   
      72                 :            :   CubitBox bounding_box() const;
      73                 :            : 
      74                 :            :   double measure();
      75                 :            :   GeometryType geometry_type();
      76                 :            : 
      77                 :            : 
      78                 :            :   virtual CubitStatus move_to_geometry( CubitVector& position );
      79                 :            :   virtual void closest_point_trimmed( CubitVector from, CubitVector& closest);
      80                 :            :   virtual CubitStatus get_point_normal( CubitVector& point, CubitVector& normal );
      81                 :            : 
      82                 :            :   virtual CubitStatus closest_point_uv_guess(  
      83                 :            :       CubitVector const& location,
      84                 :            :       double &u, double &v,
      85                 :            :       CubitVector* closest_location = NULL,
      86                 :            :       CubitVector* unit_normal = NULL );
      87                 :            : 
      88                 :            :   virtual CubitStatus evaluate( double u, double v,
      89                 :            :                                 CubitVector *position,                                   
      90                 :            :                                 CubitVector *normal,
      91                 :            :                                 CubitVector *curvature1,
      92                 :            :                                 CubitVector *curvature2 );
      93                 :            : 
      94                 :            :   virtual CubitStatus get_projected_distance_on_surface( CubitVector *pos1,
      95                 :            :                                                          CubitVector *pos2, 
      96                 :            :                                                          double &distance );
      97                 :            : 
      98                 :            :   virtual CubitStatus closest_point( CubitVector const& pos, 
      99                 :            :                              CubitVector* close = 0, CubitVector* norm = 0,
     100                 :            :                              CubitVector* curv1 = 0, CubitVector* curv2 = 0);
     101                 :            :   virtual CubitStatus principal_curvatures( CubitVector const& loc, 
     102                 :            :                                     double& curv1, double& curv2,
     103                 :            :                                     CubitVector* closest_location=0 );
     104                 :            : 
     105                 :            :   virtual CubitVector position_from_u_v( double u, double v );
     106                 :            :   virtual CubitStatus u_v_from_position( CubitVector const& location,
     107                 :            :                                  double& u, double& v,
     108                 :            :                                  CubitVector* closest_location = NULL );
     109                 :            :   
     110                 :            :   virtual CubitStatus closest_point_along_vector( CubitVector& from_point, 
     111                 :            :                                                   CubitVector& along_vector,
     112                 :            :                                                   CubitVector& point_on_surface);
     113                 :            :   virtual CubitBoolean is_periodic();
     114                 :            :   virtual CubitBoolean is_periodic_in_U( double& period );
     115                 :            :   virtual CubitBoolean is_periodic_in_V( double& period );
     116                 :            :   virtual CubitBoolean is_singular_in_U( double u_param );
     117                 :            :   virtual CubitBoolean is_singular_in_V( double v_param );
     118                 :            :   virtual CubitBoolean is_closed_in_U();
     119                 :            :   virtual CubitBoolean is_closed_in_V();
     120                 :            : 
     121                 :            :   virtual CubitStatus get_sphere_params( CubitVector &center,
     122                 :            :                                          double &radius ) const;
     123                 :            :     //- Only valid for spherical surfaces
     124                 :            :     //O center
     125                 :            :     //O- The center of the sphere
     126                 :            :     //O radius
     127                 :            :     //O- The radius of the sphere
     128                 :            : 
     129                 :            :   virtual CubitStatus get_cone_params( CubitVector &center,
     130                 :            :                                        CubitVector &normal,
     131                 :            :                                        CubitVector &major_axis,
     132                 :            :                                        double &radius_ratio,
     133                 :            :                                        double &sine_angle,
     134                 :            :                                        double &cos_angle ) const;
     135                 :            :     //- Only valid for conical surfaces.  Cylinders are a special case of conicals.
     136                 :            :     //O center
     137                 :            :     //O- 
     138                 :            :     //O normal
     139                 :            :     //O- 
     140                 :            :     //O major_axis
     141                 :            :     //O- 
     142                 :            :     //O radius_ratio
     143                 :            :     //O- 
     144                 :            :     //O sine_angle
     145                 :            :     //O- 
     146                 :            :     //O cos_angle
     147                 :            :     //O- 
     148                 :            : 
     149                 :            :     virtual CubitStatus get_torus_params( CubitVector &center,
     150                 :            :                                         CubitVector &normal,
     151                 :            :                                         double &major_radius,
     152                 :            :                                         double &minor_radius ) const;
     153                 :            :     //- Only valid for torus surfaces.
     154                 :            :     //O center
     155                 :            :     //O- 
     156                 :            :     //O normal
     157                 :            :     //O- 
     158                 :            :     //O major_radius
     159                 :            :     //O- 
     160                 :            :     //O minor_radius
     161                 :            :     //O- 
     162                 :            : 
     163                 :            :   virtual CubitStatus get_nurb_params( bool &rational,
     164                 :            :                                        int &degree_u,
     165                 :            :                                        int &degree_v,
     166                 :            :                                        int &num_cntrl_pts_u,
     167                 :            :                                        int &num_cntrl_pts_v,
     168                 :            :                                        DLIList<CubitVector> &cntrl_pts,
     169                 :            :                                        DLIList<double> &weights,
     170                 :            :                                        DLIList<double> &u_knots,
     171                 :            :                                        DLIList<double> &v_knots ) const;
     172                 :            :   //- Only valid for nurbs surfaces
     173                 :            :   //O rational
     174                 :            :   //O-   True if the nurb is rational
     175                 :            :   //O degree_u
     176                 :            :   //O-   The degree of the nurb in the u direction
     177                 :            :   //O degree_v
     178                 :            :   //O-   The degree of the nurb in the v direction
     179                 :            :   //O num_cntrl_pts_u
     180                 :            :   //O-   Number of control points in the u direction
     181                 :            :   //O num_cntrl_pts_v
     182                 :            :   //O-   Number of control points in the v direction
     183                 :            :   //O cntrl_pts
     184                 :            :   //O-   The control points stored as
     185                 :            :   //O-           cntrl_pts[0                ] = pt[u=0][v=0]
     186                 :            :   //O-           cntrl_pts[1                ] = pt[u=1][v=0]
     187                 :            :   //O-               ...
     188                 :            :   //O-           cntrl_pts[num_cntrl_pts_u-1] = pt[u=?][v=0]
     189                 :            :   //O-           cntrl_pts[num_cntrl_pts_u  ] = pt[u=0][v=1]
     190                 :            :   //O-               ...
     191                 :            :   //O weights
     192                 :            :   //O-   If rational, weights for each control point, stored in the same
     193                 :            :   //O-   order as the control points.  No weights are returned if
     194                 :            :   //O-   rational == false
     195                 :            :   //O u_knots
     196                 :            :   //O-   knot vector in the u direction
     197                 :            :   //O v_knots
     198                 :            :   //O-   knot vector in the v direction
     199                 :            : 
     200                 :            :   virtual CubitStatus uv_derivitives( double u, double v,
     201                 :            :                               CubitVector &du, CubitVector &dv );
     202                 :            :   virtual CubitBoolean is_parametric();
     203                 :            :   virtual CubitBoolean get_param_range_U( double& lo, double& hi );
     204                 :            :   virtual CubitBoolean get_param_range_V( double& lo, double& hi );
     205                 :            :  
     206                 :            :   virtual CubitBoolean is_position_on( CubitVector &test_position );
     207                 :            : 
     208                 :            :   virtual CubitPointContainment point_containment( const CubitVector &point );
     209                 :            :   virtual CubitPointContainment point_containment( double u, double v );
     210                 :            : //  virtual CubitPointContainment point_containment( CubitVector &point, 
     211                 :            : //                                           double u, double v );
     212                 :            :   CubitPointContainment point_containment( const CubitVector &point, 
     213                 :            :                                            PartitionCurve*& boundary_curve );
     214                 :            : 
     215                 :            :   CubitSense get_geometry_sense();
     216                 :            :   void reverse_sense();
     217                 :            : 
     218                 :            :   
     219                 :            :   void get_parents_virt( DLIList<TopologyBridge*>& );
     220                 :            :   void get_children_virt( DLIList<TopologyBridge*>& );
     221                 :          0 :   int layer() const { return sub_entity_set().get_owner_layer(); }
     222                 :            :   GeometryQueryEngine* get_geometry_query_engine() const;
     223                 :            :   
     224                 :            :   virtual CubitSense get_shell_sense( ShellSM* shell_ptr ) const;
     225                 :            : 
     226                 :            :   void append_simple_attribute_virt(const CubitSimpleAttrib&);
     227                 :            :   void remove_simple_attribute_virt(const CubitSimpleAttrib&);
     228                 :            :   void remove_all_simple_attribute_virt();
     229                 :            :   CubitStatus get_simple_attribute(DLIList<CubitSimpleAttrib>&);
     230                 :            :   CubitStatus get_simple_attribute( const CubitString& name,
     231                 :            :                                     DLIList<CubitSimpleAttrib>& );
     232                 :            :   
     233                 :            :   void notify_split( FacetEntity* old_tri, FacetEntity* new_tri );
     234                 :            :   void notify_destroyed( CubitFacetData* facet );
     235                 :            :   void get_facet_data( DLIList<CubitFacetData*>& result_list ) const;
     236                 :            :   void set_facet_data( const DLIList<CubitFacetData*>& new_list );
     237                 :            :   void replace_facets(DLIList<CubitFacetData*> &dead_facets,
     238                 :            :                       DLIList<CubitFacetData*> &new_facets);
     239                 :          0 :   bool has_facets() const { return facetList.size() > 0; }
     240                 :            :   void draw_facets( int color ) const;
     241                 :            : 
     242                 :            : 
     243                 :            :   CubitStatus init_facet_data();
     244                 :            :   
     245                 :            : 
     246                 :            :   virtual void transform( const CubitTransformMatrix& xform );
     247                 :            : 
     248                 :            :   virtual void print_debug_info( const char* prefix = 0, 
     249                 :            :                                  bool print_sub_entity_set = true ) const;
     250                 :            :   CubitFacet* closest_facet( const CubitVector& input_position,
     251                 :            :                              CubitVector& result_position);
     252                 :            :   //- Call the following function for the facets owned by this surface.
     253                 :            :                              
     254                 :            :   CubitStatus notify_moving_point( CubitPoint* point, 
     255                 :            :                                    const CubitVector& new_pos );
     256                 :            :   //- Call fix_move_point for facetts of this PartitionSurface, 
     257                 :            :   //- and update the facet list for this surface accordingly.
     258                 :            : 
     259                 :            : protected:
     260                 :            :  
     261                 :            :   void interior_facet_points( DLIList<CubitPoint*>& result_list ) const;
     262                 :            :   
     263                 :            :   void update_facet_tool();
     264                 :            : 
     265                 :            :   void reverse_loops();
     266                 :            :   
     267                 :            :   PartitionSurface( );
     268                 :            :   
     269                 :            :   virtual PartitionSurface* copy();
     270                 :            : 
     271                 :            :   CubitStatus get_save_topology( DLIList<int>& curves );
     272                 :            :   
     273                 :            :   
     274                 :            :   CubitStatus insert_facets( DLIList <PartitionEntity*> points,
     275                 :            :                              DLIList <CubitFacetEdgeData *> &boundary_edges,
     276                 :            :                              DLIList <CubitFacetData*> &surf_facets);
     277                 :            :   
     278                 :            :   DLIList<CubitFacetData*> facetList;
     279                 :            :   CubitSense geometry_sense;
     280                 :            : 
     281                 :            : private:
     282                 :            :   
     283                 :            :   PartitionSurface( PartitionSurface* split_from );
     284                 :            : 
     285                 :            :   PartitionSurface( const PartitionSurface& );
     286                 :            : 
     287                 :            :   PartitionLoop* firstLoop;
     288                 :            :   PartitionCoSurf* firstCoSurf;
     289                 :            : 
     290                 :            :   
     291                 :            : };
     292                 :            : 
     293                 :            : inline PartitionLoop* 
     294                 :          0 : PartitionSurface::next_loop( const PartitionLoop* prev ) const
     295                 :            : { 
     296                 :            :   return !prev                   ? firstLoop           : 
     297                 :          0 :          prev->mySurface == this ? prev->nextInSurface : 
     298 [ #  # ][ #  # ]:          0 :                                    0; 
     299                 :            : }
     300                 :            :   
     301                 :            : inline PartitionCoSurf* 
     302                 :          0 : PartitionSurface::next_co_surface( const PartitionCoSurf* prev ) const
     303                 :            : { 
     304                 :            :   return !prev                   ? firstCoSurf       :
     305                 :          0 :          prev->mySurface == this ? prev->surfaceNext :
     306 [ #  # ][ #  # ]:          0 :                                    0;
     307                 :            : }
     308                 :            : 
     309                 :            : #endif

Generated by: LCOV version 1.11