LCOV - code coverage report
Current view: top level - geom/facet - FacetSurface.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 115 393 29.3 %
Date: 2020-06-30 00:58:45 Functions: 29 74 39.2 %
Branches: 62 514 12.1 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : FacetSurface.cpp
       3                 :            : //
       4                 :            : // Purpose       : 
       5                 :            : //
       6                 :            : // Special Notes :
       7                 :            : //
       8                 :            : // Creator       : David R. White
       9                 :            : //
      10                 :            : // Creation Date : 06/06/00
      11                 :            : //
      12                 :            : // Owner         : David R. White
      13                 :            : //-------------------------------------------------------------------------
      14                 :            : #include "CubitSimpleAttrib.hpp"
      15                 :            : #include "CubitVector.hpp"
      16                 :            : #include "GeometryDefines.h"
      17                 :            : #include "FacetSurface.hpp"
      18                 :            : #include "RefFace.hpp"
      19                 :            : #include "FacetQueryEngine.hpp"
      20                 :            : #include "FacetAttrib.hpp"
      21                 :            : 
      22                 :            : #include "CubitUtil.hpp"
      23                 :            : #include "CastTo.hpp"
      24                 :            : #include "RefVolume.hpp"
      25                 :            : #include "GeometryQueryEngine.hpp"
      26                 :            : #include "DLIList.hpp"
      27                 :            : #include "FacetEvalTool.hpp"
      28                 :            : #include "ShellSM.hpp"
      29                 :            : #include "Lump.hpp"
      30                 :            : #include "LoopSM.hpp"
      31                 :            : #include "CubitPointData.hpp"
      32                 :            : #include "CubitFacetData.hpp"
      33                 :            : #include "CubitFacetEdge.hpp"
      34                 :            : #include "FacetBody.hpp"
      35                 :            : #include "FacetLump.hpp"
      36                 :            : #include "FacetShell.hpp"
      37                 :            : #include "FacetLoop.hpp"
      38                 :            : #include "FacetCoEdge.hpp"
      39                 :            : #include "FacetCurve.hpp"
      40                 :            : #include "FacetPoint.hpp"
      41                 :            : #include "CubitEvaluator.hpp"
      42                 :            : #include "SphereEvaluator.hpp"
      43                 :            : #include "CylinderEvaluator.hpp"
      44                 :            : 
      45                 :            : #include <map>
      46                 :            : #include "GfxDebug.hpp"
      47                 :            : // ********** END CUBIT INCLUDES           **********
      48                 :            : 
      49                 :            : // ********** BEGIN STATIC DECLARATIONS    **********
      50                 :            : // ********** END STATIC DECLARATIONS      **********
      51                 :            : 
      52                 :            : // ********** BEGIN PUBLIC FUNCTIONS       **********
      53                 :            : //-------------------------------------------------------------------------
      54                 :            : // Purpose       : The constructor with a pointer to the FacetEvalTool. 
      55                 :            : //
      56                 :            : // Special Notes :
      57                 :            : //
      58                 :            : //-------------------------------------------------------------------------
      59                 :        341 : FacetSurface::FacetSurface(FacetEvalTool *facet_tool,
      60                 :            :                            DLIList<ShellSM*> &shellsms,
      61 [ +  - ][ +  - ]:        341 :                            DLIList<LoopSM*> &loopsms)
                 [ +  - ]
      62                 :            : {
      63                 :            :     // Calculate a bounding box if there isn't one already
      64                 :        341 :   facetEvalTool = facet_tool;
      65                 :            :     //sense_ = CUBIT_FORWARD;
      66         [ +  - ]:        341 :   myShells += shellsms;
      67         [ +  - ]:        341 :   myLoops += loopsms;
      68                 :        341 :   myShellSense = CUBIT_UNKNOWN;
      69                 :        341 :   myEvaluator = NULL;
      70                 :        341 : }
      71                 :            : 
      72                 :            : //-------------------------------------------------------------------------
      73                 :            : // Purpose       : The constructor with a pointer to the FacetEvalTool. 
      74                 :            : //
      75                 :            : // Special Notes : Used for save/restore
      76                 :            : //
      77                 :            : //-------------------------------------------------------------------------
      78                 :          0 : FacetSurface::FacetSurface( const SphereEvaluatorData *sphere_data,
      79                 :            :                             FacetEvalTool *facet_tool,
      80                 :            :                             DLIList<ShellSM*> &shellsms,
      81 [ #  # ][ #  # ]:          0 :                             DLIList<LoopSM*> &loopsms )
                 [ #  # ]
      82                 :            : {
      83                 :          0 :   facetEvalTool = facet_tool;
      84                 :            :     //sense_ = CUBIT_FORWARD;
      85         [ #  # ]:          0 :   myShells += shellsms;
      86         [ #  # ]:          0 :   myLoops += loopsms;
      87                 :          0 :   myShellSense = CUBIT_UNKNOWN;
      88                 :            : 
      89 [ #  # ][ #  # ]:          0 :   myEvaluator = new SphereEvaluator( sphere_data );
      90                 :          0 : }
      91                 :            : //-------------------------------------------------------------------------
      92                 :            : // Purpose       : The constructor with a pointer to the FacetEvalTool. 
      93                 :            : //
      94                 :            : // Special Notes : Used for save/restore
      95                 :            : //
      96                 :            : //-------------------------------------------------------------------------
      97                 :          0 : FacetSurface::FacetSurface( const CylinderEvaluatorData *cylinder_data,
      98                 :            :                             FacetEvalTool *facet_tool,
      99                 :            :                             DLIList<ShellSM*> &shellsms,
     100 [ #  # ][ #  # ]:          0 :                             DLIList<LoopSM*> &loopsms )
                 [ #  # ]
     101                 :            : {
     102                 :          0 :   facetEvalTool = facet_tool;
     103                 :            :     //sense_ = CUBIT_FORWARD;
     104         [ #  # ]:          0 :   myShells += shellsms;
     105         [ #  # ]:          0 :   myLoops += loopsms;
     106                 :          0 :   myShellSense = CUBIT_UNKNOWN;
     107                 :            : 
     108 [ #  # ][ #  # ]:          0 :   myEvaluator = new CylinderEvaluator( cylinder_data );
     109                 :          0 : }
     110                 :            : 
     111                 :            : //-------------------------------------------------------------------------
     112                 :            : // Purpose       : The constructor with a pointer to the FacetEvalTool. 
     113                 :            : //
     114                 :            : // Special Notes : Used for save/restore
     115                 :            : //
     116                 :            : //-------------------------------------------------------------------------
     117                 :        132 : FacetSurface::FacetSurface(FacetEvalTool *facet_tool,
     118                 :            :                            CubitSense sense,
     119                 :            :                            CubitSense shell_sense0,
     120                 :            :                            CubitBoolean use_facets,
     121 [ +  - ][ +  - ]:        132 :                            DLIList<LoopSM*> &loopsms)
                 [ +  - ]
     122                 :            : {
     123                 :            :     // Calculate a bounding box if there isn't one already
     124                 :        132 :   facetEvalTool = facet_tool;
     125                 :            :     //sense_ = CUBIT_FORWARD;
     126         [ +  - ]:        132 :   myLoops += loopsms;
     127                 :        132 :   myShellSense = shell_sense0;
     128                 :        132 :   myEvaluator = NULL;
     129                 :        132 : }
     130                 :            : //-------------------------------------------------------------------------
     131                 :            : // Purpose       : The default destructor. 
     132                 :            : //
     133                 :            : // Special Notes :
     134                 :            : //
     135                 :            : //-------------------------------------------------------------------------
     136 [ #  # ][ #  # ]:          0 : FacetSurface::~FacetSurface() 
                 [ #  # ]
     137                 :            : {
     138         [ #  # ]:          0 :   if ( facetEvalTool )
     139                 :            :   {
     140 [ #  # ][ #  # ]:          0 :     delete facetEvalTool;
     141                 :            :   }
     142         [ #  # ]:          0 :   if ( myEvaluator )
     143                 :            :   {
     144 [ #  # ][ #  # ]:          0 :     delete myEvaluator;
     145                 :            :   }
     146         [ #  # ]:          0 : }
     147                 :            : 
     148                 :            : 
     149                 :            : //-------------------------------------------------------------------------
     150                 :            : // Purpose       : get the interpolation order of the FacetEvalTool 
     151                 :            : //
     152                 :            : // Special Notes :
     153                 :            : //
     154                 :            : //-------------------------------------------------------------------------
     155                 :          0 : int FacetSurface::interp_order() 
     156                 :            : {
     157         [ #  # ]:          0 :   assert(facetEvalTool != NULL);
     158                 :            :   
     159                 :          0 :   return facetEvalTool->interp_order();
     160                 :            : }
     161                 :            : 
     162                 :            : //-------------------------------------------------------------------------
     163                 :            : // Purpose       : get the min dot of the FacetEvalTool 
     164                 :            : //
     165                 :            : // Special Notes :
     166                 :            : //
     167                 :            : //-------------------------------------------------------------------------
     168                 :          0 : double FacetSurface::min_dot() 
     169                 :            : {
     170         [ #  # ]:          0 :   assert(facetEvalTool != NULL);
     171                 :            :   
     172                 :          0 :   return facetEvalTool->get_min_dot();
     173                 :            : }
     174                 :            : 
     175                 :            : //-------------------------------------------------------------------------
     176                 :            : // Purpose       : The purpose of this function is to append a
     177                 :            : //                 attribute to the GE. The name is attached to the 
     178                 :            : //                 underlying solid model entity this one points to.
     179                 :            : //
     180                 :            : //
     181                 :            : // Special Notes : 
     182                 :            : //
     183                 :            : //-------------------------------------------------------------------------
     184                 :        242 : void FacetSurface::append_simple_attribute_virt(const CubitSimpleAttrib &csa)
     185                 :        242 :   { attribSet.append_attribute(csa); }
     186                 :            : 
     187                 :            : //-------------------------------------------------------------------------
     188                 :            : // Purpose       : The purpose of this function is to remove a simple 
     189                 :            : //                 attribute attached to this geometry entity. The name is 
     190                 :            : //                 removed from the underlying BODY this points to.
     191                 :            : //
     192                 :            : // Special Notes : 
     193                 :            : //
     194                 :            : //-------------------------------------------------------------------------
     195                 :       2024 : void FacetSurface::remove_simple_attribute_virt(const CubitSimpleAttrib &csa)
     196                 :       2024 :   { attribSet.remove_attribute( csa ); }
     197                 :            : 
     198                 :            : //-------------------------------------------------------------------------
     199                 :            : // Purpose       : The purpose of this function is to remove all simple 
     200                 :            : //                 attributes attached to this geometry entity.  Also
     201                 :            : //                 removes lingering GTC attributes.
     202                 :            : //
     203                 :            : //
     204                 :            : // Special Notes : 
     205                 :            : //
     206                 :            : //-------------------------------------------------------------------------
     207                 :        770 : void FacetSurface::remove_all_simple_attribute_virt()
     208                 :        770 :   { attribSet.remove_all_attributes(); }
     209                 :            : 
     210                 :            : //-------------------------------------------------------------------------
     211                 :            : // Purpose       : The purpose of this function is to get the  
     212                 :            : //                 attributes attached to this geometry entity. The name is 
     213                 :            : //                 attached to the underlying BODY this points to.
     214                 :            : //
     215                 :            : // Special Notes : 
     216                 :            : //
     217                 :            : //-------------------------------------------------------------------------
     218                 :        462 : CubitStatus FacetSurface::get_simple_attribute(DLIList<CubitSimpleAttrib>&
     219                 :            :                                                  csa_list)
     220                 :        462 :   { return attribSet.get_attributes(csa_list); }
     221                 :       2486 : CubitStatus FacetSurface::get_simple_attribute(const CubitString& name,
     222                 :            :                                         DLIList<CubitSimpleAttrib>& csa_list )
     223                 :       2486 :   { return attribSet.get_attributes( name, csa_list ); }
     224                 :            : 
     225                 :        275 : CubitStatus FacetSurface::save_attribs( FILE *file_ptr )
     226                 :        275 :   { return attribSet.save_attributes(file_ptr); }
     227                 :            :   
     228                 :        132 : CubitStatus FacetSurface::restore_attribs( FILE *file_ptr, unsigned int endian )
     229                 :        132 :   { return attribSet.restore_attributes( file_ptr, endian ); }
     230                 :            : 
     231                 :            : 
     232                 :            : //-------------------------------------------------------------------------
     233                 :            : // Purpose       : Get geometry modeling engine: FacetQueryEngine
     234                 :            : //
     235                 :            : // Special Notes :
     236                 :            : //
     237                 :            : //-------------------------------------------------------------------------
     238                 :            : GeometryQueryEngine* 
     239                 :          0 :                  FacetSurface::get_geometry_query_engine() const
     240                 :            : {
     241                 :          0 :    return FacetQueryEngine::instance();
     242                 :            : }                 
     243                 :            : 
     244                 :            : //-------------------------------------------------------------------------
     245                 :            : // Purpose       : Get the bounding box of the object.
     246                 :            : //
     247                 :            : // Special Notes :
     248                 :            : //
     249                 :            : //-------------------------------------------------------------------------
     250                 :       2233 : CubitBox FacetSurface::bounding_box() const 
     251                 :            : {
     252         [ -  + ]:       2233 :     if ( myEvaluator )
     253                 :          0 :         return myEvaluator->bounding_box();
     254                 :            :     else
     255                 :       2233 :         return facetEvalTool->bounding_box();
     256                 :            : }
     257                 :            : 
     258                 :            : 
     259                 :          0 : CubitStatus FacetSurface::get_point_normal( CubitVector& location,
     260                 :            :                                             CubitVector& normal )
     261                 :            : {
     262                 :          0 :   return closest_point( location, NULL, &normal );
     263                 :            : }   
     264                 :            : 
     265                 :          0 : CubitStatus FacetSurface::closest_point_uv_guess(  
     266                 :            :           CubitVector const& location,
     267                 :            :           double& , double& ,
     268                 :            :           CubitVector* closest_location,
     269                 :            :           CubitVector* unit_normal )
     270                 :            : {
     271                 :            :   // don't use u and v guesses
     272                 :          0 :  return closest_point(location, closest_location, unit_normal);
     273                 :            : }
     274                 :            : 
     275                 :            : 
     276                 :            : //-------------------------------------------------------------------------
     277                 :            : // Purpose       : Computes the closest_point on the surface to the input 
     278                 :            : //                 location.  Optionally, it also computes and returns
     279                 :            : //                 the normal to the surface and the principal curvatures
     280                 :            : //                 at closest_location.
     281                 :            : //
     282                 :            : //-------------------------------------------------------------------------
     283                 :       2167 : CubitStatus FacetSurface::closest_point( CubitVector const& location, 
     284                 :            :                                          CubitVector* closest_location,
     285                 :            :                                          CubitVector* unit_normal_ptr,
     286                 :            :                                          CubitVector* curvature1_ptr,
     287                 :            :                                          CubitVector* curvature2_ptr)
     288                 :            : {
     289                 :       2167 :    CubitStatus rv = CUBIT_SUCCESS;
     290         [ -  + ]:       2167 :     if ( myEvaluator )
     291                 :            :         return myEvaluator->closest_point( location,
     292                 :            :                                            closest_location,
     293                 :            :                                            unit_normal_ptr,
     294                 :            :                                            curvature1_ptr,
     295                 :          0 :                                            curvature2_ptr );
     296                 :            : 
     297                 :            :      // Only need to compute the closest location
     298 [ +  + ][ +  - ]:       2167 :   if (unit_normal_ptr == NULL &&
     299         [ +  - ]:       1243 :       curvature1_ptr  == NULL &&
     300                 :            :       curvature2_ptr  == NULL)
     301                 :            :   {
     302         [ +  - ]:       1243 :     CubitVector temp = location;
     303                 :            :     rv=facetEvalTool->closest_point( temp, 
     304         [ +  - ]:       1243 :                                   closest_location, NULL );
     305         [ -  + ]:       1243 :     if(!rv){
     306                 :          0 :         return rv;
     307                 :       1243 :     }
     308                 :            :   }
     309                 :            :   
     310                 :            :     // Need to compute the closest location and the normal, but not the
     311                 :            :     // curvatures
     312 [ +  - ][ +  - ]:        924 :   else if ( (unit_normal_ptr != NULL) && 
     313         [ +  - ]:        924 :             (curvature1_ptr == NULL && curvature2_ptr == NULL) )
     314                 :            :   {
     315         [ +  - ]:        924 :     CubitVector temp = location;
     316         [ +  - ]:        924 :     rv =facetEvalTool->closest_point( temp, closest_location, unit_normal_ptr);
     317         [ -  + ]:        924 :     if(!rv){
     318                 :          0 :         return rv;
     319                 :        924 :     }
     320                 :            : //     if ( get_relative_surface_sense() == CUBIT_REVERSED )
     321                 :            : //     {
     322                 :            : //       *unit_normal_ptr = -1.0*(*unit_normal_ptr);
     323                 :            : //     }
     324                 :            :   }
     325                 :            :   else
     326                 :            :   {
     327 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("Faceted geometry currently doesn't support curvature requests.\n");
     328                 :          0 :     return CUBIT_FAILURE;
     329                 :            :   }   
     330                 :            :   
     331                 :       2167 :   return CUBIT_SUCCESS;
     332                 :            : }
     333                 :            : 
     334                 :            : 
     335                 :            : 
     336                 :          0 : CubitStatus FacetSurface::closest_point_along_vector(CubitVector& from_point, 
     337                 :            :                                                CubitVector& along_vector,
     338                 :            :                                                CubitVector& point_on_surface)
     339                 :            : {
     340         [ #  # ]:          0 :   CubitVector other_point = from_point+along_vector;
     341         [ #  # ]:          0 :   DLIList<CubitVector*> intersection_list;
     342 [ #  # ][ #  # ]:          0 :   facetEvalTool->get_intersections( from_point, other_point, intersection_list );
                 [ #  # ]
     343                 :            :   
     344 [ #  # ][ #  # ]:          0 :   if( intersection_list.size() == 0 )
     345                 :          0 :     return CUBIT_FAILURE;
     346                 :            : 
     347 [ #  # ][ #  # ]:          0 :   if( intersection_list.size() == 1 )
     348                 :            :   {
     349 [ #  # ][ #  # ]:          0 :     point_on_surface = *intersection_list.get();
     350         [ #  # ]:          0 :     delete intersection_list.get();
     351                 :          0 :     return CUBIT_SUCCESS;
     352                 :            :   }
     353                 :            : 
     354                 :            :   //get the closest intersection
     355                 :          0 :   double closest_dist_sq = CUBIT_DBL_MAX;
     356 [ #  # ][ #  # ]:          0 :   for( int k=intersection_list.size(); k--; )
     357                 :            :   {
     358         [ #  # ]:          0 :     CubitVector *int_pt = intersection_list.get_and_step();
     359                 :            : 
     360         [ #  # ]:          0 :     double tmp_dist_sq = from_point.distance_between_squared( *int_pt );
     361                 :            : 
     362         [ #  # ]:          0 :     if( tmp_dist_sq < closest_dist_sq )
     363                 :            :     {
     364         [ #  # ]:          0 :       point_on_surface = *int_pt;
     365                 :          0 :       closest_dist_sq = tmp_dist_sq;
     366                 :            :     }
     367                 :            : 
     368                 :          0 :     delete int_pt;
     369                 :            :   }
     370                 :            : 
     371         [ #  # ]:          0 :   return CUBIT_SUCCESS;
     372                 :            : }
     373                 :            : 
     374                 :            : 
     375                 :            : 
     376                 :            : //-------------------------------------------------------------------------
     377                 :            : // Purpose       : Computes the closest_point on the trimmed surface to the 
     378                 :            : //                 input location. 
     379                 :            : //
     380                 :            : // Special Notes : 
     381                 :            : //-------------------------------------------------------------------------
     382                 :         11 : void FacetSurface::closest_point_trimmed( CubitVector from_point, 
     383                 :            :                                          CubitVector& point_on_surface)
     384                 :            : {
     385                 :            :   CubitBoolean on_surf;
     386                 :            :   facetEvalTool->closest_point_trimmed( from_point, &point_on_surface, 
     387         [ +  - ]:         11 :                                         on_surf);
     388                 :         11 :   return;
     389                 :            : }
     390                 :            : 
     391                 :            : //-------------------------------------------------------------------------
     392                 :            : // Purpose       : This functions computes the point on the surface that is 
     393                 :            : //                 closest to the input location and then calculates the 
     394                 :            : //                 magnitudes of the principal curvatures at this (possibly, 
     395                 :            : //                 new) point on the surface. Specifying the RefVolume for 
     396                 :            : //                 reference is optional.
     397                 :            : //
     398                 :            : // Special Notes :
     399                 :            : //
     400                 :            : //-------------------------------------------------------------------------
     401                 :          0 : CubitStatus FacetSurface::principal_curvatures(
     402                 :            :   CubitVector const& location, 
     403                 :            :   double& curvature_1,
     404                 :            :   double& curvature_2,
     405                 :            :   CubitVector* closest_location )
     406                 :            : {
     407         [ #  # ]:          0 :   if ( myEvaluator )
     408                 :            :   {
     409                 :            :       return myEvaluator->principal_curvatures( location,
     410                 :            :                                                  curvature_1,
     411                 :            :                                                  curvature_2,
     412                 :          0 :                                                  closest_location );
     413                 :            :   }
     414                 :            : 
     415 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Faceted geometry currently does not support curvature requests.\n");
     416                 :          0 :   return CUBIT_FAILURE;
     417                 :            : }
     418                 :            : 
     419                 :            : 
     420                 :            : 
     421                 :          0 : CubitStatus FacetSurface::evaluate( double u, double v,
     422                 :            :                                CubitVector *position,                                   
     423                 :            :                                CubitVector *normal,
     424                 :            :                                CubitVector *curvature1,
     425                 :            :                                CubitVector *curvature2 )
     426                 :            : {
     427                 :          0 :   return CUBIT_FAILURE;
     428                 :            : }
     429                 :            : 
     430                 :            : 
     431                 :            : //-------------------------------------------------------------------------
     432                 :            : // Purpose       : Given values of the two parameters, get the position.
     433                 :            : //
     434                 :            : // Special Notes :
     435                 :            : //
     436                 :            : //-------------------------------------------------------------------------
     437                 :          0 : CubitVector FacetSurface::position_from_u_v (double u, double v)
     438                 :            : {
     439         [ #  # ]:          0 :   if ( myEvaluator )
     440                 :          0 :       return myEvaluator->position_from_u_v( u, v );
     441                 :            : 
     442 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Faceted geometry currently does not support u-v parameterization.\n");
     443                 :          0 :   return CubitVector (0,0,0);
     444                 :            : }
     445                 :            : 
     446                 :            : //-------------------------------------------------------------------------
     447                 :            : // Purpose       : This function returns the {u, v} coordinates of the point 
     448                 :            : //                 on the Surface closest to the input point (specified in 
     449                 :            : //                 global space). The closest_location is also returned.
     450                 :            : //
     451                 :            : // Special Notes :
     452                 :            : //
     453                 :            : //-------------------------------------------------------------------------
     454                 :          0 : CubitStatus FacetSurface::u_v_from_position( CubitVector const& location,
     455                 :            :                                              double& u,
     456                 :            :                                              double& v,
     457                 :            :                                              CubitVector* closest_location )
     458                 :            : {
     459         [ #  # ]:          0 :   if ( myEvaluator )
     460                 :          0 :       return myEvaluator->u_v_from_position( location, u, v, closest_location );
     461                 :            : 
     462 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Faceted geometry currently does not support u-v parameterization.\n");
     463                 :          0 :   return CUBIT_FAILURE;
     464                 :            : }
     465                 :            : 
     466                 :            : //-------------------------------------------------------------------------
     467                 :            : // Purpose       : Determines whether the Facet surface is periodic. Not
     468                 :            : //                 available yet.
     469                 :            : //                 
     470                 :            : //
     471                 :            : //-------------------------------------------------------------------------
     472                 :          0 : CubitBoolean FacetSurface::is_periodic() 
     473                 :            : {
     474         [ #  # ]:          0 :   if ( myEvaluator )
     475                 :          0 :       return myEvaluator->is_periodic();
     476                 :            : 
     477                 :            :     //I'm sure we can do something later to calculate this.  But for now...
     478                 :            :   //PRINT_ERROR("FacetSurface::is_periodic not implemented yet\n");
     479                 :          0 :   return CUBIT_FALSE;
     480                 :            :   
     481                 :            : }
     482                 :            : 
     483                 :            : //-------------------------------------------------------------------------
     484                 :            : // Purpose       : Determines if the face is periodic in the given parameter
     485                 :            : //                 direction.  Not available yet.
     486                 :            : //
     487                 :            : //-------------------------------------------------------------------------
     488                 :          0 : CubitBoolean FacetSurface::is_periodic_in_U( double& period ) 
     489                 :            : {
     490         [ #  # ]:          0 :   if ( myEvaluator )
     491                 :          0 :       return myEvaluator->is_periodic_in_U( period );
     492                 :            : 
     493                 :            :   //PRINT_ERROR("FacetSurface::is_periodic_in_U not implemented yet\n");
     494                 :          0 :   return CUBIT_FALSE;
     495                 :            : }
     496                 :            : 
     497                 :            : //-------------------------------------------------------------------------
     498                 :            : // Purpose       : Determines if the face is periodic in the given parameter
     499                 :            : //                 direction.  Not available yet.
     500                 :            : //
     501                 :            : //
     502                 :            : //-------------------------------------------------------------------------
     503                 :          0 : CubitBoolean FacetSurface::is_periodic_in_V( double& period ) 
     504                 :            : {
     505         [ #  # ]:          0 :   if ( myEvaluator )
     506                 :          0 :       return myEvaluator->is_periodic_in_V( period );
     507                 :            : 
     508                 :            :   //PRINT_ERROR("FacetSurface::is_periodic_in_V not implemented yet\n");
     509                 :          0 :   return CUBIT_FALSE;
     510                 :            : }
     511                 :            : 
     512                 :            : //-------------------------------------------------------------------------
     513                 :            : // Purpose       : Determines if the face is singular in the given parameter
     514                 :            : //                 direction.  Not available yet.
     515                 :            : //
     516                 :            : //-------------------------------------------------------------------------
     517                 :          0 : CubitBoolean FacetSurface::is_singular_in_U( double )
     518                 :            : {
     519         [ #  # ]:          0 :   if ( myEvaluator )
     520                 :          0 :       return myEvaluator->is_singular_in_U();
     521                 :            : 
     522                 :            :   //PRINT_ERROR("FacetSurface::is_singular_in_U not implemented yet\n");
     523                 :          0 :   return CUBIT_FALSE;
     524                 :            : }  
     525                 :            : 
     526                 :            : //-------------------------------------------------------------------------
     527                 :            : // Purpose       : Determines if the face is singular in the given parameter
     528                 :            : //                 direction.  Not available yet.
     529                 :            : //-------------------------------------------------------------------------
     530                 :          0 : CubitBoolean FacetSurface::is_singular_in_V( double )
     531                 :            : {
     532         [ #  # ]:          0 :   if ( myEvaluator )
     533                 :          0 :       return myEvaluator->is_singular_in_V();
     534                 :            : 
     535                 :            :   //PRINT_ERROR("FacetSurface::is_singular_in_V not implemented yet\n");
     536                 :          0 :   return CUBIT_FALSE;
     537                 :            : }
     538                 :            : 
     539                 :            : //-------------------------------------------------------------------------
     540                 :            : // Purpose       : Determines if the face is closed in the U parameter.
     541                 :            : //
     542                 :            : //-------------------------------------------------------------------------
     543                 :          0 : CubitBoolean FacetSurface::is_closed_in_U()
     544                 :            : {
     545         [ #  # ]:          0 :   if ( myEvaluator )
     546                 :          0 :       return myEvaluator->is_closed_in_U();
     547                 :            : 
     548                 :            :   //PRINT_ERROR("FacetSurface::is_closed_in_U not implemented yet\n");
     549                 :          0 :   return CUBIT_FALSE;
     550                 :            : }
     551                 :            : 
     552                 :            : //-------------------------------------------------------------------------
     553                 :            : // Purpose       : Determines if the face is closed in the V parameter.
     554                 :            : //-------------------------------------------------------------------------
     555                 :          0 : CubitBoolean FacetSurface::is_closed_in_V()
     556                 :            : {
     557         [ #  # ]:          0 :   if ( myEvaluator )
     558                 :          0 :       return myEvaluator->is_closed_in_V();
     559                 :            : 
     560                 :            :   //PRINT_ERROR("FacetSurface::is_closed_in_V not implemented yet\n");
     561                 :          0 :   return CUBIT_FALSE;
     562                 :            : }
     563                 :            : 
     564                 :            : //-------------------------------------------------------------------------
     565                 :            : // Purpose       : Calculates the derivitives at a given parameter location.
     566                 :            : //
     567                 :            : //-------------------------------------------------------------------------
     568                 :          0 : CubitStatus FacetSurface::uv_derivitives( double ,
     569                 :            :                                           double ,
     570                 :            :                                           CubitVector &,
     571                 :            :                                           CubitVector & )
     572                 :            : {
     573 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Derivitives on a surface not supported on faceted geometry yet.\n");
     574                 :          0 :   return CUBIT_FAILURE;
     575                 :            : }
     576                 :            : 
     577                 :            : //-------------------------------------------------------------------------
     578                 :            : // Purpose       : Determines whether the surface is parametrically defined.
     579                 :            : //                 Hopefully later this will be available.
     580                 :            : //
     581                 :            : //-------------------------------------------------------------------------
     582                 :        858 : CubitBoolean FacetSurface::is_parametric() 
     583                 :            : {
     584         [ -  + ]:        858 :   if ( myEvaluator )
     585                 :            :   {
     586                 :          0 :       return myEvaluator->is_parametric();
     587                 :            :   }
     588                 :            : 
     589                 :            :   //PRINT_ERROR("FacetSurface::is_parametric not implemented\n");
     590                 :        858 :   return CUBIT_FALSE;
     591                 :            : }
     592                 :            : 
     593                 :            : //-------------------------------------------------------------------------
     594                 :            : // Purpose       : Returns the lower and upper parametric bounds of the 
     595                 :            : //                 surface in U, if it is parametric.  Otherwise, it returns
     596                 :            : //                 CUBIT_FALSE and zeroes for the upper and lower parametric
     597                 :            : //                 bounds.
     598                 :            : //
     599                 :            : // Creator       : Malcolm J. Panthaki
     600                 :            : //
     601                 :            : // Creation Date : 12/17/96
     602                 :            : //-------------------------------------------------------------------------
     603                 :          0 : CubitBoolean FacetSurface::get_param_range_U( double& lower_bound,
     604                 :            :                                              double& upper_bound )
     605                 :            : {
     606         [ #  # ]:          0 :   if ( myEvaluator )
     607                 :          0 :       return myEvaluator->get_param_range_U( lower_bound, upper_bound );
     608                 :            : 
     609                 :          0 :   lower_bound = 0.0;
     610                 :          0 :   upper_bound = 1.0;
     611                 :            :   //PRINT_ERROR("FacetSurface::get_param_range_U not implemented\n");
     612                 :          0 :   return CUBIT_FALSE;
     613                 :            : }
     614                 :            : 
     615                 :            : //-------------------------------------------------------------------------
     616                 :            : // Purpose       : Returns the lower and upper parametric bounds of the 
     617                 :            : //                 surface in V, if it is parametric.  Otherwise, it returns
     618                 :            : //                 CUBIT_FALSE and zeroes for the upper and lower parametric
     619                 :            : //                 bounds.
     620                 :            : //
     621                 :            : //-------------------------------------------------------------------------
     622                 :          0 : CubitBoolean FacetSurface::get_param_range_V( double& lower_bound,
     623                 :            :                                              double& upper_bound )
     624                 :            : {
     625         [ #  # ]:          0 :   if ( myEvaluator )
     626                 :          0 :       return myEvaluator->get_param_range_V( lower_bound, upper_bound );
     627                 :            : 
     628                 :          0 :   lower_bound = 0.0;
     629                 :          0 :   upper_bound = 1.0;
     630                 :            :   //PRINT_ERROR("FacetSurface::get_param_range_V not implemented\n");
     631                 :          0 :   return CUBIT_FALSE;
     632                 :            : }
     633                 :            : 
     634                 :            : //-------------------------------------------------------------------------
     635                 :            : // Purpose       : Returns a surface type ID
     636                 :            : //
     637                 :            : //-------------------------------------------------------------------------
     638                 :        880 : GeometryType FacetSurface::geometry_type()
     639                 :            : {
     640         [ +  - ]:        880 :     if ( is_flat() )
     641                 :            :     {
     642                 :        880 :         return PLANE_SURFACE_TYPE;
     643                 :            :     }
     644         [ #  # ]:          0 :     else if ( is_spherical() )
     645                 :            :     {
     646                 :          0 :         return SPHERE_SURFACE_TYPE;
     647                 :            :     }
     648         [ #  # ]:          0 :     else if ( is_conical() )
     649                 :            :     {
     650                 :          0 :         return CONE_SURFACE_TYPE;
     651                 :            :     }
     652                 :            :     else
     653                 :            :     {
     654                 :          0 :         return FACET_SURFACE_TYPE;
     655                 :            :     }
     656                 :            : }
     657                 :            : 
     658                 :            : //-------------------------------------------------------------------------
     659                 :            : // Purpose       : Returns the area of the Surface
     660                 :            : //
     661                 :            : //-------------------------------------------------------------------------
     662                 :          0 : double FacetSurface::measure() 
     663                 :            : {
     664                 :          0 :   return facetEvalTool->area();
     665                 :            : }
     666                 :            : 
     667                 :            : //-------------------------------------------------------------------------
     668                 :            : // Purpose       : Updates the (cached) area of the Surface so that if 
     669                 :            : //                 measure() is called, the correct value is returned.
     670                 :            : //-------------------------------------------------------------------------
     671                 :         66 : void FacetSurface::update_measurement() 
     672                 :            : {
     673                 :         66 :   facetEvalTool->calculate_area();
     674                 :         66 : }
     675                 :            : 
     676                 :            : //-------------------------------------------------------------------------
     677                 :            : // Purpose       : Returns whether the facet surface is completely flat
     678                 :            : //
     679                 :            : //-------------------------------------------------------------------------
     680                 :        880 : CubitBoolean FacetSurface::is_flat() 
     681                 :            : {
     682         [ +  - ]:        880 :   return (facetEvalTool->is_flat() == 1) ? CUBIT_TRUE : CUBIT_FALSE; 
     683                 :            : }
     684                 :            : 
     685                 :            : //-------------------------------------------------------------------------
     686                 :            : // Purpose       : Returns whether the facet surface is spherical
     687                 :            : //
     688                 :            : //-------------------------------------------------------------------------
     689                 :          0 : CubitBoolean FacetSurface::is_spherical()
     690                 :            : {
     691 [ #  # ][ #  # ]:          0 :     if ( myEvaluator && myEvaluator->ask_type() == SPHERE_SURFACE_TYPE )
                 [ #  # ]
     692                 :            :     {
     693                 :          0 :         return CUBIT_TRUE;
     694                 :            :     }
     695                 :          0 :     return CUBIT_FALSE;
     696                 :            : }
     697                 :            : 
     698                 :            : //-------------------------------------------------------------------------
     699                 :            : // Purpose       : Returns whether the facet surface is spherical
     700                 :            : //
     701                 :            : //-------------------------------------------------------------------------
     702                 :          0 : CubitBoolean FacetSurface::is_conical()
     703                 :            : {
     704 [ #  # ][ #  # ]:          0 :     if ( myEvaluator && myEvaluator->ask_type() == CONE_SURFACE_TYPE )
                 [ #  # ]
     705                 :            :     {
     706                 :          0 :         return CUBIT_TRUE;
     707                 :            :     }
     708                 :          0 :     return CUBIT_FALSE;
     709                 :            : }
     710                 :            : 
     711                 :          0 : const CubitEvaluatorData *FacetSurface::evaluator_data( void )
     712                 :            : {
     713         [ #  # ]:          0 :     if ( myEvaluator )
     714                 :            :     {
     715                 :          0 :         return myEvaluator->evaluator_data();
     716                 :            :     }
     717                 :          0 :     return NULL;
     718                 :            : }
     719                 :            : 
     720                 :            : //-------------------------------------------------------------------------
     721                 :            : // Purpose       : This function tests the passed in position to see if
     722                 :            : //                 is on the underlying surface.
     723                 :            : //
     724                 :            : //-------------------------------------------------------------------------
     725                 :          0 : CubitBoolean FacetSurface::is_position_on( CubitVector &test_position )
     726                 :            : {
     727         [ #  # ]:          0 :   CubitVector new_point;
     728         [ #  # ]:          0 :   CubitStatus stat = closest_point(test_position, &new_point, NULL,NULL,NULL);
     729         [ #  # ]:          0 :   if ( !stat )
     730                 :          0 :     return CUBIT_FALSE;
     731         [ #  # ]:          0 :   CubitVector result_vec = test_position - new_point;
     732 [ #  # ][ #  # ]:          0 :   if ( result_vec.length_squared() < GEOMETRY_RESABS )
     733                 :          0 :     return CUBIT_TRUE;
     734                 :          0 :   return CUBIT_FALSE;
     735                 :            : }
     736                 :          0 : CubitPointContainment FacetSurface::point_containment( const CubitVector &/*point*/ )
     737                 :            : {
     738                 :          0 :    return CUBIT_PNT_UNKNOWN;
     739                 :            : }
     740                 :          0 : CubitPointContainment FacetSurface::point_containment( double /*u_param*/, 
     741                 :            :                                                        double /*v_param*/ )
     742                 :            : {
     743                 :          0 :   return CUBIT_PNT_UNKNOWN; 
     744                 :            : }
     745                 :            : //CubitPointContainment FacetSurface::point_containment( const CubitVector &/*point*/, 
     746                 :            : //                                                       double /*u_param*/,
     747                 :            : //                                                       double /*v_param*/ )
     748                 :            : //{
     749                 :            : //   return CUBIT_PNT_UNKNOWN;
     750                 :            : //}
     751                 :          0 : CubitSense FacetSurface::get_geometry_sense()
     752                 :            : {
     753                 :            :     //not sure if this is right for the facet surface...
     754                 :          0 :   CubitSense sense = CUBIT_FORWARD;//get_relative_surface_sense();
     755                 :          0 :   return sense;
     756                 :            : }
     757                 :            : // CubitSense FacetSurface::get_relative_surface_sense()
     758                 :            : // {
     759                 :            : //     //not sure if this is right for the facet surface...
     760                 :            : //   return sense_;
     761                 :            : // }
     762                 :            : 
     763                 :            : /*
     764                 :            : 
     765                 :            : void FacetSurface::bodysms(DLIList<BodySM*> &bodies) 
     766                 :            : {
     767                 :            :   int ii;
     768                 :            :   for ( ii = myShells.size(); ii > 0; ii-- )
     769                 :            :   {
     770                 :            :     myShells.get_and_step()->bodysms(bodies);
     771                 :            :   }
     772                 :            : }
     773                 :            : 
     774                 :            : void FacetSurface::lumps(DLIList<Lump*> &lumps)
     775                 :            : {
     776                 :            :   int ii;
     777                 :            :   for ( ii = myShells.size(); ii > 0; ii-- )
     778                 :            :   {
     779                 :            :     myShells.get_and_step()->lumps(lumps);
     780                 :            :   }
     781                 :            : }
     782                 :            : 
     783                 :            : void FacetSurface::shellsms(DLIList<ShellSM*> &shellsms)
     784                 :            : {
     785                 :            :   int ii;
     786                 :            :   for ( ii = myShells.size(); ii > 0; ii-- )
     787                 :            :   {
     788                 :            :     shellsms.append_unique(myShells.get_and_step());
     789                 :            :   }
     790                 :            : }
     791                 :            : 
     792                 :            : void FacetSurface::surfaces(DLIList<Surface*> &surfaces)
     793                 :            : {
     794                 :            :   surfaces.append_unique(this);
     795                 :            : }
     796                 :            : 
     797                 :            : void FacetSurface::loopsms(DLIList<LoopSM*> &loopsms)
     798                 :            : {
     799                 :            :   int ii;
     800                 :            :   for ( ii = myLoops.size(); ii > 0; ii-- )
     801                 :            :   {
     802                 :            :     loopsms.append_unique(myLoops.get_and_step());
     803                 :            :   }
     804                 :            : }
     805                 :            : void FacetSurface::coedgesms(DLIList<CoEdgeSM*> &coedgesms)
     806                 :            : {
     807                 :            :   int ii;
     808                 :            :   for ( ii = myLoops.size(); ii > 0; ii-- )
     809                 :            :   {
     810                 :            :     myLoops.get_and_step()->coedgesms(coedgesms);
     811                 :            :   }
     812                 :            : }
     813                 :            : 
     814                 :            : void FacetSurface::curves(DLIList<Curve*> &curves)
     815                 :            : {
     816                 :            :   int ii;
     817                 :            :   for ( ii = myLoops.size(); ii > 0; ii-- )
     818                 :            :   {
     819                 :            :     myLoops.get_and_step()->curves(curves);
     820                 :            :   }
     821                 :            : }
     822                 :            : void FacetSurface::points(DLIList<Point*> &points)
     823                 :            : {
     824                 :            :   int ii;
     825                 :            :   for ( ii = myLoops.size(); ii > 0; ii-- )
     826                 :            :   {
     827                 :            :     myLoops.get_and_step()->points(points);
     828                 :            :   }
     829                 :            : }
     830                 :            : */
     831                 :            : 
     832                 :            : 
     833                 :        231 : void FacetSurface::get_parents_virt( DLIList<TopologyBridge*>& parents )
     834 [ +  - ][ +  + ]:        462 :   { CAST_LIST_TO_PARENT( myShells, parents ); }
     835                 :       1958 : void FacetSurface::get_children_virt( DLIList<TopologyBridge*>& children )
     836 [ +  - ][ +  + ]:       3894 :   { CAST_LIST_TO_PARENT( myLoops, children ); }
     837                 :            : 
     838                 :            : 
     839                 :            : 
     840                 :        616 : CubitStatus FacetSurface::get_my_facets(DLIList<CubitFacet*> &facet_list,
     841                 :            :                                         DLIList<CubitPoint*>& point_list)
     842                 :            : {
     843                 :        616 :   facetEvalTool->get_facets(facet_list);
     844                 :        616 :   facetEvalTool->get_points(point_list);
     845                 :        616 :   return CUBIT_SUCCESS;
     846                 :            : }
     847                 :            : 
     848                 :          0 : void FacetSurface::tris(DLIList<CubitFacet *> &facet_list)
     849                 :            : {
     850                 :          0 :         facetEvalTool->get_facets(facet_list);
     851                 :          0 : }
     852                 :            : 
     853                 :         66 : void FacetSurface::get_my_points(DLIList<CubitPoint*> &point_list)
     854                 :            : {
     855                 :         66 :   facetEvalTool->get_points(point_list);
     856                 :         66 : }
     857                 :            : 
     858                 :          0 : void FacetSurface::get_my_facetedges(DLIList<CubitFacetEdge*> &edge_list)
     859                 :            : {
     860                 :          0 :   facetEvalTool->get_edges(edge_list);
     861                 :          0 : }
     862                 :            : 
     863                 :        275 : void FacetSurface::get_shell_sense( CubitSense &sense0)
     864                 :            : {
     865                 :        275 :   sense0 = myShellSense;
     866                 :        275 : }
     867                 :            : 
     868                 :            : 
     869                 :            : // return the sense with respect to the given shell
     870                 :        473 : CubitSense FacetSurface::get_shell_sense( ShellSM* shell_ptr ) const
     871                 :            : {
     872                 :            :     // work around non-constness of DLIList functions
     873                 :        473 :   FacetSurface* nonconst = const_cast<FacetSurface*>(this);
     874                 :            :   
     875                 :        473 :   int idx = nonconst->myShells.get_index();
     876         [ -  + ]:        473 :   if(idx > 0){
     877 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("Muliple shells attached to surface.\n");
     878                 :          0 :     return CUBIT_UNKNOWN;
     879                 :            :   }
     880                 :        473 :   ShellSM *ashell = myShells.get();
     881         [ +  - ]:        473 :   if (ashell == shell_ptr)
     882                 :            :   {
     883                 :        473 :     return myShellSense;
     884                 :            :   }
     885                 :            : //   else
     886                 :            : //   {
     887                 :            : //     nonconst->myShells.step();
     888                 :            : //     idx = nonconst->myShells.get_index();
     889                 :            : //     ashell = myShells.get();
     890                 :            : //     if (ashell == shell_ptr)
     891                 :            : //     {
     892                 :            : //       return myShellSense[idx];
     893                 :            : //     }
     894                 :            : //   }
     895                 :        473 :   return CUBIT_UNKNOWN;
     896                 :            : }
     897                 :            : 
     898                 :            : // set the sense of the surface with respect to the shell
     899                 :        264 : void FacetSurface::set_shell_sense( FacetShell *facet_shell, 
     900                 :            :                                     CubitSense thesense )
     901                 :            : {
     902                 :            : //    if(thesense == CUBIT_REVERSED){
     903                 :            : //        PRINT_INFO("should not do this.");
     904                 :            : //    }
     905                 :        264 :   int idx = myShells.get_index();
     906         [ -  + ]:        264 :   if(idx > 0){
     907 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("Multiple shells attached to a single surface.\n");
     908                 :        264 :     return;
     909                 :            :   }
     910                 :        264 :   ShellSM *shell_ptr = (ShellSM *)facet_shell;
     911                 :        264 :   ShellSM *ashell = myShells.get();
     912         [ +  - ]:        264 :   if (ashell == shell_ptr)
     913                 :            :   {
     914                 :        264 :     myShellSense = thesense;
     915                 :            :   }
     916                 :            : //   else
     917                 :            : //   {
     918                 :            : //     myShells.step();
     919                 :            : //     idx = myShells.get_index();
     920                 :            : //     ashell = myShells.get();
     921                 :            : //     if (ashell == shell_ptr)
     922                 :            : //     {
     923                 :            : //       myShellSense[idx] = thesense;
     924                 :            : //     }
     925                 :            : //   }
     926                 :            : }
     927                 :            : 
     928                 :            : //----------------------------------------------------------------
     929                 :            : // Function: copy_facets
     930                 :            : // Description: copy the points and facets
     931                 :            : //
     932                 :            : // Author: sjowen
     933                 :            : //----------------------------------------------------------------
     934                 :          0 : CubitStatus FacetSurface::copy_facets(DLIList<CubitFacet*>&copy_facet_list,
     935                 :            :                                       DLIList<CubitPoint*>&copy_point_list,
     936                 :            :                                       std::map<CubitPoint*, CubitPoint*>&old_to_new_cubit_pts)
     937                 :            : {
     938         [ #  # ]:          0 :   if (!facetEvalTool)
     939                 :            :   {
     940 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("Couldn't copy facets.");
         [ #  # ][ #  # ]
     941                 :          0 :     return CUBIT_FAILURE;
     942                 :            :   }
     943                 :            :   int ii;
     944         [ #  # ]:          0 :   DLIList<CubitFacet*>facet_list;
     945 [ #  # ][ #  # ]:          0 :   DLIList<CubitPoint*>point_list;
     946         [ #  # ]:          0 :   facetEvalTool->get_facets( facet_list );
     947         [ #  # ]:          0 :   facetEvalTool->get_points( point_list );
     948 [ #  # ][ #  # ]:          0 :   CubitPoint **point_array = new CubitPoint* [point_list.size()];
                 [ #  # ]
     949                 :            : 
     950                 :            :   //- copy the points
     951         [ #  # ]:          0 :   std::map<CubitPoint*, CubitPoint*>::iterator iter;
     952         [ #  # ]:          0 :   point_list.reset();
     953                 :            :   CubitPoint *new_point, *the_point;
     954 [ #  # ][ #  # ]:          0 :   for(ii=0; ii<point_list.size(); ii++)
     955                 :            :   {
     956         [ #  # ]:          0 :     the_point = point_list.get_and_step();
     957                 :            : 
     958         [ #  # ]:          0 :     iter = old_to_new_cubit_pts.find( the_point );
     959 [ #  # ][ #  # ]:          0 :     if( old_to_new_cubit_pts.end() == iter )
                 [ #  # ]
     960                 :            :     {
     961 [ #  # ][ #  # ]:          0 :       new_point = new CubitPointData( the_point->coordinates() );      
                 [ #  # ]
     962         [ #  # ]:          0 :       copy_point_list.append( new_point );
     963                 :          0 :       point_array[ii] = new_point;
     964 [ #  # ][ #  # ]:          0 :       old_to_new_cubit_pts.insert( std::make_pair( the_point, new_point) );
                 [ #  # ]
     965                 :            :     }
     966                 :            :     else
     967                 :            :     {
     968         [ #  # ]:          0 :       point_array[ii] = iter->second;      
     969 [ #  # ][ #  # ]:          0 :       copy_point_list.append( iter->second );
     970                 :            :     }
     971                 :            : 
     972         [ #  # ]:          0 :     the_point->marked( ii );
     973                 :            :   }
     974                 :            : 
     975                 :            :   //- copy the facets
     976                 :            : 
     977                 :            :   int jj, idx;
     978                 :            :   CubitFacet *new_facet, *the_facet;
     979                 :            :   CubitPoint *points[3];
     980 [ #  # ][ #  # ]:          0 :   for (ii=0; ii<facet_list.size(); ii++)
     981                 :            :   {
     982         [ #  # ]:          0 :     the_facet = facet_list.get_and_step();
     983         [ #  # ]:          0 :     for (jj=0; jj<3; jj++)
     984                 :            :     {
     985 [ #  # ][ #  # ]:          0 :       idx = the_facet->point(jj)->marked();
     986                 :          0 :       points[jj] = point_array[idx];
     987                 :            :     }
     988 [ #  # ][ #  # ]:          0 :     new_facet = new CubitFacetData( points[0], points[1], points[2] );    
     989         [ #  # ]:          0 :     copy_facet_list.append( new_facet );
     990                 :            :   }
     991                 :            : 
     992         [ #  # ]:          0 :   delete [] point_array;
     993                 :            : 
     994         [ #  # ]:          0 :   return CUBIT_SUCCESS;
     995                 :            : }
     996                 :            : 
     997                 :          0 : void FacetSurface::get_bodies( DLIList<FacetBody*>& result_list )
     998                 :            : {
     999         [ #  # ]:          0 :   DLIList<FacetLump*> lump_list;
    1000         [ #  # ]:          0 :   get_lumps( lump_list );
    1001         [ #  # ]:          0 :   lump_list.reset();
    1002 [ #  # ][ #  # ]:          0 :   for ( int i = lump_list.size(); i--; )
    1003                 :            :   {
    1004         [ #  # ]:          0 :     FacetLump* lump = lump_list.get_and_step();
    1005 [ #  # ][ #  # ]:          0 :     FacetBody* body = dynamic_cast<FacetBody*>(lump->get_body());
    1006         [ #  # ]:          0 :     if (body)
    1007         [ #  # ]:          0 :       result_list.append_unique(body);
    1008         [ #  # ]:          0 :   }
    1009                 :          0 : }
    1010                 :            : 
    1011                 :          0 : void FacetSurface::get_lumps( DLIList<FacetLump*>& result_list )
    1012                 :            : {
    1013         [ #  # ]:          0 :   DLIList<FacetShell*> shell_list;
    1014         [ #  # ]:          0 :   get_shells( shell_list );
    1015         [ #  # ]:          0 :   shell_list.reset();
    1016 [ #  # ][ #  # ]:          0 :   for ( int i = shell_list.size(); i--; )
    1017                 :            :   {
    1018         [ #  # ]:          0 :     FacetShell* shell = shell_list.get_and_step();
    1019         [ #  # ]:          0 :     shell->get_lumps( result_list );
    1020 [ #  # ][ #  # ]:          0 :     FacetLump* lump = dynamic_cast<FacetLump*>(shell->get_lump());
    1021         [ #  # ]:          0 :     if (lump)
    1022         [ #  # ]:          0 :       result_list.append_unique(lump);
    1023         [ #  # ]:          0 :   }
    1024                 :          0 : }
    1025                 :            : 
    1026                 :        132 : void FacetSurface::get_shells( DLIList<FacetShell*>& result_list )
    1027                 :            : {
    1028                 :        132 :   myShells.reset();
    1029         [ +  + ]:        264 :   for ( int i = 0; i < myShells.size(); i++ )
    1030 [ +  - ][ -  + ]:        132 :     if ( FacetShell* shell = dynamic_cast<FacetShell*>(myShells.next(i)) )
                 [ +  - ]
    1031         [ +  - ]:        132 :       result_list.append(shell);
    1032                 :        132 : }
    1033                 :            : 
    1034                 :            : 
    1035                 :        957 : void FacetSurface::get_loops( DLIList<FacetLoop*>& result_list )
    1036                 :            : {
    1037                 :        957 :   myLoops.reset();
    1038         [ +  + ]:       1881 :   for ( int i = 0; i < myLoops.size(); i++ )
    1039 [ +  - ][ -  + ]:        924 :     if ( FacetLoop* loop = dynamic_cast<FacetLoop*>(myLoops.next(i)) )
                 [ +  - ]
    1040         [ +  - ]:        924 :       result_list.append(loop);
    1041                 :        957 : }
    1042                 :            : 
    1043                 :        407 : void FacetSurface::get_coedges( DLIList<FacetCoEdge*>& result_list )
    1044                 :            : {
    1045         [ +  - ]:        407 :   DLIList<FacetLoop*> loop_list;
    1046         [ +  - ]:        407 :   get_loops( loop_list );
    1047         [ +  - ]:        407 :   loop_list.reset();
    1048 [ +  - ][ +  + ]:        803 :   for ( int i = 0; i < loop_list.size(); i++ )
    1049 [ +  - ][ +  - ]:        803 :     loop_list.next(i)->get_coedges( result_list );
                 [ +  - ]
    1050                 :        407 : }
    1051                 :            : 
    1052                 :          0 : void FacetSurface::get_curves( DLIList<FacetCurve*>& result_list )
    1053                 :            : {
    1054         [ #  # ]:          0 :   DLIList<FacetCoEdge*> coedge_list;
    1055         [ #  # ]:          0 :   get_coedges( coedge_list );
    1056         [ #  # ]:          0 :   coedge_list.reset();
    1057 [ #  # ][ #  # ]:          0 :   for ( int i = coedge_list.size(); i--; )
    1058                 :            :   {
    1059         [ #  # ]:          0 :     FacetCoEdge* coedge = coedge_list.get_and_step();
    1060 [ #  # ][ #  # ]:          0 :     FacetCurve* curve = dynamic_cast<FacetCurve*>(coedge->curve());
    1061         [ #  # ]:          0 :     if (curve)
    1062         [ #  # ]:          0 :       result_list.append_unique(curve);
    1063         [ #  # ]:          0 :   }
    1064                 :          0 : }
    1065                 :            : 
    1066                 :            : 
    1067                 :            : //-------------------------------------------------------------------------
    1068                 :            : // Purpose       : Remove Shell from shell list
    1069                 :            : //
    1070                 :            : // Special Notes : 
    1071                 :            : //
    1072                 :            : // Creator       : Jason Kraftcheck
    1073                 :            : //
    1074                 :            : // Creation Date : 09/29/03
    1075                 :            : //-------------------------------------------------------------------------
    1076                 :          0 : CubitStatus FacetSurface::remove_shell(FacetShell* shell)
    1077                 :            : {
    1078                 :            :     // Something strange here -- A DLIList of Shells and a 
    1079                 :            :     // two-element array for senses?  Try to keep the senses
    1080                 :            :     // intact anyway...
    1081                 :          0 :   myShells.reset();
    1082         [ #  # ]:          0 :   if (myShells.get() == shell)
    1083                 :          0 :     myShellSense = CUBIT_UNKNOWN;
    1084                 :            :   
    1085 [ #  # ][ #  # ]:          0 :   if (!myShells.move_to(shell))
    1086                 :          0 :     return CUBIT_FAILURE;
    1087                 :            :   
    1088                 :          0 :   myShells.remove();
    1089                 :          0 :   return CUBIT_SUCCESS;
    1090                 :            : }
    1091                 :            : 
    1092                 :            : //-------------------------------------------------------------------------
    1093                 :            : // Purpose       : Tear down topology
    1094                 :            : //
    1095                 :            : // Special Notes : 
    1096                 :            : //
    1097                 :            : // Creator       : Jason Kraftcheck
    1098                 :            : //
    1099                 :            : // Creation Date : 09/29/03
    1100                 :            : //-------------------------------------------------------------------------
    1101                 :          0 : void FacetSurface::disconnect_all_loops()
    1102                 :            : {
    1103                 :          0 :   myLoops.reset();
    1104         [ #  # ]:          0 :   for (int i = myLoops.size(); i--; )
    1105                 :            :   {
    1106                 :          0 :     LoopSM* sm_ptr = myLoops.get_and_step();
    1107         [ #  # ]:          0 :     FacetLoop* loop = dynamic_cast<FacetLoop*>(sm_ptr);
    1108         [ #  # ]:          0 :     if (loop)
    1109                 :            :     {
    1110         [ #  # ]:          0 :       assert(loop->get_surface() == this);
    1111                 :          0 :       loop->remove_surface();
    1112                 :            :     }
    1113                 :            :   }
    1114                 :          0 :   myLoops.clean_out();
    1115                 :          0 : }
    1116                 :            : 
    1117                 :         66 : void FacetSurface::add_transformation( CubitTransformMatrix &tfmat )
    1118                 :            : {
    1119         [ -  + ]:         66 :     if ( myEvaluator )
    1120                 :          0 :         myEvaluator->add_transformation( tfmat );
    1121                 :         66 : }
    1122                 :            : 
    1123                 :            : // ********** END PUBLIC FUNCTIONS         **********
    1124                 :            : 
    1125                 :            : // ********** BEGIN PROTECTED FUNCTIONS    **********
    1126                 :            : // ********** END PROTECTED FUNCTIONS      **********
    1127                 :            : 
    1128                 :            : // ********** BEGIN PRIVATE FUNCTIONS      **********
    1129                 :          0 : void  FacetSurface::reverse_sense()
    1130                 :            : {
    1131         [ #  # ]:          0 :   facetEvalTool->reverse_facets();
    1132         [ #  # ]:          0 :   myLoops.reset();
    1133                 :            :   int i,j;
    1134                 :            :   FacetLoop* this_loop;
    1135                 :            :   LoopSM* this_loop_sm;
    1136         [ #  # ]:          0 :   DLIList<FacetCoEdge *> this_coedge_list;
    1137 [ #  # ][ #  # ]:          0 :   for(i=0;i<myLoops.size();i++){
    1138         [ #  # ]:          0 :     this_loop_sm= myLoops.get_and_step();
    1139         [ #  # ]:          0 :     this_loop = dynamic_cast<FacetLoop*>(this_loop_sm);
    1140         [ #  # ]:          0 :     if(!this_loop){
    1141 [ #  # ][ #  # ]:          0 :       PRINT_ERROR("Unexpected null pointer for loop.\n");
         [ #  # ][ #  # ]
    1142                 :          0 :       return;
    1143                 :            :     }
    1144         [ #  # ]:          0 :    this_loop->reverse();
    1145         [ #  # ]:          0 :    this_coedge_list.clean_out();
    1146         [ #  # ]:          0 :    this_loop->get_coedges(this_coedge_list);
    1147 [ #  # ][ #  # ]:          0 :    for(j=0; j<this_coedge_list.size(); j++){
    1148 [ #  # ][ #  # ]:          0 :      this_coedge_list.get_and_step()->reverse_sense();
    1149                 :            :    }
    1150                 :            :   }
    1151                 :            :   
    1152                 :            :   //sense_ = CubitUtil::opposite_sense( sense_ );
    1153 [ #  # ][ #  # ]:          0 :   myShellSense = CubitUtil::opposite_sense( myShellSense );
                 [ #  # ]
    1154                 :            :   //myShellSense[1] = CubitUtil::opposite_sense( myShellSense[1] );
    1155                 :            : }
    1156                 :            : 
    1157                 :          0 : CubitStatus FacetSurface::get_projected_distance_on_surface( CubitVector *pos1,
    1158                 :            :                                                              CubitVector *pos2, 
    1159                 :            :                                                              double &distance )
    1160                 :            : {
    1161                 :          0 :   return CUBIT_FAILURE;
    1162                 :            : }
    1163                 :            : 
    1164                 :          0 : CubitStatus FacetSurface::get_sphere_params
    1165                 :            : (
    1166                 :            :   CubitVector &center,
    1167                 :            :   double &radius
    1168                 :            : ) const
    1169                 :            : {
    1170 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Currently, Cubit is unable to determine sphere parameters for FacetSurfaces.\n");
    1171                 :          0 :   return CUBIT_FAILURE;
    1172                 :            : }
    1173                 :            : 
    1174                 :          0 : CubitStatus FacetSurface::get_cone_params
    1175                 :            : (
    1176                 :            :   CubitVector &center,
    1177                 :            :   CubitVector &normal,
    1178                 :            :   CubitVector &major_axis,
    1179                 :            :   double &radius_ratio,
    1180                 :            :   double &sine_angle,
    1181                 :            :   double &cos_angle
    1182                 :            : ) const
    1183                 :            : {
    1184 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Currently, Cubit is unable to determine cone parameters for FacetSurfaces.\n");
    1185                 :          0 :   return CUBIT_FAILURE;
    1186                 :            : }
    1187                 :            : 
    1188                 :          0 : CubitStatus FacetSurface::get_torus_params
    1189                 :            : (
    1190                 :            :   CubitVector &center,
    1191                 :            :   CubitVector &normal,
    1192                 :            :   double &major_radius,
    1193                 :            :   double &minor_radius
    1194                 :            : ) const
    1195                 :            : {
    1196 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Currently, Cubit is unable to determine torus parameters for FacetSurfaces.\n");
    1197                 :          0 :   return CUBIT_FAILURE;
    1198                 :            : }
    1199                 :            : 
    1200                 :            : 
    1201                 :          0 : CubitStatus FacetSurface::get_nurb_params
    1202                 :            : (
    1203                 :            :   bool &rational,
    1204                 :            :   int &degree_u,
    1205                 :            :   int &degree_v,
    1206                 :            :   int &num_cntrl_pts_u,
    1207                 :            :   int &num_cntrl_pts_v,
    1208                 :            :   DLIList<CubitVector> &cntrl_pts,
    1209                 :            :   DLIList<double> &cntrl_pt_weights,
    1210                 :            :   DLIList<double> &u_knots,
    1211                 :            :   DLIList<double> &v_knots
    1212                 :            : ) const
    1213                 :            : {
    1214 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("Currently, Cubit is unable to determine nurbs parameters for FacetSurface.\n");
    1215                 :          0 :   return CUBIT_FAILURE;
    1216 [ +  - ][ +  - ]:       6540 : }
    1217                 :            : 
    1218                 :            : // ********** END PRIVATE FUNCTIONS        **********
    1219                 :            : 
    1220                 :            : // ********** BEGIN HELPER CLASSES         **********
    1221                 :            : // ********** END HELPER CLASSES           **********
    1222                 :            : 
    1223                 :            : // ********** BEGIN EXTERN FUNCTIONS       **********
    1224                 :            : // ********** END EXTERN FUNCTIONS         **********
    1225                 :            : 
    1226                 :            : // ********** BEGIN STATIC FUNCTIONS       **********
    1227                 :            : // ********** END STATIC FUNCTIONS         **********

Generated by: LCOV version 1.11