This commit is contained in:
Paolo Andreetto
2020-12-27 17:18:56 +01:00
parent a2bd38fc2c
commit 3cea59bc67
2 changed files with 34 additions and 29 deletions

View File

@@ -208,49 +208,54 @@ VoxRaytracer::RayData VoxRaytracer::TraceBetweenPoints(const HPoint3f &in, const
// Rectangular beam
VoxRaytracer::RayData VoxRaytracer::BeamBetweenPoints(const HPoint3f &in, const HPoint3f &out,
int h_thick, int v_thick) const
int x_thick, int y_thick, int z_thick) const
{
if (h_thick < 0) h_thick = 0;
if (v_thick < 0) v_thick = 0;
if (x_thick < 0) x_thick = 0;
if (y_thick < 0) y_thick = 0;
if (z_thick < 0) z_thick = 0;
RayData ray = TraceBetweenPoints(in, out);
if (h_thick == 0 && v_thick == 0) return ray;
if (x_thick == 0 && y_thick == 0 && z_thick == 0) return ray;
RayTable rTable = RayTable(ray.Data().size());
for(auto it = ray.Data().begin(); it < ray.Data().end(); ++it)
{
rTable.emplace(it->vox_id, it->L);
}
RayData beam;
for(auto it = ray.Data().begin(); it < ray.Data().end(); ++it)
for (auto iter : ray.Data())
{
Vector3i rPos = m_Image->UnMap(it->vox_id);
Vector3i rPos = m_Image->UnMap(iter.vox_id);
for (int k = h_thick * -1; k <= h_thick; k++)
for (int k = x_thick * -1; k <= x_thick; k++)
{
for (int j = v_thick * -1; j <= v_thick; j++)
for (int j = y_thick * -1; j <= y_thick; j++)
{
for (int h = z_thick * -1; h <= z_thick; h++)
{
// TODO check data order in StructuredData
Vector3i offset { j, k, 0 };
Vector3i offset { j, k, h };
Vector3i n_id = rPos + offset;
if (!m_Image->IsInsideGrid(n_id)) continue;
Id_t n_vox_id = m_Image->Map(n_id);
Scalarf t_len = (k == 0 && j == 0 && h == 0) ? iter.L : 0; //TODO Verify any condition with L==0
auto tPair = rTable.find(n_vox_id);
if (tPair == rTable.end())
{
beam.AddElement(n_vox_id, 0); //TODO Verify any condition with L==0
rTable.emplace(n_vox_id, t_len);
}
else if (tPair->second != 0)
else if (t_len != 0)
{
beam.AddElement(n_vox_id, tPair->second);
rTable[n_vox_id] = 0;
rTable[n_vox_id] = t_len;
}
}
}
}
}
RayData beam;
for (auto iter : rTable)
{
beam.AddElement(iter.first, iter.second);
}
return beam;
}

View File

@@ -73,7 +73,7 @@ public:
RayData TraceBetweenPoints(const HPoint3f &in, const HPoint3f &out) const;
RayData BeamBetweenPoints(const HPoint3f &in, const HPoint3f &out,
int h_thick = 0, int v_thick = 0) const;
int x_thick = 0, int y_thick = 0, int z_thick = 0) const;
RayData TraceLine(const HLine3f &line) const;