|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef PLASTICSKELETON_H
|
|
Toshihiro Shimizu |
890ddd |
#define PLASTICSKELETON_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tsmartpointer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tpersist.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzExt includes
|
|
Toshihiro Shimizu |
890ddd |
#include "plastichandle.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Boost includes
|
|
Toshihiro Shimizu |
890ddd |
#include <boost config.hpp=""></boost>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qstring></qstring>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#if (defined TNZEXT_EXPORTS && !defined INCLUDE_HPP)
|
|
Toshihiro Shimizu |
890ddd |
#define REMOVE_INCLUDE_HPP
|
|
Toshihiro Shimizu |
890ddd |
#define INCLUDE_HPP // Exporting templates needs full instantiation
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tcg_wrap.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tcg/tcg_vertex.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tcg/tcg_edge.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tcg/tcg_face.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tcg/tcg_mesh.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef REMOVE_INCLUDE_HPP
|
|
Toshihiro Shimizu |
890ddd |
#undef INCLUDE_HPP
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TNZEXT_EXPORTS
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_EXPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_EXPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_IMPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_IMPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==========================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Forward declarations
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class PlasticSkeletonDeformation;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==========================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//************************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
// PlasticSkeletonVertex declaration
|
|
Toshihiro Shimizu |
890ddd |
//************************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! PlasticSkeletonVertex is the vertex of a plastic skeleton object.
|
|
Toshihiro Shimizu |
890ddd |
struct DVAPI PlasticSkeletonVertex : public tcg::Vertex<tpointd>, public TPersist {</tpointd>
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_DECLARATION(PlasticSkeletonVertex)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
friend class PlasticSkeleton;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
QString m_name; //!< Vertex name
|
|
Toshihiro Shimizu |
890ddd |
int m_number; //!< Vertex \a number - assigned persistently upon addition
|
|
Toshihiro Shimizu |
890ddd |
//!< in a skeleton
|
|
Toshihiro Shimizu |
890ddd |
int m_parent; //!< Index of the parent vertex in the skeleton
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
// Tool data
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
double m_minAngle, m_maxAngle; //!< Minimum and maximum accepted angles when updating the vertex
|
|
Toshihiro Shimizu |
890ddd |
//!< position with the mouse. In degrees.
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
// Handle data
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool m_interpolate; //!< Whether the vertex needs to be interpolated (see plasticdeformer.h)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
PlasticSkeletonVertex();
|
|
Toshihiro Shimizu |
890ddd |
explicit PlasticSkeletonVertex(const TPointD &pos);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
operator PlasticHandle() const;
|
|
Toshihiro Shimizu |
890ddd |
operator TPointD() const { return P(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const QString &name() const { return m_name; }
|
|
Toshihiro Shimizu |
890ddd |
int number() const { return m_number; } // Should be removed
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int parent() const { return m_parent; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void saveData(TOStream &os);
|
|
Toshihiro Shimizu |
890ddd |
void loadData(TIStream &is);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//************************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
// PlasticSkeleton declaration
|
|
Toshihiro Shimizu |
890ddd |
//************************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class DVAPI PlasticSkeleton : public TSmartObject, public tcg::Mesh<plasticskeletonvertex, tcg::edge,="" tcg::facen<3="">>, public TPersist</plasticskeletonvertex,>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
DECLARE_CLASS_CODE
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_DECLARATION(PlasticSkeleton)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
class Imp;
|
|
Toshihiro Shimizu |
890ddd |
Imp *m_imp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
typedef tcg::Mesh<plasticskeletonvertex, tcg::edge,="" tcg::facen<3="">> mesh_type;</plasticskeletonvertex,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
PlasticSkeleton();
|
|
Toshihiro Shimizu |
890ddd |
PlasticSkeleton(const PlasticSkeleton &other);
|
|
Toshihiro Shimizu |
890ddd |
~PlasticSkeleton();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
PlasticSkeleton &operator=(const PlasticSkeleton &other);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int parentVertex(int v) { return vertex(v).m_parent; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void moveVertex(int v, const TPointD &pos); //!< Moves a vertex to the specified position, informing associated deformers
|
|
Toshihiro Shimizu |
890ddd |
int addVertex(const PlasticSkeletonVertex &vx, int parent); //!< Adds a vertex to the skeleton
|
|
Toshihiro Shimizu |
890ddd |
int insertVertex(const PlasticSkeletonVertex &vx, int e); //!< Inserts a vertex splitting an existing edge
|
|
Toshihiro Shimizu |
890ddd |
//!< \note Inserted Vertex will connect to parent first
|
|
Toshihiro Shimizu |
890ddd |
int insertVertex(const PlasticSkeletonVertex &vx, int parent, //!< Generalization of vertex addition/insertion,
|
|
Toshihiro Shimizu |
890ddd |
const std::vector<int> &children); //!< it is useful as inverse of vertex removal.</int>
|
|
Toshihiro Shimizu |
890ddd |
void removeVertex(int v); //!< Removes a vertex, reattaching all its children to parent
|
|
Toshihiro Shimizu |
890ddd |
void clear();
|
|
Toshihiro Shimizu |
890ddd |
void squeeze();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool setVertexName(int v, const QString &name);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void saveData(TOStream &os);
|
|
Toshihiro Shimizu |
890ddd |
void loadData(TIStream &is);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Utility functions
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int closestVertex(const TPointD &pos, double *distance = 0) const;
|
|
Toshihiro Shimizu |
890ddd |
int closestEdge(const TPointD &pos, double *distance = 0) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
std::vector<plastichandle> verticesToHandles() const;</plastichandle>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
// RValues-related functions
|
|
Toshihiro Shimizu |
890ddd |
#ifndef BOOST_NO_RVALUE_REFERENCES
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
PlasticSkeleton(PlasticSkeleton &&other);
|
|
Toshihiro Shimizu |
890ddd |
PlasticSkeleton &operator=(PlasticSkeleton &&other);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
friend class PlasticSkeletonDeformation; // Skeleton deformations can register to be notified
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void addListener(PlasticSkeletonDeformation *deformation);
|
|
Toshihiro Shimizu |
890ddd |
void removeListener(PlasticSkeletonDeformation *deformation);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef WIN32
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TSmartPointerT<plasticskeleton>;</plasticskeleton>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
typedef TSmartPointerT<plasticskeleton> PlasticSkeletonP;</plasticskeleton>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif // PLASTICSKELETON_H
|