VAbstractDetail parent class for VDetail.

--HG--
branch : feature
This commit is contained in:
dismine 2015-01-02 19:02:07 +02:00
parent 112dbd7f4e
commit 4ba488d0c0
5 changed files with 174 additions and 271 deletions

View File

@ -393,6 +393,15 @@ DEPENDPATH += $$PWD/../libs/vobj
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../libs/vobj/$${DESTDIR}/vobj.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../libs/vobj/$${DESTDIR}/libvobj.a
# VLayout static library
unix|win32: LIBS += -L$$OUT_PWD/../libs/vlayout/$${DESTDIR}/ -lvlayout
INCLUDEPATH += $$PWD/../libs/vlayout
DEPENDPATH += $$PWD/../libs/vlayout
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../libs/vlayout/$${DESTDIR}/vlayout.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../libs/vlayout/$${DESTDIR}/libvlayout.a
# Strip after you link all libaries.
CONFIG(release, debug|release){

View File

@ -32,27 +32,45 @@
#include <QString>
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief VDetail default contructor. Create empty detail.
*/
VDetail::VDetail()
:d(new VDetailData)
:VAbstractDetail(), d(new VDetailData)
{}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief VDetail constructor.
* @param name detail name.
* @param nodes list of nodes.
*/
VDetail::VDetail(const QString &name, const QVector<VNodeDetail> &nodes)
:d(new VDetailData(name, nodes))
:VAbstractDetail(name), d(new VDetailData(nodes))
{}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief VDetail copy constructor.
* @param detail detail.
*/
VDetail::VDetail(const VDetail &detail)
:d (detail.d)
:VAbstractDetail(detail), d (detail.d)
{}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief operator = assignment operator.
* @param detail detail.
* @return new detail.
*/
VDetail &VDetail::operator =(const VDetail &detail)
{
if ( &detail == this )
{
return *this;
}
VAbstractDetail::operator=(detail);
d = detail.d;
return *this;
}
@ -62,24 +80,31 @@ VDetail::~VDetail()
{}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Clear detail full clear.
*/
void VDetail::Clear()
{
d->nodes.clear();
d->name.clear();
d->mx = 0;
d->my = 0;
d->seamAllowance = true;
d->closed = true;
d->width = 0;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief ClearNodes clear list of nodes.
*/
void VDetail::ClearNodes()
{
d->nodes.clear();
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Containes check if detail containe this id.
* @param id object id.
* @return true if containe.
*/
bool VDetail::Containes(const quint32 &id) const
{
for (int i = 0; i < d->nodes.size(); ++i)
@ -94,36 +119,66 @@ bool VDetail::Containes(const quint32 &id) const
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief operator [] find node by index in list.
* @param indx index node in list.
* @return node
*/
VNodeDetail &VDetail::operator [](int indx)
{
return d->nodes[indx];
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief at find node by index in list.
* @param indx index node in list.
* @return const node.
*/
const VNodeDetail &VDetail::at(int indx) const
{
return d->nodes.at(indx);
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief indexOfNode return index in list node using id object.
* @param id object (arc, point, spline, splinePath) id.
* @return index in list or -1 id can't find.
*/
int VDetail::indexOfNode(const quint32 &id) const
{
return indexOfNode(d->nodes, id);
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief id return id detail in list data.
* @return id.
*/
quint32 VDetail::id() const
{
return d->_id;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief setId set id detail in list data.
* @param id detail id.
*/
void VDetail::setId(const quint32 &id)
{
d->_id = id;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief OnEdge checks if two poins located on the edge. Edge is line between two points. If between two points
* located arcs or splines ignore this.
* @param p1 id first point.
* @param p2 id second point.
* @return true - on edge, false - no.
*/
bool VDetail::OnEdge(const quint32 &p1, const quint32 &p2) const
{
QVector<VNodeDetail> list = listNodePoint();
@ -162,6 +217,13 @@ bool VDetail::OnEdge(const quint32 &p1, const quint32 &p2) const
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Edge return edge index in detail. Edge is line between two points. If between two points
* located arcs or splines ignore this.
* @param p1 id first point.
* @param p2 id second point.
* @return edge index or -1 if points don't located on edge
*/
int VDetail::Edge(const quint32 &p1, const quint32 &p2) const
{
if (OnEdge(p1, p2) == false)
@ -187,6 +249,12 @@ int VDetail::Edge(const quint32 &p1, const quint32 &p2) const
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief NodeOnEdge return nodes located on edge with index.
* @param index index of edge.
* @param p1 first node.
* @param p2 second node.
*/
void VDetail::NodeOnEdge(const quint32 &index, VNodeDetail &p1, VNodeDetail &p2) const
{
QVector<VNodeDetail> list = listNodePoint();
@ -207,6 +275,11 @@ void VDetail::NodeOnEdge(const quint32 &index, VNodeDetail &p1, VNodeDetail &p2)
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief RemoveEdge return detail without edge with index.
* @param index idex of edge.
* @return detail without edge with index.
*/
VDetail VDetail::RemoveEdge(const quint32 &index) const
{
VDetail det(*this);
@ -250,6 +323,12 @@ VDetail VDetail::RemoveEdge(const quint32 &index) const
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Missing find missing ids in detail. When we deleted object in detail and return this detail need
* understand, what nodes need make invisible.
* @param det changed detail.
* @return list with missing detail.
*/
QList<quint32> VDetail::Missing(const VDetail &det) const
{
if (d->nodes.size() == det.CountNode())
@ -275,6 +354,10 @@ QList<quint32> VDetail::Missing(const VDetail &det) const
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief listNodePoint return list nodes only with points.
* @return list points node.
*/
QVector<VNodeDetail> VDetail::listNodePoint() const
{
QVector<VNodeDetail> list;
@ -289,6 +372,12 @@ QVector<VNodeDetail> VDetail::listNodePoint() const
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief indexOfNode return index in list node using id object.
* @param list list nodes detail.
* @param id object (arc, point, spline, splinePath) id.
* @return index in list or -1 id can't find.
*/
int VDetail::indexOfNode(const QVector<VNodeDetail> &list, const quint32 &id)
{
for (int i = 0; i < list.size(); ++i)
@ -303,96 +392,80 @@ int VDetail::indexOfNode(const QVector<VNodeDetail> &list, const quint32 &id)
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief append append in the end of list node.
* @param node new node.
*/
void VDetail::append(const VNodeDetail &node)
{
d->nodes.append(node);
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief CountNode return count nodes.
* @return count.
*/
qint32 VDetail::CountNode() const
{
return d->nodes.size();
}
//---------------------------------------------------------------------------------------------------------------------
QString VDetail::getName() const
{
return d->name;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::setName(const QString &value)
{
d->name = value;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief getMx return bias for X axis.
* @return x bias.
*/
qreal VDetail::getMx() const
{
return d->mx;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief setMx set bias for X axis.
* @param value new x bias.
*/
void VDetail::setMx(const qreal &value)
{
d->mx = value;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief getMy get bias for y axis.
* @return y axis.
*/
qreal VDetail::getMy() const
{
return d->my;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief setMy set bias for y axis.
* @param value new y bias.
*/
void VDetail::setMy(const qreal &value)
{
d->my = value;
}
//---------------------------------------------------------------------------------------------------------------------
bool VDetail::getSeamAllowance() const
{
return d->seamAllowance;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::setSeamAllowance(bool value)
{
d->seamAllowance = value;
}
//---------------------------------------------------------------------------------------------------------------------
bool VDetail::getClosed() const
{
return d->closed;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::setClosed(bool value)
{
d->closed = value;
}
//---------------------------------------------------------------------------------------------------------------------
qreal VDetail::getWidth() const
{
return d->width;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::setWidth(const qreal &value)
{
d->width = value;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief getNodes return list of nodes.
* @return list of nodes.
*/
QVector<VNodeDetail> VDetail::getNodes() const
{
return d->nodes;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief setNodes set list of nodes
* @param value list of nodes
*/
void VDetail::setNodes(const QVector<VNodeDetail> &value)
{
d->nodes = value;

View File

@ -30,212 +30,56 @@
#define VDETAIL_H
#include "vnodedetail.h"
#include <QString>
#include <QVector>
class QString;
#include "../libs/vlayout/vabstractdetail.h"
class VDetailData;
/**
* @brief The VDetail class for path of object (points, arcs, splines).
*/
class VDetail
class VDetail :public VAbstractDetail
{
public:
/**
* @brief VDetail default contructor. Create empty detail.
*/
VDetail();
/**
* @brief VDetail constructor.
* @param name detail name.
* @param nodes list of nodes.
*/
VDetail(const QString &name, const QVector<VNodeDetail> &nodes);
/**
* @brief VDetail copy constructor.
* @param detail detail.
*/
VDetail(const VDetail &detail);
/**
* @brief operator = assignment operator.
* @param detail detail.
* @return new detail.
*/
VDetail &operator=(const VDetail &detail);
~VDetail();
/**
* @brief append append in the end of list node.
* @param node new node.
*/
virtual ~VDetail();
void append(const VNodeDetail &node);
/**
* @brief Clear detail full clear.
*/
void Clear();
/**
* @brief ClearNodes clear list of nodes.
*/
void ClearNodes();
/**
* @brief CountNode return count nodes.
* @return count.
*/
qint32 CountNode() const;
/**
* @brief Containes check if detail containe this id.
* @param id object id.
* @return true if containe.
*/
bool Containes(const quint32 &id)const;
/**
* @brief operator [] find node by index in list.
* @param indx index node in list.
* @return node
*/
VNodeDetail & operator[](int indx);
/**
* @brief at find node by index in list.
* @param indx index node in list.
* @return const node.
*/
const VNodeDetail & at ( int indx ) const;
/**
* @brief getName return detail name.
* @return name.
*/
QString getName() const;
/**
* @brief setName set detail name.
* @param value new name.
*/
void setName(const QString &value);
/**
* @brief getMx return bias for X axis.
* @return x bias.
*/
qreal getMx() const;
/**
* @brief setMx set bias for X axis.
* @param value new x bias.
*/
void setMx(const qreal &value);
/**
* @brief getMy get bias for y axis.
* @return y axis.
*/
qreal getMy() const;
/**
* @brief setMy set bias for y axis.
* @param value new y bias.
*/
void setMy(const qreal &value);
/**
* @brief getSeamAllowance keep status for seam allowance detail.
* @return true - need seam allowance, false - no need seam allowance.
*/
bool getSeamAllowance() const;
/**
* @brief setSeamAllowance set status for seam allowance detail.
* @param value true - need seam allowance, false - no need seam allowance.
*/
void setSeamAllowance(bool value);
/**
* @brief getClosed keep close status for detail equdistant.
* @return true - close equdistant, false - don't close equdistant.
*/
bool getClosed() const;
/**
* @brief setClosed set close status for detail equdistant.
* @param value true - close equdistant, false - don't close equdistant.
*/
void setClosed(bool value);
/**
* @brief getWidth return value detail seam allowance.
* @return value in mm.
*/
qreal getWidth() const;
/**
* @brief setWidth set value detail seam allowance.
* @param value width in mm.
*/
void setWidth(const qreal &value);
/**
* @brief getNodes return list of nodes.
* @return list of nodes.
*/
qreal getMx() const;
void setMx(const qreal &value);
qreal getMy() const;
void setMy(const qreal &value);
quint32 id() const;
void setId(const quint32 &id);
QVector<VNodeDetail> getNodes() const;
/**
* @brief setNodes set list of nodes
* @param value list of nodes
*/
void setNodes(const QVector<VNodeDetail> &value);
/**
* @brief indexOfNode return index in list node using id object.
* @param id object (arc, point, spline, splinePath) id.
* @return index in list or -1 id can't find.
*/
int indexOfNode(const quint32 &id) const;
/**
* @brief id return id detail in list data.
* @return id.
*/
quint32 id() const;
/**
* @brief setId set id detail in list data.
* @param id detail id.
*/
void setId(const quint32 &id);
/**
* @brief OnEdge checks if two poins located on the edge. Edge is line between two points. If between two points
* located arcs or splines ignore this.
* @param p1 id first point.
* @param p2 id second point.
* @return true - on edge, false - no.
*/
bool OnEdge(const quint32 &p1, const quint32 &p2)const;
/**
* @brief Edge return edge index in detail. Edge is line between two points. If between two points
* located arcs or splines ignore this.
* @param p1 id first point.
* @param p2 id second point.
* @return edge index or -1 if points don't located on edge
*/
int Edge(const quint32 &p1, const quint32 &p2)const;
/**
* @brief NodeOnEdge return nodes located on edge with index.
* @param index index of edge.
* @param p1 first node.
* @param p2 second node.
*/
void NodeOnEdge(const quint32 &index, VNodeDetail &p1, VNodeDetail &p2)const;
/**
* @brief RemoveEdge return detail without edge with index.
* @param index idex of edge.
* @return detail without edge with index.
*/
VDetail RemoveEdge(const quint32 &index) const;
/**
* @brief Missing find missing ids in detail. When we deleted object in detail and return this detail need
* understand, what nodes need make invisible.
* @param det changed detail.
* @return list with missing detail.
*/
void setNodes(const QVector<VNodeDetail> &value);
int indexOfNode(const quint32 &id) const;
bool OnEdge(const quint32 &p1, const quint32 &p2)const;
int Edge(const quint32 &p1, const quint32 &p2)const;
void NodeOnEdge(const quint32 &index, VNodeDetail &p1, VNodeDetail &p2)const;
VDetail RemoveEdge(const quint32 &index) const;
QList<quint32> Missing(const VDetail &det) const;
private:
QSharedDataPointer<VDetailData> d;
/**
* @brief listNodePoint return list nodes only with points.
* @return list points node.
*/
QVector<VNodeDetail> listNodePoint()const;
/**
* @brief indexOfNode return index in list node using id object.
* @param list list nodes detail.
* @param id object (arc, point, spline, splinePath) id.
* @return index in list or -1 id can't find.
*/
static int indexOfNode(const QVector<VNodeDetail> &list, const quint32 &id);
static int indexOfNode(const QVector<VNodeDetail> &list, const quint32 &id);
};
#endif // VDETAIL_H

View File

@ -42,53 +42,30 @@ class VDetailData : public QSharedData
{
public:
VDetailData()
:_id(NULL_ID), nodes(QVector<VNodeDetail>()), name(QString()), mx(0), my(0), seamAllowance(true), closed(true),
width(0)
:_id(NULL_ID), nodes(QVector<VNodeDetail>()), mx(0), my(0)
{}
VDetailData(const QString &name, const QVector<VNodeDetail> &nodes)
:_id(NULL_ID), nodes(nodes), name(name), mx(0), my(0), seamAllowance(true), closed(true), width(0)
VDetailData(const QVector<VNodeDetail> &nodes)
:_id(NULL_ID), nodes(nodes), mx(0), my(0)
{}
VDetailData(const VDetailData &detail)
:QSharedData(detail), _id(NULL_ID), nodes(detail.nodes), name(detail.name), mx(detail.mx), my(detail.my),
seamAllowance(detail.seamAllowance), closed(detail.closed), width(detail.width)
:QSharedData(detail), _id(NULL_ID), nodes(detail.nodes), mx(detail.mx), my(detail.my)
{}
~VDetailData() {}
/**
* @brief _id id detail.
*/
/** @brief _id id detail. */
quint32 _id;
/**
* @brief nodes list detail nodes.
*/
/** @brief nodes list detail nodes. */
QVector<VNodeDetail> nodes;
/**
* @brief name detail name.
*/
QString name;
/**
* @brief mx bias x axis.
*/
/** @brief mx bias x axis. */
qreal mx;
/**
* @brief my bias y axis.
*/
/** @brief my bias y axis. */
qreal my;
/**
* @brief seamAllowance status seamAllowance detail.
*/
bool seamAllowance;
/**
* @brief closed status equdistant detail.
*/
bool closed;
/**
* @brief width value seamAllowance in mm.
*/
qreal width;
};
#ifdef Q_CC_GNU

View File

@ -44,7 +44,7 @@ public:
VAbstractDetail(const QString &name);
VAbstractDetail(const VAbstractDetail &detail);
VAbstractDetail &operator=(const VAbstractDetail &detail);
~VAbstractDetail();
virtual ~VAbstractDetail();
void Clear();