iMSTK
Interactive Medical Simulation Toolkit
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
imstkCompoundGeometry.h
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 "imstkGeometry.h"
8 #include "imstkMath.h"
9 
10 #include <vector>
11 #include <memory>
12 
14 
15 namespace imstk
16 {
17 class AnalyticalGeometry;
18 
21 class CompoundGeometry : public Geometry
22 {
23 public:
24 
25  IMSTK_TYPE_NAME(CompoundGeometry);
26 
28  void add(std::shared_ptr<AnalyticalGeometry> geometry);
29 
35  void setLocalTransform(size_t index, const Mat4d& transform);
36 
38  size_t count() const { return m_geometries.size(); }
39 
41  std::shared_ptr<Geometry> get(size_t index) const;
42 
44  void print() const override;
45 
47  double getVolume() override;
48 
50  void computeBoundingBox(Vec3d& lowerCorner, Vec3d& upperCorner, const double paddingPercent = 0.0) override;
51 
53  Vec3d getCenter() override;
54 
56  bool isMesh() const override;
57 
59  void updatePostTransformData() const override;
60 
62  void applyTransform(const Mat4d&) override;
63 
64 private:
65  Geometry* cloneImplementation() const override;
66 
67  struct LocalGeometry
68  {
69  std::shared_ptr<Geometry> geometry;
70  imstk::Mat4d localTransform = Mat4d::Identity();
71  };
72 
73  std::vector<LocalGeometry> m_geometries;
74 };
75 } // namespace imstk
void applyTransform(const Mat4d &) override
Directly apply transform to data.
void print() const override
Print.
Compound Geometry.
double getVolume() override
Returns the volume of the geometry (if valid)
void transform(const Mat4d &T, TransformType type=TransformType::ConcatenateToTransform)
Applies a rigid transform to the geometry.
Base class for any geometrical representation.
Definition: imstkGeometry.h:22
void setLocalTransform(size_t index, const Mat4d &transform)
void updatePostTransformData() const override
void add(std::shared_ptr< AnalyticalGeometry > geometry)
Adds a geometry to the compound geometry.
void computeBoundingBox(Vec3d &lowerCorner, Vec3d &upperCorner, const double paddingPercent=0.0) override
Compute the bounding box for the geometry.
bool isMesh() const override
Returns true if the geometry is a mesh, else returns false.
Vec3d getCenter() override
Returns the bounding box center.