CMS 3D CMS Logo

ExtrudedPolygon.cc
Go to the documentation of this file.
7 
8 #include <cassert>
9 
11 using namespace geant_units::operators;
12 
13 ExtrudedPolygon::ExtrudedPolygon( const std::vector<double> & x,
14  const std::vector<double> & y,
15  const std::vector<double> & z,
16  const std::vector<double> & zx,
17  const std::vector<double> & zy,
18  const std::vector<double> & zscale)
20 {
21  assert( x.size() == y.size());
22  assert( z.size() == zx.size());
23  assert( z.size() == zy.size());
24  assert( z.size() == zscale.size());
25 
26  p_.reserve( x.size() + y.size() + z.size() + zx.size() + zy.size() + zscale.size() + 1 );
27  p_.emplace_back( z.size());
28  p_.insert( p_.end(), x.begin(), x.end());
29  p_.insert( p_.end(), y.begin(), y.end());
30  p_.insert( p_.end(), z.begin(), z.end());
31  p_.insert( p_.end(), zx.begin(), zx.end());
32  p_.insert( p_.end(), zy.begin(), zy.end());
33  p_.insert( p_.end(), zscale.begin(), zscale.end());
34 }
35 
37 {
38  double volume = 0;
39  /* FIXME: volume is not implemented */
40  return volume;
41 }
42 
43 void
44 DDI::ExtrudedPolygon::stream( std::ostream & os ) const
45 {
46  auto xysize = ( unsigned int )(( p_.size() - 4*p_[0]) * 0.5 );
47  os << " XY Points[cm]=";
48  for( unsigned int k = 1; k <= xysize; ++k )
49  os << convertMmToCm( p_[k] ) << ", " << convertMmToCm( p_[k + xysize] ) << "; ";
50  os << " with " << p_[0] << " Z sections:";
51  unsigned int m0 = p_.size() - 4*p_[0];
52  for( unsigned int m = m0; m < m0 + p_[0]; ++m )
53  {
54  os << " z[cm]=" << convertMmToCm( p_[m] );
55  os << ", x[cm]=" << convertMmToCm( p_[m+p_[0]] );
56  os << ", y[cm]=" << convertMmToCm( p_[m+2*p_[0]] );
57  os << ", scale[cm]=" << convertMmToCm( p_[m+3*p_[0]] ) << ";";
58  }
59 }
DDSolidShape
Definition: DDSolidShapes.h:6
double volume() const override
int k[5][pyjets_maxn]
std::vector< double > p_
Definition: Solid.h:32
constexpr NumType convertMmToCm(NumType millimeters)
Definition: GeantUnits.h:110
void stream(std::ostream &) const override