33 class CGeometrySolver;
34 class CPeriodicBoundaries;
53 virtual bool CreateMesh(
string TextileName);
70 void SetMergeTolerance(
double dMergeTolerance) { m_dLayerMergeTolerance = dMergeTolerance; }
73 void SetHybrid(
bool bHybrid) { m_bHybrid = bHybrid; }
82 void SaveVolumeMeshToVTK(
string Filename);
83 void SaveVolumeMeshToABAQUS(
string Filename,
string TextileName);
84 void SaveVolumeMeshToABAQUS(
string Filename,
CTextile& Textile );
118 void CreateVolumeMesh(
CTextile &Textile);
119 void RaiseNodes(
int iIndex);
120 void SubdivideNodes(
int iIndex);
121 double GetBestSeed(
int iIndex);
122 bool ShouldConnect(vector<RAISED_NODE> &Column1, vector<RAISED_NODE> &Column2,
int h1,
int h2);
123 bool ViolatesEdgeConstraint(
const set<pair<int, int> > &EdgeConstraints1,
const set<pair<int, int> > &EdgeConstraints2,
int h,
int h1,
int h2);
124 void MeshColumn(
TRIANGLE Triangle,
int iRegion);
125 bool SplitColumn(
PROJECTED_NODE &Node, vector<int> &YarnIndices, vector<vector<RAISED_NODE> > &Column);
127 int TetMeshColumn(vector<RAISED_NODE> Columns[3], set<pair<int, int> > EdgeConstraints[3]);
128 int MeshDifficultRegion(vector<RAISED_NODE> Columns[3],
int Limits[6], set<pair<int, int> > EdgeConstraints[3]);
129 void FillYarnTangentsData();
130 void BuildEdgeConstraints(vector<RAISED_NODE> Columns[3], set<pair<int, int> > EdgeConstraints[3]);
132 void AddEdgeConstraint(
int i1,
int i2);
133 void BuildMidSideNodes(vector<RAISED_NODE> Columns[3],
int iYarnIndex);
134 void BuildMidSideNode(
int iNodeIndex1,
int iNodeIndex2,
int iYarnIndex,
bool bTop);
135 XYZ GetMidSideNode(
int iNodeIndex1,
int iNodeIndex2);
136 void ConvertMeshToQuadratic();
139 bool GetPairIndices(
int iIndex1,
int iIndex2,
NODE_PAIR &MatchPair);
141 void GetEdgePairIndices(
const NODE_PAIR_SETS &NodePairSets,
int iIndex, set<int> &Match);
145 void CreateNodeSets(
NODE_PAIR_SETS &EdgeNodePairSets, set<int> &CornerIndex,
const vector<XYZ> &Repeats );
149 void AddQuadraticNodesToSets();
151 void SetupFaceSets( vector< set<int> >& FaceSets );
153 vector<int> FindFaceSets( vector< set<int> >& FaceSets,
int iIndex );
155 void AddQuadNodeToSet(
int i,
int j, vector<int>& FaceSeti, vector<int>& FaceSetj, vector<int> &Indices );
157 void AddQuadNodeToFace(
int i,
int j,
int iFace, vector<int> &Indices );
159 int GetQuadNodeToAdd(
int i,
int j );
161 void AddQuadNodeToEdge(
int i,
int j,
int iEdge, vector<int> &Indices );
163 int GetEdge(
int iFace1,
int iFace2 );
165 void RemoveDuplicateNodes();
166 void RemoveDuplicateFaceNodes( vector<int>& FaceSet );
Class for meshing fabric unit cells.
Class for creating realistic fabric geometry using FE.
Defines the nodes and elements of a surface or volume mesh.
ELEMENT_TYPE
Each element type is represented by a unique integer value.
virtual bool CreateMesh(CTextile &Textile)=0
virtual ~CMesherBase(void)
Class for meshing fabric unit cells.
vector< PROJECTED_NODE > m_ProjectedNodes
bool m_bProjectMidSideNodes
pair< int, int > NODE_PAIR
void SetQuadratic(bool bQuadratic)
double GetMergeTolerance()
double m_dLayerMergeTolerance
set< pair< int, int > > m_EdgeConstraints
CPeriodicBoundaries * m_PeriodicBoundaries
vector< NODE_PAIR_SET > NODE_PAIR_SETS
void SetHybrid(bool bHybrid)
NODE_PAIR_SETS m_NodePairSets
CTextileMaterials * m_Materials
bool CreateMesh(string TextileName)
void SetProjectMidSideNodes(bool bProjectMidSideNodes)
void SetMergeTolerance(double dMergeTolerance)
bool GetProjectMidSideNodes()
vector< vector< int > > m_Edges
map< pair< int, int >, XYZ > m_MidSideNodeLocations
vector< NODE_PAIR > NODE_PAIR_SET
int m_iBoundaryConditions
Class used to generate Abaqus output for periodic boundary conditions.
Represents a textile cell containing yarns.
Namespace containing a series of customised math operations not found in the standard c++ library.
bool operator<(const PROP_YARN_INFO &left, const PROP_YARN_INFO &right)
Used for sorting algorithms.
vector< RAISED_NODE > RaisedNodes
vector< int > YarnBoundaryIndices
Struct for representing points in 3D space.