EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
EicCadWizardTorus.cxx
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file EicCadWizardTorus.cxx
1 
2 #include <gp_Torus.hxx>
3 
4 #include <BRepPrimAPI_MakeTorus.hxx>
5 
6 #include <TGeoTorus.h>
7 
8 #include <EicCadWizardTorus.h>
9 
10 // =======================================================================================
11 
13 {
14  // Just need exactly this torus, please;
15  mTorus = new gp_Torus(torus);
16  mSolid = new TopoDS_Shape(BRepPrimAPI_MakeTorus(torus.Position().Ax2(), torus.MajorRadius(),
17  torus.MinorRadius()).Solid());
18 } // EicCadWizardTorus::EicCadWizardTorus()
19 
20 // ---------------------------------------------------------------------------------------
21 
23 {
24  // Check object type first;
25  const EicCadWizardTorus *other = dynamic_cast<const EicCadWizardTorus*>(cut);
26  if (!other) return false;
27 
28  const gp_Torus *tol = mTorus, *tor = other->mTorus;
29 
30  if (fabs(tol->MajorRadius() - tor->MajorRadius()) > _SPATIAL_TOLERANCE_) return false;
31  if (fabs(tol->MinorRadius() - tor->MinorRadius()) > _SPATIAL_TOLERANCE_) return false;
32 
33  if (!tol->Axis().Direction().IsParallel(tor->Axis().Direction(), _ANGULAR_TOLERANCE_))
34  return false;
35 
36  {
37  double dc = sqrt(SQR(tol->Location().X() - tor->Location().X()) +
38  SQR(tol->Location().Y() - tor->Location().Y()) +
39  SQR(tol->Location().Z() - tor->Location().Z()));
40 
41  if (dc > _SPATIAL_TOLERANCE_) return false;
42  }
43 
44  return true;
45 } // EicCadWizardTorus::IsEqual()
46 
47 // ---------------------------------------------------------------------------------------
48 
49 TGeoCombiTrans *EicCadWizardTorus::BuildRootVolume(const char *vname, const char *tname)
50 {
51  new TGeoTorus(vname, mTorus->MajorRadius(), 0.0, mTorus->MinorRadius(), 0.0, 360.0);
52 
53  return Ax3ToCombiTrans(tname, mTorus->Position(), 0.0);
54 
55  //printf("TO (%s) x0[]: %f %f %f, rMa = %f, rMi = %f\n", facets[fc].first ? "-" : "*",
56  // mTorus->Location().X(),
57  // mTorus->Location().Y(), mTorus->Location().Z(),
58  // mTorus->MajorRadius(), mTorus->MinorRadius());
59 } // EicCadWizardTorus::BuildRootVolume()
60 
61 // =======================================================================================