mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
Enable polyhedrons creation
This commit is contained in:
parent
245c0f137d
commit
ec3c747ef2
File diff suppressed because it is too large
Load Diff
@ -100,9 +100,9 @@ class SMESH_Pattern {
|
|||||||
// the loaded pattern to <theFace>. The first key-point
|
// the loaded pattern to <theFace>. The first key-point
|
||||||
// will be mapped into <theNodeIndexOnKeyPoint1>-th node
|
// will be mapped into <theNodeIndexOnKeyPoint1>-th node
|
||||||
|
|
||||||
bool Apply (std::set<const SMDS_MeshFace*> theFaces,
|
bool Apply (std::set<const SMDS_MeshFace*>& theFaces,
|
||||||
const int theNodeIndexOnKeyPoint1,
|
const int theNodeIndexOnKeyPoint1,
|
||||||
const bool theReverse);
|
const bool theReverse);
|
||||||
// Compute nodes coordinates applying
|
// Compute nodes coordinates applying
|
||||||
// the loaded pattern to <theFaces>. The first key-point
|
// the loaded pattern to <theFaces>. The first key-point
|
||||||
// will be mapped into <theNodeIndexOnKeyPoint1>-th node
|
// will be mapped into <theNodeIndexOnKeyPoint1>-th node
|
||||||
@ -116,9 +116,9 @@ class SMESH_Pattern {
|
|||||||
// (0,0,1) key-point will be mapped into <theNode000Index>-th
|
// (0,0,1) key-point will be mapped into <theNode000Index>-th
|
||||||
// node.
|
// node.
|
||||||
|
|
||||||
bool Apply (std::set<const SMDS_MeshVolume*> theVolumes,
|
bool Apply (std::set<const SMDS_MeshVolume*>& theVolumes,
|
||||||
const int theNode000Index,
|
const int theNode000Index,
|
||||||
const int theNode001Index);
|
const int theNode001Index);
|
||||||
// Compute nodes coordinates applying
|
// Compute nodes coordinates applying
|
||||||
// the loaded pattern to <theVolumes>. The (0,0,0) key-point
|
// the loaded pattern to <theVolumes>. The (0,0,0) key-point
|
||||||
// will be mapped into <theNode000Index>-th node. The
|
// will be mapped into <theNode000Index>-th node. The
|
||||||
@ -128,9 +128,9 @@ class SMESH_Pattern {
|
|||||||
bool GetMappedPoints ( std::list<const gp_XYZ *> & thePoints ) const;
|
bool GetMappedPoints ( std::list<const gp_XYZ *> & thePoints ) const;
|
||||||
// Return nodes coordinates computed by Apply() method
|
// Return nodes coordinates computed by Apply() method
|
||||||
|
|
||||||
bool MakeMesh (SMESH_Mesh* theMesh,
|
bool MakeMesh(SMESH_Mesh* theMesh,
|
||||||
const bool toCreatePolygons = false,
|
const bool toCreatePolygons = false,
|
||||||
const bool toCreatePolyedrs = false);
|
const bool toCreatePolyedrs = false);
|
||||||
// Create nodes and elements in <theMesh> using nodes
|
// Create nodes and elements in <theMesh> using nodes
|
||||||
// coordinates computed by either of Apply...() methods
|
// coordinates computed by either of Apply...() methods
|
||||||
|
|
||||||
@ -273,43 +273,80 @@ class SMESH_Pattern {
|
|||||||
// are appended to theEdgesPointsList
|
// are appended to theEdgesPointsList
|
||||||
|
|
||||||
typedef std::set<const SMDS_MeshNode*> TNodeSet;
|
typedef std::set<const SMDS_MeshNode*> TNodeSet;
|
||||||
void mergePoints (std::map<TNodeSet,std::list<std::list<int> > >& xyzIndGroups,
|
|
||||||
std::map< int, std::list< std::list< int >* > >& reverseConnectivity);
|
void mergePoints (const bool uniteGroups);
|
||||||
// Look for coincident points between myXYZs indexed with
|
// Merge XYZ on edges and/or faces.
|
||||||
// list<int> of each element of xyzIndGroups. Coincident indices
|
|
||||||
// are merged in myElemXYZIDs using reverseConnectivity.
|
void makePolyElements(const std::vector< const SMDS_MeshNode* >& theNodes,
|
||||||
|
const bool toCreatePolygons,
|
||||||
|
const bool toCreatePolyedrs);
|
||||||
|
// prepare intermediate data to create Polygons and Polyhedrons
|
||||||
|
|
||||||
|
void createElements(SMESH_Mesh* theMesh,
|
||||||
|
const std::vector<const SMDS_MeshNode* >& theNodesVector,
|
||||||
|
const std::list< std::list< int > > & theElemNodeIDs,
|
||||||
|
const std::vector<const SMDS_MeshElement*>& theElements);
|
||||||
|
// add elements to the mesh
|
||||||
|
|
||||||
|
bool getFacesDefinition(const SMDS_MeshNode** theBndNodes,
|
||||||
|
const int theNbBndNodes,
|
||||||
|
const std::vector< const SMDS_MeshNode* >& theNodes,
|
||||||
|
std::list< int >& theFaceDefs,
|
||||||
|
std::vector<int>& theQuantity);
|
||||||
|
// fill faces definition for a volume face defined by theBndNodes
|
||||||
|
// return true if a face definition changes
|
||||||
|
|
||||||
|
|
||||||
|
bool isReversed(const SMDS_MeshNode* theFirstNode,
|
||||||
|
const std::list< int >& theIdsList) const;
|
||||||
|
// check xyz ids order in theIdsList taking into account
|
||||||
|
// theFirstNode on a link
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// fields
|
// fields
|
||||||
|
|
||||||
bool myIs2D;
|
typedef std::list< int > TElemDef; // element definition is its nodes ids
|
||||||
std::vector< TPoint > myPoints;
|
|
||||||
std::list< int > myKeyPointIDs;
|
|
||||||
std::list< std::list< int > > myElemPointIDs;
|
|
||||||
|
|
||||||
ErrorCode myErrorCode;
|
bool myIs2D;
|
||||||
bool myIsComputed;
|
std::vector< TPoint > myPoints;
|
||||||
bool myIsBoundaryPointsFound;
|
std::list< int > myKeyPointIDs;
|
||||||
|
std::list< TElemDef > myElemPointIDs;
|
||||||
|
|
||||||
TopoDS_Shape myShape;
|
ErrorCode myErrorCode;
|
||||||
|
bool myIsComputed;
|
||||||
|
bool myIsBoundaryPointsFound;
|
||||||
|
|
||||||
|
TopoDS_Shape myShape;
|
||||||
// all functions assure that shapes are indexed so that first go
|
// all functions assure that shapes are indexed so that first go
|
||||||
// ordered vertices, then ordered edge, then faces and maybe a shell
|
// ordered vertices, then ordered edge, then faces and maybe a shell
|
||||||
TopTools_IndexedMapOfOrientedShape myShapeIDMap;
|
TopTools_IndexedMapOfOrientedShape myShapeIDMap;
|
||||||
//TopTools_IndexedMapOfShape myShapeIDMap;
|
std::map< int, list< TPoint* > > myShapeIDToPointsMap;
|
||||||
std::map< int, list< TPoint* > > myShapeIDToPointsMap;
|
|
||||||
|
|
||||||
// for the 2d case:
|
// for the 2d case:
|
||||||
// nb of key-points in each of pattern boundaries
|
// nb of key-points in each of pattern boundaries
|
||||||
std::list< int > myNbKeyPntInBoundary;
|
std::list< int > myNbKeyPntInBoundary;
|
||||||
|
|
||||||
|
|
||||||
// to compute while applying to mesh elements, not to shapes
|
// to compute while applying to mesh elements, not to shapes
|
||||||
std::vector<gp_XYZ> myXYZ;
|
|
||||||
std::list< std::list< int > > myElemXYZIDs;
|
|
||||||
std::map< int, const SMDS_MeshNode*> myXYZIdToNodeMap; // map id to node of a refined element
|
|
||||||
std::vector<const SMDS_MeshElement*> myElements; // refined elements
|
|
||||||
std::vector<const SMDS_MeshNode*> myOrderedNodes;
|
|
||||||
|
|
||||||
std::map< TNodeSet, std::list< std::list<int> > > myLinks;
|
std::vector<gp_XYZ> myXYZ; // XYZ of nodes to create
|
||||||
|
std::list< TElemDef > myElemXYZIDs; // new elements definitions
|
||||||
|
std::map< int, const SMDS_MeshNode*> myXYZIdToNodeMap; // map XYZ id to node of a refined element
|
||||||
|
std::vector<const SMDS_MeshElement*> myElements; // refined elements
|
||||||
|
std::vector<const SMDS_MeshNode*> myOrderedNodes;
|
||||||
|
|
||||||
|
// elements to replace with polygon or polyhedron
|
||||||
|
std::vector<const SMDS_MeshElement*> myPolyElems;
|
||||||
|
// definitions of new poly elements
|
||||||
|
std::list< TElemDef > myPolyElemXYZIDs;
|
||||||
|
std::list< std::vector<int> > myPolyhedronQuantities;
|
||||||
|
|
||||||
|
// map a boundary to XYZs on it;
|
||||||
|
// a boundary (edge or face) is defined as a set of its nodes,
|
||||||
|
// XYZs on a boundary are indices of myXYZ s
|
||||||
|
std::map<TNodeSet,std::list<std::list<int> > > myIdsOnBoundary;
|
||||||
|
// map XYZ id to element it is in
|
||||||
|
std::map< int, std::list< TElemDef* > > myReverseConnectivity;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user