Fixed tool uniondetails.

--HG--
branch : feature
This commit is contained in:
dismine 2014-01-08 22:23:08 +02:00
parent e50f9462a6
commit 9704e8177b
7 changed files with 55 additions and 10 deletions

View File

@ -30,12 +30,13 @@
#include "../exception/vexception.h"
VSplinePath::VSplinePath(qreal kCurve, qint64 idObject, Draw::Draws mode)
: VGObject(GObject::SplinePath, idObject, mode), path(QVector<VSplinePoint>()), kCurve(kCurve)
: VGObject(GObject::SplinePath, idObject, mode), path(QVector<VSplinePoint>()), kCurve(kCurve), maxCountPoints(0)
{
}
VSplinePath::VSplinePath(const VSplinePath &splPath)
: VGObject(splPath), path(*splPath.GetPoint()), kCurve(splPath.getKCurve())
: VGObject(splPath), path(*splPath.GetPoint()), kCurve(splPath.getKCurve()),
maxCountPoints(splPath.getMaxCountPoints())
{
}
@ -205,3 +206,13 @@ QPointF VSplinePath::CutSplinePath(qreal length, qint32 &p1, qint32 &p2, QPointF
}
return QPointF();
}
qint32 VSplinePath::getMaxCountPoints() const
{
return maxCountPoints;
}
void VSplinePath::setMaxCountPoints(const qint32 &value)
{
maxCountPoints = value;
}

View File

@ -161,6 +161,9 @@ public:
QPointF CutSplinePath(qreal length, qint32 &p1, qint32 &p2, QPointF &spl1p2, QPointF &spl1p3, QPointF &spl2p2,
QPointF &spl2p3) const;
virtual QString name() const{return _name;}
qint32 getMaxCountPoints() const;
void setMaxCountPoints(const qint32 &value);
protected:
/**
* @brief path вектор з точок сплайна.
@ -170,6 +173,7 @@ protected:
* @brief kCurve
*/
qreal kCurve;
qint32 maxCountPoints;
};
#endif // VSPLINEPATH_H

View File

