31 #if defined(Display3D_RECURSES) 32 #error Recursive header files inclusion detected in Display3D.h 33 #else // defined(Display3D_RECURSES) 35 #define Display3D_RECURSES 37 #if !defined Display3D_h 47 #include "DGtal/kernel/domains/CDomain.h" 48 #include "DGtal/base/Common.h" 49 #include "DGtal/base/CountedPtr.h" 50 #include "DGtal/io/Color.h" 51 #include "DGtal/images/CImage.h" 52 #include "DGtal/images/CConstImage.h" 53 #include "DGtal/shapes/Mesh.h" 56 #include "DGtal/topology/CanonicCellEmbedder.h" 57 #include "DGtal/topology/CanonicSCellEmbedder.h" 58 #include "DGtal/kernel/CanonicEmbedder.h" 59 #include "DGtal/helpers/StdDefs.h" 60 #include "DGtal/io/DrawWithDisplay3DModifier.h" 61 #include "DGtal/kernel/CSpace.h" 91 template <
typename Space = Z3i::Space,
typename KSpace = Z3i::KSpace>
109 typedef int (*SelectCallbackFct)(
void* viewer,
DGtal::int32_t name,
void* data );
121 :
fct( _fct ), data( _data ),
min( _min ),
max( _max ) {}
124 return (
min < other.
min );
127 {
return (
min <= name ) && ( name <=
max ); }
254 typedef std::map<DGtal::int32_t, std::vector< QuadD3D > >
QuadsMap;
257 typedef std::map<DGtal::int32_t, std::vector< CubeD3D > >
CubesMap;
294 , myEmbedder( new Embedder() )
295 , myCellEmbedder( new CellEmbedder( myKSpace ) )
296 , mySCellEmbedder( new SCellEmbedder( myKSpace ) )
381 virtual void setKSpace(
const KSpace & aKSpace );
432 void addClippingPlane(
double a,
double b,
double c,
double d,
bool drawPlane);
444 std::string
getMode(
const std::string & objectName )
const;
521 void addQuad(
const RealPoint &p1,
const RealPoint &p2,
522 const RealPoint &p3,
const RealPoint &p4);
543 const RealPoint &p3,
const RealPoint &p4,
545 const bool enableReorientation,
546 const bool enableDoubleFace =
false);
558 bool xSurfel,
bool ySurfel,
bool zSurfel);
585 const RealVector &aNormal,
586 const bool enableReorientation,
588 const bool enableDoubleFace =
false);
597 void addTriangle(
const RealPoint &p1,
const RealPoint &p2,
const RealPoint &p3);
604 void addPolygon(
const std::vector<RealPoint> &vertices);
616 void addLine(
const RealPoint &p1,
const RealPoint &p2,
const double width=0.03);
626 void addCube(
const RealPoint ¢er,
double width=1.0);
636 void addBall(
const RealPoint ¢er ,
637 const double radius=0.5,
638 const unsigned int resolution = 30);
655 void addPrism(
const RealPoint &baseQuadCenter,
656 bool xSurfel,
bool ySurfel,
bool zSurfel,
double sizeShiftFactor,
657 double sizeFactor=1.0,
bool isSigned=
false,
bool aSign=
true);
670 bool xSurfel,
bool ySurfel,
bool zSurfel);
680 void addCone(
const RealPoint &p1,
const RealPoint &p2,
690 void addCylinder(
const RealPoint &p1,
const RealPoint &p2,
691 const double width=0.02);
721 template <
typename TDrawableWithDisplay3D>
759 RealPoint
embedKS(
const typename KSpace::SCell & cell )
const;
792 typedef std::map< std::string,CountedPtr<DrawableWithDisplay3D> >
StyleMapping;
910 static void cross (
double dst[3],
double srcA[3],
double srcB[3]);
927 template <
typename Space ,
typename KSpace >
929 operator<< ( std::ostream & out, const DGtal::Display3D<Space , KSpace > & object );
932 template <
typename Space ,
typename KSpace >
950 template <
typename Space ,
typename KSpace >
960 #include "DGtal/io/Display3D.ih" 966 #endif // !defined Display3D_h 968 #undef Display3D_RECURSES 969 #endif // else defined(Display3D_RECURSES) virtual void setFillColor(DGtal::Color aColor)
bool deleteCubeList(const DGtal::int32_t name)
double myCurrentfShiftVisuPrisms
const double & operator[](unsigned int i) const
DGtal::int32_t createNewCubeList()
virtual void setFillTransparency(unsigned char alpha)
virtual DGtal::Color getFillColor()
std::vector< std::vector< LineD3D > > myLineSetList
static const Dimension dimension
Copy of the static dimension of the Point/Vector.
double myBoundingPtUp[3]
upper point of the bounding box
std::vector< std::vector< BallD3D > > myBallSetList
void addBall(const RealPoint ¢er, const double radius=0.5, const unsigned int resolution=30)
void selfDisplay(std::ostream &out) const
KSpace myKSpace
The Khalimsky space.
std::vector< std::string > myQuadSetNameList
void createNewTriangleList(std::string s="")
void addCone(const RealPoint &p1, const RealPoint &p2, double width=0.08)
static void cross(double dst[3], double srcA[3], double srcB[3])
void addPrism(const RealPoint &baseQuadCenter, bool xSurfel, bool ySurfel, bool zSurfel, double sizeShiftFactor, double sizeFactor=1.0, bool isSigned=false, bool aSign=true)
std::vector< std::vector< TriangleD3D > > myTriangleSetList
Represents all the triangles drawn in the Display3D.
const SCellEmbedder & sCellEmbedder() const
std::vector< std::string > myCubeSetNameList
Embedder * myEmbedder
an embeder from a dgtal space point to a real space point
void setSelectCallback3D(SelectCallbackFct fct, void *data, DGtal::int32_t min_name, DGtal::int32_t max_name)
Aim: This class is defined to represent a surface mesh through a set of vertices and faces...
void addBasicSurfel(const RealPoint &baseQuadCenter, bool xSurfel, bool ySurfel, bool zSurfel)
DGtal::int32_t name3d() const
void createNewPolygonList(std::string s="")
virtual void setLineColor(DGtal::Color aColor)
RealPoint embedK(const typename KSpace::Cell &cell) const
DGtal::Dimension Dimension
Copy of the dimension type.
void setName3d(DGtal::int32_t name=-1)
const CellEmbedder & cellEmbedder() const
SCellEmbedder * mySCellEmbedder
an embeder from a signed khalimsky space point to a real space point
RealPoint embedKS(const typename KSpace::SCell &cell) const
Space::RealPoint RealPoint
RealPoint type.
Aim: Implements basic operations that will be used in Point and Vector classes.
DGtal::int32_t name
The "OpenGL name" associated with the graphical structure, used for selecting it (-1 is none)...
CellEmbedder * myCellEmbedder
an embeder from a unsigned khalimsky space point to a real space point
void addQuadFromSurfelCenter(const RealPoint &baseQuadCenter, bool xSurfel, bool ySurfel, bool zSurfel)
std::vector< QuadD3D > myPrismList
void updateBoundingBox(const RealPoint &point)
SelectCallbackFctStore(SelectCallbackFct _fct, void *_data, DGtal::int32_t _min, DGtal::int32_t _max)
std::map< DGtal::int32_t, std::vector< QuadD3D > > QuadsMap
The type that maps identifier name -> vector of QuadD3D.
std::vector< RealPoint > vertices
virtual void setKSpace(const KSpace &aKSpace)
DGtal::int32_t createNewQuadList()
DGtal::Color myCurrentLineColor
std::map< std::string, std::string > ModeMapping
bool myBoundingPtEmptyTag
True if the bounding box is empty (no objects added)
void createNewLineList(std::string s="")
CanonicEmbedder< Space > Embedder
Aim: A trivial embedder for signed and unsigned cell, which corresponds to the canonic injection of c...
Display3D & operator<<(const TDrawableWithDisplay3D &object)
RealPoint center
The center coordinate of the cube.
std::map< DGtal::int32_t, std::vector< CubeD3D > > CubesMap
The type that maps identifier name -> vector of CubeD3D.
void exportToMesh(Mesh< RealPoint > &aMesh) const
Display3D(const KSpace &KSEmb)
bool operator<(const SelectCallbackFctStore &other) const
static void normalize(double vec[3])
virtual DGtal::Color getLineColor()
RealPoint embed(const typename Space::Point &dp) const
CanonicSCellEmbedder< KSpace > SCellEmbedder
SelectCallbackFct getSelectCallback3D(DGtal::int32_t aName, void *&data) const
void addLine(const RealPoint &p1, const RealPoint &p2, const double width=0.03)
void operator>>(const Display3D< Space, KSpace > &aDisplay3D, DGtal::Mesh< typename Display3D< Space, KSpace >::RealPoint > &aMesh)
const Embedder & embedder() const
std::string getMode(const std::string &objectName) const
DGtal is the top-level namespace which contains all DGtal functions and types.
Aim: A trivial embedder for digital points, which corresponds to the canonic injection of Zn into Rn...
std::vector< std::string > myBallSetNameList
Display3D & operator=(const Display3D &)=delete
Assignment operator. Deleted.
void addTriangle(const RealPoint &p1, const RealPoint &p2, const RealPoint &p3)
std::vector< ClippingPlaneD3D > myClippingPlaneList
double width
The width of a cube face.
double myBoundingPtLow[3]
lower point of the bouding box
std::map< std::string, CountedPtr< DrawableWithDisplay3D > > StyleMapping
const KSpace & space() const
std::vector< std::string > myLineSetNameList
void addPolygon(const std::vector< RealPoint > &vertices)
BOOST_CONCEPT_ASSERT((concepts::CSpace< Space >))
std::vector< std::string > myTriangleSetNameList
Structure representing an RGB triple with alpha component.
std::vector< std::string > myPrismNameList
DGtal::Color color
Color used for displaying the graphical structure.
boost::int32_t int32_t
signed 32-bit integer.
void addQuadWithNormal(const RealPoint &p1, const RealPoint &p2, const RealPoint &p3, const RealPoint &p4, const RealPoint &n, const bool enableReorientation, const bool enableDoubleFace=false)
bool deleteQuadList(const DGtal::int32_t name)
Space::RealVector RealVector
RealVector type.
void addCylinder(const RealPoint &p1, const RealPoint &p2, const double width=0.02)
void createNewBallList(std::string s="")
std::set< SelectCallbackFctStore > mySelectCallBackFcts
void addCube(const RealPoint ¢er, double width=1.0)
void addQuad(const RealPoint &p1, const RealPoint &p2, const RealPoint &p3, const RealPoint &p4)
double & operator[](unsigned int i)
DGtal::Color myCurrentFillColor
std::vector< std::vector< PolygonD3D > > myPolygonSetList
Represents all the polygon drawn in the Display3D.
bool isSelected(DGtal::int32_t name) const
std::vector< std::string > myClippingPlaneNameList
std::vector< std::string > myPolygonSetNameList
Aim: This semi abstract class defines the stream mechanism to display 3d primitive (like BallVector...
Display3D< Space, KSpace > Self
void addQuadFromSurfelCenterWithNormal(const RealPoint &baseQuadCenter, bool xSurfel, bool ySurfel, bool zSurfel, const RealVector &aNormal, const bool enableReorientation, const bool sign, const bool enableDoubleFace=false)
CanonicCellEmbedder< KSpace > CellEmbedder
void addClippingPlane(double a, double b, double c, double d, bool drawPlane)