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  assert(x.size() == y.size());
21  assert(z.size() == zx.size());
22  assert(z.size() == zy.size());
23  assert(z.size() == zscale.size());
24 
25  p_.reserve(x.size() + y.size() + z.size() + zx.size() + zy.size() + zscale.size() + 1);
26  p_.emplace_back(z.size());
27  p_.insert(p_.end(), x.begin(), x.end());
28  p_.insert(p_.end(), y.begin(), y.end());
29  p_.insert(p_.end(), z.begin(), z.end());
30  p_.insert(p_.end(), zx.begin(), zx.end());
31  p_.insert(p_.end(), zy.begin(), zy.end());
32  p_.insert(p_.end(), zscale.begin(), zscale.end());
33 }
34 
35 double ExtrudedPolygon::volume() const {
36  double volume = 0;
37  /* FIXME: volume is not implemented */
38  return volume;
39 }
40 
41 void DDI::ExtrudedPolygon::stream(std::ostream& os) const {
42  auto xysize = (unsigned int)((p_.size() - 4 * p_[0]) * 0.5);
43  os << " XY Points[cm]=";
44  for (unsigned int k = 1; k <= xysize; ++k)
45  os << convertMmToCm(p_[k]) << ", " << convertMmToCm(p_[k + xysize]) << "; ";
46  os << " with " << p_[0] << " Z sections:";
47  unsigned int m0 = p_.size() - 4 * p_[0];
48  for (unsigned int m = m0; m < m0 + p_[0]; ++m) {
49  os << " z[cm]=" << convertMmToCm(p_[m]);
50  os << ", x[cm]=" << convertMmToCm(p_[m + p_[0]]);
51  os << ", y[cm]=" << convertMmToCm(p_[m + 2 * p_[0]]);
52  os << ", scale[cm]=" << convertMmToCm(p_[m + 3 * p_[0]]) << ";";
53  }
54 }
double volume() const override
DDSolidShape
Definition: DDSolidShapes.h:6
std::vector< double > p_
Definition: Solid.h:30
constexpr NumType convertMmToCm(NumType millimeters)
Definition: GeantUnits.h:62
void stream(std::ostream &) const override