25 VesselProperties::Pointer properties,
26 InSilicoTissueVolume::Pointer volume)
28 Vector::Pointer stepDirection = properties->GetDirectionVector();
29 Vector::Pointer fromPosition = properties->GetPositionVector()->Clone();
31 Vector::Pointer totalWalkingDistance = stepDirection->Clone();
32 totalWalkingDistance->Scale(1.0 / volume->GetSpacing());
34 while (totalWalkingDistance->GetNorm() >= 1)
36 double xPos = fromPosition->GetElement(0);
37 double yPos = fromPosition->GetElement(1);
38 double zPos = fromPosition->GetElement(2);
40 if (!volume->IsInsideVolume(xPos, yPos, zPos))
42 properties->SetRadiusInVoxel(0);
46 double radius = properties->GetRadiusInVoxel();
47 double ceiledRadius = ceil(radius);
49 for (
int x = xPos - ceiledRadius; x <= xPos + ceiledRadius; x += 1)
50 for (
int y = yPos - ceiledRadius; y <= yPos + ceiledRadius; y += 1)
51 for (
int z = zPos - ceiledRadius; z <= zPos + ceiledRadius; z += 1)
53 if (!volume->IsInsideVolume(x, y, z))
57 double xDiff = x - xPos;
58 double yDiff = y - yPos;
59 double zDiff = z - zPos;
60 double vectorLengthDiff = radius - sqrt(xDiff*xDiff + yDiff*yDiff + zDiff*zDiff);
62 if (vectorLengthDiff > 0)
64 volume->SetVolumeValues(x, y, z,
65 properties->GetAbsorptionCoefficient(),
66 properties->GetScatteringCoefficient(),
67 properties->GetAnisotopyCoefficient(),
68 mitk::pa::InSilicoTissueVolume::SegmentationType::VESSEL);
72 totalWalkingDistance->Subtract(stepDirection);
73 fromPosition->Add(stepDirection);
76 properties->SetPositionVector(fromPosition);
void ExpandAndDrawVesselInVolume(VesselProperties::Pointer properties, InSilicoTissueVolume::Pointer volume)