Improve Move tool. It should provide optional rotation origin point field.
ref #726. --HG-- branch : develop
This commit is contained in:
parent
e6c59de3ca
commit
604baa61d3
|
@ -1852,6 +1852,8 @@ void VToolOptionsPropertyBrowser::ChangeDataToolMove(VPE::VProperty *property)
|
||||||
case 42: // AttrRotationAngle
|
case 42: // AttrRotationAngle
|
||||||
i->SetFormulaRotationAngle(value.value<VFormula>());
|
i->SetFormulaRotationAngle(value.value<VFormula>());
|
||||||
break;
|
break;
|
||||||
|
case 11: // AttrCenter (read only)
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
qWarning()<<"Unknown property type. id = "<<id;
|
qWarning()<<"Unknown property type. id = "<<id;
|
||||||
break;
|
break;
|
||||||
|
@ -2420,6 +2422,7 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolMove(QGraphicsItem *item)
|
||||||
AddPropertyFormula(tr("Angle:"), i->GetFormulaAngle(), AttrAngle);
|
AddPropertyFormula(tr("Angle:"), i->GetFormulaAngle(), AttrAngle);
|
||||||
AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength);
|
AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength);
|
||||||
AddPropertyFormula(tr("Rotation angle:"), i->GetFormulaRotationAngle(), AttrRotationAngle);
|
AddPropertyFormula(tr("Rotation angle:"), i->GetFormulaRotationAngle(), AttrRotationAngle);
|
||||||
|
AddPropertyParentPointName(i->OriginPointName(), tr("Rotation origin point:"), AttrCenter);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -3240,6 +3243,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolMove()
|
||||||
QVariant valueRotationAngle;
|
QVariant valueRotationAngle;
|
||||||
valueRotationAngle.setValue(i->GetFormulaRotationAngle());
|
valueRotationAngle.setValue(i->GetFormulaRotationAngle());
|
||||||
idToProperty[AttrRotationAngle]->setValue(valueRotationAngle);
|
idToProperty[AttrRotationAngle]->setValue(valueRotationAngle);
|
||||||
|
|
||||||
|
QVariant valueRotationOriginPoint;
|
||||||
|
valueRotationOriginPoint.setValue(i->OriginPointName());
|
||||||
|
idToProperty[AttrCenter]->setValue(valueRotationOriginPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -3162,6 +3162,7 @@ void VPattern::ParseToolMove(VMainGraphicsScene *scene, QDomElement &domElement,
|
||||||
initData.formulaLength = GetParametrString(domElement, AttrLength, "0");
|
initData.formulaLength = GetParametrString(domElement, AttrLength, "0");
|
||||||
const QString len = initData.formulaLength;//need for saving fixed formula;
|
const QString len = initData.formulaLength;//need for saving fixed formula;
|
||||||
initData.suffix = GetParametrString(domElement, AttrSuffix, "");
|
initData.suffix = GetParametrString(domElement, AttrSuffix, "");
|
||||||
|
initData.rotationOrigin = GetParametrUInt(domElement, AttrCenter, NULL_ID_STR);
|
||||||
|
|
||||||
VAbstractOperation::ExtractData(domElement, initData);
|
VAbstractOperation::ExtractData(domElement, initData);
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
<file>schema/pattern/v0.7.0.xsd</file>
|
<file>schema/pattern/v0.7.0.xsd</file>
|
||||||
<file>schema/pattern/v0.7.1.xsd</file>
|
<file>schema/pattern/v0.7.1.xsd</file>
|
||||||
<file>schema/pattern/v0.7.2.xsd</file>
|
<file>schema/pattern/v0.7.2.xsd</file>
|
||||||
|
<file>schema/pattern/v0.7.3.xsd</file>
|
||||||
<file>schema/standard_measurements/v0.3.0.xsd</file>
|
<file>schema/standard_measurements/v0.3.0.xsd</file>
|
||||||
<file>schema/standard_measurements/v0.4.0.xsd</file>
|
<file>schema/standard_measurements/v0.4.0.xsd</file>
|
||||||
<file>schema/standard_measurements/v0.4.1.xsd</file>
|
<file>schema/standard_measurements/v0.4.1.xsd</file>
|
||||||
|
|
1044
src/libs/ifc/schema/pattern/v0.7.3.xsd
Normal file
1044
src/libs/ifc/schema/pattern/v0.7.3.xsd
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -58,8 +58,8 @@ class QDomElement;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.0");
|
const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.0");
|
||||||
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.7.2");
|
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.7.3");
|
||||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.7.2.xsd");
|
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.7.3.xsd");
|
||||||
|
|
||||||
//VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
//VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||||
//VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
//VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||||
|
@ -173,98 +173,62 @@ VPatternConverter::VPatternConverter(const QString &fileName)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QString VPatternConverter::XSDSchema(int ver) const
|
QString VPatternConverter::XSDSchema(int ver) const
|
||||||
{
|
{
|
||||||
switch (ver)
|
QHash <int, QString> schemas =
|
||||||
{
|
{
|
||||||
case (0x000100):
|
std::make_pair(0x000100, QStringLiteral("://schema/pattern/v0.1.0.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.1.0.xsd");
|
std::make_pair(0x000101, QStringLiteral("://schema/pattern/v0.1.1.xsd")),
|
||||||
case (0x000101):
|
std::make_pair(0x000102, QStringLiteral("://schema/pattern/v0.1.2.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.1.1.xsd");
|
std::make_pair(0x000103, QStringLiteral("://schema/pattern/v0.1.3.xsd")),
|
||||||
case (0x000102):
|
std::make_pair(0x000104, QStringLiteral("://schema/pattern/v0.1.4.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.1.2.xsd");
|
std::make_pair(0x000200, QStringLiteral("://schema/pattern/v0.2.0.xsd")),
|
||||||
case (0x000103):
|
std::make_pair(0x000201, QStringLiteral("://schema/pattern/v0.2.1.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.1.3.xsd");
|
std::make_pair(0x000202, QStringLiteral("://schema/pattern/v0.2.2.xsd")),
|
||||||
case (0x000104):
|
std::make_pair(0x000203, QStringLiteral("://schema/pattern/v0.2.3.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.1.4.xsd");
|
std::make_pair(0x000204, QStringLiteral("://schema/pattern/v0.2.4.xsd")),
|
||||||
case (0x000200):
|
std::make_pair(0x000205, QStringLiteral("://schema/pattern/v0.2.5.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.0.xsd");
|
std::make_pair(0x000206, QStringLiteral("://schema/pattern/v0.2.6.xsd")),
|
||||||
case (0x000201):
|
std::make_pair(0x000207, QStringLiteral("://schema/pattern/v0.2.7.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.1.xsd");
|
std::make_pair(0x000300, QStringLiteral("://schema/pattern/v0.3.0.xsd")),
|
||||||
case (0x000202):
|
std::make_pair(0x000301, QStringLiteral("://schema/pattern/v0.3.1.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.2.xsd");
|
std::make_pair(0x000302, QStringLiteral("://schema/pattern/v0.3.2.xsd")),
|
||||||
case (0x000203):
|
std::make_pair(0x000303, QStringLiteral("://schema/pattern/v0.3.3.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.3.xsd");
|
std::make_pair(0x000304, QStringLiteral("://schema/pattern/v0.3.4.xsd")),
|
||||||
case (0x000204):
|
std::make_pair(0x000305, QStringLiteral("://schema/pattern/v0.3.5.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.4.xsd");
|
std::make_pair(0x000306, QStringLiteral("://schema/pattern/v0.3.6.xsd")),
|
||||||
case (0x000205):
|
std::make_pair(0x000307, QStringLiteral("://schema/pattern/v0.3.7.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.5.xsd");
|
std::make_pair(0x000308, QStringLiteral("://schema/pattern/v0.3.8.xsd")),
|
||||||
case (0x000206):
|
std::make_pair(0x000309, QStringLiteral("://schema/pattern/v0.3.9.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.6.xsd");
|
std::make_pair(0x000400, QStringLiteral("://schema/pattern/v0.4.0.xsd")),
|
||||||
case (0x000207):
|
std::make_pair(0x000401, QStringLiteral("://schema/pattern/v0.4.1.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.2.7.xsd");
|
std::make_pair(0x000402, QStringLiteral("://schema/pattern/v0.4.2.xsd")),
|
||||||
case (0x000300):
|
std::make_pair(0x000403, QStringLiteral("://schema/pattern/v0.4.3.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.0.xsd");
|
std::make_pair(0x000404, QStringLiteral("://schema/pattern/v0.4.4.xsd")),
|
||||||
case (0x000301):
|
std::make_pair(0x000405, QStringLiteral("://schema/pattern/v0.4.5.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.1.xsd");
|
std::make_pair(0x000406, QStringLiteral("://schema/pattern/v0.4.6.xsd")),
|
||||||
case (0x000302):
|
std::make_pair(0x000407, QStringLiteral("://schema/pattern/v0.4.7.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.2.xsd");
|
std::make_pair(0x000408, QStringLiteral("://schema/pattern/v0.4.8.xsd")),
|
||||||
case (0x000303):
|
std::make_pair(0x000500, QStringLiteral("://schema/pattern/v0.5.0.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.3.xsd");
|
std::make_pair(0x000501, QStringLiteral("://schema/pattern/v0.5.1.xsd")),
|
||||||
case (0x000304):
|
std::make_pair(0x000600, QStringLiteral("://schema/pattern/v0.6.0.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.4.xsd");
|
std::make_pair(0x000601, QStringLiteral("://schema/pattern/v0.6.1.xsd")),
|
||||||
case (0x000305):
|
std::make_pair(0x000602, QStringLiteral("://schema/pattern/v0.6.2.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.5.xsd");
|
std::make_pair(0x000603, QStringLiteral("://schema/pattern/v0.6.3.xsd")),
|
||||||
case (0x000306):
|
std::make_pair(0x000604, QStringLiteral("://schema/pattern/v0.6.4.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.6.xsd");
|
std::make_pair(0x000605, QStringLiteral("://schema/pattern/v0.6.5.xsd")),
|
||||||
case (0x000307):
|
std::make_pair(0x000606, QStringLiteral("://schema/pattern/v0.6.6.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.7.xsd");
|
std::make_pair(0x000700, QStringLiteral("://schema/pattern/v0.7.0.xsd")),
|
||||||
case (0x000308):
|
std::make_pair(0x000701, QStringLiteral("://schema/pattern/v0.7.1.xsd")),
|
||||||
return QStringLiteral("://schema/pattern/v0.3.8.xsd");
|
std::make_pair(0x000702, QStringLiteral("://schema/pattern/v0.7.2.xsd")),
|
||||||
case (0x000309):
|
std::make_pair(0x000703, CurrentSchema)
|
||||||
return QStringLiteral("://schema/pattern/v0.3.9.xsd");
|
};
|
||||||
case (0x000400):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.4.0.xsd");
|
if (schemas.contains(ver))
|
||||||
case (0x000401):
|
{
|
||||||
return QStringLiteral("://schema/pattern/v0.4.1.xsd");
|
return schemas.value(ver);
|
||||||
case (0x000402):
|
}
|
||||||
return QStringLiteral("://schema/pattern/v0.4.2.xsd");
|
else
|
||||||
case (0x000403):
|
{
|
||||||
return QStringLiteral("://schema/pattern/v0.4.3.xsd");
|
InvalidVersion(ver);
|
||||||
case (0x000404):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.4.4.xsd");
|
|
||||||
case (0x000405):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.4.5.xsd");
|
|
||||||
case (0x000406):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.4.6.xsd");
|
|
||||||
case (0x000407):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.4.7.xsd");
|
|
||||||
case (0x000408):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.4.8.xsd");
|
|
||||||
case (0x000500):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.5.0.xsd");
|
|
||||||
case (0x000501):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.5.1.xsd");
|
|
||||||
case (0x000600):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.0.xsd");
|
|
||||||
case (0x000601):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.1.xsd");
|
|
||||||
case (0x000602):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.2.xsd");
|
|
||||||
case (0x000603):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.3.xsd");
|
|
||||||
case (0x000604):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.4.xsd");
|
|
||||||
case (0x000605):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.5.xsd");
|
|
||||||
case (0x000606):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.6.6.xsd");
|
|
||||||
case (0x000700):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.7.0.xsd");
|
|
||||||
case (0x000701):
|
|
||||||
return QStringLiteral("://schema/pattern/v0.7.1.xsd");
|
|
||||||
case (0x000702):
|
|
||||||
return CurrentSchema;
|
|
||||||
default:
|
|
||||||
InvalidVersion(ver);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -446,6 +410,10 @@ void VPatternConverter::ApplyPatches()
|
||||||
ValidateXML(XSDSchema(0x000702), m_convertedFileName);
|
ValidateXML(XSDSchema(0x000702), m_convertedFileName);
|
||||||
V_FALLTHROUGH
|
V_FALLTHROUGH
|
||||||
case (0x000702):
|
case (0x000702):
|
||||||
|
ToV0_7_3();
|
||||||
|
ValidateXML(XSDSchema(0x000703), m_convertedFileName);
|
||||||
|
V_FALLTHROUGH
|
||||||
|
case (0x000703):
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
InvalidVersion(m_ver);
|
InvalidVersion(m_ver);
|
||||||
|
@ -463,7 +431,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion()
|
||||||
bool VPatternConverter::IsReadOnly() const
|
bool VPatternConverter::IsReadOnly() const
|
||||||
{
|
{
|
||||||
// Check if attribute readOnly was not changed in file format
|
// Check if attribute readOnly was not changed in file format
|
||||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == CONVERTER_VERSION_CHECK(0, 7, 2),
|
Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == CONVERTER_VERSION_CHECK(0, 7, 3),
|
||||||
"Check attribute readOnly.");
|
"Check attribute readOnly.");
|
||||||
|
|
||||||
// Possibly in future attribute readOnly will change position etc.
|
// Possibly in future attribute readOnly will change position etc.
|
||||||
|
@ -957,6 +925,16 @@ void VPatternConverter::ToV0_7_2()
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VPatternConverter::ToV0_7_3()
|
||||||
|
{
|
||||||
|
// TODO. Delete if minimal supported version is 0.7.3
|
||||||
|
Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < CONVERTER_VERSION_CHECK(0, 7, 3),
|
||||||
|
"Time to refactor the code.");
|
||||||
|
SetVersion(QStringLiteral("0.7.3"));
|
||||||
|
Save();
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VPatternConverter::TagUnitToV0_2_0()
|
void VPatternConverter::TagUnitToV0_2_0()
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,7 +53,7 @@ public:
|
||||||
static const QString PatternMaxVerStr;
|
static const QString PatternMaxVerStr;
|
||||||
static const QString CurrentSchema;
|
static const QString CurrentSchema;
|
||||||
static Q_DECL_CONSTEXPR const int PatternMinVer = CONVERTER_VERSION_CHECK(0, 1, 0);
|
static Q_DECL_CONSTEXPR const int PatternMinVer = CONVERTER_VERSION_CHECK(0, 1, 0);
|
||||||
static Q_DECL_CONSTEXPR const int PatternMaxVer = CONVERTER_VERSION_CHECK(0, 7, 2);
|
static Q_DECL_CONSTEXPR const int PatternMaxVer = CONVERTER_VERSION_CHECK(0, 7, 3);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual int MinVer() const Q_DECL_OVERRIDE;
|
virtual int MinVer() const Q_DECL_OVERRIDE;
|
||||||
|
@ -115,6 +115,7 @@ private:
|
||||||
void ToV0_7_0();
|
void ToV0_7_0();
|
||||||
void ToV0_7_1();
|
void ToV0_7_1();
|
||||||
void ToV0_7_2();
|
void ToV0_7_2();
|
||||||
|
void ToV0_7_3();
|
||||||
|
|
||||||
void TagUnitToV0_2_0();
|
void TagUnitToV0_2_0();
|
||||||
void TagIncrementToV0_2_0();
|
void TagIncrementToV0_2_0();
|
||||||
|
|
|
@ -81,7 +81,8 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
||||||
objects(),
|
objects(),
|
||||||
stage1(true),
|
stage1(true),
|
||||||
stage2(false),
|
stage2(false),
|
||||||
m_suffix()
|
m_suffix(),
|
||||||
|
optionalRotationOrigin(false)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
@ -107,6 +108,12 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
||||||
|
|
||||||
InitOkCancelApply(ui);
|
InitOkCancelApply(ui);
|
||||||
|
|
||||||
|
FillComboBoxPoints(ui->comboBoxRotationOriginPoint);
|
||||||
|
|
||||||
|
ui->comboBoxRotationOriginPoint->blockSignals(true);
|
||||||
|
ui->comboBoxRotationOriginPoint->addItem(tr("Center point"), NULL_ID);
|
||||||
|
ui->comboBoxRotationOriginPoint->blockSignals(false);
|
||||||
|
|
||||||
flagName = true;
|
flagName = true;
|
||||||
CheckState();
|
CheckState();
|
||||||
|
|
||||||
|
@ -122,6 +129,8 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
||||||
connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogMove::DeployLengthTextEdit);
|
connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogMove::DeployLengthTextEdit);
|
||||||
|
|
||||||
vis = new VisToolMove(data);
|
vis = new VisToolMove(data);
|
||||||
|
|
||||||
|
SetRotationOrigPointId(NULL_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -215,6 +224,21 @@ void DialogMove::SetSuffix(const QString &value)
|
||||||
ui->lineEditSuffix->setText(value);
|
ui->lineEditSuffix->setText(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
quint32 DialogMove::GetRotationOrigPointId() const
|
||||||
|
{
|
||||||
|
return getCurrentObjectId(ui->comboBoxRotationOriginPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void DialogMove::SetRotationOrigPointId(const quint32 &value)
|
||||||
|
{
|
||||||
|
ChangeCurrentData(ui->comboBoxRotationOriginPoint, value);
|
||||||
|
VisToolMove *operation = qobject_cast<VisToolMove *>(vis);
|
||||||
|
SCASSERT(operation != nullptr)
|
||||||
|
operation->SetRotationOriginPointId(value);
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QVector<quint32> DialogMove::GetObjects() const
|
QVector<quint32> DialogMove::GetObjects() const
|
||||||
{
|
{
|
||||||
|
@ -278,24 +302,49 @@ void DialogMove::ShowDialog(bool click)
|
||||||
VisToolMove *operation = qobject_cast<VisToolMove *>(vis);
|
VisToolMove *operation = qobject_cast<VisToolMove *>(vis);
|
||||||
SCASSERT(operation != nullptr)
|
SCASSERT(operation != nullptr)
|
||||||
|
|
||||||
SetAngle(qApp->TrVars()->FormulaFromUser(formulaAngle, qApp->Settings()->GetOsSeparator()));
|
if (QGuiApplication::keyboardModifiers() == Qt::ControlModifier)
|
||||||
SetLength(qApp->TrVars()->FormulaFromUser(formulaLength, qApp->Settings()->GetOsSeparator()));
|
{
|
||||||
SetRotationAngle(operation->RotationAngle());
|
if (not optionalRotationOrigin)
|
||||||
setModal(true);
|
{
|
||||||
emit ToolTip("");
|
operation->SetRotationOriginPointId(NULL_ID);
|
||||||
timerAngle->start();
|
SetObject(NULL_ID, ui->comboBoxRotationOriginPoint, "");
|
||||||
timerRotationAngle->start();
|
operation->RefreshGeometry();
|
||||||
timerLength->start();
|
}
|
||||||
show();
|
optionalRotationOrigin = false; // Handled, next click on empty filed will disable selection
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetAngle(qApp->TrVars()->FormulaFromUser(formulaAngle, qApp->Settings()->GetOsSeparator()));
|
||||||
|
SetLength(qApp->TrVars()->FormulaFromUser(formulaLength, qApp->Settings()->GetOsSeparator()));
|
||||||
|
SetRotationAngle(operation->RotationAngle());
|
||||||
|
setModal(true);
|
||||||
|
emit ToolTip("");
|
||||||
|
timerAngle->start();
|
||||||
|
timerRotationAngle->start();
|
||||||
|
timerLength->start();
|
||||||
|
show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogMove::ChosenObject(quint32 id, const SceneObject &type)
|
void DialogMove::ChosenObject(quint32 id, const SceneObject &type)
|
||||||
{
|
{
|
||||||
Q_UNUSED(id)
|
if (not stage1 && stage2 && prepare)// After first choose we ignore all objects
|
||||||
Q_UNUSED(type)
|
{
|
||||||
// do nothing
|
if (type == SceneObject::Point && QGuiApplication::keyboardModifiers() == Qt::ControlModifier)
|
||||||
|
{
|
||||||
|
if (SetObject(id, ui->comboBoxRotationOriginPoint, ""))
|
||||||
|
{
|
||||||
|
VisToolMove *operation = qobject_cast<VisToolMove *>(vis);
|
||||||
|
SCASSERT(operation != nullptr)
|
||||||
|
|
||||||
|
operation->SetRotationOriginPointId(id);
|
||||||
|
operation->RefreshGeometry();
|
||||||
|
optionalRotationOrigin = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -478,6 +527,7 @@ void DialogMove::SaveData()
|
||||||
operation->SetAngle(formulaAngle);
|
operation->SetAngle(formulaAngle);
|
||||||
operation->SetLength(formulaLength);
|
operation->SetLength(formulaLength);
|
||||||
operation->SetRotationAngle(formulaRotationAngle);
|
operation->SetRotationAngle(formulaRotationAngle);
|
||||||
|
operation->SetRotationOriginPointId(GetRotationOrigPointId());
|
||||||
operation->RefreshGeometry();
|
operation->RefreshGeometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,9 @@ public:
|
||||||
QString GetSuffix() const;
|
QString GetSuffix() const;
|
||||||
void SetSuffix(const QString &value);
|
void SetSuffix(const QString &value);
|
||||||
|
|
||||||
|
quint32 GetRotationOrigPointId() const;
|
||||||
|
void SetRotationOrigPointId(const quint32 &value);
|
||||||
|
|
||||||
QVector<quint32> GetObjects() const;
|
QVector<quint32> GetObjects() const;
|
||||||
|
|
||||||
virtual void ShowDialog(bool click) Q_DECL_OVERRIDE;
|
virtual void ShowDialog(bool click) Q_DECL_OVERRIDE;
|
||||||
|
@ -128,6 +131,8 @@ private:
|
||||||
|
|
||||||
QString m_suffix;
|
QString m_suffix;
|
||||||
|
|
||||||
|
bool optionalRotationOrigin;
|
||||||
|
|
||||||
void EvalAngle();
|
void EvalAngle();
|
||||||
void EvalRotationAngle();
|
void EvalRotationAngle();
|
||||||
void EvalLength();
|
void EvalLength();
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>292</width>
|
<width>292</width>
|
||||||
<height>301</height>
|
<height>332</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -559,8 +559,11 @@
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<item>
|
<property name="fieldGrowthPolicy">
|
||||||
|
<enum>QFormLayout::ExpandingFieldsGrow</enum>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="labelSuffix">
|
<widget class="QLabel" name="labelSuffix">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
@ -573,9 +576,19 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="0" column="1">
|
||||||
<widget class="QLineEdit" name="lineEditSuffix"/>
|
<widget class="QLineEdit" name="lineEditSuffix"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Rotation origin point:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QComboBox" name="comboBoxRotationOriginPoint"/>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
|
|
@ -1295,7 +1295,7 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons
|
||||||
{
|
{
|
||||||
if (rule == FillComboBox::NoChildren)
|
if (rule == FillComboBox::NoChildren)
|
||||||
{
|
{
|
||||||
if (i.key() != toolId && i.key() != ch1 && i.key() != ch2)
|
if (i.key() != toolId && i.value()->getIdTool() != toolId && i.key() != ch1 && i.key() != ch2)
|
||||||
{
|
{
|
||||||
QSharedPointer<VGObject> obj = i.value();
|
QSharedPointer<VGObject> obj = i.value();
|
||||||
if (obj->getType() == gType)
|
if (obj->getType() == gType)
|
||||||
|
@ -1306,7 +1306,7 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (i.key() != toolId)
|
if (i.key() != toolId && i.value()->getIdTool() != toolId)
|
||||||
{
|
{
|
||||||
QSharedPointer<VGObject> obj = i.value();
|
QSharedPointer<VGObject> obj = i.value();
|
||||||
if (obj->getType() == gType && obj->getMode() == Draw::Calculation)
|
if (obj->getType() == gType && obj->getMode() == Draw::Calculation)
|
||||||
|
|
|
@ -138,6 +138,7 @@ void VToolMove::setDialog()
|
||||||
dialogTool->SetRotationAngle(formulaRotationAngle);
|
dialogTool->SetRotationAngle(formulaRotationAngle);
|
||||||
dialogTool->SetLength(formulaLength);
|
dialogTool->SetLength(formulaLength);
|
||||||
dialogTool->SetSuffix(suffix);
|
dialogTool->SetSuffix(suffix);
|
||||||
|
dialogTool->SetRotationOrigPointId(origPointId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -179,7 +180,18 @@ VToolMove *VToolMove::Create(VToolMoveInitData &initData)
|
||||||
calcRotationAngle = CheckFormula(initData.id, initData.formulaRotationAngle, initData.data);
|
calcRotationAngle = CheckFormula(initData.id, initData.formulaRotationAngle, initData.data);
|
||||||
calcLength = qApp->toPixel(CheckFormula(initData.id, initData.formulaLength, initData.data));
|
calcLength = qApp->toPixel(CheckFormula(initData.id, initData.formulaLength, initData.data));
|
||||||
|
|
||||||
const QPointF rotationOrigin = GetOriginPoint(initData.source, initData.data, calcLength, calcAngle);
|
QPointF rotationOrigin;
|
||||||
|
QSharedPointer<VPointF> originPoint;
|
||||||
|
|
||||||
|
if (initData.rotationOrigin == NULL_ID)
|
||||||
|
{
|
||||||
|
rotationOrigin = GetOriginPoint(initData.source, initData.data, calcLength, calcAngle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
originPoint = initData.data->GeometricObject<VPointF>(initData.rotationOrigin);
|
||||||
|
rotationOrigin = static_cast<QPointF>(*originPoint);
|
||||||
|
}
|
||||||
|
|
||||||
if (initData.typeCreation == Source::FromGui)
|
if (initData.typeCreation == Source::FromGui)
|
||||||
{
|
{
|
||||||
|
@ -313,6 +325,12 @@ QT_WARNING_POP
|
||||||
initData.scene->addItem(tool);
|
initData.scene->addItem(tool);
|
||||||
InitOperationToolConnections(initData.scene, tool);
|
InitOperationToolConnections(initData.scene, tool);
|
||||||
VAbstractPattern::AddTool(initData.id, tool);
|
VAbstractPattern::AddTool(initData.id, tool);
|
||||||
|
|
||||||
|
if (not originPoint.isNull())
|
||||||
|
{
|
||||||
|
initData.doc->IncrementReferens(originPoint->getIdTool());
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < initData.source.size(); ++i)
|
for (int i = 0; i < initData.source.size(); ++i)
|
||||||
{
|
{
|
||||||
initData.doc->IncrementReferens(initData.data->GetGObject(initData.source.at(i))->getIdTool());
|
initData.doc->IncrementReferens(initData.data->GetGObject(initData.source.at(i))->getIdTool());
|
||||||
|
@ -388,6 +406,19 @@ void VToolMove::SetFormulaLength(const VFormula &value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QString VToolMove::OriginPointName() const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return VAbstractTool::data.GetGObject(origPointId)->name();
|
||||||
|
}
|
||||||
|
catch (const VExceptionBadId &)
|
||||||
|
{
|
||||||
|
return tr("Center point");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VToolMove::ShowVisualization(bool show)
|
void VToolMove::ShowVisualization(bool show)
|
||||||
{
|
{
|
||||||
|
@ -421,6 +452,7 @@ void VToolMove::SetVisualization()
|
||||||
visual->SetRotationAngle(qApp->TrVars()->FormulaToUser(formulaRotationAngle,
|
visual->SetRotationAngle(qApp->TrVars()->FormulaToUser(formulaRotationAngle,
|
||||||
qApp->Settings()->GetOsSeparator()));
|
qApp->Settings()->GetOsSeparator()));
|
||||||
visual->SetLength(qApp->TrVars()->FormulaToUser(formulaLength, qApp->Settings()->GetOsSeparator()));
|
visual->SetLength(qApp->TrVars()->FormulaToUser(formulaLength, qApp->Settings()->GetOsSeparator()));
|
||||||
|
visual->SetRotationOriginPointId(origPointId);
|
||||||
visual->RefreshGeometry();
|
visual->RefreshGeometry();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -432,18 +464,19 @@ void VToolMove::SaveDialog(QDomElement &domElement, QList<quint32> &oldDependenc
|
||||||
QSharedPointer<DialogMove> dialogTool = m_dialog.objectCast<DialogMove>();
|
QSharedPointer<DialogMove> dialogTool = m_dialog.objectCast<DialogMove>();
|
||||||
SCASSERT(not dialogTool.isNull())
|
SCASSERT(not dialogTool.isNull())
|
||||||
|
|
||||||
Q_UNUSED(oldDependencies);
|
AddDependence(oldDependencies, origPointId);
|
||||||
Q_UNUSED(newDependencies)
|
AddDependence(newDependencies, dialogTool->GetRotationOrigPointId());
|
||||||
|
|
||||||
doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle());
|
doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle());
|
||||||
QString length = dialogTool->GetLength();
|
doc->SetAttribute(domElement, AttrLength, dialogTool->GetLength());
|
||||||
doc->SetAttribute(domElement, AttrLength, length);
|
|
||||||
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
||||||
|
doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetRotationOrigPointId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VToolMove::ReadToolAttributes(const QDomElement &domElement)
|
void VToolMove::ReadToolAttributes(const QDomElement &domElement)
|
||||||
{
|
{
|
||||||
|
origPointId = doc->GetParametrUInt(domElement, AttrCenter, NULL_ID_STR);
|
||||||
formulaAngle = doc->GetParametrString(domElement, AttrAngle, "0");
|
formulaAngle = doc->GetParametrString(domElement, AttrAngle, "0");
|
||||||
formulaRotationAngle = doc->GetParametrString(domElement, AttrRotationAngle, "0");
|
formulaRotationAngle = doc->GetParametrString(domElement, AttrRotationAngle, "0");
|
||||||
formulaLength = doc->GetParametrString(domElement, AttrLength, "0");
|
formulaLength = doc->GetParametrString(domElement, AttrLength, "0");
|
||||||
|
@ -460,6 +493,7 @@ void VToolMove::SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj)
|
||||||
doc->SetAttribute(tag, AttrRotationAngle, formulaRotationAngle);
|
doc->SetAttribute(tag, AttrRotationAngle, formulaRotationAngle);
|
||||||
doc->SetAttribute(tag, AttrLength, formulaLength);
|
doc->SetAttribute(tag, AttrLength, formulaLength);
|
||||||
doc->SetAttribute(tag, AttrSuffix, suffix);
|
doc->SetAttribute(tag, AttrSuffix, suffix);
|
||||||
|
doc->SetAttribute(tag, AttrCenter, QString().setNum(origPointId));
|
||||||
|
|
||||||
SaveSourceDestination(tag);
|
SaveSourceDestination(tag);
|
||||||
}
|
}
|
||||||
|
@ -468,12 +502,18 @@ void VToolMove::SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj)
|
||||||
QString VToolMove::MakeToolTip() const
|
QString VToolMove::MakeToolTip() const
|
||||||
{
|
{
|
||||||
const QString toolTip = QString("<tr> <td><b>%1:</b> %2°</td> </tr>"
|
const QString toolTip = QString("<tr> <td><b>%1:</b> %2°</td> </tr>"
|
||||||
"<tr> <td><b>%3:</b> %4 %5</td> </tr>")
|
"<tr> <td><b>%3:</b> %4 %5</td> </tr>"
|
||||||
.arg(tr("Rotation angle"))
|
"<tr> <td><b>%6:</b> %7°</td> </tr>"
|
||||||
.arg(GetFormulaAngle().getDoubleValue())
|
"<tr> <td><b>%8:</b> %9</td> </tr>")
|
||||||
.arg(tr("Length"))
|
.arg(tr("Angle")) // 1
|
||||||
.arg(GetFormulaLength().getDoubleValue())
|
.arg(GetFormulaAngle().getDoubleValue()) // 2
|
||||||
.arg(UnitsToStr(qApp->patternUnit(), true));
|
.arg(tr("Length")) // 3
|
||||||
|
.arg(GetFormulaLength().getDoubleValue()) // 4
|
||||||
|
.arg(UnitsToStr(qApp->patternUnit(), true)) // 5
|
||||||
|
.arg(tr("Rotation angle")) // 6
|
||||||
|
.arg(GetFormulaRotationAngle().getDoubleValue()) // 7
|
||||||
|
.arg(tr("Rotation origin point")) // 8
|
||||||
|
.arg(OriginPointName()); // 9
|
||||||
return toolTip;
|
return toolTip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,7 +523,8 @@ VToolMove::VToolMove(const VToolMoveInitData &initData, QGraphicsItem *parent)
|
||||||
initData.destination, parent),
|
initData.destination, parent),
|
||||||
formulaAngle(initData.formulaAngle),
|
formulaAngle(initData.formulaAngle),
|
||||||
formulaRotationAngle(initData.formulaRotationAngle),
|
formulaRotationAngle(initData.formulaRotationAngle),
|
||||||
formulaLength(initData.formulaLength)
|
formulaLength(initData.formulaLength),
|
||||||
|
origPointId(initData.rotationOrigin)
|
||||||
{
|
{
|
||||||
InitOperatedObjects();
|
InitOperatedObjects();
|
||||||
ToolCreation(initData.typeCreation);
|
ToolCreation(initData.typeCreation);
|
||||||
|
|
|
@ -51,12 +51,14 @@ struct VToolMoveInitData : VAbstractOperationInitData
|
||||||
: VAbstractOperationInitData(),
|
: VAbstractOperationInitData(),
|
||||||
formulaAngle(),
|
formulaAngle(),
|
||||||
formulaRotationAngle(),
|
formulaRotationAngle(),
|
||||||
formulaLength()
|
formulaLength(),
|
||||||
|
rotationOrigin(NULL_ID)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
QString formulaAngle;
|
QString formulaAngle;
|
||||||
QString formulaRotationAngle;
|
QString formulaRotationAngle;
|
||||||
QString formulaLength;
|
QString formulaLength;
|
||||||
|
quint32 rotationOrigin;
|
||||||
};
|
};
|
||||||
|
|
||||||
class VToolMove : public VAbstractOperation
|
class VToolMove : public VAbstractOperation
|
||||||
|
@ -83,6 +85,8 @@ public:
|
||||||
VFormula GetFormulaLength() const;
|
VFormula GetFormulaLength() const;
|
||||||
void SetFormulaLength(const VFormula &value);
|
void SetFormulaLength(const VFormula &value);
|
||||||
|
|
||||||
|
QString OriginPointName() const;
|
||||||
|
|
||||||
virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE;
|
virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE;
|
||||||
protected slots:
|
protected slots:
|
||||||
virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) Q_DECL_OVERRIDE;
|
virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) Q_DECL_OVERRIDE;
|
||||||
|
@ -98,6 +102,7 @@ private:
|
||||||
QString formulaAngle;
|
QString formulaAngle;
|
||||||
QString formulaRotationAngle;
|
QString formulaRotationAngle;
|
||||||
QString formulaLength;
|
QString formulaLength;
|
||||||
|
quint32 origPointId;
|
||||||
|
|
||||||
VToolMove(const VToolMoveInitData &initData, QGraphicsItem *parent = nullptr);
|
VToolMove(const VToolMoveInitData &initData, QGraphicsItem *parent = nullptr);
|
||||||
|
|
||||||
|
|
|
@ -237,8 +237,11 @@ void VDrawTool::AddToCalculation(const QDomElement &domElement)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VDrawTool::AddDependence(QList<quint32> &list, quint32 objectId) const
|
void VDrawTool::AddDependence(QList<quint32> &list, quint32 objectId) const
|
||||||
{
|
{
|
||||||
auto originPoint = VAbstractTool::data.GetGObject(objectId);
|
if (objectId != NULL_ID)
|
||||||
list.append(originPoint->getIdTool());
|
{
|
||||||
|
auto originPoint = VAbstractTool::data.GetGObject(objectId);
|
||||||
|
list.append(originPoint->getIdTool());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -64,12 +64,14 @@ VisToolMove::VisToolMove(const VContainer *data, QGraphicsItem *parent)
|
||||||
rotationAngle(INT_MIN),
|
rotationAngle(INT_MIN),
|
||||||
length(0),
|
length(0),
|
||||||
pointOrigin(nullptr),
|
pointOrigin(nullptr),
|
||||||
|
pointRotationOrigin(nullptr),
|
||||||
pointFinish(nullptr),
|
pointFinish(nullptr),
|
||||||
angleArc(nullptr),
|
angleArc(nullptr),
|
||||||
rotationLine(nullptr),
|
rotationLine(nullptr),
|
||||||
xAxis(nullptr)
|
xAxis(nullptr)
|
||||||
{
|
{
|
||||||
pointOrigin = InitPoint(supportColor2, this);
|
pointOrigin = InitPoint(supportColor2, this);
|
||||||
|
pointRotationOrigin = InitPoint(supportColor2, this);
|
||||||
pointFinish = InitPoint(supportColor, this);
|
pointFinish = InitPoint(supportColor, this);
|
||||||
angleArc = InitItem<VCurvePathItem>(supportColor3, this);
|
angleArc = InitItem<VCurvePathItem>(supportColor3, this);
|
||||||
rotationLine = InitItem<VScaledLine>(supportColor3, this);
|
rotationLine = InitItem<VScaledLine>(supportColor3, this);
|
||||||
|
@ -89,7 +91,7 @@ void VisToolMove::RefreshGeometry()
|
||||||
|
|
||||||
const QVector<QGraphicsItem *> originObjects = CreateOriginObjects(iPoint, iCurve);
|
const QVector<QGraphicsItem *> originObjects = CreateOriginObjects(iPoint, iCurve);
|
||||||
|
|
||||||
const QPointF origin = GetOriginPoint(originObjects);
|
QPointF origin = GetOriginPoint(originObjects);
|
||||||
DrawPoint(pointOrigin, origin, supportColor2);
|
DrawPoint(pointOrigin, origin, supportColor2);
|
||||||
|
|
||||||
qreal tempAngle = 0;
|
qreal tempAngle = 0;
|
||||||
|
@ -118,10 +120,21 @@ void VisToolMove::RefreshGeometry()
|
||||||
tempAngle = angle;
|
tempAngle = angle;
|
||||||
tempLength = length;
|
tempLength = length;
|
||||||
|
|
||||||
|
if (object1Id != NULL_ID)
|
||||||
|
{
|
||||||
|
origin = Visualization::data->GeometricObject<VPointF>(object1Id)->toQPointF();
|
||||||
|
DrawPoint(pointRotationOrigin, origin, supportColor2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
origin = line.p2();
|
||||||
|
pointRotationOrigin->setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
QLineF rLine;
|
QLineF rLine;
|
||||||
if (VFuzzyComparePossibleNulls(rotationAngle, INT_MIN))
|
if (VFuzzyComparePossibleNulls(rotationAngle, INT_MIN))
|
||||||
{
|
{
|
||||||
rLine = QLineF(line.p2(), Visualization::scenePos);
|
rLine = QLineF(origin, Visualization::scenePos);
|
||||||
|
|
||||||
if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier)
|
if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier)
|
||||||
{
|
{
|
||||||
|
@ -129,7 +142,7 @@ void VisToolMove::RefreshGeometry()
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal cursorLength = rLine.length();
|
qreal cursorLength = rLine.length();
|
||||||
rLine.setP2(Ray(line.p2(), rLine.angle()));
|
rLine.setP2(Ray(origin, rLine.angle()));
|
||||||
//Radius of point circle, but little bigger. Need handle with hover sizes.
|
//Radius of point circle, but little bigger. Need handle with hover sizes.
|
||||||
qreal minL = ScaledRadius(SceneScale(qApp->getCurrentScene()))*1.5;
|
qreal minL = ScaledRadius(SceneScale(qApp->getCurrentScene()))*1.5;
|
||||||
if (cursorLength > minL)
|
if (cursorLength > minL)
|
||||||
|
@ -143,14 +156,14 @@ void VisToolMove::RefreshGeometry()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rLine = QLineF(line.p2(), Ray(line.p2(), rotationAngle));
|
rLine = QLineF(origin, Ray(origin, rotationAngle));
|
||||||
tempRoationAngle = rotationAngle;
|
tempRoationAngle = rotationAngle;
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawLine(rotationLine, rLine, supportColor3, Qt::DashLine);
|
DrawLine(rotationLine, rLine, supportColor3, Qt::DashLine);
|
||||||
DrawLine(xAxis, QLineF(line.p2(), Ray(line.p2(), 0)), supportColor3, Qt::DashLine);
|
DrawLine(xAxis, QLineF(origin, Ray(origin, 0)), supportColor3, Qt::DashLine);
|
||||||
|
|
||||||
VArc arc(VPointF(line.p2()), ScaledRadius(SceneScale(qApp->getCurrentScene()))*2, 0, tempRoationAngle);
|
VArc arc(VPointF(origin), ScaledRadius(SceneScale(qApp->getCurrentScene()))*2, 0, tempRoationAngle);
|
||||||
DrawPath(angleArc, arc.GetPath(), supportColor3, Qt::SolidLine, Qt::RoundCap);
|
DrawPath(angleArc, arc.GetPath(), supportColor3, Qt::SolidLine, Qt::RoundCap);
|
||||||
}
|
}
|
||||||
DrawLine(this, line, supportColor2, Qt::DashLine);
|
DrawLine(this, line, supportColor2, Qt::DashLine);
|
||||||
|
@ -169,7 +182,7 @@ void VisToolMove::RefreshGeometry()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Visualization::toolTip = tr("Length = %1%2, angle = %3°, rotation angle = %4°, <b>Shift</b> - sticking angle, "
|
Visualization::toolTip = tr("Length = %1%2, angle = %3°, rotation angle = %4°, <b>Shift</b> - sticking angle, "
|
||||||
"<b>Mouse click</b> - finish creating")
|
"<b>Ctrl</b> - change rotation origin point, <b>Mouse click</b> - finish creating")
|
||||||
.arg(qApp->TrVars()->FormulaToUser(QString::number(qApp->fromPixel(tempLength)),
|
.arg(qApp->TrVars()->FormulaToUser(QString::number(qApp->fromPixel(tempLength)),
|
||||||
qApp->Settings()->GetOsSeparator()))
|
qApp->Settings()->GetOsSeparator()))
|
||||||
.arg(prefix)
|
.arg(prefix)
|
||||||
|
@ -177,7 +190,7 @@ void VisToolMove::RefreshGeometry()
|
||||||
.arg(tempRoationAngle);
|
.arg(tempRoationAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateMovedRotatedObjects(iPoint, iCurve, tempLength, tempAngle, tempRoationAngle, line.p2());
|
CreateMovedRotatedObjects(iPoint, iCurve, tempLength, tempAngle, tempRoationAngle, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -222,6 +235,12 @@ void VisToolMove::SetLength(const QString &expression)
|
||||||
length = FindLengthFromUser(expression, Visualization::data->DataVariables());
|
length = FindLengthFromUser(expression, Visualization::data->DataVariables());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VisToolMove::SetRotationOriginPointId(quint32 value)
|
||||||
|
{
|
||||||
|
object1Id = value;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
template <class Item>
|
template <class Item>
|
||||||
QGraphicsPathItem *VisToolMove::AddOriginCurve(quint32 id, int &i)
|
QGraphicsPathItem *VisToolMove::AddOriginCurve(quint32 id, int &i)
|
||||||
|
|
|
@ -62,6 +62,8 @@ public:
|
||||||
qreal LengthValue() const;
|
qreal LengthValue() const;
|
||||||
void SetLength(const QString &expression);
|
void SetLength(const QString &expression);
|
||||||
|
|
||||||
|
void SetRotationOriginPointId(quint32 value);
|
||||||
|
|
||||||
virtual int type() const Q_DECL_OVERRIDE {return Type;}
|
virtual int type() const Q_DECL_OVERRIDE {return Type;}
|
||||||
enum { Type = UserType + static_cast<int>(Vis::ToolMove)};
|
enum { Type = UserType + static_cast<int>(Vis::ToolMove)};
|
||||||
private:
|
private:
|
||||||
|
@ -70,6 +72,7 @@ private:
|
||||||
qreal rotationAngle;
|
qreal rotationAngle;
|
||||||
qreal length;
|
qreal length;
|
||||||
VScaledEllipse *pointOrigin;
|
VScaledEllipse *pointOrigin;
|
||||||
|
VScaledEllipse *pointRotationOrigin;
|
||||||
VScaledEllipse *pointFinish;
|
VScaledEllipse *pointFinish;
|
||||||
VCurvePathItem *angleArc;
|
VCurvePathItem *angleArc;
|
||||||
VScaledLine *rotationLine;
|
VScaledLine *rotationLine;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user