iMSTK
Interactive Medical Simulation Toolkit
imstkSphere.cpp
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #include "imstkSphere.h"
8 #include "imstkLogger.h"
9 
10 namespace imstk
11 {
12 void
14 {
16  LOG(INFO) << "Radius: " << m_radius;
17 }
18 
19 double
20 Sphere::getRadius(DataType type /* = DataType::PostTransform */)
21 {
22  if (type == DataType::PostTransform)
23  {
25  return m_radiusPostTransform;
26  }
27  return m_radius;
28 }
29 
30 void
31 Sphere::setRadius(const double r)
32 {
33  if (r <= 0)
34  {
35  LOG(WARNING) << "error: radius supplied is negative";
36  return;
37  }
38  m_radius = r;
39  m_transformApplied = false;
40  this->postModified();
41 }
42 
43 void
44 Sphere::computeBoundingBox(Vec3d& lowerCorner, Vec3d& upperCorner, const double paddingPercent)
45 {
47  const Vec3d span = Vec3d(1, 1, 1) * m_radiusPostTransform;
48  lowerCorner = m_positionPostTransform - span;
49  upperCorner = m_positionPostTransform + span;
50  if (paddingPercent > 0.0)
51  {
52  const Vec3d range = upperCorner - lowerCorner;
53  lowerCorner = lowerCorner - range * (paddingPercent / 100.0);
54  upperCorner = upperCorner + range * (paddingPercent / 100.0);
55  }
56 }
57 
58 void
59 Sphere::applyTransform(const Mat4d& m)
60 {
62  /*const Vec3d s = Vec3d(
63  m.block<3, 1>(0, 0).norm(),
64  m.block<3, 1>(0, 1).norm(),
65  m.block<3, 1>(0, 2).norm());*/
66  const double s0 = m.block<3, 1>(0, 0).norm();
67  this->setRadius(m_radius * s0);
68 }
69 
70 void
72 {
73  if (m_transformApplied)
74  {
75  return;
76  }
78  const double s0 = m_transform.block<3, 1>(0, 0).norm();
80  m_transformApplied = true;
81 }
82 } // namespace imstk
Mat4d m_transform
Transformation matrix.
void computeBoundingBox(Vec3d &lowerCorner, Vec3d &upperCorner, const double paddingPercent=0.0) override
Get the min, max of the AABB around the sphere.
Definition: imstkSphere.cpp:44
void updatePostTransformData() const override
Apply the global transform to the local parameters producing post transformed parameters.
void print() const override
Print the sphere info.
Definition: imstkSphere.cpp:13
Compound Geometry.
void postModified()
Post modified event.
void print() const override
Print.
void updatePostTransformData() const override
Update the Sphere parameters applying the latest transform.
Definition: imstkSphere.cpp:71
double m_radius
Radius of the sphere.
Definition: imstkSphere.h:78
double m_radiusPostTransform
Radius of the sphere once transform applied.
Definition: imstkSphere.h:79
double getRadius(DataType type=DataType::PostTransform)
Get/Set the radius of the sphere.
Definition: imstkSphere.cpp:20
void applyTransform(const Mat4d &m) override
Apply a user transform directly to (pre-transformed) parameters producing new parameters.
Vec3d m_positionPostTransform
position once transform applied
DataType
Enumeration for the data to retrieve PreTransform for data where transform matrix is not applied Po...
Definition: imstkGeometry.h:41
void applyTransform(const Mat4d &m) override
Apply a user transform directly to (pre-transformed) parameters producing new parameters.
Definition: imstkSphere.cpp:59