Fix a crash. ref #984.
Cover cases with VCubicBezier and VCubicBezierPath. --HG-- branch : develop
This commit is contained in:
parent
9e25e6de24
commit
2d63440549
|
@ -33,6 +33,9 @@
|
||||||
#include "../vpatterndb/vcontainer.h"
|
#include "../vpatterndb/vcontainer.h"
|
||||||
#include "../vpatterndb/vpiecenode.h"
|
#include "../vpatterndb/vpiecenode.h"
|
||||||
#include "../vgeometry/vpointf.h"
|
#include "../vgeometry/vpointf.h"
|
||||||
|
#include "../vpatterndb/variables/vcurvelength.h"
|
||||||
|
#include "../ifc/exception/vexceptionbadid.h"
|
||||||
|
#include "../vpatterndb/vcontainer.h"
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
@ -462,3 +465,24 @@ QFont NodeFont(QFont font, bool nodeExcluded)
|
||||||
font.setStrikeOut(nodeExcluded);
|
font.setStrikeOut(nodeExcluded);
|
||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void CurrentCurveLength(vidtype curveId, VContainer *data)
|
||||||
|
{
|
||||||
|
SCASSERT(data != nullptr)
|
||||||
|
VCurveLength *length = nullptr;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const QSharedPointer<VAbstractCurve> curve = data->GeometricObject<VAbstractCurve>(curveId);
|
||||||
|
length = new VCurveLength(curveId, curveId, curve.data(), *data->GetPatternUnit());
|
||||||
|
}
|
||||||
|
catch (const VExceptionBadId &)
|
||||||
|
{
|
||||||
|
length = new VCurveLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
SCASSERT(length != nullptr)
|
||||||
|
length->SetName(currentLength);
|
||||||
|
|
||||||
|
data->AddVariable(currentLength, length);
|
||||||
|
}
|
||||||
|
|
|
@ -33,10 +33,7 @@
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
|
|
||||||
#include "../vpatterndb/variables/vinternalvariable.h"
|
#include "../vpatterndb/variables/vinternalvariable.h"
|
||||||
#include "../vpatterndb/variables/vcurvelength.h"
|
|
||||||
#include "../vmisc/typedef.h"
|
#include "../vmisc/typedef.h"
|
||||||
#include "../ifc/exception/vexceptionbadid.h"
|
|
||||||
#include "../vpatterndb/vcontainer.h"
|
|
||||||
|
|
||||||
class QPlainTextEdit;
|
class QPlainTextEdit;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
|
@ -47,6 +44,7 @@ class QLabel;
|
||||||
class QWidget;
|
class QWidget;
|
||||||
class QColor;
|
class QColor;
|
||||||
class QLineEdit;
|
class QLineEdit;
|
||||||
|
class VContainer;
|
||||||
class QListWidget;
|
class QListWidget;
|
||||||
class VPieceNode;
|
class VPieceNode;
|
||||||
|
|
||||||
|
@ -87,33 +85,6 @@ bool DoubleCurves(QListWidget *listWidget);
|
||||||
bool EachPointLabelIsUnique(QListWidget *listWidget);
|
bool EachPointLabelIsUnique(QListWidget *listWidget);
|
||||||
QString DialogWarningIcon();
|
QString DialogWarningIcon();
|
||||||
QFont NodeFont(QFont font, bool nodeExcluded = false);
|
QFont NodeFont(QFont font, bool nodeExcluded = false);
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void CurrentCurveLength(vidtype curveId, VContainer *data);
|
void CurrentCurveLength(vidtype curveId, VContainer *data);
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
|
||||||
template<typename T>
|
|
||||||
void CurrentCurveLength(vidtype curveId, VContainer *data)
|
|
||||||
{
|
|
||||||
SCASSERT(data != nullptr)
|
|
||||||
VCurveLength *length = nullptr;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
const QSharedPointer<T> curve = data->GeometricObject<T>(curveId);
|
|
||||||
|
|
||||||
length = new VCurveLength(curveId, curveId, curve.data(), *data->GetPatternUnit());
|
|
||||||
}
|
|
||||||
catch (const VExceptionBadId &)
|
|
||||||
{
|
|
||||||
QScopedPointer<T> curve(new T());
|
|
||||||
length = new VCurveLength(NULL_ID, NULL_ID, curve.data(), *data->GetPatternUnit());
|
|
||||||
}
|
|
||||||
|
|
||||||
SCASSERT(length != nullptr)
|
|
||||||
length->SetName(currentLength);
|
|
||||||
|
|
||||||
data->AddVariable(currentLength, length);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // DIALOGTOOLBOX_H
|
#endif // DIALOGTOOLBOX_H
|
||||||
|
|
|
@ -195,7 +195,7 @@ void DialogCutArc::closeEvent(QCloseEvent *event)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogCutArc::ArcChanged()
|
void DialogCutArc::ArcChanged()
|
||||||
{
|
{
|
||||||
CurrentCurveLength<VArc>(getArcId(), const_cast<VContainer *> (data));
|
CurrentCurveLength(getArcId(), const_cast<VContainer *> (data));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -202,7 +202,7 @@ void DialogCutSpline::closeEvent(QCloseEvent *event)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogCutSpline::SplineChanged()
|
void DialogCutSpline::SplineChanged()
|
||||||
{
|
{
|
||||||
CurrentCurveLength<VSpline>(getSplineId(), const_cast<VContainer *> (data));
|
CurrentCurveLength(getSplineId(), const_cast<VContainer *> (data));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -202,7 +202,7 @@ void DialogCutSplinePath::closeEvent(QCloseEvent *event)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogCutSplinePath::SplinePathChanged()
|
void DialogCutSplinePath::SplinePathChanged()
|
||||||
{
|
{
|
||||||
CurrentCurveLength<VSplinePath>(getSplinePathId(), const_cast<VContainer *> (data));
|
CurrentCurveLength(getSplinePathId(), const_cast<VContainer *> (data));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user