///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 1995-1996 Virtual Design All Rights Reserved.
//
// Permission to use,  copy,  modify,  and  distribute  this  software and its
// documentation for NON-COMMERCIAL purposes and without fee is hereby granted.
//
// VIRTUAL DESIGN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY
// OF THE SOFTWARE, EITHER EXPRESS  OR  IMPLIED,  INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
// OR NON-INFRINGEMENT. VIRTUAL DESIGN SHALL  NOT  BE LIABLE FOR ANY DAMAGES
// SUFFERED BY  LICENSEE AS A RESULT OF USING,  MODIFYING OR DISTRIBUTING THIS
// SOFTWARE OR ITS DERIVATIVES.
//
// THIS SOFTWARE  IS   NOT  DESIGNED  OR  INTENDED FOR USE OR RESALE AS ONLINE
// OR NOT ONLINE CONTROL  EQUIPMENT IN HAZARDOUS  ENVIRONMENTS REQUIRING  FAIL-
// SAFE PERFORMANCE,  SUCH  AS  IN   THE   OPERATION   OF  NUCLEAR  FACILITIES,
// AIRCRAFT   NAVIGATION  OR  COMMUNICATION  SYSTEMS,  AIR   TRAFFIC   CONTROL,
// DIRECT LIFE  SUPPORT  MACHINES, OR WEAPONS SYSTEMS, IN  WHICH  THE  FAILURE
// OF  THE SOFTWARE COULD  LEAD DIRECTLY  TO DEATH, PERSONAL INJURY, OR SEVERE
// PHYSICAL OR ENVIRONMENTAL  DAMAGE ("HIGH RISK ACTIVITIES").  VIRTUAL DESIGN
// SPECIFICALLY DISCLAIMS  ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH
// RISK ACTIVITIES.
///////////////////////////////////////////////////////////////////////////////

/** Classe de test d'un tube centrée en O et axé sur l'axe des abscisses.
 *  La classe tube n'est qu'une classe qui initialise le maillage à l'aide du
 *  modeleur de translation.
 *  @author Guillaume Pelletier.
 *  @version 1.0
 */

class Tube extends Objet3D
 {

 public Tube( float p_diam    , // le diamètre du tube.
              float p_norme   , // la distance entre deux profils.
              int   p_pashor  , // le nombre de profil.
              int   p_pasver  ) // le nombre de point du profil.
  {
  int          l_i ;
  float        l_pasangle,
               l_angle   ,
               l_x = -p_norme * p_pashor / 2 ;
  Sommet3DH [] l_profil = new Sommet3DH[ p_pasver + 1 ] ; // fermé

  // génération d'un profil rond.
  l_pasangle =(float)(Math.PI * 2 / p_pasver);
  for( l_i = 0 ; l_i < p_pasver ; l_i ++ )
     {
     l_angle = l_pasangle * l_i ;
     l_profil[l_i] = new Sommet3DH( l_x                            ,  //x
                                    (float)Math.cos(l_angle)*p_diam,  //y
                                    (float)Math.sin(l_angle)*p_diam,  //z
                                    1.0f                           ); //w
     }

  // on ferme le profil.
  l_profil[p_pasver] = new Sommet3DH( l_profil[0] ) ;

  // l'axe des x
  Vecteur3DH l_axis = new Vecteur3DH( new Sommet3DH(0,0,0,1),
                                      new Sommet3DH(1*p_norme,0,0,1));
  // le modeleur de translation
  modeler l_model = new modelerTrans( l_axis, l_profil, p_pashor );

  // génération des sommets, arêtes et facettes
  l_model.generate(m_data) ;
  }

 }
