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

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : PartitionTool.hpp
       3                 :            : //
       4                 :            : // Purpose       : Functions for splitting geometry
       5                 :            : //
       6                 :            : // Special Notes :
       7                 :            : //
       8                 :            : // Creator       : Jason Kraftcheck
       9                 :            : //
      10                 :            : // Creation Date : 12/13/98
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : 
      13                 :            : #ifndef PARTITION_TOOL_HPP
      14                 :            : #define PARTITION_TOOL_HPP
      15                 :            : 
      16                 :            : class SenseEntity;
      17                 :            : class PartitionEntity;
      18                 :            : class PartitionCurve;
      19                 :            : class PartitionSurface;
      20                 :            : class Loop;
      21                 :            : class Shell;
      22                 :            : 
      23                 :            : class RefEdge;
      24                 :            : class RefVertex;
      25                 :            : class Curve;
      26                 :            : template <class X> class DLIList;
      27                 :            : class PartitionCurve;
      28                 :            : 
      29                 :            : class CubitFacet;
      30                 :            : 
      31                 :            : #include "CubitDefines.h"
      32                 :            : #include "RefEdge.hpp"
      33                 :            : 
      34                 :            : class PartitionTool
      35                 :            : {
      36                 :            : public:
      37                 :            : 
      38                 :            :   static PartitionTool* instance();
      39                 :            : /*
      40                 :            :   virtual CubitStatus partition( RefEdge* edge_ptr,
      41                 :            :                                  RefVertex* split_point,
      42                 :            :                                  RefEdge*& first_new_edge,
      43                 :            :                                  RefEdge*& second_new_edge,
      44                 :            :                                  CubitBoolean ignore_mesh = CUBIT_FALSE );
      45                 :            : */
      46                 :            :   virtual RefVertex* partition( RefEdge* edge_ptr,
      47                 :            :                                  const CubitVector& split_point,
      48                 :            :                                  RefEdge*& first_new_edge,
      49                 :            :                                  RefEdge*& second_new_edge,
      50                 :            :                                  CubitBoolean ignore_mesh = CUBIT_FALSE );
      51                 :            :   virtual RefVertex* partition( RefEdge* edge_ptr,
      52                 :            :                                  const CubitVector& split_point,
      53                 :            :                                  DLIList<RefEdge*>& result_edges,
      54                 :            :                                  CubitBoolean ignore_mesh = CUBIT_FALSE );
      55                 :            :   //R CubitStatus
      56                 :            :   //R- CUBIT_SUCCESS/CUBIT_FAILURE
      57                 :            :   //I edge_ptr
      58                 :            :   //I- A pointer to the RefEdge to Partition.
      59                 :            :   //I split_point
      60                 :            :   //I- A pointer to the Vertex at the split location.
      61                 :            :   //O first_new_edge / second_new_edge
      62                 :            :   //O- Pointers to the new RefEdges created.
      63                 :            :   //- Partition a RefEdge.
      64                 :            : 
      65                 :            :   virtual RefFace* insert_edge( RefFace* face_ptr,
      66                 :            :                                 DLIList<CubitVector*>& segments,
      67                 :            :                                 CubitBoolean       is_meshed,
      68                 :            :                                 DLIList<RefEdge*>& created_curves,
      69                 :            :                                 int level_of_recursion = 0,
      70                 :            :                                 const double *tolerance_length = NULL);
      71                 :            : 
      72                 :            :   virtual CubitStatus insert_edge( DLIList<RefFace*>& input_faces,
      73                 :            :                                    DLIList<CubitVector*>& segments,
      74                 :            :                                    DLIList<RefFace*>& result_faces,
      75                 :            :                                    DLIList<RefEdge*>& created_edges,
      76                 :            :                                    CubitBoolean do_split_curves = CUBIT_FALSE);
      77                 :            : 
      78                 :            : 
      79                 :            :   virtual CubitStatus partition( RefFace* face_ptr,
      80                 :            :                                  RefEdge* edge_ptr,
      81                 :            :                                  RefFace*& new_face1,
      82                 :            :                                  RefFace*& new_face2,
      83                 :            :                                  CubitBoolean );
      84                 :            : 
      85                 :            :   virtual CubitStatus partition( RefFace* face_ptr,
      86                 :            :                                  DLIList<RefEdge*>& split_edges,
      87                 :            :                                  RefFace*& first_new_face,
      88                 :            :                                  RefFace*& second_new_face,
      89                 :            :                                  CubitBoolean ignore_mesh = CUBIT_FALSE );
      90                 :            :   //R CubitStatus
      91                 :            :   //R- CUBIT_SUCCESS/CUBIT_FAILURE
      92                 :            :   //I face_ptr
      93                 :            :   //I- A pointer to the RefFace to split.
      94                 :            :   //I split_edges
      95                 :            :   //I- The list of edges defining split location.
      96                 :            :   //O first_new_face / second_new_face
      97                 :            :   //O- The new RefFaces created.
      98                 :            :   //- Partition a RefFace.
      99                 :            : 
     100                 :            :   virtual CubitStatus partition( RefVolume* vol_ptr,
     101                 :            :                                  DLIList<RefFace*>& split_faces,
     102                 :            :                                  RefVolume*& first_new_volume,
     103                 :            :                                  RefVolume*& second_new_volume,
     104                 :            :                                  CubitBoolean ignore_mesh = CUBIT_FALSE );
     105                 :            :   virtual CubitStatus partition( RefVolume* vol_ptr,
     106                 :            :                                  DLIList<CubitFacet*>& split_faces,
     107                 :            :                                  RefVolume*& first_new_volume,
     108                 :            :                                  RefVolume*& second_new_volume,
     109                 :            :                                  DLIList<RefFace*>& new_surfaces,
     110                 :            :                                  CubitBoolean ignore_mesh = CUBIT_FALSE );
     111                 :            :   //R CubitStatus
     112                 :            :   //I vol_ptr
     113                 :            :   //I- A pointer to the RefVolume to split.
     114                 :            :   //I split_faces
     115                 :            :   //I- The list of faces defining the split location
     116                 :            :   //O first_new_volume/second_new_volume
     117                 :            :   //O- The new RefVolumes created
     118                 :            :   //- Partition a RefVolume.
     119                 :            : 
     120                 :            :   CubitStatus destroy_volume_partition( RefVolume* partition );
     121                 :            : 
     122                 :            :   //CubitStatus partition( RefEdge* edge_ptr,
     123                 :            :   //                       DLIList<RefVertex*>& split_points,
     124                 :            :   //                       DLIList<RefEdge*>& new_edges,
     125                 :            :   //                       CubitBoolean ignore_mesh = CUBIT_FALSE );
     126                 :            :   CubitStatus partition( RefEdge* edge_ptr,
     127                 :            :                          DLIList<CubitVector*>& split_points,
     128                 :            :                          DLIList<RefEdge*>& new_edges,
     129                 :            :                          CubitBoolean ignore_mesh = CUBIT_FALSE );
     130                 :            :   CubitStatus partition( RefEdge* edge_ptr,
     131                 :            :                          DLIList<CubitVector*>& split_points,
     132                 :            :                          DLIList<RefVertex*>& new_vertices,
     133                 :            :                          DLIList<RefEdge*>& new_edges,
     134                 :            :                          CubitBoolean ignore_mesh = CUBIT_FALSE );
     135                 :            :   //R CubitStatus
     136                 :            :   //R- CUBIT_SUCCESS/CUBIT_FAILURE
     137                 :            :   //I edge_ptr
     138                 :            :   //I- A pointer to the RefEdge to Partition.
     139                 :            :   //I split_points
     140                 :            :   //I- A list of Vertices at which to split the curve.
     141                 :            :   //O new_edges
     142                 :            :   //O- The new RefEdges created.
     143                 :            :   //- Partition a RefEdge.
     144                 :            : 
     145                 :            :   CubitStatus partition_face_by_curves( RefFace* face_ptr,
     146                 :            :                          const DLIList<Curve*>& split_curves,
     147                 :            :                          DLIList<RefFace*>& result_faces,
     148                 :            :                          CubitBoolean do_split_curves = CUBIT_FALSE,
     149                 :            :                          DLIList<RefEdge*>* new_edges = NULL,
     150                 :            :                          CubitBoolean ignore_mesh = CUBIT_FALSE );
     151                 :            :   //- Similar to the next function but takes curves as input
     152                 :            : 
     153                 :            :   CubitStatus partition( RefFace* face_ptr,
     154                 :            :                          const DLIList<RefEdge*>& split_edges,
     155                 :            :                          DLIList<RefFace*>& result_faces,
     156                 :            :                          CubitBoolean do_split_curves = CUBIT_FALSE,
     157                 :            :                          DLIList<RefEdge*>* new_edges = NULL,
     158                 :            :                          CubitBoolean ignore_mesh = CUBIT_FALSE );
     159                 :            :   //R CubitStatus
     160                 :            :   //R- CUBIT_SUCCESS/CUBIT_FAILURE
     161                 :            :   //I face_ptr
     162                 :            :   //I- A pointer to the RefFace to partition
     163                 :            :   //I split_edges
     164                 :            :   //I- A list of RefEdges with which to partition the RefFace
     165                 :            :   //O result_faces
     166                 :            :   //O- The RefFaces resulting from the splitting operation
     167                 :            :   //I split_curves
     168                 :            :   //I- If true, spatially compare all RefVertices in the split_edge
     169                 :            :   //I- list with edges in that list and on the RefFace, and partition
     170                 :            :   //I- RefEdges as necessary.
     171                 :            :   //O new_edges
     172                 :            :   //O- If split_curves in CUBIT_TRUE, and this is non-null, a list
     173                 :            :   //O- of new RefEdges created by partitioning will be passed back.
     174                 :            :   //I ignore_mesh
     175                 :            :   //I- If true, operator will not fail if the passed RefFace is meshed,
     176                 :            :   //I- or if split_curves in true and any of the RefEdges are meshed.
     177                 :            :   //I- NOTE: If this is passed as CUBIT_TRUE, it is the responsibility
     178                 :            :   //I-       of the caller to remove the mesh from hidden entities.
     179                 :            :   //- Do multiple partitioning of a RefFace.
     180                 :            : 
     181                 :            :   RefEdge* unpartition( RefEdge* first_partition_edge,
     182                 :            :                         RefEdge* second_partition_edge );
     183                 :            :   //R RefEdge*
     184                 :            :   //R- The RefEdge restored to the model.
     185                 :            :   //I first_partition_edge / second_partition_edge
     186                 :            :   //I- Pointers to RefEdges with PartitionCurve geometry.
     187                 :            :   //O free_vertex
     188                 :            :   //O- A pointer to the freed vertex.
     189                 :            :   //I keep_dead
     190                 :            :   //I- If true, the passed-in RefEdges are not destroyed, but the
     191                 :            :   //I- attached PartitionCurve is.
     192                 :            :   //- Undo a partitioning operation.
     193                 :            : 
     194                 :            :   RefFace* unpartition( RefFace* first_partition_face,
     195                 :            :                         RefFace* second_partition_face );
     196                 :            :   //R RefFace*
     197                 :            :   //R- The RefFace restored to the model.
     198                 :            :   //I first_partition_face / second_partition_face
     199                 :            :   //I- Pointers to RefFaces with PartitionSurface geometry.
     200                 :            :   //O free_edges
     201                 :            :   //O- A list of edges freed by this operation.
     202                 :            :   //I keep_dead
     203                 :            :   //I- If true, the passed-in RefFaces are not destroyed, but the
     204                 :            :   //I- attached PartitionSurface is.
     205                 :            :   //- Undo a partitioning operation.
     206                 :            : 
     207                 :            :    RefVolume* unpartition( RefVolume* first_partition_volume,
     208                 :            :                            RefVolume* second_partition_volume );
     209                 :            :   //R RefVolume*
     210                 :            :   //R- The RefVolume restored to the model.
     211                 :            :   //I first_partition_volume / second_partition_volume
     212                 :            :   //I- Pointers to RefVolumes with PartitionLump geometry.
     213                 :            :   //O free_faces
     214                 :            :   //O- A list of faces freed by this operation.
     215                 :            :   //- Undo a partitioning operation.
     216                 :            : 
     217                 :            :   RefVolume* unpartition( DLIList<RefVolume*>& partition_volumes );
     218                 :            : 
     219                 :            : 
     220                 :            :   virtual CubitStatus unpartitionAll( DLIList<RefEdge*>& partition_edges,
     221                 :            :                               DLIList<RefEdge*>& restored_edges );
     222                 :            :   //R CubitStatus
     223                 :            :   //R- CUBIT_SUCCESS/CUBIT_FAILURE
     224                 :            :   //I partition_edges
     225                 :            :   //I- A list of RefEdges with PartitionCurve geometry.
     226                 :            :   //O restored_edges
     227                 :            :   //O- A list of RefEdges restored to the model.
     228                 :            :   //- Remove a bunch of partitions.
     229                 :            :   //-
     230                 :            :   //- Note: Any vertices freed by this operation will be deleted.
     231                 :            : 
     232                 :            :   virtual CubitStatus unpartitionAll( DLIList<RefFace*>& partition_faces,
     233                 :            :                               DLIList<RefFace*>& restored_faces );
     234                 :            :   //R CubitStatus
     235                 :            :   //R- CUBIT_SUCCESS/CUBIT_FAILURE
     236                 :            :   //I partition_faces
     237                 :            :   //I- A list of RefFaces with PartitionSurfaces geometry.
     238                 :            :   //O restored_faces
     239                 :            :   //O- A list of RefFaces restored to the model.
     240                 :            :   //- Remove a bunch of partitions.
     241                 :            :   //-
     242                 :            :   //- Note: any RefEdges freed by this operation and thier child
     243                 :            :   //-       RefVertices will be deleted.
     244                 :            : 
     245                 :            : 
     246                 :            :   virtual CubitStatus unpartitionAll( DLIList<RefVolume*>& partition_vols,
     247                 :            :                               DLIList<RefVolume*>& restored_vols );
     248                 :            : 
     249                 :            :   RefVertex* make_point_curve( RefFace* ref_face,
     250                 :            :                                const CubitVector& position );
     251                 :            : 
     252                 :            :   CubitStatus make_point_curves( RefFace* ref_face,
     253                 :            :                                  DLIList<CubitVector> &position,
     254                 :            :                                  DLIList<RefVertex*> &new_vertices);
     255                 :            : 
     256                 :            :   virtual ~PartitionTool();
     257                 :            : 
     258                 :            :   virtual CubitStatus can_remove( RefVertex* vertex );
     259                 :            :   virtual CubitStatus can_remove( RefEdge* edge );
     260                 :            :   virtual CubitStatus can_remove( RefFace* face );
     261                 :            : 
     262                 :          0 :   int get_faceting_tolerance() {return facetingTolerance;}
     263                 :            : 
     264                 :            : protected:
     265                 :            : 
     266                 :            :   static PartitionTool* instance_;
     267                 :            : 
     268                 :            :   PartitionTool();
     269                 :            : 
     270                 :            :   DLIList<Surface*>* group_merged_surfaces( DLIList<RefFace*>& face_list,
     271                 :            :                                             int& num_result_sets );
     272                 :            : 
     273                 :            : 
     274                 :            : private:
     275                 :            : 
     276                 :            :   void notify_partition( DLIList<RefEntity*> &partitioning_entities,
     277                 :            :                          BasicTopologyEntity *first_partitioned_entity,
     278                 :            :                          BasicTopologyEntity *second_partitioned_entity,
     279                 :            :                          BasicTopologyEntity *old_entity );
     280                 :            :     // notify observers that the old_entity was partitioned
     281                 :            : 
     282                 :            : 
     283                 :            : 
     284                 :            :   CubitStatus commonGroupingEntities( BasicTopologyEntity* first_bte_ptr,
     285                 :            :                                       BasicTopologyEntity* secnd_bte_ptr,
     286                 :            :                                       GroupingEntity*& first_gpe_ptr,
     287                 :            :                                       GroupingEntity*& second_gpe_ptr ) const;
     288                 :            :     //R CubitStatus
     289                 :            :     //R- CUBIT_SUCCESS/CUBIT_FAILURE
     290                 :            :     //I first_bte_ptr/second_bte_ptr
     291                 :            :     //I- Pointers to two BTEs of the same type.
     292                 :            :     //O first_gpe_ptr/second_gpe_ptr
     293                 :            :     //O- Child grouping entities of first_bte_ptr and second_bte_ptr,
     294                 :            :     //O- respectively.
     295                 :            :     //- This function searches for a grouping entity from each
     296                 :            :     //- of the BTEs for which those GroupingEntites have atleast one
     297                 :            :     //- common child.
     298                 :            :     //- If there is only one pair of grouping entities which meet this
     299                 :            :     //- criteria, they are passed back, and CUBIT_SUCCESS is returned.
     300                 :            :     //- If there is more than one pair, an arbitrary pair is passed
     301                 :            :     //- back, and CUBIT_FAILURE is returned.
     302                 :            :     //- If no common GpEs are found, both pointers are passed back as
     303                 :            :     //- NULL, and CUBIT_FAILURE is returned.
     304                 :            : 
     305                 :            :   int facetingTolerance;
     306                 :            : 
     307                 :            : };
     308                 :            : 
     309                 :            : //-------------------------------------------------------------------------
     310                 :            : // Purpose       : Singleton class
     311                 :            : //
     312                 :            : // Special Notes :
     313                 :            : //
     314                 :            : // Creator       : Jason Kraftcheck
     315                 :            : //
     316                 :            : // Creation Date : 12/13/98
     317                 :            : //-------------------------------------------------------------------------
     318                 :          0 : inline PartitionTool* PartitionTool::instance()
     319                 :            : {
     320 [ #  # ][ #  # ]:          0 :   if( instance_ == NULL ) instance_ = new PartitionTool();
     321                 :          0 :   return instance_;
     322                 :            : }
     323                 :            : 
     324                 :            : #endif
     325                 :            : 

Generated by: LCOV version 1.11