X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHUtils%2FSMESH_TypeDefs.hxx;h=dc74b070247dbd56726b7030b4641d3312a4e28e;hb=refs%2Ftags%2FV9_0_0;hp=afef61b906c5ef24c1eb0a4c8e9db1aad8980281;hpb=741a54331a691355c38e17548fbc14475cfe9b6b;p=modules%2Fsmesh.git diff --git a/src/SMESHUtils/SMESH_TypeDefs.hxx b/src/SMESHUtils/SMESH_TypeDefs.hxx index afef61b90..dc74b0702 100644 --- a/src/SMESHUtils/SMESH_TypeDefs.hxx +++ b/src/SMESHUtils/SMESH_TypeDefs.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -80,8 +80,11 @@ namespace SMESHUtils struct Deleter { TOBJ* _obj; - Deleter( TOBJ* obj = (TOBJ*)NULL ): _obj( obj ) {} + explicit Deleter( TOBJ* obj = (TOBJ*)NULL ): _obj( obj ) {} ~Deleter() { delete _obj; _obj = 0; } + TOBJ& operator*() const { return *_obj; } + TOBJ* operator->() const { return _obj; } + operator bool() const { return _obj; } private: Deleter( const Deleter& ); }; @@ -113,6 +116,16 @@ struct SMESH_TLink: public NLink { if ( first->GetID() < second->GetID() ) std::swap( first, second ); } const SMDS_MeshNode* node1() const { return first; } const SMDS_MeshNode* node2() const { return second; } + + // methods for usage of SMESH_TLink as a hasher in NCollection maps + static int HashCode(const SMESH_TLink& link, int aLimit) + { + return ::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit ); + } + static Standard_Boolean IsEqual(const SMESH_TLink& l1, const SMESH_TLink& l2) + { + return ( l1.node1() == l2.node1() && l1.node2() == l2.node2() ); + } }; //======================================================================= @@ -130,13 +143,12 @@ struct SMESH_OrientedLink: public SMESH_TLink //------------------------------------------ /*! - * \brief SMDS_MeshNode -> gp_XYZ convertor + * \brief SMDS_MeshNode -> gp_XYZ converter */ //------------------------------------------ struct SMESH_TNodeXYZ : public gp_XYZ { const SMDS_MeshNode* _node; - double _xyz[3]; SMESH_TNodeXYZ( const SMDS_MeshElement* e=0):gp_XYZ(0,0,0),_node(0) { Set(e); @@ -146,16 +158,16 @@ struct SMESH_TNodeXYZ : public gp_XYZ if (e) { assert( e->GetType() == SMDSAbs_Node ); _node = static_cast(e); - _node->GetXYZ(_xyz); // - thread safe getting coords - SetCoord( _xyz[0], _xyz[1], _xyz[2] ); + _node->GetXYZ( ChangeData() ); // - thread safe getting coords return true; } return false; } double Distance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).Modulus(); } double SquareDistance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).SquareModulus(); } - bool operator==(const SMESH_TNodeXYZ& other) const { return _node == other._node; } + bool operator==(const SMESH_TNodeXYZ& other) const { return _node == other._node; } }; +typedef SMESH_TNodeXYZ SMESH_NodeXYZ; //-------------------------------------------------- /*! @@ -173,6 +185,7 @@ typedef struct uvPtStruct uvPtStruct(): node(NULL) {} inline gp_XY UV() const { return gp_XY( u, v ); } + inline void SetUV( const gp_XY& uv ) { u = uv.X(); v = uv.Y(); } struct NodeAccessor // accessor to iterate on nodes in UVPtStructVec {