First successful build. The redesign is not finished.

--HG--
branch : feature
This commit is contained in:
Roman Telezhynskyi 2017-01-16 12:08:13 +02:00
parent 60810c4d04
commit 6faa0bc318
5 changed files with 1231 additions and 1062 deletions

View File

@ -3164,13 +3164,17 @@ void VPattern::ParseToolsElement(VMainGraphicsScene *scene, const QDomElement &d
{
quint32 id = 0;
ToolsCommonAttributes(domElement, id);
const quint32 indexD1 = GetParametrUInt(domElement, VToolUnionDetails::AttrIndexD1, "-1");
const quint32 indexD2 = GetParametrUInt(domElement, VToolUnionDetails::AttrIndexD2, "-1");
const QVector<VDetail> vector = VToolUnionDetails::GetDetailFromFile(this, domElement);
VToolUnionDetailsInitData initData;
initData.indexD1 = GetParametrUInt(domElement, VToolUnionDetails::AttrIndexD1, "-1");
initData.indexD2 = GetParametrUInt(domElement, VToolUnionDetails::AttrIndexD2, "-1");
initData.scene = scene;
initData.doc = this;
initData.data = data;
initData.parse = parse;
initData.typeCreation = Source::FromFile;
VToolUnionDetails::Create(id, vector[0], vector[1], 0, 0, indexD1, indexD2, scene, this, data, parse,
Source::FromFile);
VToolUnionDetails::Create(id, initData);
}
catch (const VExceptionBadId &e)
{

View File

@ -361,6 +361,92 @@ int VPiecePath::indexOfNode(quint32 id) const
return -1;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief NodeOnEdge return nodes located on edge with index.
* @param index index of edge.
* @param p1 first node.
* @param p2 second node.
*/
void VPiecePath::NodeOnEdge(quint32 index, VPieceNode &p1, VPieceNode &p2) const
{
const QVector<VPieceNode> list = ListNodePoint();
if (index > static_cast<quint32>(list.size()))
{
qDebug()<<"Wrong edge index index ="<<index;
return;
}
p1 = list.at(static_cast<int>(index));
if (index + 1 > static_cast<quint32>(list.size()) - 1)
{
p2 = list.at(0);
}
else
{
p2 = list.at(static_cast<int>(index+1));
}
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief listNodePoint return list nodes only with points.
* @return list points node.
*/
QVector<VPieceNode> VPiecePath::ListNodePoint() const
{
QVector<VPieceNode> list;
for (int i = 0; i < d->m_nodes.size(); ++i) //-V807
{
if (d->m_nodes.at(i).GetTypeTool() == Tool::NodePoint)
{
list.append(d->m_nodes.at(i));
}
}
return list;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief RemoveEdge return path without edge with index.
* @param index idex of edge.
* @return path without edge with index.
*/
VPiecePath VPiecePath::RemoveEdge(quint32 index) const
{
VPiecePath path(*this);
path.Clear();
// Edge can be only segment. We ignore all curves inside segments.
const quint32 edges = static_cast<quint32>(ListNodePoint().size());
quint32 k = 0;
for (quint32 i=0; i<edges; ++i)
{
if (i == index)
{
path.Append(this->at(static_cast<int>(k)));
++k;
}
else
{
VPieceNode p1;
VPieceNode p2;
this->NodeOnEdge(i, p1, p2);
const int j1 = this->indexOfNode(p1.GetId());
int j2 = this->indexOfNode(p2.GetId());
if (j2 == 0)
{
j2 = this->CountNodes();
}
for (int j=j1; j<j2; ++j)
{// Add "segment" except last point. Inside can be curves too.
path.Append(this->at(j));
++k;
}
}
}
return path;
}
//---------------------------------------------------------------------------------------------------------------------
VSAPoint VPiecePath::StartSegment(const VContainer *data, int i, bool reverse) const
{

View File

@ -79,7 +79,12 @@ public:
QVector<quint32> MissingNodes(const VPiecePath &path) const;
int indexOfNode(quint32 id) const;
int indexOfNode(quint32 id) const;
void NodeOnEdge(quint32 index, VPieceNode &p1, VPieceNode &p2) const;
QVector<VPieceNode> ListNodePoint() const;
VPiecePath RemoveEdge(quint32 index) const;
VSAPoint StartSegment(const VContainer *data, int i, bool reverse) const;
VSAPoint EndSegment(const VContainer *data, int i, bool reverse) const;

File diff suppressed because it is too large Load Diff

View File

@ -43,7 +43,7 @@
#include "../ifc/xml/vabstractpattern.h"
#include "../vmisc/def.h"
#include "vabstracttool.h"
#include "vdetail.h"
#include "../vpatterndb/vpiece.h"
class DialogTool;
class QDomElement;
@ -54,6 +54,33 @@ class VMainGraphicsScene;
class VNodeDetail;
class VPointF;
struct VToolUnionDetailsInitData
{
VToolUnionDetailsInitData()
: d1id(NULL_ID),
d2id(NULL_ID),
indexD1(NULL_ID),
indexD2(NULL_ID),
scene(nullptr),
doc(nullptr),
data(nullptr),
parse(Document::FullParse),
typeCreation(Source::FromFile),
retainPieces(false)
{}
quint32 d1id;
quint32 d2id;
quint32 indexD1;
quint32 indexD2;
VMainGraphicsScene *scene;
VAbstractPattern *doc;
VContainer *data;
Document parse;
Source typeCreation;
bool retainPieces;
};
/**
* @brief The VToolUnionDetails class tool union details.
*/
@ -67,13 +94,7 @@ public:
virtual void setDialog() {}
static VToolUnionDetails *Create(DialogTool *dialog, VMainGraphicsScene *scene, VAbstractPattern *doc,
VContainer *data);
static VToolUnionDetails *Create(const quint32 _id, const VDetail &d1, const VDetail &d2, const quint32 &d1id,
const quint32 &d2id, const quint32 &indexD1, const quint32 &indexD2,
VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data,
const Document &parse,
const Source &typeCreation,
bool retainPieces = false);
static QVector<VDetail> GetDetailFromFile(VAbstractPattern *doc, const QDomElement &domElement);
static VToolUnionDetails *Create(const quint32 _id, const VToolUnionDetailsInitData &initData);
static const QString ToolType;
static const QString TagDetail;
@ -105,48 +126,24 @@ protected:
virtual void SetVisualization() Q_DECL_OVERRIDE {}
private:
Q_DISABLE_COPY(VToolUnionDetails)
/** @brief d1 first detail. */
VDetail d1;
/** @brief d1 first detail id. */
quint32 d1id;
/** @brief d2 second detail. */
VDetail d2;
/** @brief d2 second detail id. */
quint32 d2id;
/** @brief indexD1 index edge in first detail. */
quint32 indexD1;
quint32 indexD1;
/** @brief indexD2 index edge in second detail. */
quint32 indexD2;
quint32 indexD2;
QString drawName;
VToolUnionDetails(quint32 id, const VToolUnionDetailsInitData &initData, QObject *parent = nullptr);
VToolUnionDetails(VAbstractPattern *doc, VContainer *data, const quint32 &id, const VDetail &d1, const VDetail &d2,
const quint32 &indexD1, const quint32 &indexD2, const Source &typeCreation,
const QString &drawName, QObject *parent = nullptr);
void AddDetail(QDomElement &domElement, VDetail &d);
void AddNode(QDomElement &domElement, const VNodeDetail &node);
QDomNode UpdateDetail(const QDomNode &domNode, const VDetail &d);
void AddToModeling(const QDomElement &domElement);
void IncrementReferences(const VDetail &d) const;
void DecrementReferences(const VDetail &d) const;
static void SaveChildren(VAbstractPattern *doc, quint32 id, const QVector<quint32> &children);
static QVector<quint32> AllChildren(VAbstractPattern *doc, quint32 id);
static quint32 TakeNextId(QVector<quint32> &children);
static QString DrawName(VAbstractPattern *doc, quint32 d1id, quint32 d2id);
static void PointsOnEdge(const VDetail &d, const quint32 &index, VPointF &p1, VPointF &p2,
VContainer *data);
static void FindIndexJ(const qint32 &pointsD2, const VDetail &d2, const quint32 &indexD2, qint32 &j);
static void AddToNewDetail(VMainGraphicsScene *scene, VAbstractPattern *doc, VContainer *data,
VDetail &newDetail, const VDetail &det, const int &i, const quint32 &idTool,
QVector<quint32> &children, const QString &drawName, const qreal &dx = 0,
const qreal &dy = 0, const quint32 &pRotate = NULL_ID,
const qreal &angle = 0);
static void UpdatePoints(VContainer *data, const VDetail &det, const int &i, QVector<quint32> &children,
const qreal &dx = 0, const qreal &dy = 0, const quint32 &pRotate = NULL_ID,
const qreal &angle = 0);
static void BiasRotatePoint(VPointF *point, const qreal &dx, const qreal &dy, const QPointF &pRotate,
const qreal &angle);
void AddDetail(QDomElement &domElement, const VPiece &d) const;
void AddToModeling(const QDomElement &domElement);
QVector<quint32> GetReferenceObjects() const;
QVector<quint32> NodesReferenceObjects(const QDomElement &nodes) const;
};
#endif // VTOOLUNIONDETAILS_H