LCOV - code coverage report
Current view: top level - geom/OCC - OCCPoint.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 64 91 70.3 %
Date: 2020-06-30 00:58:45 Functions: 18 22 81.8 %
Branches: 54 204 26.5 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : OCCPoint.cpp
       3                 :            : //
       4                 :            : // Purpose       : 
       5                 :            : //
       6                 :            : // Special Notes :
       7                 :            : //
       8                 :            : // Creator       : Steven J. Owen
       9                 :            : //
      10                 :            : // Creation Date : 07/15/00
      11                 :            : //
      12                 :            : // Owner         : Steven J. Owen
      13                 :            : //-------------------------------------------------------------------------
      14                 :            : 
      15                 :            : // ********** BEGIN STANDARD INCLUDES      **********
      16                 :            : #include <assert.h>
      17                 :            : // ********** END STANDARD INCLUDES        **********
      18                 :            : 
      19                 :            : // ********** BEGIN CUBIT INCLUDES         **********
      20                 :            : #include "OCCPoint.hpp"
      21                 :            : #include "OCCCurve.hpp"
      22                 :            : #include "OCCQueryEngine.hpp"
      23                 :            : #include "CastTo.hpp"
      24                 :            : #include "OCCAttribSet.hpp"
      25                 :            : #include "BRep_Tool.hxx"
      26                 :            : #include "TopExp.hxx"
      27                 :            : #include "TopoDS_Edge.hxx"
      28                 :            : #include "TopoDS.hxx"
      29                 :            : #include "TopTools_ListIteratorOfListOfShape.hxx"
      30                 :            : #include "TopTools_DataMapOfShapeInteger.hxx"
      31                 :            : #include "TopTools_IndexedDataMapOfShapeListOfShape.hxx"
      32                 :            : #include "BRepBuilderAPI_ModifyShape.hxx"
      33                 :            : #include "BRepBuilderAPI_Transform.hxx"
      34                 :            : #include "BRepBuilderAPI_GTransform.hxx"
      35                 :            : #include "BRepAlgoAPI_BooleanOperation.hxx"
      36                 :            : // ********** END CUBIT INCLUDES           **********
      37                 :            : 
      38                 :            : // ********** BEGIN STATIC DECLARATIONS    **********
      39                 :            : // ********** END STATIC DECLARATIONS      **********
      40                 :            : 
      41                 :            : // ********** BEGIN PUBLIC FUNCTIONS       **********
      42                 :            : 
      43                 :            : //-------------------------------------------------------------------------
      44                 :            : // Purpose       : The constructor with a pointer to the location
      45                 :            : //
      46                 :            : // Special Notes :
      47                 :            : //
      48                 :            : // Creator       : Jane Hu
      49                 :            : //
      50                 :            : // Creation Date : 10/08/07
      51                 :            : //-------------------------------------------------------------------------
      52         [ #  # ]:          0 : OCCPoint::OCCPoint( const CubitVector &location )
      53                 :            : {
      54 [ #  # ][ #  # ]:          0 :   gp_Pnt pt = gp_Pnt( location.x(), location.y(), location.z());
         [ #  # ][ #  # ]
      55 [ #  # ][ #  # ]:          0 :   TopoDS_Vertex theVertex = BRepBuilderAPI_MakeVertex(pt);
                 [ #  # ]
      56 [ #  # ][ #  # ]:          0 :   myTopoDSVertex = new TopoDS_Vertex(theVertex);
                 [ #  # ]
      57                 :          0 : }
      58                 :            : 
      59                 :            :  //-------------------------------------------------------------------------
      60                 :            : // Purpose       : The constructor with a gp_Pnt point
      61                 :            : //
      62                 :            : // Special Notes :
      63                 :            : //
      64                 :            : // Creator       : Jane Hu
      65                 :            : //
      66                 :            : // Creation Date : 10/19/07
      67                 :            : //-------------------------------------------------------------------------
      68         [ #  # ]:          0 : OCCPoint::OCCPoint( gp_Pnt& thePoint )
      69                 :            : {
      70 [ #  # ][ #  # ]:          0 :   TopoDS_Vertex theVertex = BRepBuilderAPI_MakeVertex(thePoint);
                 [ #  # ]
      71 [ #  # ][ #  # ]:          0 :   myTopoDSVertex = new TopoDS_Vertex(theVertex);
                 [ #  # ]
      72                 :          0 : }
      73                 :            : 
      74                 :            : //-------------------------------------------------------------------------
      75                 :            : // Purpose       : The destructor. 
      76                 :            : //
      77                 :            : // Special Notes :
      78                 :            : //
      79                 :            : // Creator       : Jane Hu
      80                 :            : //
      81                 :            : // Creation Date : 10/08/07
      82                 :            : //-------------------------------------------------------------------------
      83         [ +  - ]:      46047 : OCCPoint::~OCCPoint() 
      84                 :            : {
      85         [ +  - ]:      15349 :   if (myTopoDSVertex)
      86                 :            :   {
      87 [ +  - ][ +  - ]:      15349 :     delete (TopoDS_Vertex*)myTopoDSVertex;
                 [ +  - ]
      88                 :      15349 :     myTopoDSVertex = NULL;
      89                 :            :   }
      90         [ -  + ]:      30698 : }
      91                 :            : 
      92                 :     151004 : void OCCPoint::add_curve(OCCCurve* curve)
      93                 :            : {
      94         [ -  + ]:     151004 :   assert(curve != NULL);
      95                 :     151004 :   myCurveList.append_unique(curve);
      96                 :     151004 : }
      97                 :            : 
      98                 :      73712 : void OCCPoint::remove_curve(OCCCurve* curve)
      99                 :            : {
     100         [ -  + ]:      73712 :   assert(curve != NULL);
     101                 :      73712 :   myCurveList.remove(curve);
     102                 :      73712 : }
     103                 :            : 
     104                 :     133138 : void OCCPoint::set_TopoDS_Vertex(TopoDS_Vertex vertex)
     105                 :            : {
     106 [ +  - ][ +  + ]:     133138 :   if(myTopoDSVertex && vertex.IsEqual(*myTopoDSVertex))
                 [ +  + ]
     107                 :      26236 :     return;
     108         [ +  - ]:     106902 :   if(myTopoDSVertex)
     109                 :     106902 :     myTopoDSVertex->Nullify();
     110                 :     106902 :   *myTopoDSVertex = vertex;
     111                 :            : }
     112                 :            : //-------------------------------------------------------------------------
     113                 :            : // Purpose       : The purpose of this function is to append a
     114                 :            : //                 attribute to the GE. The name is attached to the 
     115                 :            : //                 underlying solid model entity this one points to.
     116                 :            : //
     117                 :            : //
     118                 :            : // Special Notes : 
     119                 :            : //
     120                 :            : // Creator       : Steve Owen
     121                 :            : //
     122                 :            : // Creation Date : 07/16/00
     123                 :            : //-------------------------------------------------------------------------
     124                 :       6549 : void OCCPoint::append_simple_attribute_virt(const CubitSimpleAttrib &csa)
     125                 :       6549 :   { OCCAttribSet::append_attribute(csa, *myTopoDSVertex); }
     126                 :            : 
     127                 :            : //-------------------------------------------------------------------------
     128                 :            : // Purpose       : The purpose of this function is to remove a simple 
     129                 :            : //                 attribute attached to this geometry entity. The name is 
     130                 :            : //                 removed from the underlying BODY this points to.
     131                 :            : //
     132                 :            : // Special Notes : 
     133                 :            : //
     134                 :            : // Creator       : Steve Owen
     135                 :            : //
     136                 :            : // Creation Date : 07/16/00
     137                 :            : //-------------------------------------------------------------------------
     138                 :      66536 : void OCCPoint::remove_simple_attribute_virt(const CubitSimpleAttrib &csa)
     139                 :      66536 :   { OCCAttribSet::remove_attribute(csa, *myTopoDSVertex); }
     140                 :            : 
     141                 :            : //-------------------------------------------------------------------------
     142                 :            : // Purpose       : The purpose of this function is to remove all simple 
     143                 :            : //                 attributes attached to this geometry entity.  Also
     144                 :            : //                 removes lingering GTC attributes.
     145                 :            : //
     146                 :            : //
     147                 :            : // Special Notes : 
     148                 :            : //
     149                 :            : // Creator       : Steve Owen
     150                 :            : //
     151                 :            : // Creation Date : 07/16/00
     152                 :            : //-------------------------------------------------------------------------
     153                 :      52786 : void OCCPoint::remove_all_simple_attribute_virt()
     154                 :            : {
     155         [ +  - ]:      52786 :   OCCAttribSet::remove_attribute(CubitSimpleAttrib(), *myTopoDSVertex);
     156                 :      52786 : }
     157                 :            : 
     158                 :            : //-------------------------------------------------------------------------
     159                 :            : // Purpose       : The purpose of this function is to get the  
     160                 :            : //                 attributes attached to this geometry entity. The name is 
     161                 :            : //                 attached to the underlying BODY this points to.
     162                 :            : //
     163                 :            : // Special Notes : 
     164                 :            : //
     165                 :            : // Creator       : Steve Owen
     166                 :            : //
     167                 :            : // Creation Date : 07/16/00
     168                 :            : //-------------------------------------------------------------------------
     169                 :      32496 : CubitStatus OCCPoint::get_simple_attribute(DLIList<CubitSimpleAttrib>&
     170                 :            :                                                csa_list)
     171                 :      32496 :   { return OCCAttribSet::get_attributes(*myTopoDSVertex,csa_list);
     172                 :            :   }
     173                 :            : 
     174                 :     198423 : CubitStatus OCCPoint::get_simple_attribute(const CubitString& name,
     175                 :            :                                      DLIList<CubitSimpleAttrib>& csa_list )
     176                 :     198423 :   { return OCCAttribSet::get_attributes( name, *myTopoDSVertex, csa_list );
     177                 :            :   }
     178                 :            : 
     179                 :            : //-------------------------------------------------------------------------
     180                 :            : // Purpose       : Returns the coordinates of this Point. 
     181                 :            : //
     182                 :            : // Special Notes :
     183                 :            : //
     184                 :            : // Creator       : Jane Hu
     185                 :            : //
     186                 :            : // Creation Date : 10/08/07
     187                 :            : //-------------------------------------------------------------------------
     188                 :     420755 : CubitVector OCCPoint::coordinates() const
     189                 :            : {
     190         [ +  - ]:     420755 :   gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
     191 [ +  - ][ +  - ]:     420755 :   CubitVector p(pt.X(), pt.Y(), pt.Z());
         [ +  - ][ +  - ]
     192                 :     420755 :   return p;
     193                 :            : }
     194                 :            : 
     195                 :       4318 : CubitBoolean OCCPoint::is_equal(OCCPoint & other, double Tol)
     196                 :            : {
     197         [ +  - ]:       4318 :   gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
     198 [ +  - ][ +  - ]:       4318 :   TopoDS_Vertex otherVertex = *(other.get_TopoDS_Vertex());
     199         [ +  - ]:       4318 :   const gp_Pnt otherPnt = BRep_Tool::Pnt(otherVertex);
     200 [ +  - ][ +  - ]:       4318 :   return pt.IsEqual(otherPnt, Tol);
     201                 :            : }   
     202                 :            :   
     203                 :          0 : double OCCPoint::distance(OCCPoint & other)
     204                 :            : {
     205         [ #  # ]:          0 :   gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
     206 [ #  # ][ #  # ]:          0 :   return pt.Distance(BRep_Tool::Pnt(*(other.get_TopoDS_Vertex())));
                 [ #  # ]
     207                 :            : }
     208                 :            : 
     209                 :          0 : double OCCPoint::SquareDistance (OCCPoint & other)
     210                 :            : {
     211         [ #  # ]:          0 :   gp_Pnt pt = BRep_Tool::Pnt(*myTopoDSVertex);
     212 [ #  # ][ #  # ]:          0 :   return pt.SquareDistance(BRep_Tool::Pnt(*(other.get_TopoDS_Vertex())));
                 [ #  # ]
     213                 :            : }
     214                 :            : //-------------------------------------------------------------------------
     215                 :            : // Purpose       : Get geometry modeling engine: OCCGeometryEngine
     216                 :            : //
     217                 :            : // Special Notes :
     218                 :            : //
     219                 :            : // Creator       : Steve Owen
     220                 :            : //
     221                 :            : // Creation Date : 07/16/00
     222                 :            : //-------------------------------------------------------------------------
     223                 :       6119 : GeometryQueryEngine* OCCPoint::get_geometry_query_engine() const
     224                 :            : {
     225                 :       6119 :   return OCCQueryEngine::instance();
     226                 :            : }                 
     227                 :            : 
     228                 :            : //-------------------------------------------------------------------------
     229                 :            : // Purpose       : Get the bounding box of the object.
     230                 :            : //
     231                 :            : // Special Notes :
     232                 :            : //
     233                 :            : // Creator       : Steve Owen
     234                 :            : //
     235                 :            : // Creation Date : 07/16/00
     236                 :            : //-------------------------------------------------------------------------
     237                 :       1453 : CubitBox OCCPoint::bounding_box() const 
     238                 :            : {
     239         [ +  - ]:       1453 :   CubitVector temp_vector = this->coordinates();
     240         [ +  - ]:       1453 :   CubitBox temp_box(temp_vector);
     241                 :       1453 :   return temp_box;
     242                 :            : }
     243                 :            : 
     244                 :            : 
     245                 :       8766 : void OCCPoint::get_parents_virt( DLIList<TopologyBridge*>& parents ) 
     246                 :            : {
     247 [ +  - ][ +  + ]:      28975 :   CAST_LIST_TO_PARENT(myCurveList, parents);
     248                 :       8766 : }
     249                 :      41872 : void OCCPoint::get_children_virt( DLIList<TopologyBridge*>& ) 
     250                 :      41872 :   {  }
     251                 :            : 
     252                 :            : //----------------------------------------------------------------
     253                 :            : // Function: to update the core vertex
     254                 :            : //           for any movement of the body/surface/curve/vertex.
     255                 :            : // Author: Jane Hu
     256                 :            : //----------------------------------------------------------------
     257                 :       4596 : void OCCPoint::update_OCC_entity( BRepBuilderAPI_ModifyShape *aBRepTrsf,
     258                 :            :                                   BRepAlgoAPI_BooleanOperation *op)
     259                 :            : {
     260         [ -  + ]:       4596 :   if (this->myMarked == CUBIT_TRUE)
     261                 :       4596 :     return;
     262                 :            : 
     263 [ -  + ][ #  # ]:       4596 :   assert(aBRepTrsf != NULL || op != NULL);
     264                 :            : 
     265         [ +  - ]:       4596 :   TopoDS_Shape shape;
     266         [ +  - ]:       4596 :   if(aBRepTrsf)
     267 [ +  - ][ +  - ]:       4596 :     shape = aBRepTrsf->ModifiedShape(*get_TopoDS_Vertex());
                 [ +  - ]
     268                 :            :  
     269                 :            :   else
     270                 :            :   {
     271         [ #  # ]:          0 :     TopTools_ListOfShape shapes;
     272 [ #  # ][ #  # ]:          0 :     shapes.Assign(op->Modified(*get_TopoDS_Vertex()));
                 [ #  # ]
     273 [ #  # ][ #  # ]:          0 :     if(shapes.Extent() == 0)
     274 [ #  # ][ #  # ]:          0 :       shapes.Assign(op->Generated(*get_TopoDS_Vertex()));
                 [ #  # ]
     275 [ #  # ][ #  # ]:          0 :     if(shapes.Extent() == 1)
     276 [ #  # ][ #  # ]:          0 :       shape = shapes.First();
     277 [ #  # ][ #  # ]:          0 :     else if(shapes.Extent() > 1)
     278                 :            :     {
     279                 :            :       //update all attributes first.
     280         [ #  # ]:          0 :       TopTools_ListIteratorOfListOfShape it;
     281         [ #  # ]:          0 :       it.Initialize(shapes);
     282 [ #  # ][ #  # ]:          0 :       shape = shapes.First();
     283                 :            :     }
     284 [ #  # ][ #  # ]:          0 :     else if(op->IsDeleted(*get_TopoDS_Vertex()))
                 [ #  # ]
     285                 :            :       ;
     286                 :            :     else
     287 [ #  # ][ #  # ]:          0 :       return ;
     288                 :            :   }
     289 [ +  - ][ +  - ]:       9192 :   TopoDS_Vertex vertex;
         [ +  - ][ +  - ]
     290 [ +  - ][ +  - ]:       4596 :   if(!shape.IsNull())
     291 [ +  - ][ +  - ]:       4596 :     vertex = TopoDS::Vertex(shape);
     292                 :            : 
     293 [ +  - ][ +  - ]:       4596 :   OCCQueryEngine::instance()->update_OCC_map(*myTopoDSVertex, vertex);
     294                 :            : 
     295         [ +  - ]:       4596 :   set_myMarked(CUBIT_TRUE);
     296 [ +  - ][ +  - ]:       9192 :   set_TopoDS_Vertex(vertex);
                 [ +  - ]
     297 [ +  - ][ +  - ]:       6364 : }
     298                 :            : 
     299                 :            : // ********** END PUBLIC FUNCTIONS         **********
     300                 :            : 
     301                 :            : // ********** BEGIN PROTECTED FUNCTIONS    **********
     302                 :            : // ********** END PROTECTED FUNCTIONS      **********
     303                 :            : 
     304                 :            : // ********** BEGIN PRIVATE FUNCTIONS      **********
     305                 :            : // ********** END PRIVATE FUNCTIONS        **********
     306                 :            : 
     307                 :            : // ********** BEGIN HELPER CLASSES         **********
     308                 :            : // ********** END HELPER CLASSES           **********
     309                 :            : 
     310                 :            : // ********** BEGIN EXTERN FUNCTIONS       **********
     311                 :            : // ********** END EXTERN FUNCTIONS         **********
     312                 :            : 
     313                 :            : // ********** BEGIN STATIC FUNCTIONS       **********
     314                 :            : // ********** END STATIC FUNCTIONS         **********

Generated by: LCOV version 1.11