本文整理汇总了C++中HalfEdge::getNextInd方法的典型用法代码示例。如果您正苦于以下问题:C++ HalfEdge::getNextInd方法的具体用法?C++ HalfEdge::getNextInd怎么用?C++ HalfEdge::getNextInd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HalfEdge
的用法示例。
在下文中一共展示了HalfEdge::getNextInd方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: vecEquals
vector<unsigned int> TetrahedMesh::getAdjecentTetraheds(unsigned int ind, arma::Mat<double> v) {
vector<unsigned int> tetraIndices;
Tetrahed tempTetra = mTetraheds->at(ind);
vector<unsigned int> faceIndices = tempTetra.getFaceInd();
int count = 0;
for(int i=0; i<4;i++){
//get face
Face & face = mFaces->at(faceIndices[i]);
//get all vertices of that face
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
Vertex & v1 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v2 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v3 = mVertices->at(edge->getVertexInd());
int index = face.getOppositeFaceInd();
if (index != -1 && (vecEquals(v, v1.getPosition()) || vecEquals(v, v2.getPosition()) || vecEquals(v, v3.getPosition()))){
getAdjecent(mFaces->at(index).getTetrahedInd(), ind, &tetraIndices, v, count);
break;
}
}
return tetraIndices;
}
示例2: updatePosition
void TetrahedMesh::updatePosition(unsigned int tetraIndex, vector<arma::Mat<double> > vertexPos)
{
Tetrahed tempTetra;
tempTetra = mTetraheds->at(tetraIndex);
vector<unsigned int> faceIndices = tempTetra.getFaceInd();
set<unsigned int> vertexIndices;
for(int i=0; i<4;i++){
Face & face = mFaces->at(faceIndices[i]);
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
vertexIndices.insert(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
vertexIndices.insert(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
vertexIndices.insert(edge->getVertexInd());
}
set<unsigned int>::iterator iter = vertexIndices.begin();
int count = 0;
while(iter!=vertexIndices.end())
{
mVertices->at(*iter).setPosition(vertexPos[count]);
iter++;
count++;
}
}
示例3: deconnect
void TetrahedMesh::deconnect(vector<unsigned int> adjecentList, arma::Mat<double> v, unsigned int vIndex) {
unsigned int vInd;
Vertex temp;
temp.setPosition(v);
mVertices->push_back(temp);
vInd = mVertices->size()-1;
for (int j = 0; j < adjecentList.size(); j++) {
vector<unsigned int> faceIndices = mTetraheds->at(adjecentList.at(j)).getFaceInd();
for (int i = 0; i< faceIndices.size();i++) {
Face & face = mFaces->at(faceIndices[i]);
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
Vertex & v1 = mVertices->at(edge->getVertexInd());
if(vecEquals(v1.getPosition(),v)) {
//mFaces->at(faceIndices[i]).setOppositeFaceInd(-1);
edge->setVertexInd(vInd);
break;
}
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v2 = mVertices->at(edge->getVertexInd());
if(vecEquals(v2.getPosition(),v)) {
//mFaces->at(faceIndices[i]).setOppositeFaceInd(-1);
edge->setVertexInd(vInd);
break;
}
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v3 = mVertices->at(edge->getVertexInd());
if(vecEquals(v3.getPosition(),v)) {
edge->setVertexInd(vInd);
break;
}
}
}
}
示例4: getAdjecent
void TetrahedMesh::getAdjecent(unsigned int currentind, unsigned int baseind, vector<unsigned int> *tetraIndices, arma::Mat<double> v, int count){
count += 1;
Tetrahed tempTetra = mTetraheds->at(currentind);
vector<unsigned int> faceIndices = tempTetra.getFaceInd();
for(int i=0; i<4;i++){
bool check = false;
//get face
Face & face = mFaces->at(faceIndices[i]);
//get all vertices of that face
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
Vertex & v1 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v2 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v3 = mVertices->at(edge->getVertexInd());
int index = face.getOppositeFaceInd();
if (index != -1 && (vecEquals(v, v1.getPosition()) || vecEquals(v, v2.getPosition()) || vecEquals(v, v3.getPosition()))){
currentind = mFaces->at(index).getTetrahedInd();
if(currentind != baseind) {
for (int j = 0; j < tetraIndices->size(); j++) {
if (tetraIndices->at(j) == currentind) {
check = true;
break;
}
}
if (check == false) {
tetraIndices->push_back(currentind);
getAdjecent(currentind, baseind, tetraIndices, v,count);
}
}
}
}
}
示例5: crackStructure
void TetrahedMesh::crackStructure(unsigned int ind, arma::Mat<double> eigVec) {
Tetrahed tempTetra = mTetraheds->at(ind);
vector<unsigned int> faceIndices = tempTetra.getFaceInd();
vector<unsigned int> vertexIndices;
for(int i=0; i<4;i++){
Face & face = mFaces->at(faceIndices[i]);
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
vertexIndices.push_back(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
vertexIndices.push_back(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
vertexIndices.push_back(edge->getVertexInd());
}
int size = vertexIndices.size();
unsigned int rIndex = rand() % size;
unsigned int vIndex = vertexIndices.at(rIndex);
arma::Mat<double> v(3,1);
v= mVertices->at(vIndex).getPosition();
vector<unsigned int> adjecentList = getAdjecentTetraheds(ind, v);
if (adjecentList.size() > 0) {
determineLocationOfCrack(ind,adjecentList,v,eigVec,vIndex);
}
}
示例6: AddFace
void TetrahedMesh::AddFace(unsigned int vertexIndex1,unsigned int vertexIndex2, unsigned int vertexIndex3,unsigned int &faceIndex, vector<Face> *mFacesTemp, vector<HalfEdge> *mEdgesTemp, vector<Vertex> *mVerticesTemp)
{
//add halfedges
unsigned int edgeIndex1,edgeIndex2,edgeIndex3,edgeIndex4,edgeIndex5,edgeIndex6;
AddHalfEdgePair(vertexIndex1,vertexIndex2,edgeIndex1,edgeIndex2, mEdgesTemp,mVerticesTemp);
AddHalfEdgePair(vertexIndex2,vertexIndex3,edgeIndex3,edgeIndex4, mEdgesTemp,mVerticesTemp);
AddHalfEdgePair(vertexIndex3,vertexIndex1,edgeIndex5,edgeIndex6, mEdgesTemp,mVerticesTemp);
// Connect inner ring
mEdgesTemp->at(edgeIndex1).setNextInd(edgeIndex3);
mEdgesTemp->at(edgeIndex1).setPrevInd(edgeIndex5);
mEdgesTemp->at(edgeIndex3).setNextInd(edgeIndex5);
mEdgesTemp->at(edgeIndex3).setPrevInd(edgeIndex1);
mEdgesTemp->at(edgeIndex5).setNextInd(edgeIndex1);
mEdgesTemp->at(edgeIndex5).setPrevInd(edgeIndex3);
// Finally, create the face, don't forget to set the normal
Face *face = new Face();
vector<Face>::iterator iter;
iter = mFacesTemp->begin();
int count = 0;
while(iter != mFacesTemp->end()){
HalfEdge* edge = &mEdgesTemp->at(iter->getEdgeInd());
Vertex & v1 = mVerticesTemp->at(edge->getVertexInd());
edge = &mEdgesTemp->at(edge->getNextInd());
Vertex & v2 = mVerticesTemp->at(edge->getVertexInd());
edge = &mEdgesTemp->at(edge->getNextInd());
Vertex & v3 = mVerticesTemp->at(edge->getVertexInd());
if (vecEquals(mVerticesTemp->at(vertexIndex1).getPosition(), v1.getPosition()) || vecEquals(mVerticesTemp->at(vertexIndex1).getPosition(), v2.getPosition()) || vecEquals(mVerticesTemp->at(vertexIndex1).getPosition(), v3.getPosition())){
if(vecEquals(mVerticesTemp->at(vertexIndex2).getPosition(),v1.getPosition()) || vecEquals(mVerticesTemp->at(vertexIndex2).getPosition(), v2.getPosition()) || vecEquals(mVerticesTemp->at(vertexIndex2).getPosition(),v3.getPosition())){
if(vecEquals(mVerticesTemp->at(vertexIndex3).getPosition(), v1.getPosition()) || vecEquals(mVerticesTemp->at(vertexIndex3).getPosition(),v2.getPosition()) || vecEquals(mVerticesTemp->at(vertexIndex3).getPosition(), v3.getPosition())){
face->setOppositeFaceInd(count);
iter->setOppositeFaceInd(mFacesTemp->size());
//cout << "Count: " << count << endl;
break;
}
}
}
count++;
iter += 1;
}
// Connect the face to an edge
face->setEdgeInd(edgeIndex1);
mFacesTemp->push_back((*face));
delete face;
// Compute and assign a normal
mFacesTemp->back().setNormal(FaceNormal(mFacesTemp->size() - 1, mFacesTemp, mEdgesTemp, mVerticesTemp));
// All half-edges share the same left face (previously added)
mEdgesTemp->at(edgeIndex1).setFaceInd(mFacesTemp->size() - 1);
mEdgesTemp->at(edgeIndex2).setFaceInd(mFacesTemp->size() - 1);
mEdgesTemp->at(edgeIndex3).setFaceInd(mFacesTemp->size() - 1);
//also send back faceIndex
faceIndex = mFacesTemp->size() - 1;
}
示例7: RenderEdges
void TetrahedMesh::RenderEdges(int mode) {
const int numTriangles = mFaces->size();
for (int i = 0; i < numTriangles; i++){
Face & face = mFaces->at(i);
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
Vertex & v1 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v2 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v3 = mVertices->at(edge->getVertexInd());
if (mode == 0) {
if (face.getOppositeFaceInd() != -1) {
glColor3f(0.2f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glEnd();
}
}
if (mode == 1) {
if (face.getOppositeFaceInd() == -1) {
glColor3f(0.2f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glEnd();
}
}
if (mode == 2) {
glColor3f(0.2f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glEnd();
}
}
}
示例8: RenderNormals
void TetrahedMesh::RenderNormals(int mode) {
const int numTriangles = mFaces->size();
for (int i = 0; i < numTriangles; i++){
Face & face = mFaces->at(i);
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
Vertex & v1 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v2 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v3 = mVertices->at(edge->getVertexInd());
arma::Mat<double> vCenter, normal;
normal = face.getNormal();
float scale= 80;
vCenter = (v1.getPosition()+v2.getPosition()+v3.getPosition())/3.0;
if (mode == 0) {
if (face.getOppositeFaceInd() != -1) {
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(vCenter[0], vCenter[1], vCenter[2]);
glVertex3f(vCenter[0]+normal[0]/scale, vCenter[1]+normal[1]/scale, vCenter[2]+normal[2]/scale);
glEnd();
}
}
if (mode == 1) {
if (face.getOppositeFaceInd() == -1) {
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(vCenter[0], vCenter[1], vCenter[2]);
glVertex3f(vCenter[0]+normal[0]/scale, vCenter[1]+normal[1]/scale, vCenter[2]+normal[2]/scale);
glEnd();
}
}
if (mode == 2) {
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_LINES);
glVertex3f(vCenter[0], vCenter[1], vCenter[2]);
glVertex3f(vCenter[0]+normal[0]/scale, vCenter[1]+normal[1]/scale, vCenter[2]+normal[2]/scale);
glEnd();
}
}
}
示例9: Render
void TetrahedMesh::Render(int mode)
{
// Draw geometry
const int numTriangles = mFaces->size();
for (int i = 0; i < numTriangles; i++){
Face & face = mFaces->at(i);
face.setNormal(FaceNormal(i,mFaces, mHalfEdges, mVertices));
HalfEdge* edge = &mHalfEdges->at(face.getEdgeInd());
Vertex & v1 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v2 = mVertices->at(edge->getVertexInd());
edge = &mHalfEdges->at(edge->getNextInd());
Vertex & v3 = mVertices->at(edge->getVertexInd());
if(mode == 2){
if (face.getOppositeFaceInd() == -1) {
glColor3f(1.0f, 1.0f, 1.0f);
glNormal3f(face.getNormal()[0], face.getNormal()[1], face.getNormal()[2]);
glBegin(GL_TRIANGLES);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glEnd();
}
}
if(mode == 1){
if (face.getOppositeFaceInd() != -1) {
glColor3f(1.0f, 1.0f, 1.0f);
glNormal3f(face.getNormal()[0], face.getNormal()[1], face.getNormal()[2]);
glBegin(GL_TRIANGLES);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glEnd();
}
}
if(mode == 0){
glColor3f(1.0f, 1.0f, 1.0f);
glNormal3f(face.getNormal()[0], face.getNormal()[1], face.getNormal()[2]);
glBegin(GL_TRIANGLES);
glVertex3f(v1.getPosition()[0], v1.getPosition()[1], v1.getPosition()[2]);
glVertex3f(v2.getPosition()[0], v2.getPosition()[1], v2.getPosition()[2]);
glVertex3f(v3.getPosition()[0], v3.getPosition()[1], v3.getPosition()[2]);
glEnd();
}
}
}