OnePlotMesh(const Mesh *T) : OnePlot(0,2,3),Th(T) { R2 P0,P1; Th->BoundingBox(P0,P1); Pmin=P0; Pmax=P1; }
/// Set up the camera. void GLViewer::SetupCamera() { if(mMesh) mMesh->BoundingBox(mAABBMin, mAABBMax); else { mAABBMin = Vector3(-1.0f, -1.0f, -1.0f); mAABBMax = Vector3(1.0f, 1.0f, 1.0f); } mCameraLookAt = (mAABBMax + mAABBMin) * 0.5f; float delta = (mAABBMax - mAABBMin).Abs(); if(mCameraUp.z > 0.0f) mCameraPosition = Vector3(mCameraLookAt.x, mCameraLookAt.y - 0.8f * delta, mCameraLookAt.z + 0.2f * delta); else mCameraPosition = Vector3(mCameraLookAt.x, mCameraLookAt.y + 0.2f * delta, mCameraLookAt.z + 0.8f * delta); }
Mesh const*SplitMesh3 (Stack stack, Fem2D::Mesh const *const &pTh) { assert(pTh); const Mesh &Th(*pTh); // le maillage d'origne a decoupe using Fem2D::Triangle; using Fem2D::Vertex; using Fem2D::R2; using Fem2D::BoundaryEdge; using Fem2D::Mesh; // using Fem2D::R; int nbv = Th.nv;// nombre de sommet int nbt = Th.nt;// nombre de triangles int neb = Th.neb; // nombre d'aretes fontiere // allocation des nouveaux items du maillage Vertex *v = new Vertex[nbv + nbt]; Triangle *t = new Triangle[nbt * 3]; BoundaryEdge *b = new BoundaryEdge[neb]; // generation des nouveaus sommets Vertex *vv = v; // copie des anciens sommets (remarque il n'y a pas operateur de copy des sommets) for (int i = 0; i < nbv; i++) { Vertex &V = Th(i); vv->x = V.x; vv->y = V.y; vv->lab = V.lab; vv++; } // generation des points barycentre de trianngles for (int k = 0; k < nbt; k++) { Triangle &K = Th[k]; R2 G = ((R2)K[0] + K[1] + K[2]) / 3.; vv->x = G.x; vv->y = G.y; vv->lab = 0; vv++; } // generation des triangles Triangle *tt = t; int nberr = 0; for (int i = 0; i < nbt; i++) { int i0 = Th(i, 0), i1 = Th(i, 1), i2 = Th(i, 2); int ii = nbv + i; // numero du // les 3 triangles par triangles origines (*tt++).set(v, ii, i1, i2, Th[i].lab); (*tt++).set(v, i0, ii, i2, Th[i].lab); (*tt++).set(v, i0, i1, ii, Th[i].lab); } // les arete frontieres qui n'ont pas change BoundaryEdge *bb = b; for (int i = 0; i < neb; i++) { int i1 = Th(Th.bedges[i][0]); int i2 = Th(Th.bedges[i][1]); int lab = Th.bedges[i].lab; *bb++ = BoundaryEdge(v, i1, i2, lab); } // generation de la class Mesh a partir des 3 tableaux : v,t,b { Mesh *m = new Mesh(nbv + nbt, nbt * 3, neb, v, t, b); R2 Pn, Px; m->BoundingBox(Pn, Px); m->quadtree = new Fem2D::FQuadTree(m, Pn, Px, m->nv); // m->decrement(); Add2StackOfPtr2FreeRC(stack, m); return m; } }