-// ====================================================== makeCylinder
-int Elements::makeCylinder (Cylinder* cyl, Vector* vx, int nr, int na, int nl)
-{
- if (BadElement (cyl) || BadElement (vx) || nr<=0 || na <=3 || nl <=0
- || vx->getNorm () <= Epsil)
- {
- setError ();
- return HERR;
- }
-
- Vertex* orig = cyl->getBase ();
- Vector* dir = cyl->getDirection ();
- double ray = cyl->getRadius ();
- double haut = cyl->getHeight ();
-
- resize (GR_CYLINDRIC, nr, na, nl);
- cyl_closed = true;
- makeCylindricalNodes (orig, vx, dir, ray/(nr+1), 360, haut/nl,
- nr, na, nl, true);
- fillGrid ();
- assoCylinder (orig, dir, 360);
- return HOK;
-}
-// ====================================================== makePipe
-int Elements::makePipe (Cylinder* cyl, Vector* vx, int nr, int na, int nl)
-{
- if (BadElement (cyl) || BadElement (vx) || nr<=0 || na <=3 || nl <=0
- || vx->getNorm () <= Epsil)
- {
- setError ();
- return HERR;
- }
-
- Vertex* orig = cyl->getBase ();
- Vector* dir = cyl->getDirection ();
- double ray = cyl->getRadius ();
- double haut = cyl->getHeight ();
-
- resize (GR_CYLINDRIC, nr, na, nl);
- cyl_closed = true;
- makeCylindricalNodes (orig, vx, dir, ray, 360, haut, nr, na, nl, false);
- fillGrid ();
- assoCylinder (orig, dir, 360);
- return HOK;
-}
-//
-// ---------------------------------------- prism Quads
-//
-// ====================================================== prismQuads
-int Elements::prismQuads (Quads& tstart, Vector* dir, int nbiter)
-{
- if (BadElement (dir) || dir->getNorm () <= Epsil || nbiter <= 0)
- {
- setError ();
- return HERR;
- }
-
- el_root->markAll (NO_USED);
- int nbcells = tstart.size ();
- nbr_vertex = 0;
- nbr_edges = 0;
-
- nbr_hexas = nbcells*nbiter;
-
- tab_hexa.resize (nbr_hexas);
- tab_quad.clear (); // verticaux
- ker_hquad.clear (); // Horizontaux
- tab_edge.clear ();
- tab_pilier.clear ();
- tab_vertex.clear ();
-
- revo_lution = false;
- prism_vec = false;
- gen_matrix.defTranslation (dir);
-
- for (int nro=0 ; nro<nbcells ; nro++)
- {
- prismHexas (nro, tstart[nro], nbiter);
- }
-
- endPrism ();
- return HOK;
-}
-// ====================================================== prismQuadsVec
-int Elements::prismQuadsVec (Quads& tstart, Vector* dir, RealVector& tlen,
- int mode)
-{
- int nbiter = tlen.size();
- if (BadElement (dir) || dir->getNorm () <= Epsil || nbiter <= 0)
- {
- setError ();
- return HERR;
- }
-
- el_root->markAll (NO_USED);
- int nbcells = tstart.size ();
- nbr_vertex = 0;
- nbr_edges = 0;
-
- nbr_hexas = nbcells*nbiter;
-
- tab_hexa.resize (nbr_hexas);
- tab_quad.clear (); // verticaux
- ker_hquad.clear (); // Horizontaux
- tab_edge.clear ();
- tab_pilier.clear ();
- tab_vertex.clear ();
-
- revo_lution = false;
- prism_vec = true;
- dir->getCoord (prism_dir);
- normer_vecteur (prism_dir);
- gen_values = tlen;
-
- for (int nro=0 ; nro<nbcells ; nro++)
- {
- prismHexas (nro, tstart[nro], nbiter);
- }
-
- endPrism ();
- return HOK;
-}
-// ======================================================== revolutionQuads
-int Elements::revolutionQuads (Quads& start, Vertex* center, Vector* axis,
- RealVector &angles)
-{
- int nbiter = angles.size();
- int nbcells = start.size ();
- if (BadElement (center) || BadElement(axis) || nbiter==0 || nbcells==0
- || axis->getNorm () <= Epsil)
- {
- setError ();
- return HERR;
- }
-
- el_root->markAll (NO_USED);
- nbr_vertex = 0;
- nbr_edges = 0;
-
- nbr_hexas = nbcells*nbiter;
-
- tab_hexa.resize (nbr_hexas);
- tab_quad.clear (); // verticaux
- ker_hquad.clear (); // Horizontaux
- tab_edge.clear ();
- tab_pilier.clear ();
- tab_vertex.clear ();
-
- revo_lution = true;
- prism_vec = false;
- revo_axis = axis;
- revo_center = center;
- gen_values = angles;
-
- for (int nro=0 ; nro<nbcells ; nro++)
- {
- prismHexas (nro, start[nro], nbiter);
- }
-
- endPrism ();
- return HOK;
-}