@ -252,6 +252,11 @@ void VToolCutSpline::RefreshGeometry()
VToolPoint::RefreshPointGeometry(*VDrawTool::data.GeometricObject<const VPointF *>(id));
}
void VToolCutSpline::RemoveReferens()
{
doc->DecrementReferens(splineId);
}
void VToolCutSpline::RefreshSpline(VSimpleSpline *spline, qint64 splid, SimpleSpline::Translation tr)
{
const VSpline *spl = VAbstractTool::data.GeometricObject<const VSpline *>(splid);

View File

@ -127,6 +127,7 @@ protected:
* @brief RefreshGeometry
*/
void RefreshGeometry();
virtual void RemoveReferens();
private:
Q_DISABLE_COPY(VToolCutSpline)
/**

View File

@ -147,6 +147,9 @@ void VToolCutSplinePath::Create(const qint64 _id, const QString &pointName, cons
}
}
splPath1->setMaxCountPoints(splPath->CountPoint());
splPath2->setMaxCountPoints(splPath->CountPoint());
splPath1id = data->AddGObject(splPath1);
data->AddLengthSpline(splPath1->name(), toMM(splPath1->GetLength()));
@ -198,6 +201,9 @@ void VToolCutSplinePath::Create(const qint64 _id, const QString &pointName, cons
}
}
splPath1->setMaxCountPoints(splPath->CountPoint());
splPath2->setMaxCountPoints(splPath->CountPoint());
data->UpdateGObject(splPath1id, splPath1);
data->AddLengthSpline(splPath1->name(), toMM(splPath1->GetLength()));
@ -323,6 +329,11 @@ void VToolCutSplinePath::RefreshGeometry()
VToolPoint::RefreshPointGeometry(*VDrawTool::data.GeometricObject<const VPointF *>(id));
}
void VToolCutSplinePath::RemoveReferens()
{
doc->DecrementReferens(splinePathId);
}
void VToolCutSplinePath::RefreshSpline(VSimpleSpline *spline, qint64 splPathid, SimpleSpline::Translation tr)
{
const VSplinePath *splPath = VAbstractTool::data.GeometricObject<const VSplinePath *>(splPathid);

View File

@ -117,6 +117,7 @@ protected:
* @brief RefreshGeometry
*/
void RefreshGeometry();
virtual void RemoveReferens();
private:
Q_DISABLE_COPY(VToolCutSplinePath)
/**

View File

@ -174,6 +174,7 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VDomDocument *doc, VContai
Q_ASSERT(path != 0);
path->setMode(Draw::Modeling);
const VSplinePath *splinePath = data->GeometricObject<const VSplinePath *>(det.at(i).getId());
qint32 k = splinePath->getMaxCountPoints();
for (qint32 i = 1; i <= splinePath->Count(); ++i)
{
VSpline spline(splinePath->at(i-1).P(), splinePath->at(i).P(),
@ -185,6 +186,7 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VDomDocument *doc, VContai
BiasRotatePoint(p1, dx, dy, data->GeometricObject<const VPointF *>(pRotate)->toQPointF(),
angle);
qint64 idP1 = data->AddGObject(p1);
--k;
VPointF p2 = VPointF(spline.GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<const VPointF *>(pRotate)->toQPointF(),
@ -199,6 +201,7 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VDomDocument *doc, VContai
BiasRotatePoint(p4, dx, dy, data->GeometricObject<const VPointF *>(pRotate)->toQPointF(),
angle);
qint64 idP4 = data->AddGObject(p4);
--k;
VSpline spl = VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, spline.GetKcurve());
if (i==1)
@ -209,6 +212,11 @@ void VToolUnionDetails::AddToNewDetail(QObject *tool, VDomDocument *doc, VContai
path->append(VSplinePoint(*p4, splinePath->at(i).KAsm1(), spl.GetAngle1(),
splinePath->at(i).KAsm1()));
}
while(k>=0)
{
data->getNextId();
--k;
}
idObject = data->AddGObject(path);
VSplinePath *path1 = new VSplinePath(*path);
@ -319,9 +327,7 @@ void VToolUnionDetails::UpdatePoints(const qint64 &idDetail, VContainer *data, c
path->setMode(Draw::Modeling);
const VSplinePath *splinePath = data->GeometricObject<const VSplinePath *>(det.at(i).getId());
Q_ASSERT(splinePath != 0);
qDebug()<<splinePath->Count();
qDebug()<<det.at(i).getId();
qDebug()<<"Початок циклу.";
qint32 k = splinePath->getMaxCountPoints();
for (qint32 i = 1; i <= splinePath->Count(); ++i)
{
VSpline spline(splinePath->at(i-1).P(), splinePath->at(i).P(),
@ -334,7 +340,7 @@ void VToolUnionDetails::UpdatePoints(const qint64 &idDetail, VContainer *data, c
angle);
++idCount;
data->UpdateGObject(idDetail+idCount, p1);
qDebug()<<idDetail+idCount;
--k;
VPointF p2 = VPointF(spline.GetP2());
BiasRotatePoint(&p2, dx, dy, data->GeometricObject<const VPointF *>(pRotate)->toQPointF(),
@ -350,7 +356,7 @@ void VToolUnionDetails::UpdatePoints(const qint64 &idDetail, VContainer *data, c
angle);
++idCount;
data->UpdateGObject(idDetail+idCount, p4);
qDebug()<<idDetail+idCount;
--k;
VSpline spl = VSpline(*p1, p2.toQPointF(), p3.toQPointF(), *p4, spline.GetKcurve());
if (i==1)
@ -362,9 +368,15 @@ void VToolUnionDetails::UpdatePoints(const qint64 &idDetail, VContainer *data, c
splinePath->at(i).KAsm1()));
}
while(k>=0)
{
data->getNextId();
--k;
++idCount;
}
++idCount;
data->UpdateGObject(idDetail+idCount, path);
qDebug()<<idDetail+idCount;
++idCount;
}