25 std::unique_ptr<Trk::OverlapDescriptor> olap,
28 ,
Layer(laymatprop, thickness, std::move(olap), laytyp)
29 , m_approachDescriptor(nullptr)
37 std::unique_ptr<Trk::OverlapDescriptor> olap,
40 ,
Layer(laymatprop, thickness, std::move(olap), laytyp)
41 , m_approachDescriptor(nullptr)
48 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
50 std::unique_ptr<Trk::OverlapDescriptor> olap,
54 ,
Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp)
55 , m_approachDescriptor(ades)
65 std::unique_ptr<Trk::SurfaceArray> surfaceArray,
68 std::unique_ptr<Trk::OverlapDescriptor> olap,
72 ,
Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp)
73 , m_approachDescriptor(ades)
101 m_approachDescriptor.reset();
102 if (m_surfaceArray) {
103 buildApproachDescriptor();
141 m_transforms = std::make_unique<Transforms>(transf, transf.translation(),
142 transf.rotation().col(2));
144 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
145 buildApproachDescriptor();
168 size_t binsR = layerMaterialBU->
max(0) + 1;
182 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
184 buildApproachDescriptor();
193 if (m_approachDescriptor) {
196 m_approachDescriptor->approachSurfaces(
pos,
dir);
197 if (surfacesOnApproach) {
199 std::vector<Trk::Intersection> sfIntersections;
201 double aPathLength = 10e10;
203 for (
const auto& sfIter : (*surfacesOnApproach)) {
206 sfIter->straightLineIntersection(
pos,
dir,
true, bcheck);
213 if (aSurface)
return (*aSurface);
216 return surfaceRepresentation();
224 const Trk::ICompatibilityEstimator*)
const {
226 if (m_approachDescriptor && resolveSubSurfaces) {
228 return approachSurface(
pos,
double(pDir) *
mom.unit(), bcheck);
230 return surfaceRepresentation();
236 auto aSurfaces = std::make_unique<Trk::ApproachSurfaces>();
238 const auto halfThickness = 0.5 * thickness() * normal();
253 for (
auto& sIter : (*aSurfaces)) {
254 sIter->associateLayer(*
this);
259 m_approachDescriptor =
260 std::make_unique<Trk::ApproachDescriptor>(std::move(aSurfaces));
267 resizeLayer(vBounds, envelope);
282 if (center().isApprox(nDiscCenter))
return;
286 m_transforms = std::make_unique<Transforms>(transf, center);
289 if (m_approachDescriptor && m_approachDescriptor->rebuild())
290 buildApproachDescriptor();