diff --git a/src/libs/ifc/schema.qrc b/src/libs/ifc/schema.qrc index 4b23cbc4d..48cca4f04 100644 --- a/src/libs/ifc/schema.qrc +++ b/src/libs/ifc/schema.qrc @@ -67,6 +67,7 @@ schema/pattern/v0.8.13.xsd schema/pattern/v0.9.0.xsd schema/pattern/v0.9.1.xsd + schema/pattern/v0.9.2.xsd schema/multisize_measurements/v0.3.0.xsd schema/multisize_measurements/v0.4.0.xsd schema/multisize_measurements/v0.4.1.xsd diff --git a/src/libs/ifc/schema/pattern/v0.9.2.xsd b/src/libs/ifc/schema/pattern/v0.9.2.xsd new file mode 100644 index 000000000..2e2c0f442 --- /dev/null +++ b/src/libs/ifc/schema/pattern/v0.9.2.xsd @@ -0,0 +1,1181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index bcc2aed64..1e2710584 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -129,6 +129,7 @@ const QString VAbstractPattern::AttrNodePassmark = QStringLiteral("passmark const QString VAbstractPattern::AttrNodePassmarkLine = QStringLiteral("passmarkLine"); const QString VAbstractPattern::AttrNodePassmarkAngle = QStringLiteral("passmarkAngle"); const QString VAbstractPattern::AttrNodeShowSecondPassmark = QStringLiteral("showSecondPassmark"); +const QString VAbstractPattern::AttrNodeTurnPoint = QStringLiteral("turnPoint"); const QString VAbstractPattern::AttrSABefore = QStringLiteral("before"); const QString VAbstractPattern::AttrSAAfter = QStringLiteral("after"); const QString VAbstractPattern::AttrStart = QStringLiteral("start"); @@ -811,6 +812,9 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement) const QString passmarkLength = VDomDocument::GetParametrEmptyString(domElement, VAbstractPattern::AttrPassmarkLength); + const bool turnPoint = + VDomDocument::GetParametrBool(domElement, VAbstractPattern::AttrNodeTurnPoint, trueStr); + const QString t = VDomDocument::GetParametrString(domElement, AttrType, VAbstractPattern::NodePoint); Tool tool; @@ -841,8 +845,7 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement) tool = Tool::NodeElArc; break; default: - VException e(QObject::tr("Wrong tag name '%1'.").arg(t)); - throw e; + throw VException(tr("Wrong tag name '%1'.").arg(t)); } VPieceNode node(id, tool, reverse); node.SetFormulaSABefore(saBefore); @@ -856,6 +859,7 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement) node.SetPassmarkAngleType(passmarkAngle); node.SetManualPassmarkLength(manualPassmarkLength); node.SetFormulaPassmarkLength(passmarkLength); + node.SetTurnPoint(turnPoint); return node; } diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 97f59f4f7..bc17b2418 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -324,6 +324,7 @@ public: static const QString AttrNodePassmarkLine; static const QString AttrNodePassmarkAngle; static const QString AttrNodeShowSecondPassmark; + static const QString AttrNodeTurnPoint; static const QString AttrSABefore; static const QString AttrSAAfter; static const QString AttrStart; diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index 5ec5b5254..b55095018 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -60,8 +60,8 @@ class QDomElement; */ const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.4"); -const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.9.1"); -const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.9.1.xsd"); +const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.9.2"); +const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.9.2.xsd"); //VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! //VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! @@ -266,7 +266,8 @@ auto VPatternConverter::XSDSchema(unsigned ver) const -> QString std::make_pair(FormatVersion(0, 8, 12), QStringLiteral("://schema/pattern/v0.8.12.xsd")), std::make_pair(FormatVersion(0, 8, 13), QStringLiteral("://schema/pattern/v0.8.13.xsd")), std::make_pair(FormatVersion(0, 9, 0), QStringLiteral("://schema/pattern/v0.9.0.xsd")), - std::make_pair(FormatVersion(0, 9, 1), CurrentSchema) + std::make_pair(FormatVersion(0, 9, 1), QStringLiteral("://schema/pattern/v0.9.1.xsd")), + std::make_pair(FormatVersion(0, 9, 2), CurrentSchema) }; if (schemas.contains(ver)) @@ -374,6 +375,10 @@ void VPatternConverter::ApplyPatches() ValidateXML(CurrentSchema); Q_FALLTHROUGH(); case (FormatVersion(0, 9, 1)): + ToV0_9_2(); + ValidateXML(CurrentSchema); + Q_FALLTHROUGH(); + case (FormatVersion(0, 9, 2)): break; default: InvalidVersion(m_ver); @@ -391,7 +396,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion() bool VPatternConverter::IsReadOnly() const { // Check if attribute readOnly was not changed in file format - Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == FormatVersion(0, 9, 1), + Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == FormatVersion(0, 9, 2), "Check attribute readOnly."); // Possibly in future attribute readOnly will change position etc. @@ -562,6 +567,17 @@ void VPatternConverter::ToV0_9_1() Save(); } +//--------------------------------------------------------------------------------------------------------------------- +void VPatternConverter::ToV0_9_2() +{ + // TODO. Delete if minimal supported version is 0.9.2 + Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < FormatVersion(0, 9, 2), + "Time to refactor the code."); + + SetVersion(QStringLiteral("0.9.2")); + Save(); +} + //--------------------------------------------------------------------------------------------------------------------- void VPatternConverter::TagUnitToV0_2_0() { diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index 25bcb2c0a..a0a669938 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -53,7 +53,7 @@ public: static const QString PatternMaxVerStr; static const QString CurrentSchema; static Q_DECL_CONSTEXPR const unsigned PatternMinVer = FormatVersion(0, 1, 4); - static Q_DECL_CONSTEXPR const unsigned PatternMaxVer = FormatVersion(0, 9, 1); + static Q_DECL_CONSTEXPR const unsigned PatternMaxVer = FormatVersion(0, 9, 2); protected: void Save() override; @@ -86,6 +86,7 @@ private: void ToV0_8_8(); void ToV0_9_0(); void ToV0_9_1(); + void ToV0_9_2(); void TagUnitToV0_2_0(); void TagIncrementToV0_2_0(); diff --git a/src/libs/vtools/dialogs/dialogtoolbox.cpp b/src/libs/vtools/dialogs/dialogtoolbox.cpp index 8f9650e80..3e416cebc 100644 --- a/src/libs/vtools/dialogs/dialogtoolbox.cpp +++ b/src/libs/vtools/dialogs/dialogtoolbox.cpp @@ -672,6 +672,11 @@ QString GetNodeName(const VContainer *data, const VPieceNode &node, bool showPas { name = QLatin1Char('[') + name + QLatin1Char(']'); } + + if (not node.IsTurnPoint()) + { + name += QStringLiteral(" ⦿"); + } } return name; diff --git a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp index 305173174..9650c585c 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogpiecepath.cpp @@ -329,11 +329,13 @@ void DialogPiecePath::ShowContextMenu(const QPoint &pos) QListWidgetItem *rowItem = ui->listWidget->item(row); SCASSERT(rowItem != nullptr); - VPieceNode rowNode = qvariant_cast(rowItem->data(Qt::UserRole)); + auto rowNode = qvariant_cast(rowItem->data(Qt::UserRole)); QAction *actionPassmark = nullptr; QAction *actionUniqueness = nullptr; QAction *actionReverse = nullptr; + QAction *actionTurnPoint = nullptr; + if (rowNode.GetTypeTool() != Tool::NodePoint) { actionReverse = menu->addAction(tr("Reverse")); @@ -353,6 +355,10 @@ void DialogPiecePath::ShowContextMenu(const QPoint &pos) actionUniqueness = menu->addAction(tr("Check uniqueness")); actionUniqueness->setCheckable(true); actionUniqueness->setChecked(rowNode.IsCheckUniqueness()); + + actionTurnPoint = menu->addAction(tr("Turn point")); + actionTurnPoint->setCheckable(true); + actionTurnPoint->setChecked(rowNode.IsTurnPoint()); } QAction *actionExcluded = menu->addAction(tr("Excluded")); @@ -393,6 +399,12 @@ void DialogPiecePath::ShowContextMenu(const QPoint &pos) rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode)); rowItem->setText(GetNodeName(data, rowNode, IsShowNotch())); } + else if (rowNode.GetTypeTool() == Tool::NodePoint && selectedAction == actionTurnPoint) + { + rowNode.SetTurnPoint(not rowNode.IsTurnPoint()); + rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode)); + rowItem->setText(GetNodeName(data, rowNode, IsShowNotch())); + } ValidObjects(PathIsValid()); ListChanged(); diff --git a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp index c31b6e9f8..b4e705ab2 100644 --- a/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp +++ b/src/libs/vtools/dialogs/tools/piece/dialogseamallowance.cpp @@ -745,11 +745,13 @@ void DialogSeamAllowance::ShowMainPathContextMenu(const QPoint &pos) QListWidgetItem *rowItem = uiTabPaths->listWidgetMainPath->item(row); SCASSERT(rowItem != nullptr); - VPieceNode rowNode = qvariant_cast(rowItem->data(Qt::UserRole)); + auto rowNode = qvariant_cast(rowItem->data(Qt::UserRole)); QAction *actionPassmark = nullptr; QAction *actionUniqueness = nullptr; QAction *actionReverse = nullptr; + QAction *actionTurnPoint = nullptr; + if (rowNode.GetTypeTool() != Tool::NodePoint) { actionReverse = menu->addAction(tr("Reverse")); @@ -768,6 +770,10 @@ void DialogSeamAllowance::ShowMainPathContextMenu(const QPoint &pos) actionUniqueness = menu->addAction(tr("Check uniqueness")); actionUniqueness->setCheckable(true); actionUniqueness->setChecked(rowNode.IsCheckUniqueness()); + + actionTurnPoint = menu->addAction(tr("Turn point")); + actionTurnPoint->setCheckable(true); + actionTurnPoint->setChecked(rowNode.IsTurnPoint()); } QAction *actionExcluded = menu->addAction(tr("Excluded")); @@ -807,6 +813,13 @@ void DialogSeamAllowance::ShowMainPathContextMenu(const QPoint &pos) rowItem->setText(GetNodeName(data, rowNode, true)); } + else if (selectedAction == actionTurnPoint) + { + rowNode.SetTurnPoint(not rowNode.IsTurnPoint()); + rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode)); + rowItem->setText(GetNodeName(data, rowNode, true)); + } + ValidObjects(MainPathIsValid()); ListChanged(); } diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp index 866f82884..e83c77921 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp @@ -100,6 +100,7 @@ enum class ContextMenuOption : int ForbidFlipping, ForceFlipping, Remove, + TurnPoint, LAST_ONE_DO_NOT_USE }; } @@ -140,7 +141,7 @@ void VNodePoint::Create(const VAbstractNodeInitData &initData) VAbstractTool::AddRecord(initData.id, Tool::NodePoint, initData.doc); //TODO Need create garbage collector and remove all nodes, what we don't use. //Better check garbage before each saving file. Check only modeling tags. - VNodePoint *point = new VNodePoint(initData); + auto *point = new VNodePoint(initData); connect(initData.scene, &VMainGraphicsScene::EnableToolMove, point, &VNodePoint::EnableToolMove); connect(initData.scene, &VMainGraphicsScene::EnablePointItemHover, point, &VNodePoint::AllowHover); @@ -326,7 +327,7 @@ QHash VNodePoint::InitContextMenu(QMenu *menu, vidtype pieceId, InitPassmarkAngleTypeMenu(menu, pieceId, contextMenu); InitPassmarkLineTypeMenu(menu, pieceId, contextMenu); - QAction *separatorAct = new QAction(this); + auto *separatorAct = new QAction(this); separatorAct->setSeparator(true); menu->addAction(separatorAct); @@ -366,11 +367,17 @@ void VNodePoint::InitPassmarkMenu(QMenu *menu, vidtype pieceId, QHashaddAction(tr("Passmark")); actionPassmark->setCheckable(true); - actionPassmark->setChecked(detail.GetPath().at(nodeIndex).IsPassmark()); - + actionPassmark->setChecked(node.IsPassmark()); contextMenu.insert(static_cast(ContextMenuOption::Passmark), actionPassmark); + + QAction *actionTurnPoint = menu->addAction(tr("Turn point")); + actionTurnPoint->setCheckable(true); + actionTurnPoint->setChecked(node.IsTurnPoint()); + contextMenu.insert(static_cast(ContextMenuOption::TurnPoint), actionTurnPoint); } } @@ -524,7 +531,7 @@ void VNodePoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) return; } - if (VToolSeamAllowance *piece = qgraphicsitem_cast(parentItem())) + if (auto *piece = qgraphicsitem_cast(parentItem())) { QMenu menu; QHash contextMenu = InitContextMenu(&menu, piece->getId(), piece->referens()); @@ -573,7 +580,7 @@ void VNodePoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) ContextMenuOption selectedOption = static_cast( contextMenu.key(selectedAction, static_cast(ContextMenuOption::NoSelection))); - Q_STATIC_ASSERT_X(static_cast(ContextMenuOption::LAST_ONE_DO_NOT_USE) == 31, + Q_STATIC_ASSERT_X(static_cast(ContextMenuOption::LAST_ONE_DO_NOT_USE) == 32, "Not all options were handled."); QT_WARNING_PUSH @@ -614,6 +621,9 @@ QT_WARNING_DISABLE_GCC("-Wswitch-default") case ContextMenuOption::Exclude: emit ToggleExcludeState(m_id); break; + case ContextMenuOption::TurnPoint: + emit ToggleTurnPointState(m_id); + break; case ContextMenuOption::ByLength: SelectSeamAllowanceAngle(PieceNodeAngle::ByLength); break; diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.h b/src/libs/vtools/tools/nodeDetails/vnodepoint.h index 0a5618552..9fe5e91d0 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.h +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.h @@ -38,7 +38,6 @@ #include #include -#include "../ifc/xml/vabstractpattern.h" #include "../vmisc/def.h" #include "vabstractnode.h" #include "../vwidgets/vscenepoint.h" @@ -66,6 +65,7 @@ signals: void ToggleForceFlipping(bool checked); void Delete(); void ToggleExcludeState(quint32 id); + void ToggleTurnPointState(quint32 id); void ToggleSeamAllowanceAngleType(quint32 id, PieceNodeAngle type); void TogglePassmark(quint32 id, bool toggle); void TogglePassmarkAngleType(quint32 id, PassmarkAngleType type); diff --git a/src/libs/vtools/tools/vabstracttool.cpp b/src/libs/vtools/tools/vabstracttool.cpp index b1c5af0b3..e274086d2 100644 --- a/src/libs/vtools/tools/vabstracttool.cpp +++ b/src/libs/vtools/tools/vabstracttool.cpp @@ -567,6 +567,9 @@ QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagNa nod.removeAttribute(VAbstractPattern::AttrNodePassmarkLine); nod.removeAttribute(VAbstractPattern::AttrNodePassmarkAngle); } + + doc->SetAttributeOrRemoveIf(nod, VAbstractPattern::AttrNodeTurnPoint, node.IsTurnPoint(), + [](bool value) noexcept {return value;}); } else { // Wrong configuration. diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index 9c51e3f42..4f5b3d02d 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -1584,6 +1584,26 @@ void VToolSeamAllowance::ToggleExcludeState(quint32 id) } } +//--------------------------------------------------------------------------------------------------------------------- +void VToolSeamAllowance::ToggleTurnPointState(quint32 id) +{ + const VPiece oldDet = VAbstractTool::data.GetPiece(m_id); + VPiece newDet = oldDet; + + for (int i = 0; i< oldDet.GetPath().CountNodes(); ++i) + { + VPieceNode node = oldDet.GetPath().at(i); + if (node.GetId() == id && node.GetTypeTool() == Tool::NodePoint) + { + node.SetTurnPoint(not node.IsTurnPoint()); + newDet.GetPath()[i] = node; + + VAbstractApplication::VApp()->getUndoStack()->push(new SavePieceOptions(oldDet, newDet, doc, m_id)); + return; + } + } +} + //--------------------------------------------------------------------------------------------------------------------- void VToolSeamAllowance::ToggleNodePointAngleType(quint32 id, PieceNodeAngle type) { @@ -1876,7 +1896,7 @@ void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *sc { case (Tool::NodePoint): { - VNodePoint *tool = qobject_cast(VAbstractPattern::getTool(node.GetId())); + auto *tool = qobject_cast(VAbstractPattern::getTool(node.GetId())); SCASSERT(tool != nullptr); if (tool->parent() != parent) @@ -1891,6 +1911,8 @@ void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *sc connect(tool, &VNodePoint::Delete, parent, &VToolSeamAllowance::DeleteFromMenu, Qt::UniqueConnection); connect(tool, &VNodePoint::ToggleExcludeState, parent, &VToolSeamAllowance::ToggleExcludeState, Qt::UniqueConnection); + connect(tool, &VNodePoint::ToggleTurnPointState, parent, &VToolSeamAllowance::ToggleTurnPointState, + Qt::UniqueConnection); connect(tool, &VNodePoint::ToggleSeamAllowanceAngleType, parent, &VToolSeamAllowance::ToggleNodePointAngleType, Qt::UniqueConnection); connect(tool, &VNodePoint::TogglePassmark, parent, &VToolSeamAllowance::ToggleNodePointPassmark, diff --git a/src/libs/vtools/tools/vtoolseamallowance.h b/src/libs/vtools/tools/vtoolseamallowance.h index 83fc2adfe..3b076a246 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.h +++ b/src/libs/vtools/tools/vtoolseamallowance.h @@ -168,6 +168,7 @@ private slots: void ToggleForbidFlipping(bool checked); void ToggleForceFlipping(bool checked); void ToggleExcludeState(quint32 id); + void ToggleTurnPointState(quint32 id); void ToggleNodePointAngleType(quint32 id, PieceNodeAngle type); void ToggleNodePointPassmark(quint32 id, bool toggle); void TogglePassmarkAngleType(quint32 id, PassmarkAngleType type);