1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file Img3D/Model/PlottableBody.h
//! @brief Defines class PlottableBody.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifndef BORNAGAIN_IMG3D_MODEL_PLOTTABLEBODY_H
#define BORNAGAIN_IMG3D_MODEL_PLOTTABLEBODY_H
#include "Base/Type/Field2D.h"
#include "Img3D/Model/Geometry_inc.h"
#include "Img3D/Type/FloatVector3D.h"
#include <QColor>
#include <QMatrix4x4>
namespace Img3D {
class Canvas;
class Geometry;
class Model;
class RoughnessItem;
//! A geometric object. Base class for Particle and Layer.
class PlottableBody {
public:
PlottableBody(GeometricID::Key, const double2d_t* top = nullptr,
const double2d_t* bottom = nullptr, bool drawBottom = false);
virtual ~PlottableBody();
const QColor& color() const { return m_color; }
bool isTransparent() const;
void transform(F3 scale, F3 rotate, F3 translate);
void transform(F3 scale, QQuaternion, F3 translate);
void transform(F3 turn, F3 scale, F3 rotate, F3 translate);
void addExtrinsicRotation(F3 turn, F3 scale, F3& rotate, F3 rotateExtrinsic, F3& translate);
void setColor(QColor color) { m_color = color; }
bool valid() const { return !isNull; }
const Geometry& geo() const;
const QMatrix4x4& matrix() const { return m_matrix; }
void releaseGeometry(); // can be released whenever
protected:
bool isNull;
private:
QColor m_color;
GeometricID::Key gky;
mutable std::shared_ptr<Geometry> m_geo; // retrieved on demand
QMatrix4x4 m_matrix;
};
} // namespace Img3D
#endif // BORNAGAIN_IMG3D_MODEL_PLOTTABLEBODY_H
|