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
|
||||
i->SetFormulaRotationAngle(value.value<VFormula>());
|
||||
break;
|
||||
case 11: // AttrCenter (read only)
|
||||
break;
|
||||
default:
|
||||
qWarning()<<"Unknown property type. id = "<<id;
|
||||
break;
|
||||
|
@ -2420,6 +2422,7 @@ void VToolOptionsPropertyBrowser::ShowOptionsToolMove(QGraphicsItem *item)
|
|||
AddPropertyFormula(tr("Angle:"), i->GetFormulaAngle(), AttrAngle);
|
||||
AddPropertyFormula(tr("Length:"), i->GetFormulaLength(), AttrLength);
|
||||
AddPropertyFormula(tr("Rotation angle:"), i->GetFormulaRotationAngle(), AttrRotationAngle);
|
||||
AddPropertyParentPointName(i->OriginPointName(), tr("Rotation origin point:"), AttrCenter);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -3240,6 +3243,10 @@ void VToolOptionsPropertyBrowser::UpdateOptionsToolMove()
|
|||
QVariant valueRotationAngle;
|
||||
valueRotationAngle.setValue(i->GetFormulaRotationAngle());
|
||||
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");
|
||||
const QString len = initData.formulaLength;//need for saving fixed formula;
|
||||
initData.suffix = GetParametrString(domElement, AttrSuffix, "");
|
||||
initData.rotationOrigin = GetParametrUInt(domElement, AttrCenter, NULL_ID_STR);
|
||||
|
||||
VAbstractOperation::ExtractData(domElement, initData);
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
<file>schema/pattern/v0.7.0.xsd</file>
|
||||
<file>schema/pattern/v0.7.1.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.4.0.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::PatternMaxVerStr = QStringLiteral("0.7.2");
|
||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.7.2.xsd");
|
||||
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.7.3");
|
||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.7.3.xsd");
|
||||
|
||||
//VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
//VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
|
@ -173,97 +173,61 @@ VPatternConverter::VPatternConverter(const QString &fileName)
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString VPatternConverter::XSDSchema(int ver) const
|
||||
{
|
||||
switch (ver)
|
||||
QHash <int, QString> schemas =
|
||||
{
|
||||
std::make_pair(0x000100, QStringLiteral("://schema/pattern/v0.1.0.xsd")),
|
||||
std::make_pair(0x000101, QStringLiteral("://schema/pattern/v0.1.1.xsd")),
|
||||
std::make_pair(0x000102, QStringLiteral("://schema/pattern/v0.1.2.xsd")),
|
||||
std::make_pair(0x000103, QStringLiteral("://schema/pattern/v0.1.3.xsd")),
|
||||
std::make_pair(0x000104, QStringLiteral("://schema/pattern/v0.1.4.xsd")),
|
||||
std::make_pair(0x000200, QStringLiteral("://schema/pattern/v0.2.0.xsd")),
|
||||
std::make_pair(0x000201, QStringLiteral("://schema/pattern/v0.2.1.xsd")),
|
||||
std::make_pair(0x000202, QStringLiteral("://schema/pattern/v0.2.2.xsd")),
|
||||
std::make_pair(0x000203, QStringLiteral("://schema/pattern/v0.2.3.xsd")),
|
||||
std::make_pair(0x000204, QStringLiteral("://schema/pattern/v0.2.4.xsd")),
|
||||
std::make_pair(0x000205, QStringLiteral("://schema/pattern/v0.2.5.xsd")),
|
||||
std::make_pair(0x000206, QStringLiteral("://schema/pattern/v0.2.6.xsd")),
|
||||
std::make_pair(0x000207, QStringLiteral("://schema/pattern/v0.2.7.xsd")),
|
||||
std::make_pair(0x000300, QStringLiteral("://schema/pattern/v0.3.0.xsd")),
|
||||
std::make_pair(0x000301, QStringLiteral("://schema/pattern/v0.3.1.xsd")),
|
||||
std::make_pair(0x000302, QStringLiteral("://schema/pattern/v0.3.2.xsd")),
|
||||
std::make_pair(0x000303, QStringLiteral("://schema/pattern/v0.3.3.xsd")),
|
||||
std::make_pair(0x000304, QStringLiteral("://schema/pattern/v0.3.4.xsd")),
|
||||
std::make_pair(0x000305, QStringLiteral("://schema/pattern/v0.3.5.xsd")),
|
||||
std::make_pair(0x000306, QStringLiteral("://schema/pattern/v0.3.6.xsd")),
|
||||
std::make_pair(0x000307, QStringLiteral("://schema/pattern/v0.3.7.xsd")),
|
||||
std::make_pair(0x000308, QStringLiteral("://schema/pattern/v0.3.8.xsd")),
|
||||
std::make_pair(0x000309, QStringLiteral("://schema/pattern/v0.3.9.xsd")),
|
||||
std::make_pair(0x000400, QStringLiteral("://schema/pattern/v0.4.0.xsd")),
|
||||
std::make_pair(0x000401, QStringLiteral("://schema/pattern/v0.4.1.xsd")),
|
||||
std::make_pair(0x000402, QStringLiteral("://schema/pattern/v0.4.2.xsd")),
|
||||
std::make_pair(0x000403, QStringLiteral("://schema/pattern/v0.4.3.xsd")),
|
||||
std::make_pair(0x000404, QStringLiteral("://schema/pattern/v0.4.4.xsd")),
|
||||
std::make_pair(0x000405, QStringLiteral("://schema/pattern/v0.4.5.xsd")),
|
||||
std::make_pair(0x000406, QStringLiteral("://schema/pattern/v0.4.6.xsd")),
|
||||
std::make_pair(0x000407, QStringLiteral("://schema/pattern/v0.4.7.xsd")),
|
||||
std::make_pair(0x000408, QStringLiteral("://schema/pattern/v0.4.8.xsd")),
|
||||
std::make_pair(0x000500, QStringLiteral("://schema/pattern/v0.5.0.xsd")),
|
||||
std::make_pair(0x000501, QStringLiteral("://schema/pattern/v0.5.1.xsd")),
|
||||
std::make_pair(0x000600, QStringLiteral("://schema/pattern/v0.6.0.xsd")),
|
||||
std::make_pair(0x000601, QStringLiteral("://schema/pattern/v0.6.1.xsd")),
|
||||
std::make_pair(0x000602, QStringLiteral("://schema/pattern/v0.6.2.xsd")),
|
||||
std::make_pair(0x000603, QStringLiteral("://schema/pattern/v0.6.3.xsd")),
|
||||
std::make_pair(0x000604, QStringLiteral("://schema/pattern/v0.6.4.xsd")),
|
||||
std::make_pair(0x000605, QStringLiteral("://schema/pattern/v0.6.5.xsd")),
|
||||
std::make_pair(0x000606, QStringLiteral("://schema/pattern/v0.6.6.xsd")),
|
||||
std::make_pair(0x000700, QStringLiteral("://schema/pattern/v0.7.0.xsd")),
|
||||
std::make_pair(0x000701, QStringLiteral("://schema/pattern/v0.7.1.xsd")),
|
||||
std::make_pair(0x000702, QStringLiteral("://schema/pattern/v0.7.2.xsd")),
|
||||
std::make_pair(0x000703, CurrentSchema)
|
||||
};
|
||||
|
||||
if (schemas.contains(ver))
|
||||
{
|
||||
return schemas.value(ver);
|
||||
}
|
||||
else
|
||||
{
|
||||
case (0x000100):
|
||||
return QStringLiteral("://schema/pattern/v0.1.0.xsd");
|
||||
case (0x000101):
|
||||
return QStringLiteral("://schema/pattern/v0.1.1.xsd");
|
||||
case (0x000102):
|
||||
return QStringLiteral("://schema/pattern/v0.1.2.xsd");
|
||||
case (0x000103):
|
||||
return QStringLiteral("://schema/pattern/v0.1.3.xsd");
|
||||
case (0x000104):
|
||||
return QStringLiteral("://schema/pattern/v0.1.4.xsd");
|
||||
case (0x000200):
|
||||
return QStringLiteral("://schema/pattern/v0.2.0.xsd");
|
||||
case (0x000201):
|
||||
return QStringLiteral("://schema/pattern/v0.2.1.xsd");
|
||||
case (0x000202):
|
||||
return QStringLiteral("://schema/pattern/v0.2.2.xsd");
|
||||
case (0x000203):
|
||||
return QStringLiteral("://schema/pattern/v0.2.3.xsd");
|
||||
case (0x000204):
|
||||
return QStringLiteral("://schema/pattern/v0.2.4.xsd");
|
||||
case (0x000205):
|
||||
return QStringLiteral("://schema/pattern/v0.2.5.xsd");
|
||||
case (0x000206):
|
||||
return QStringLiteral("://schema/pattern/v0.2.6.xsd");
|
||||
case (0x000207):
|
||||
return QStringLiteral("://schema/pattern/v0.2.7.xsd");
|
||||
case (0x000300):
|
||||
return QStringLiteral("://schema/pattern/v0.3.0.xsd");
|
||||
case (0x000301):
|
||||
return QStringLiteral("://schema/pattern/v0.3.1.xsd");
|
||||
case (0x000302):
|
||||
return QStringLiteral("://schema/pattern/v0.3.2.xsd");
|
||||
case (0x000303):
|
||||
return QStringLiteral("://schema/pattern/v0.3.3.xsd");
|
||||
case (0x000304):
|
||||
return QStringLiteral("://schema/pattern/v0.3.4.xsd");
|
||||
case (0x000305):
|
||||
return QStringLiteral("://schema/pattern/v0.3.5.xsd");
|
||||
case (0x000306):
|
||||
return QStringLiteral("://schema/pattern/v0.3.6.xsd");
|
||||
case (0x000307):
|
||||
return QStringLiteral("://schema/pattern/v0.3.7.xsd");
|
||||
case (0x000308):
|
||||
return QStringLiteral("://schema/pattern/v0.3.8.xsd");
|
||||
case (0x000309):
|
||||
return QStringLiteral("://schema/pattern/v0.3.9.xsd");
|
||||
case (0x000400):
|
||||
return QStringLiteral("://schema/pattern/v0.4.0.xsd");
|
||||
case (0x000401):
|
||||
return QStringLiteral("://schema/pattern/v0.4.1.xsd");
|
||||
case (0x000402):
|
||||
return QStringLiteral("://schema/pattern/v0.4.2.xsd");
|
||||
case (0x000403):
|
||||
return QStringLiteral("://schema/pattern/v0.4.3.xsd");
|
||||
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);
|
||||
V_FALLTHROUGH
|
||||
case (0x000702):
|
||||
ToV0_7_3();
|
||||
ValidateXML(XSDSchema(0x000703), m_convertedFileName);
|
||||
V_FALLTHROUGH
|
||||
case (0x000703):
|
||||
break;
|
||||
default:
|
||||
InvalidVersion(m_ver);
|
||||
|
@ -463,7 +431,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion()
|
|||
bool VPatternConverter::IsReadOnly() const
|
||||
{
|
||||
// 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.");
|
||||
|
||||
// Possibly in future attribute readOnly will change position etc.
|
||||
|
@ -957,6 +925,16 @@ void VPatternConverter::ToV0_7_2()
|
|||
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()
|
||||
{
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
static const QString PatternMaxVerStr;
|
||||
static const QString CurrentSchema;
|
||||
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:
|
||||
virtual int MinVer() const Q_DECL_OVERRIDE;
|
||||
|
@ -115,6 +115,7 @@ private:
|
|||
void ToV0_7_0();
|
||||
void ToV0_7_1();
|
||||
void ToV0_7_2();
|
||||
void ToV0_7_3();
|
||||
|
||||
void TagUnitToV0_2_0();
|
||||
void TagIncrementToV0_2_0();
|
||||
|
|
|
@ -81,7 +81,8 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
|||
objects(),
|
||||
stage1(true),
|
||||
stage2(false),
|
||||
m_suffix()
|
||||
m_suffix(),
|
||||
optionalRotationOrigin(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
|
@ -107,6 +108,12 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
|||
|
||||
InitOkCancelApply(ui);
|
||||
|
||||
FillComboBoxPoints(ui->comboBoxRotationOriginPoint);
|
||||
|
||||
ui->comboBoxRotationOriginPoint->blockSignals(true);
|
||||
ui->comboBoxRotationOriginPoint->addItem(tr("Center point"), NULL_ID);
|
||||
ui->comboBoxRotationOriginPoint->blockSignals(false);
|
||||
|
||||
flagName = true;
|
||||
CheckState();
|
||||
|
||||
|
@ -122,6 +129,8 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
|||
connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogMove::DeployLengthTextEdit);
|
||||
|
||||
vis = new VisToolMove(data);
|
||||
|
||||
SetRotationOrigPointId(NULL_ID);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -215,6 +224,21 @@ void DialogMove::SetSuffix(const QString &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
|
||||
{
|
||||
|
@ -278,6 +302,18 @@ void DialogMove::ShowDialog(bool click)
|
|||
VisToolMove *operation = qobject_cast<VisToolMove *>(vis);
|
||||
SCASSERT(operation != nullptr)
|
||||
|
||||
if (QGuiApplication::keyboardModifiers() == Qt::ControlModifier)
|
||||
{
|
||||
if (not optionalRotationOrigin)
|
||||
{
|
||||
operation->SetRotationOriginPointId(NULL_ID);
|
||||
SetObject(NULL_ID, ui->comboBoxRotationOriginPoint, "");
|
||||
operation->RefreshGeometry();
|
||||
}
|
||||
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());
|
||||
|
@ -288,14 +324,27 @@ void DialogMove::ShowDialog(bool click)
|
|||
timerLength->start();
|
||||
show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogMove::ChosenObject(quint32 id, const SceneObject &type)
|
||||
{
|
||||
Q_UNUSED(id)
|
||||
Q_UNUSED(type)
|
||||
// do nothing
|
||||
if (not stage1 && stage2 && prepare)// After first choose we ignore all objects
|
||||
{
|
||||
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->SetLength(formulaLength);
|
||||
operation->SetRotationAngle(formulaRotationAngle);
|
||||
operation->SetRotationOriginPointId(GetRotationOrigPointId());
|
||||
operation->RefreshGeometry();
|
||||
}
|
||||
|
||||
|
|
|
@ -65,6 +65,9 @@ public:
|
|||
QString GetSuffix() const;
|
||||
void SetSuffix(const QString &value);
|
||||
|
||||
quint32 GetRotationOrigPointId() const;
|
||||
void SetRotationOrigPointId(const quint32 &value);
|
||||
|
||||
QVector<quint32> GetObjects() const;
|
||||
|
||||
virtual void ShowDialog(bool click) Q_DECL_OVERRIDE;
|
||||
|
@ -128,6 +131,8 @@ private:
|
|||
|
||||
QString m_suffix;
|
||||
|
||||
bool optionalRotationOrigin;
|
||||
|
||||
void EvalAngle();
|
||||
void EvalRotationAngle();
|
||||
void EvalLength();
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>292</width>
|
||||
<height>301</height>
|
||||
<height>332</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -559,8 +559,11 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::ExpandingFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelSuffix">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
|
@ -573,9 +576,19 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEditSuffix"/>
|
||||
</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>
|
||||
</item>
|
||||
<item>
|
||||
|
|
|
@ -1295,7 +1295,7 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons
|
|||
{
|
||||
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();
|
||||
if (obj->getType() == gType)
|
||||
|
@ -1306,7 +1306,7 @@ void DialogTool::FillCombo(QComboBox *box, GOType gType, FillComboBox rule, cons
|
|||
}
|
||||
else
|
||||
{
|
||||
if (i.key() != toolId)
|
||||
if (i.key() != toolId && i.value()->getIdTool() != toolId)
|
||||
{
|
||||
QSharedPointer<VGObject> obj = i.value();
|
||||
if (obj->getType() == gType && obj->getMode() == Draw::Calculation)
|
||||
|
|
|
@ -138,6 +138,7 @@ void VToolMove::setDialog()
|
|||
dialogTool->SetRotationAngle(formulaRotationAngle);
|
||||
dialogTool->SetLength(formulaLength);
|
||||
dialogTool->SetSuffix(suffix);
|
||||
dialogTool->SetRotationOrigPointId(origPointId);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -179,7 +180,18 @@ VToolMove *VToolMove::Create(VToolMoveInitData &initData)
|
|||
calcRotationAngle = CheckFormula(initData.id, initData.formulaRotationAngle, 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)
|
||||
{
|
||||
|
@ -313,6 +325,12 @@ QT_WARNING_POP
|
|||
initData.scene->addItem(tool);
|
||||
InitOperationToolConnections(initData.scene, tool);
|
||||
VAbstractPattern::AddTool(initData.id, tool);
|
||||
|
||||
if (not originPoint.isNull())
|
||||
{
|
||||
initData.doc->IncrementReferens(originPoint->getIdTool());
|
||||
}
|
||||
|
||||
for (int i = 0; i < initData.source.size(); ++i)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
@ -421,6 +452,7 @@ void VToolMove::SetVisualization()
|
|||
visual->SetRotationAngle(qApp->TrVars()->FormulaToUser(formulaRotationAngle,
|
||||
qApp->Settings()->GetOsSeparator()));
|
||||
visual->SetLength(qApp->TrVars()->FormulaToUser(formulaLength, qApp->Settings()->GetOsSeparator()));
|
||||
visual->SetRotationOriginPointId(origPointId);
|
||||
visual->RefreshGeometry();
|
||||
}
|
||||
}
|
||||
|
@ -432,18 +464,19 @@ void VToolMove::SaveDialog(QDomElement &domElement, QList<quint32> &oldDependenc
|
|||
QSharedPointer<DialogMove> dialogTool = m_dialog.objectCast<DialogMove>();
|
||||
SCASSERT(not dialogTool.isNull())
|
||||
|
||||
Q_UNUSED(oldDependencies);
|
||||
Q_UNUSED(newDependencies)
|
||||
AddDependence(oldDependencies, origPointId);
|
||||
AddDependence(newDependencies, dialogTool->GetRotationOrigPointId());
|
||||
|
||||
doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle());
|
||||
QString length = dialogTool->GetLength();
|
||||
doc->SetAttribute(domElement, AttrLength, length);
|
||||
doc->SetAttribute(domElement, AttrLength, dialogTool->GetLength());
|
||||
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
||||
doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetRotationOrigPointId()));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VToolMove::ReadToolAttributes(const QDomElement &domElement)
|
||||
{
|
||||
origPointId = doc->GetParametrUInt(domElement, AttrCenter, NULL_ID_STR);
|
||||
formulaAngle = doc->GetParametrString(domElement, AttrAngle, "0");
|
||||
formulaRotationAngle = doc->GetParametrString(domElement, AttrRotationAngle, "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, AttrLength, formulaLength);
|
||||
doc->SetAttribute(tag, AttrSuffix, suffix);
|
||||
doc->SetAttribute(tag, AttrCenter, QString().setNum(origPointId));
|
||||
|
||||
SaveSourceDestination(tag);
|
||||
}
|
||||
|
@ -468,12 +502,18 @@ void VToolMove::SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj)
|
|||
QString VToolMove::MakeToolTip() const
|
||||
{
|
||||
const QString toolTip = QString("<tr> <td><b>%1:</b> %2°</td> </tr>"
|
||||
"<tr> <td><b>%3:</b> %4 %5</td> </tr>")
|
||||
.arg(tr("Rotation angle"))
|
||||
.arg(GetFormulaAngle().getDoubleValue())
|
||||
.arg(tr("Length"))
|
||||
.arg(GetFormulaLength().getDoubleValue())
|
||||
.arg(UnitsToStr(qApp->patternUnit(), true));
|
||||
"<tr> <td><b>%3:</b> %4 %5</td> </tr>"
|
||||
"<tr> <td><b>%6:</b> %7°</td> </tr>"
|
||||
"<tr> <td><b>%8:</b> %9</td> </tr>")
|
||||
.arg(tr("Angle")) // 1
|
||||
.arg(GetFormulaAngle().getDoubleValue()) // 2
|
||||
.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;
|
||||
}
|
||||
|
||||
|
@ -483,7 +523,8 @@ VToolMove::VToolMove(const VToolMoveInitData &initData, QGraphicsItem *parent)
|
|||
initData.destination, parent),
|
||||
formulaAngle(initData.formulaAngle),
|
||||
formulaRotationAngle(initData.formulaRotationAngle),
|
||||
formulaLength(initData.formulaLength)
|
||||
formulaLength(initData.formulaLength),
|
||||
origPointId(initData.rotationOrigin)
|
||||
{
|
||||
InitOperatedObjects();
|
||||
ToolCreation(initData.typeCreation);
|
||||
|
|
|
@ -51,12 +51,14 @@ struct VToolMoveInitData : VAbstractOperationInitData
|
|||
: VAbstractOperationInitData(),
|
||||
formulaAngle(),
|
||||
formulaRotationAngle(),
|
||||
formulaLength()
|
||||
formulaLength(),
|
||||
rotationOrigin(NULL_ID)
|
||||
{}
|
||||
|
||||
QString formulaAngle;
|
||||
QString formulaRotationAngle;
|
||||
QString formulaLength;
|
||||
quint32 rotationOrigin;
|
||||
};
|
||||
|
||||
class VToolMove : public VAbstractOperation
|
||||
|
@ -83,6 +85,8 @@ public:
|
|||
VFormula GetFormulaLength() const;
|
||||
void SetFormulaLength(const VFormula &value);
|
||||
|
||||
QString OriginPointName() const;
|
||||
|
||||
virtual void ShowVisualization(bool show) Q_DECL_OVERRIDE;
|
||||
protected slots:
|
||||
virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID) Q_DECL_OVERRIDE;
|
||||
|
@ -98,6 +102,7 @@ private:
|
|||
QString formulaAngle;
|
||||
QString formulaRotationAngle;
|
||||
QString formulaLength;
|
||||
quint32 origPointId;
|
||||
|
||||
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
|
||||
{
|
||||
if (objectId != NULL_ID)
|
||||
{
|
||||
auto originPoint = VAbstractTool::data.GetGObject(objectId);
|
||||
list.append(originPoint->getIdTool());
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -64,12 +64,14 @@ VisToolMove::VisToolMove(const VContainer *data, QGraphicsItem *parent)
|
|||
rotationAngle(INT_MIN),
|
||||
length(0),
|
||||
pointOrigin(nullptr),
|
||||
pointRotationOrigin(nullptr),
|
||||
pointFinish(nullptr),
|
||||
angleArc(nullptr),
|
||||
rotationLine(nullptr),
|
||||
xAxis(nullptr)
|
||||
{
|
||||
pointOrigin = InitPoint(supportColor2, this);
|
||||
pointRotationOrigin = InitPoint(supportColor2, this);
|
||||
pointFinish = InitPoint(supportColor, this);
|
||||
angleArc = InitItem<VCurvePathItem>(supportColor3, this);
|
||||
rotationLine = InitItem<VScaledLine>(supportColor3, this);
|
||||
|
@ -89,7 +91,7 @@ void VisToolMove::RefreshGeometry()
|
|||
|
||||
const QVector<QGraphicsItem *> originObjects = CreateOriginObjects(iPoint, iCurve);
|
||||
|
||||
const QPointF origin = GetOriginPoint(originObjects);
|
||||
QPointF origin = GetOriginPoint(originObjects);
|
||||
DrawPoint(pointOrigin, origin, supportColor2);
|
||||
|
||||
qreal tempAngle = 0;
|
||||
|
@ -118,10 +120,21 @@ void VisToolMove::RefreshGeometry()
|
|||
tempAngle = angle;
|
||||
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;
|
||||
if (VFuzzyComparePossibleNulls(rotationAngle, INT_MIN))
|
||||
{
|
||||
rLine = QLineF(line.p2(), Visualization::scenePos);
|
||||
rLine = QLineF(origin, Visualization::scenePos);
|
||||
|
||||
if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier)
|
||||
{
|
||||
|
@ -129,7 +142,7 @@ void VisToolMove::RefreshGeometry()
|
|||
}
|
||||
|
||||
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.
|
||||
qreal minL = ScaledRadius(SceneScale(qApp->getCurrentScene()))*1.5;
|
||||
if (cursorLength > minL)
|
||||
|
@ -143,14 +156,14 @@ void VisToolMove::RefreshGeometry()
|
|||
}
|
||||
else
|
||||
{
|
||||
rLine = QLineF(line.p2(), Ray(line.p2(), rotationAngle));
|
||||
rLine = QLineF(origin, Ray(origin, rotationAngle));
|
||||
tempRoationAngle = rotationAngle;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
DrawLine(this, line, supportColor2, Qt::DashLine);
|
||||
|
@ -169,7 +182,7 @@ void VisToolMove::RefreshGeometry()
|
|||
else
|
||||
{
|
||||
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)),
|
||||
qApp->Settings()->GetOsSeparator()))
|
||||
.arg(prefix)
|
||||
|
@ -177,7 +190,7 @@ void VisToolMove::RefreshGeometry()
|
|||
.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());
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VisToolMove::SetRotationOriginPointId(quint32 value)
|
||||
{
|
||||
object1Id = value;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
template <class Item>
|
||||
QGraphicsPathItem *VisToolMove::AddOriginCurve(quint32 id, int &i)
|
||||
|
|
|
@ -62,6 +62,8 @@ public:
|
|||
qreal LengthValue() const;
|
||||
void SetLength(const QString &expression);
|
||||
|
||||
void SetRotationOriginPointId(quint32 value);
|
||||
|
||||
virtual int type() const Q_DECL_OVERRIDE {return Type;}
|
||||
enum { Type = UserType + static_cast<int>(Vis::ToolMove)};
|
||||
private:
|
||||
|
@ -70,6 +72,7 @@ private:
|
|||
qreal rotationAngle;
|
||||
qreal length;
|
||||
VScaledEllipse *pointOrigin;
|
||||
VScaledEllipse *pointRotationOrigin;
|
||||
VScaledEllipse *pointFinish;
|
||||
VCurvePathItem *angleArc;
|
||||
VScaledLine *rotationLine;
|
||||
|
|
Loading…
Reference in New Issue
Block a user