-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 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
* \brief Load nodes bound to face into a map of node columns
* \param theParam2ColumnMap - map of node columns to fill
* \param theFace - the face on which nodes are searched for
- * \param theBaseEdge - the edge nodes of which are columns' bases
+ * \param theBaseSide - the edges holding nodes on which columns' bases
* \param theMesh - the mesh containing nodes
* \retval bool - false if something is wrong
*
* The key of the map is a normalized parameter of each
- * base node on theBaseEdge.
+ * base node on theBaseSide. Edges in theBaseSide must be sequenced.
* This method works in supposition that nodes on the face
* forms a rectangular grid and elements can be quardrangles or triangles
*/
+ static bool LoadNodeColumns(TParam2ColumnMap & theParam2ColumnMap,
+ const TopoDS_Face& theFace,
+ const std::list<TopoDS_Edge>& theBaseSide,
+ SMESHDS_Mesh* theMesh,
+ SMESH_ProxyMesh* theProxyMesh=0);
+ /*!
+ * \brief Variant of LoadNodeColumns() above with theBaseSide given by one edge
+ */
static bool LoadNodeColumns(TParam2ColumnMap & theParam2ColumnMap,
const TopoDS_Face& theFace,
const TopoDS_Edge& theBaseEdge,
static PShapeIteratorPtr GetAncestors(const TopoDS_Shape& shape,
const SMESH_Mesh& mesh,
TopAbs_ShapeEnum ancestorType);
+ /*!
+ * \brief Find a common ancestors of two shapes of the given type
+ */
+ static TopoDS_Shape GetCommonAncestor(const TopoDS_Shape& shape1,
+ const TopoDS_Shape& shape2,
+ const SMESH_Mesh& mesh,
+ TopAbs_ShapeEnum ancestorType);
/*!
* \brief Return orientation of sub-shape in the main shape
static TopoDS_Vertex IthVertex( const bool is2nd, TopoDS_Edge anEdge, const bool CumOri=true );
+ static TopAbs_ShapeEnum GetGroupType(const TopoDS_Shape& group,
+ const bool avoidCompound=false);
+
public:
// ---------- PUBLIC INSTANCE METHODS ----------
/*!
* \brief Move medium nodes of faces and volumes to fix distorted elements
+ * \param error - container of fixed distorted elements
* \param volumeOnly - fix nodes on geom faces or not if the shape is solid
*/
- void FixQuadraticElements(bool volumeOnly=true);
+ void FixQuadraticElements(SMESH_ComputeErrorPtr& error, bool volumeOnly=true);
/*!
* \brief To set created elements on the shape set by IsQuadraticSubMesh()
/*!
* Creates a node
*/
- SMDS_MeshNode* AddNode(double x, double y, double z, int ID = 0);
+ SMDS_MeshNode* AddNode(double x, double y, double z, int ID = 0, double u=0., double v=0.);
/*!
* Creates quadratic or linear edge
*/
const int id = 0,
bool force3d = true);
+ /*!
+ * Creates LINEAR!!!!!!!!! octahedron
+ */
+ SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2,
+ const SMDS_MeshNode* n3,
+ const SMDS_MeshNode* n4,
+ const SMDS_MeshNode* n5,
+ const SMDS_MeshNode* n6,
+ const SMDS_MeshNode* n7,
+ const SMDS_MeshNode* n8,
+ const SMDS_MeshNode* n9,
+ const SMDS_MeshNode* n10,
+ const SMDS_MeshNode* n11,
+ const SMDS_MeshNode* n12,
+ const int id = 0,
+ bool force3d = true);
+
/*!
* Creates polyhedron. In quadratic mesh, adds medium nodes
*/
const std::vector<int>& quantities,
const int ID=0,
const bool force3d = true);
+ /*!
+ * \brief Enables fixing node parameters on EDGEs and FACEs by
+ * GetNodeU(...,check=true), GetNodeUV(...,check=true), CheckNodeUV() and
+ * CheckNodeU() in case if a node lies on a shape set via SetSubShape().
+ * Default is False
+ */
+ void ToFixNodeParameters(bool toFix);
+
/*!
* \brief Return U of the given node on the edge
*/
const SMDS_MeshNode* GetMediumNode(const SMDS_MeshNode* n1,
const SMDS_MeshNode* n2,
const bool force3d);
+ /*!
+ * \brief Return index and type of the shape (EDGE or FACE only) to set a medium node on
+ */
+ std::pair<int, TopAbs_ShapeEnum> GetMediumPos(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2);
/*!
* \brief Add a link in my data structure
*/
SMESH_Mesh* myMesh;
int myShapeID;
- // to create quadratic elements
bool myCreateQuadratic;
bool mySetElemOnShape;
+ bool myFixNodeParameters;
std::map< int,bool > myNodePosShapesValidity;
bool toCheckPosOnShape(int shapeID ) const;