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

           Branch data     Line data    Source code
       1                 :            : //- Class: CurveFacetEvalTool
       2                 :            : //- Description:  The CurveFacetEvalTool is a general purpose tool that uses a set
       3                 :            : //-               of facets to determine certain geometry computations.  This
       4                 :            : //-               class can be used to define a curve or do fast bounding box
       5                 :            : //-               calculations, or determine point inside or outside.
       6                 :            : //- Assumptions:  It is assumed/required that the facets be continuous through
       7                 :            : //-               the set.  In other words they must shared nodes and be conected
       8                 :            : //-               through each other.  The algorithms assume, for efficient searching,
       9                 :            : //-               that from one facet, you can get to any other facet in the set.
      10                 :            : //- Owner: Steven J. Owen
      11                 :            : //- Checked by: 
      12                 :            : 
      13                 :            : #ifndef CURVE_FACET_EVAL_TOOL_HPP
      14                 :            : #define CURVE_FACET_EVAL_TOOL_HPP
      15                 :            : 
      16                 :            : #include "DLIList.hpp"
      17                 :            : #include <map>
      18                 :            : 
      19                 :            : class CubitBox;
      20                 :            : class CubitPoint;
      21                 :            : class CubitVector;
      22                 :            : class FacetEvalTool;
      23                 :            : class CubitFacetEdge;
      24                 :            : class FacetCurve;
      25                 :            : 
      26                 :            : class CurveFacetEvalTool
      27                 :            : {
      28                 :            : private:
      29                 :            :   int toolID;
      30                 :            :   int interpOrder;
      31                 :            :     //- interpolation order 0=linear, 1=gradient, 2=quadratic, 
      32                 :            :     //                      3=least_squares, 4=spline
      33                 :            :   DLIList<CubitFacetEdge*> myEdgeList;
      34                 :            :   DLIList<CubitPoint*> myPointList;
      35                 :            :   CubitBox *myBBox;
      36                 :            :   FacetEvalTool *surfFacetEvalTool;
      37                 :            :   double facetLength;
      38                 :            :   CubitSense curvSense;
      39                 :            :   CubitBoolean goodCurveData;
      40                 :            :   int output_id;
      41                 :            : 
      42                 :            :   void draw_edges(int color = -1);
      43                 :            :   void draw_edge(CubitFacetEdge *edge, int color);
      44                 :            :   void draw_line(CubitVector &begin, CubitVector &end, int color = -1);
      45                 :            :   void draw_location(CubitVector &loc, int color = -1 );
      46                 :            : 
      47                 :            :   void destroy_facets();
      48                 :            :     //- Destroys the facets, and points.
      49                 :            : 
      50                 :            :   CubitStatus get_segments_from_loops(
      51                 :            :     DLIList<DLIList<CubitFacetEdge*>*> *facet_loop_list,
      52                 :            :     CubitVector &start, CubitVector &end,
      53                 :            :     DLIList<CubitFacetEdge*> &edge_list,
      54                 :            :     DLIList<CubitPoint*> &point_list,
      55                 :            :     CubitSense owrts );
      56                 :            :   CubitStatus get_segments_from_loops(
      57                 :            :     DLIList<DLIList<CubitFacetEdge*>*> *facet_loop_list,
      58                 :            :     CubitPoint *start_pt, CubitPoint *end_pt,
      59                 :            :     DLIList<CubitFacetEdge*> &edge_list,
      60                 :            :     DLIList<CubitPoint*> &point_list,
      61                 :            :     CubitSense owrts );
      62                 :            :     // generate a list of edges and points from the loop list
      63                 :            :     // for this curve
      64                 :            : 
      65                 :            :   CubitStatus get_segments_from_positions( 
      66                 :            :     std::vector<CubitVector> &positions,
      67                 :            :     CubitVector &start_pt,
      68                 :            :     DLIList<CubitFacetEdge*> &edge_list, 
      69                 :            :     DLIList<CubitPoint*> &point_list );
      70                 :            :       // generate a list of edges and points from the loop list
      71                 :            :     // for this curve
      72                 :            :   
      73                 :            :   /*
      74                 :            :   CubitStatus project_to_facet_edge(CubitVector &this_point,
      75                 :            :                                     CubitVector &closest_point,
      76                 :            :                                     CubitVector *tangent_ptr,
      77                 :            :                                     CubitVector *curvature_ptr,
      78                 :            :                                     double *param,
      79                 :            :                                     int *outside );
      80                 :            : 
      81                 :            :     // project to the facet edge
      82                 :            :   CubitStatus project_to_linear_facet_edge(CubitVector &this_point,
      83                 :            :                                            CubitVector &closest_point,
      84                 :            :                                            CubitVector *tangent_ptr,
      85                 :            :                                            CubitVector *curvature_ptr,
      86                 :            :                                            double *param,
      87                 :            :                                            int *outside );
      88                 :            :     // same as above except assumes linear representation AND
      89                 :            :     // surfFacetEvalTool does notexist
      90                 :            : */
      91                 :            :   // evaluates a fractional length onto a Bezier edge 
      92                 :            :   CubitStatus evaluate_bezier_edge(CubitFacetEdge *edge,
      93                 :            :                                    int index0,
      94                 :            :                                    int index1,
      95                 :            :                                    double fraction,
      96                 :            :                                    CubitVector &location_on_curve,
      97                 :            :                                    double *tangent);
      98                 :            : 
      99                 :            :   // projects a point onto a Bezier edge 
     100                 :            :   CubitStatus project_to_bezier_edge(CubitFacetEdge *edge,
     101                 :            :                         CubitVector &point, CubitVector &projected_point,
     102                 :            :                         double *tangent, double *tval);                                   
     103                 :            :                                         
     104                 :            :   double u_on_facet_edge( CubitFacetEdge *edge_at_pt, 
     105                 :            :                           CubitVector pt );
     106                 :            :     // return the u param on the facet curve given a point on the
     107                 :            :     // curve and the facet edge it is on
     108                 :            : 
     109                 :            : //  CubitStatus project_to_edge_line( CubitFacetEdge *edge, 
     110                 :            : //                                    CubitVector &this_point, 
     111                 :            : //                                    CubitVector &pt_on_edge, 
     112                 :            : //                                    double &dist_to_edge );
     113                 :            :     // project to the line defined by the edge
     114                 :            : 
     115                 :            :   CubitStatus fix_point_edge_order();
     116                 :            : 
     117                 :            :   CubitSense find_curv_sense( CubitPoint *start_ptr );
     118                 :            :   CubitSense find_curv_sense( CubitVector &start );
     119                 :            : 
     120                 :            : public:
     121                 :            : 
     122                 :            :   CurveFacetEvalTool();
     123                 :            :   ~CurveFacetEvalTool();
     124                 :            : 
     125                 :            :   // Called immediately after the constructor to initialize the data.
     126                 :            :   CubitStatus initialize( DLIList<CubitFacetEdge*> &edge_list,
     127                 :            :                           DLIList<CubitPoint*> &point_list,
     128                 :            :                           FacetEvalTool* surf_eval = NULL);
     129                 :            :   CubitStatus initialize( FacetEvalTool *surf_eval_tool,
     130                 :            :                           CubitPoint *start_point,
     131                 :            :                           CubitPoint *end_point,
     132                 :            :                           CubitSense orientation );
     133                 :            :   CubitStatus initialize( FacetEvalTool *surf_eval_tool,
     134                 :            :                           CubitVector &start,
     135                 :            :                           CubitVector &end,                          
     136                 :            :                           CubitSense orientation );
     137                 :            :   CubitStatus initialize( FacetEvalTool *surf_eval_tool,
     138                 :            :                           CubitVector &start,
     139                 :            :                           std::vector<CubitVector> &positions );
     140                 :            : 
     141                 :            :   CubitStatus save(FILE *fp);
     142                 :            :     // save to a cubit file
     143                 :            :   CubitStatus restore(FILE *fp,
     144                 :            :                       unsigned int endian,
     145                 :            :                       int num_edges, 
     146                 :            :                       int num_points,
     147                 :            :                       CubitFacetEdge **edges, 
     148                 :            :                       CubitPoint **points,
     149                 :            :                       int num_fets,
     150                 :            :                       FacetEvalTool **fet_list);
     151                 :            : 
     152                 :        924 :   int get_output_id() { return output_id; }
     153                 :        462 :   void set_output_id( int id ) { output_id = id; }
     154                 :            : 
     155                 :            :   CubitBox bounding_box();
     156                 :            :     //- Returns the bounding box for the set of facetedges (based on the points
     157                 :            :     //- used in the faceted set.
     158                 :            : 
     159                 :            :   CubitStatus closest_point(CubitVector &this_point, 
     160                 :            :                             CubitVector &closest_point_ptr,
     161                 :            :                             CubitVector *normal_ptr = NULL,
     162                 :            :                             CubitVector *curvature_ptr = NULL,
     163                 :            :                             double *param = NULL);
     164                 :            :     //- Finds the closest point from the vector (this_point) to the
     165                 :            :     //- set of facets that lies on the set of facets.  If the point
     166                 :            :     //- lies outside this set, the closest point will be on the plane
     167                 :            :     //- of the closest facet.  The closest_point is set to be that point.
     168                 :            : 
     169                 :            :   // replace del_pnt with keep_pnt in point list
     170                 :            :   CubitBoolean replace_point( CubitPoint *del_pnt, CubitPoint *keep_pnt );
     171                 :            : 
     172                 :            :   CubitBoolean replace_facets( DLIList< CubitFacetEdge *> &curv_edges );
     173                 :            : 
     174                 :            :   void remove_facets( DLIList<CubitFacetEdge*> &facet_edges);
     175                 :            : 
     176                 :            :   CubitStatus position_from_fraction( double fraction, // between 0 and 1
     177                 :            :                                       CubitVector &location_on_curve );
     178                 :            :     //- computes the location on the curve based on a fraction of the
     179                 :            :     //- distance along the curve and the RefEdge sense
     180                 :            : 
     181                 :            :   double u_from_arc_length( double root_param, double arc_length );
     182                 :            :   double length_from_u ( double root_param, double end_param );
     183                 :            : 
     184                 :       2156 :   double length() { return facetLength; };
     185                 :            :     //- return the length of the facet edges
     186                 :            : 
     187                 :            :   CubitSense sense() { return curvSense; };
     188                 :            :     //- return the sense of the curve
     189                 :            : 
     190                 :        924 :   void get_facets(DLIList<CubitFacetEdge*>& facet_list)
     191                 :        924 :     { facet_list +=  myEdgeList; }
     192                 :            :     // append the edge facets for this curve onto facet_list
     193                 :          0 :   void get_points(DLIList<CubitPoint*>& point_list)
     194                 :          0 :     { point_list +=  myPointList; }
     195                 :            :     // apend the points for this curve onto point_list
     196                 :            : 
     197                 :            :   FacetEvalTool *get_surf_eval_tool() { return surfFacetEvalTool; } 
     198                 :            :   void set_facet_eval_tool(FacetEvalTool *surf_eval_tool_ptr) 
     199                 :            :    { surfFacetEvalTool = surf_eval_tool_ptr;} 
     200                 :            :     // get and set the associated surface facet eval tool 
     201                 :            : 
     202                 :            :   void set_length();
     203                 :            :     // initialize the curve length
     204                 :            :   
     205                 :          0 :   CubitBoolean has_good_curve_data(){return goodCurveData;}
     206                 :            :   
     207                 :            :   void debug_draw_facet_edges(int color = -1 );
     208                 :            : 
     209                 :            :    
     210                 :            : };
     211                 :            : 
     212                 :            : #endif // CURVE_FACET_EVAL_TOOL_HPP
     213                 :            : 
     214                 :            : 

Generated by: LCOV version 1.11