Пример #1
0
 OnePlotMesh(const Mesh *T)
   : OnePlot(0,2,3),Th(T) 
 {
   R2 P0,P1;
   Th->BoundingBox(P0,P1);
   Pmin=P0;
   Pmax=P1;
 }
Пример #2
0
/// 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);
}
Пример #3
0
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;
	}
}