56 #include "../exception/vexception.h"
57 #include "../exception/vexceptionemptyparameter.h"
58 #include "../qmuparser/qmutokenparser.h"
59 #include "../vmisc/def.h"
60 #include "../vmisc/logging.h"
64 #include <QDomNodeList>
68 #include <QLatin1String>
70 #include <QStaticStringData>
71 #include <QStringData>
72 #include <QStringDataPtr>
77 Q_LOGGING_CATEGORY(PatternConverter,
"patternConverter")
96 static const QString
strUnit = QStringLiteral("unit");
97 static const QString
strVersion = QStringLiteral("version");
98 static const QString
strName = QStringLiteral("name");
99 static const QString
strBase = QStringLiteral("base");
101 static const QString
strId = QStringLiteral("
id");
103 static const QString
strKSize = QStringLiteral("ksize");
104 static const QString
strPoint = QStringLiteral("point");
105 static const QString
strLength = QStringLiteral("length");
106 static const QString
strAngle = QStringLiteral("angle");
110 static const QString
strArc = QStringLiteral("arc");
111 static const QString
strAngle1 = QStringLiteral("angle1");
112 static const QString
strAngle2 = QStringLiteral("angle2");
113 static const QString
strRadius = QStringLiteral("radius");
115 static const QString
strKAsm1 = QStringLiteral("kAsm1");
116 static const QString
strKAsm2 = QStringLiteral("kAsm2");
117 static const QString
strPath = QStringLiteral("path");
118 static const QString
strType = QStringLiteral("type");
119 static const QString
strCutArc = QStringLiteral("cutArc");
120 static const QString
strSpline = QStringLiteral("spline");
124 static const QString
strColor = QStringLiteral("color");
129 static const QString
strTools = QStringLiteral("tools");
130 static const QString
strIdTool = QStringLiteral("idTool");
133 static const QString
strChild = QStringLiteral("child");
136 static const QString
strCurve = QStringLiteral("curve");
137 static const QString
strCurve1 = QStringLiteral("curve1");
138 static const QString
strCurve2 = QStringLiteral("curve2");
145 static const QString
strDraw = QStringLiteral("draw");
148 static const QString
strPieces = QStringLiteral("pieces");
149 static const QString
strDetail = QStringLiteral("detail");
150 static const QString
strPiece = QStringLiteral("piece");
152 static const QString
strUnion = QStringLiteral("union");
154 static const QString
strClosed = QStringLiteral("closed");
155 static const QString
strWidth = QStringLiteral("width");
156 static const QString
strHeight = QStringLiteral("height");
157 static const QString
strNode = QStringLiteral("node");
158 static const QString
strNodes = QStringLiteral("nodes");
159 static const QString
strData = QStringLiteral("data");
163 static const QString
strMx = QStringLiteral("mx");
164 static const QString
strMy = QStringLiteral("my");
169 static const QString
strDet = QStringLiteral("det");
173 static const QString
strImage = QStringLiteral("image");
174 static const QString
strAuthor = QStringLiteral("author");
176 static const QString
strNotes = QStringLiteral("notes");
182 static const QString
strLine = QStringLiteral("line");
183 static const QString
strText = QStringLiteral("text");
184 static const QString
strBold = QStringLiteral("bold");
185 static const QString
strItalic = QStringLiteral("italic");
190 static const QString
strSize = QStringLiteral("size");
191 static const QString
strMCP = QStringLiteral("mcp");
192 static const QString
strLetter = QStringLiteral("letter");
200 static const QString
strNotch = QStringLiteral("notch");
208 static const QString
strVMark = QStringLiteral("vMark");
210 static const QString
strTMark = QStringLiteral("tMark");
212 static const QString
strHair = QStringLiteral("hair");
214 static const QString
strOne = QStringLiteral("one");
215 static const QString
strTwo = QStringLiteral("two");
216 static const QString
strThree = QStringLiteral("three");
222 static const QString
strElArc = QStringLiteral("elArc");
223 static const QString
strTrue = QStringLiteral("true");
225 static const QString
strPin = QStringLiteral("pin");
226 static const QString
strPins = QStringLiteral("pins");
230 static const QString
strTopPin = QStringLiteral("topPin");
233 static const QString
strAnchor = QStringLiteral("anchor");
245 ValidateInputFile(CurrentSchema);
254 return QStringLiteral(
"://schema/pattern/v0.1.0.xsd");
256 return QStringLiteral(
"://schema/pattern/v0.1.1.xsd");
258 return QStringLiteral(
"://schema/pattern/v0.1.2.xsd");
260 return QStringLiteral(
"://schema/pattern/v0.1.3.xsd");
262 return QStringLiteral(
"://schema/pattern/v0.1.4.xsd");
264 return QStringLiteral(
"://schema/pattern/v0.2.0.xsd");
266 return QStringLiteral(
"://schema/pattern/v0.2.1.xsd");
268 return QStringLiteral(
"://schema/pattern/v0.2.2.xsd");
270 return QStringLiteral(
"://schema/pattern/v0.2.3.xsd");
272 return QStringLiteral(
"://schema/pattern/v0.2.4.xsd");
274 return QStringLiteral(
"://schema/pattern/v0.2.5.xsd");
276 return QStringLiteral(
"://schema/pattern/v0.2.6.xsd");
278 return QStringLiteral(
"://schema/pattern/v0.2.7.xsd");
280 return QStringLiteral(
"://schema/pattern/v0.3.0.xsd");
282 return QStringLiteral(
"://schema/pattern/v0.3.1.xsd");
284 return QStringLiteral(
"://schema/pattern/v0.3.2.xsd");
286 return QStringLiteral(
"://schema/pattern/v0.3.3.xsd");
288 return QStringLiteral(
"://schema/pattern/v0.3.4.xsd");
290 return QStringLiteral(
"://schema/pattern/v0.3.5.xsd");
292 return QStringLiteral(
"://schema/pattern/v0.3.6.xsd");
294 return QStringLiteral(
"://schema/pattern/v0.3.7.xsd");
296 return QStringLiteral(
"://schema/pattern/v0.3.8.xsd");
298 return QStringLiteral(
"://schema/pattern/v0.3.9.xsd");
300 return QStringLiteral(
"://schema/pattern/v0.4.0.xsd");
302 return QStringLiteral(
"://schema/pattern/v0.4.1.xsd");
304 return QStringLiteral(
"://schema/pattern/v0.4.2.xsd");
306 return QStringLiteral(
"://schema/pattern/v0.4.3.xsd");
308 return QStringLiteral(
"://schema/pattern/v0.4.4.xsd");
310 return QStringLiteral(
"://schema/pattern/v0.4.5.xsd");
312 return QStringLiteral(
"://schema/pattern/v0.4.6.xsd");
314 return QStringLiteral(
"://schema/pattern/v0.4.7.xsd");
316 return QStringLiteral(
"://schema/pattern/v0.4.8.xsd");
318 return QStringLiteral(
"://schema/pattern/v0.5.0.xsd");
320 return QStringLiteral(
"://schema/pattern/v0.5.1.xsd");
322 return QStringLiteral(
"://schema/pattern/v0.6.0.xsd");
324 return QStringLiteral(
"://schema/pattern/v0.6.1.xsd");
326 return QStringLiteral(
"://schema/pattern/v0.6.2.xsd");
328 return QStringLiteral(
"://schema/pattern/v0.6.3.xsd");
330 return QStringLiteral(
"://schema/pattern/v0.6.4.xsd");
332 return QStringLiteral(
"://schema/pattern/v0.6.5.xsd");
334 return QStringLiteral(
"://schema/pattern/v0.6.6.xsd");;
336 return QStringLiteral(
"://schema/pattern/v0.6.7.xsd");;
338 qCDebug(PatternConverter,
"Current schema - ://schema/pattern/v0.6.8.xsd");
540 "Check attribute readOnly.");
546 const QDomElement pattern = documentElement();
548 if (pattern.isNull())
561 "Time to refactor the code.");
572 "Time to refactor the code.");
583 "Time to refactor the code.");
594 "Time to refactor the code.");
605 "Time to refactor the code.");
620 "Time to refactor the code.");
632 "Time to refactor the code.");
643 "Time to refactor the code.");
654 "Time to refactor the code.");
666 "Time to refactor the code.");
677 "Time to refactor the code.");
688 "Time to refactor the code.");
699 "Time to refactor the code.");
713 "Time to refactor the code.");
725 "Time to refactor the code.");
736 "Time to refactor the code.");
747 "Time to refactor the code.");
758 "Time to refactor the code.");
769 "Time to refactor the code.");
780 "Time to refactor the code.");
791 "Time to refactor the code.");
802 "Time to refactor the code.");
813 "Time to refactor the code.");
827 "Time to refactor the code.");
838 "Time to refactor the code.");
849 "Time to refactor the code.");
860 "Time to refactor the code.");
873 "Time to refactor the code.");
883 "Time to refactor the code.");
893 "Time to refactor the code.");
903 "Time to refactor the code.");
913 "Time to refactor the code.");
923 "Time to refactor the code.");
933 "Time to refactor the code.");
948 "Time to refactor the code.");
952 QStringList nodenames = QStringList() <<
strNode
960 QStringList oldnames = QStringList() <<
strPassmark
967 QString newName =
"";
970 for (
int i = 0; i < nodenames.size(); i++)
972 QDomNodeList list = elementsByTagName(nodenames[i]);
974 for (
int j = 0; j < list.size(); j++)
976 QDomNode node = list.at(j);
978 QDomNamedNodeMap
map = node.attributes();
980 for (
int k = 0; k <
map.size(); k++)
983 QDomNode mapItem =
map.item(k);
984 QDomAttr attribute = mapItem.toAttr();
985 QString attributeName = attribute.name();
988 index = oldnames.indexOf(attributeName);
991 QString attributeValue = attribute.value();
992 QDomElement owner = attribute.ownerElement();
1007 if (attributeValue ==
strOne)
1013 if (attributeValue ==
strTwo)
1051 if (attributeValue ==
strHair)
1060 if (attributeValue ==
strHair)
1070 owner.removeAttribute(attributeName);
1071 owner.setAttribute(newName, attributeValue);
1084 "Time to refactor the code.");
1094 "Time to refactor the code.");
1104 "Time to refactor the code.");
1108 const QDomNodeList list = elementsByTagName(
strPoint);
1109 for (
int i=0; i < list.size(); ++i)
1111 QDomElement element = list.at(i).toElement();
1112 if (!element.isNull())
1114 const QString type = element.attribute(
strType);
1115 if (type == QStringLiteral(
"pointOfIntersection"))
1117 element.removeAttribute(QStringLiteral(
"pointOfIntersection"));
1118 element.setAttribute(
strType, QStringLiteral(
"intersectXY"));
1119 element.setAttribute(
strLineType, QStringLiteral(
"dashLine"));
1120 element.setAttribute(
strLineWeight, QStringLiteral(
"0.35"));
1121 element.setAttribute(
strLineColor, QStringLiteral(
"black"));
1133 "Time to refactor the code.");
1137 const QDomNodeList list = elementsByTagName(
strPoint);
1138 for (
int i=0; i < list.size(); ++i)
1140 QDomElement element = list.at(i).toElement();
1141 if (!element.isNull())
1143 const QString type = element.attribute(
strType);
1146 element.removeAttribute(
strPin);
1152 const QDomNodeList pinList = elementsByTagName(
strPins);
1153 for (
int i=0; i < pinList.size(); ++i)
1155 QDomElement element = pinList.at(i).toElement();
1156 if (!element.isNull())
1162 const QDomNodeList dataList = elementsByTagName(
strData);
1163 for (
int i=0; i < dataList.size(); ++i)
1165 QDomElement element = dataList.at(i).toElement();
1166 if (!element.isNull())
1168 QDomAttr attribute = element.attributeNode(
strCenterPin);
1169 if (!attribute.isNull())
1175 if (!attribute.isNull())
1181 if (!attribute.isNull())
1189 for (
int i=0; i < infoList.size(); ++i)
1191 QDomElement element = infoList.at(i).toElement();
1192 if (!element.isNull())
1194 QDomAttr attribute = element.attributeNode(
strCenterPin);
1195 if (!attribute.isNull())
1201 if (!attribute.isNull())
1207 if (!attribute.isNull())
1214 const QDomNodeList grainlineList = elementsByTagName(
strGrainline);
1215 for (
int i=0; i < grainlineList.size(); ++i)
1217 QDomElement element = grainlineList.at(i).toElement();
1218 if (!element.isNull())
1220 QDomAttr attribute = element.attributeNode(
strCenterPin);
1221 if (!attribute.isNull())
1226 attribute = element.attributeNode(
strTopPin);
1227 if (!attribute.isNull())
1233 if (!attribute.isNull())
1247 "Time to refactor the code.");
1251 const QDomNodeList list = elementsByTagName(
strDraw);
1252 for (
int i=0; i < list.size(); ++i)
1254 QDomElement element = list.at(i).toElement();
1255 if (!element.isNull())
1262 const QDomNodeList detailsList = elementsByTagName(
strDetails);
1263 for (
int i=0; i < detailsList.size(); ++i)
1265 QDomElement element = detailsList.at(i).toElement();
1266 if (!element.isNull())
1273 const QDomNodeList detailList = elementsByTagName(
strDetail);
1274 for (
int i=0; i < detailList.size(); ++i)
1276 QDomElement element = detailList.at(i).toElement();
1277 if (!element.isNull())
1284 const QDomNodeList unionList = elementsByTagName(
strTools);
1285 for (
int i=0; i < unionList.size(); ++i)
1287 QDomElement element = unionList.at(i).toElement();
1288 if (!element.isNull())
1290 QDomAttr attribute = element.attributeNode(
strType);
1291 if (!attribute.isNull())
1299 const QDomNodeList detList = elementsByTagName(QStringLiteral(
"det"));
1300 for (
int i=0; i < detList.size(); ++i)
1302 QDomElement element = detList.at(i).toElement();
1303 if (!element.isNull())
1305 element.setTagName(QStringLiteral(
"unionPiece"));
1316 "Time to refactor the code.");
1326 "Time to refactor the code.");
1336 "Time to refactor the code.");
1338 QDomElement unit = createElement(
strUnit);
1339 QDomText newNodeText = createTextNode(
MUnitV0_1_4());
1340 unit.appendChild(newNodeText);
1342 QDomElement patternElement = documentElement();
1343 patternElement.insertAfter(unit, patternElement.firstChildElement(
strVersion));
1351 "Time to refactor the code.");
1365 "Time to refactor the code.");
1378 "Time to refactor the code.");
1380 QSet<QString> names;
1382 QDomNode domNode = incr.firstChild();
1383 while (domNode.isNull() ==
false)
1385 if (domNode.isElement())
1387 QDomElement domElement = domNode.toElement();
1388 if (domElement.isNull() ==
false)
1396 domElement.setAttribute(
strName, QLatin1String(
"#")+name);
1407 domElement.removeAttribute(
strId);
1409 domElement.removeAttribute(
strKSize);
1410 domElement.removeAttribute(
strBase);
1414 domNode = domNode.nextSibling();
1424 "Time to refactor the code.");
1427 const QDomNodeList list = elementsByTagName(
strPoint);
1428 for (
int i=0; i < list.size(); ++i)
1430 QDomElement dom = list.at(i).toElement();
1488 "Time to refactor the code.");
1491 const QDomNodeList list = elementsByTagName(
strArc);
1492 for (
int i=0; i < list.size(); ++i)
1494 QDomElement dom = list.at(i).toElement();
1543 "Time to refactor the code.");
1546 const QDomNodeList list = elementsByTagName(
strPathPoint);
1547 for (
int i=0; i < list.size(); ++i)
1549 QDomElement dom = list.at(i).toElement();
1588 "Time to refactor the code.");
1591 const QDomNodeList list = elementsByTagName(
strPoint);
1592 for (
int i=0; i < list.size(); ++i)
1594 QDomElement dom = list.at(i).toElement();
1652 "Time to refactor the code.");
1655 const QDomNodeList list = elementsByTagName(
strArc);
1656 for (
int i=0; i < list.size(); ++i)
1658 QDomElement dom = list.at(i).toElement();
1707 "Time to refactor the code.");
1710 const QDomNodeList list = elementsByTagName(
strPathPoint);
1711 for (
int i=0; i < list.size(); ++i)
1713 QDomElement dom = list.at(i).toElement();
1752 "Time to refactor the code.");
1761 QString newFormula = formula;
1762 for (
int i = 0; i < tValues.size(); ++i)
1764 if (not names.contains(tValues.at(i)))
1770 Replace(newFormula, names.value(tValues.at(i)), tKeys.at(i), tValues.at(i), bias);
1774 tKeys = tokens.keys();
1775 tValues = tokens.values();
1786 "Time to refactor the code.");
1795 QString newFormula = formula;
1796 for (
int i = 0; i < tValues.size(); ++i)
1798 if (not names.contains(tValues.at(i)))
1804 Replace(newFormula,
"#"+tValues.at(i), tKeys.at(i), tValues.at(i), bias);
1808 tKeys = tokens.keys();
1809 tValues = tokens.values();
1820 "Time to refactor the code.");
1829 QDomText newNodeText = createTextNode(QFileInfo(
m_convertedFileName).absoluteDir().relativeFilePath(path));
1830 ms.appendChild(newNodeText);
1838 "Time to refactor the code.");
1853 "Time to refactor the code.");
1855 const QDomNodeList list = elementsByTagName(
strPoint);
1856 for (
int i=0; i < list.size(); ++i)
1858 QDomElement element = list.at(i).toElement();
1859 if (not element.isNull())
1861 const QString type = element.attribute(
strType);
1875 "Time to refactor the code.");
1895 "Time to refactor the code.");
1898 const QDomElement element = list.at(0).toElement();
1899 if (not element.isElement())
1901 VException excep(
"Can't get tag measurements.");
1912 "Time to refactor the code.");
1915 const QDomElement element = list.at(0).toElement();
1916 if (not element.isElement())
1918 VException excep(
"Can't get tag measurements.");
1929 "Time to refactor the code.");
1931 QDomElement root = documentElement();
1932 const QDomNodeList modelings = root.elementsByTagName(
strModeling);
1933 for (
int i=0; i<modelings.size(); ++i)
1944 "Time to refactor the code.");
1946 QDomElement node = modeling.firstChild().toElement();
1947 while (not node.isNull())
1951 const quint32 toolId = node.attribute(
strId).toUInt();
1953 QDomElement childNode = node.nextSibling().toElement();
1954 while (not childNode.isNull())
1956 if (childNode.hasAttribute(
strIdTool) && childNode.attribute(
strIdTool).toUInt() == toolId)
1958 children.append(childNode.attribute(
strIdObject).toUInt());
1964 childNode = childNode.nextSibling().toElement();
1967 if (not children.isEmpty())
1974 node = node.nextSibling().toElement();
1983 "Time to refactor the code.");
1986 if (toolUnion.isNull())
1991 QDomElement tagChildren = createElement(
strChildren);
1993 for (
int i=0; i<children.size(); ++i)
1995 QDomElement tagChild = createElement(
strChild);
1996 tagChild.appendChild(createTextNode(QString().setNum(children.at(i))));
1997 tagChildren.appendChild(tagChild);
2000 toolUnion.appendChild(tagChildren);
2008 "Time to refactor the code.");
2013 names.insert(QStringLiteral(
"cervicale_height"), QStringLiteral(
"height_neck_back"));
2014 names.insert(QStringLiteral(
"height_scapular_point"), QStringLiteral(
"height_scapula"));
2015 names.insert(QStringLiteral(
"height_back_angle_axilla"), QStringLiteral(
"height_armpit"));
2016 names.insert(QStringLiteral(
"waist_height"), QStringLiteral(
"height_waist_side"));
2017 names.insert(QStringLiteral(
"hip_height"), QStringLiteral(
"height_hip"));
2018 names.insert(QStringLiteral(
"knee_height"), QStringLiteral(
"height_knee"));
2019 names.insert(QStringLiteral(
"ankle_height"), QStringLiteral(
"height_ankle"));
2020 names.insert(QStringLiteral(
"high_hip_height"), QStringLiteral(
"height_highhip"));
2021 names.insert(QStringLiteral(
"front_waist_to_floor"), QStringLiteral(
"height_waist_front"));
2022 names.insert(QStringLiteral(
"height_nipple_point"), QStringLiteral(
"height_bustpoint"));
2024 QString name = QStringLiteral(
"height_shoulder_tip");
2025 names.insert(QStringLiteral(
"shoulder_height"), name);
2026 names.insert(QStringLiteral(
"height_shoulder_point"), name);
2028 name = QStringLiteral(
"height_neck_front");
2029 names.insert(QStringLiteral(
"height_clavicular_point"), name);
2030 names.insert(QStringLiteral(
"height_front_neck_base_point"), name);
2032 names.insert(QStringLiteral(
"height_base_neck_side_point"), QStringLiteral(
"height_neck_side"));
2034 name = QStringLiteral(
"height_neck_back_to_knee");
2035 names.insert(QStringLiteral(
"neck_to_knee_point"), name);
2036 names.insert(QStringLiteral(
"cervicale_to_knee_height"), name);
2038 names.insert(QStringLiteral(
"waist_to_knee_height"), QStringLiteral(
"height_waist_side_to_knee"));
2039 names.insert(QStringLiteral(
"waist_to_hip_height"), QStringLiteral(
"height_waist_side_to_hip"));
2040 names.insert(QStringLiteral(
"body_position"), QStringLiteral(
"indent_neck_back"));
2042 name = QStringLiteral(
"neck_mid_circ");
2043 names.insert(QStringLiteral(
"half_girth_neck_for_shirts"), name);
2044 names.insert(QStringLiteral(
"mid_neck_girth"), name);
2046 names.insert(QStringLiteral(
"neck_base_girth"), QStringLiteral(
"neck_circ"));
2047 names.insert(QStringLiteral(
"upper_chest_girth"), QStringLiteral(
"highbust_circ"));
2048 names.insert(QStringLiteral(
"bust_girth"), QStringLiteral(
"bust_circ"));
2049 names.insert(QStringLiteral(
"under_bust_girth"), QStringLiteral(
"lowbust_circ"));
2050 names.insert(QStringLiteral(
"waist_girth"), QStringLiteral(
"waist_circ"));
2051 names.insert(QStringLiteral(
"high_hip_girth"), QStringLiteral(
"highhip_circ"));
2052 names.insert(QStringLiteral(
"hips_excluding_protruding_abdomen"), QStringLiteral(
"hip_circ"));
2053 names.insert(QStringLiteral(
"hip_girth"), QStringLiteral(
"hip_circ_with_abdomen"));
2055 name = QStringLiteral(
"neck_arc_f");
2056 names.insert(QStringLiteral(
"half_girth_neck"), name);
2057 names.insert(QStringLiteral(
"front_neck_arc"), name);
2059 name = QStringLiteral(
"highbust_arc_f");
2060 names.insert(QStringLiteral(
"half_girth_chest_first"), name);
2061 names.insert(QStringLiteral(
"front_upper_chest_arc"), name);
2063 names.insert(QStringLiteral(
"half_girth_chest_second"), QStringLiteral(
"bust_arc_f"));
2064 names.insert(QStringLiteral(
"half_girth_chest_third"), QStringLiteral(
"lowbust_arc_f"));
2066 name = QStringLiteral(
"waist_arc_f");
2067 names.insert(QStringLiteral(
"half_girth_waist"), name);
2068 names.insert(QStringLiteral(
"front_waist_arc"), name);
2070 names.insert(QStringLiteral(
"front_upper_hip_arc"), QStringLiteral(
"highhip_arc_f"));
2072 name = QStringLiteral(
"hip_arc_f");
2073 names.insert(QStringLiteral(
"half_girth_hips_excluding_protruding_abdomen"), name);
2074 names.insert(QStringLiteral(
"front_hip_arc"), name);
2076 names.insert(QStringLiteral(
"back_neck_arc"), QStringLiteral(
"neck_arc_b"));
2077 names.insert(QStringLiteral(
"back_upper_chest_arc"), QStringLiteral(
"highbust_arc_b"));
2078 names.insert(QStringLiteral(
"back_waist_arc"), QStringLiteral(
"waist_arc_b"));
2079 names.insert(QStringLiteral(
"back_upper_hip_arc"), QStringLiteral(
"highhip_arc_b"));
2080 names.insert(QStringLiteral(
"back_hip_arc"), QStringLiteral(
"hip_arc_b"));
2081 names.insert(QStringLiteral(
"half_girth_hips_considering_protruding_abdomen"),
2082 QStringLiteral(
"hip_with_abdomen_arc_f"));
2083 names.insert(QStringLiteral(
"shoulder_girth"), QStringLiteral(
"body_armfold_circ"));
2084 names.insert(QStringLiteral(
"trunk_length"), QStringLiteral(
"body_torso_circ"));
2085 names.insert(QStringLiteral(
"front_waist_length"), QStringLiteral(
"neck_front_to_waist_f"));
2086 names.insert(QStringLiteral(
"center_front_waist_length"), QStringLiteral(
"neck_front_to_waist_flat_f"));
2087 names.insert(QStringLiteral(
"side_waist_length"), QStringLiteral(
"armpit_to_waist_side"));
2088 names.insert(QStringLiteral(
"waist_to_neck_side"), QStringLiteral(
"neck_side_to_waist_b"));
2090 name = QStringLiteral(
"neck_side_to_waist_f");
2091 names.insert(QStringLiteral(
"neck_to_front_waist_line"), name);
2092 names.insert(QStringLiteral(
"front_shoulder_to_waist_length"), name);
2094 names.insert(QStringLiteral(
"back_shoulder_to_waist_length"), QStringLiteral(
"neck_side_to_waist_b"));
2095 names.insert(QStringLiteral(
"center_back_waist_length"), QStringLiteral(
"neck_back_to_waist_b"));
2097 name = QStringLiteral(
"neck_front_to_highbust_f");
2098 names.insert(QStringLiteral(
"neck_to_first_line_chest_circumference"), name);
2099 names.insert(QStringLiteral(
"front_neck_to_upper_chest_height"), name);
2101 names.insert(QStringLiteral(
"front_neck_to_bust_height"), QStringLiteral(
"neck_front_to_bust_f"));
2102 names.insert(QStringLiteral(
"front_waist_to_upper_chest"), QStringLiteral(
"highbust_to_waist_f"));
2103 names.insert(QStringLiteral(
"front_waist_to_lower_breast"), QStringLiteral(
"lowbust_to_waist_f"));
2104 names.insert(QStringLiteral(
"neck_to_back_line_chest_circumference"), QStringLiteral(
"neck_back_to_highbust_b"));
2105 names.insert(QStringLiteral(
"depth_waist_first"), QStringLiteral(
"waist_to_highhip_f"));
2106 names.insert(QStringLiteral(
"depth_waist_second"), QStringLiteral(
"waist_to_hip_f"));
2107 names.insert(QStringLiteral(
"shoulder_slope_degrees"), QStringLiteral(
"shoulder_slope_neck_side_angle"));
2108 names.insert(QStringLiteral(
"shoulder_drop"), QStringLiteral(
"shoulder_slope_neck_side_length"));
2109 names.insert(QStringLiteral(
"across_front_shoulder_width"), QStringLiteral(
"shoulder_tip_to_shoulder_tip_f"));
2110 names.insert(QStringLiteral(
"upper_front_chest_width"), QStringLiteral(
"across_chest_f"));
2111 names.insert(QStringLiteral(
"chest_width"), QStringLiteral(
"across_chest_f"));
2112 names.insert(QStringLiteral(
"front_chest_width"), QStringLiteral(
"armfold_to_armfold_f"));
2114 name = QStringLiteral(
"shoulder_tip_to_shoulder_tip_b");
2115 names.insert(QStringLiteral(
"arc_behind_shoulder_girdle"), name);
2116 names.insert(QStringLiteral(
"across_back_shoulder_width"), name);
2118 names.insert(QStringLiteral(
"upper_back_width"), QStringLiteral(
"across_back_b"));
2119 names.insert(QStringLiteral(
"back_width"), QStringLiteral(
"armfold_to_armfold_b"));
2120 names.insert(QStringLiteral(
"neck_transverse_diameter"), QStringLiteral(
"neck_width"));
2121 names.insert(QStringLiteral(
"bustpoint_to_bustpoint"), QStringLiteral(
"bustpoint_to_bustpoint"));
2122 names.insert(QStringLiteral(
"neck_to_bustpoint"), QStringLiteral(
"bustpoint_to_neck_side"));
2123 names.insert(QStringLiteral(
"halter_bustpoint_to_bustpoint"), QStringLiteral(
"bustpoint_to_bustpoint_halter"));
2125 name = QStringLiteral(
"shoulder_tip_to_waist_front");
2126 names.insert(QStringLiteral(
"front_slash_shoulder_height"), name);
2127 names.insert(QStringLiteral(
"front_shoulder_slope_length"), name);
2129 names.insert(QStringLiteral(
"front_waist_slope"), QStringLiteral(
"neck_front_to_waist_side"));
2131 name = QStringLiteral(
"neck_side_to_armfold_f");
2132 names.insert(QStringLiteral(
"height_armhole_slash"), name);
2133 names.insert(QStringLiteral(
"chest_slope"), name);
2135 name = QStringLiteral(
"shoulder_tip_to_waist_back");
2136 names.insert(QStringLiteral(
"slash_shoulder_height"), name);
2137 names.insert(QStringLiteral(
"back_shoulder_slope_length"), name);
2139 names.insert(QStringLiteral(
"back_waist_slope"), QStringLiteral(
"neck_back_to_waist_side"));
2140 names.insert(QStringLiteral(
"back_slope"), QStringLiteral(
"neck_side_to_armfold_b"));
2141 names.insert(QStringLiteral(
"arm_length"), QStringLiteral(
"arm_shoulder_tip_to_wrist"));
2142 names.insert(QStringLiteral(
"shoulder_to_elbow_length"), QStringLiteral(
"arm_shoulder_tip_to_elbow"));
2143 names.insert(QStringLiteral(
"underarm_length"), QStringLiteral(
"arm_armpit_to_wrist"));
2144 names.insert(QStringLiteral(
"upper_arm_girth"), QStringLiteral(
"arm_upper_circ"));
2145 names.insert(QStringLiteral(
"wrist_girth"), QStringLiteral(
"arm_wrist_circ"));
2146 names.insert(QStringLiteral(
"armscye_girth"), QStringLiteral(
"armscye_circ"));
2147 names.insert(QStringLiteral(
"anteroposterior_diameter_hands"), QStringLiteral(
"armscye_width"));
2148 names.insert(QStringLiteral(
"neck_to_third_finger"), QStringLiteral(
"arm_neck_side_to_finger_tip"));
2149 names.insert(QStringLiteral(
"neck_to_radial_point"), QStringLiteral(
"arm_neck_side_to_outer_elbow"));
2150 names.insert(QStringLiteral(
"shoulder_and_arm_length"), QStringLiteral(
"arm_neck_side_to_wrist"));
2151 names.insert(QStringLiteral(
"crotch_height"), QStringLiteral(
"leg_crotch_to_floor"));
2152 names.insert(QStringLiteral(
"side_waist_to_floor"), QStringLiteral(
"leg_waist_side_to_floor"));
2153 names.insert(QStringLiteral(
"waist_to_knee"), QStringLiteral(
"leg_waist_side_to_knee"));
2154 names.insert(QStringLiteral(
"thigh_girth"), QStringLiteral(
"leg_thigh_upper_circ"));
2155 names.insert(QStringLiteral(
"mid_thigh_girth"), QStringLiteral(
"leg_thigh_mid_circ"));
2156 names.insert(QStringLiteral(
"knee_girth"), QStringLiteral(
"leg_knee_circ"));
2157 names.insert(QStringLiteral(
"calf_girth"), QStringLiteral(
"leg_calf_circ"));
2158 names.insert(QStringLiteral(
"ankle_girth"), QStringLiteral(
"leg_ankle_circ"));
2159 names.insert(QStringLiteral(
"girth_knee_flexed_feet"), QStringLiteral(
"leg_knee_circ_bent"));
2160 names.insert(QStringLiteral(
"arc_through_groin_area"), QStringLiteral(
"crotch_length"));
2161 names.insert(QStringLiteral(
"waist_to_plane_seat"), QStringLiteral(
"rise_length_side_sitting"));
2162 names.insert(QStringLiteral(
"rise_height"), QStringLiteral(
"rise_length_diag"));
2163 names.insert(QStringLiteral(
"hand_vertical_diameter"), QStringLiteral(
"hand_length"));
2164 names.insert(QStringLiteral(
"hand_width"), QStringLiteral(
"hand_palm_width"));
2165 names.insert(QStringLiteral(
"hand_girth"), QStringLiteral(
"hand_circ"));
2166 names.insert(QStringLiteral(
"girth_foot_instep"), QStringLiteral(
"foot_instep_circ"));
2167 names.insert(QStringLiteral(
"head_height"), QStringLiteral(
"head_length"));
2168 names.insert(QStringLiteral(
"head_and_neck_length"), QStringLiteral(
"head_crown_to_neck_back"));
2169 names.insert(QStringLiteral(
"neck_to_neck_base"), QStringLiteral(
"head_chin_to_neck_back"));
2170 names.insert(QStringLiteral(
"arc_length_upper_body"), QStringLiteral(
"waist_to_waist_halter"));
2171 names.insert(QStringLiteral(
"cervicale_to_wrist_length"), QStringLiteral(
"arm_neck_back_to_wrist_bent"));
2172 names.insert(QStringLiteral(
"strap_length"), QStringLiteral(
"highbust_b_over_shoulder_to_highbust_f"));
2173 names.insert(QStringLiteral(
"arc_through_shoulder_joint"), QStringLiteral(
"armscye_arc"));
2174 names.insert(QStringLiteral(
"head_girth"), QStringLiteral(
"head_circ"));
2175 names.insert(QStringLiteral(
"elbow_girth"), QStringLiteral(
"arm_elbow_circ"));
2176 names.insert(QStringLiteral(
"height_under_buttock_folds"), QStringLiteral(
"height_gluteal_fold"));
2177 names.insert(QStringLiteral(
"scye_depth"), QStringLiteral(
"neck_back_to_highbust_b"));
2178 names.insert(QStringLiteral(
"back_waist_to_upper_chest"), QStringLiteral(
"across_back_to_waist_b"));
2188 "Time to refactor the code.");
2193 names.insert(QStringLiteral(
"rise_length_side"), QStringLiteral(
"rise_length_side_sitting"));
2194 names.insert(QStringLiteral(
"size"), QStringLiteral(
"bust_arc_f"));
2206 const QDomNodeList list = elementsByTagName(
strPoint);
2207 for (
int i=0; i < list.size(); ++i)
2209 QDomElement element = list.at(i).toElement();
2210 if (not element.isNull())
2212 const QString type = element.attribute(
strType);
2213 switch(types.indexOf(type))
2217 const quint32
id = element.attribute(
strId).toUInt();
2224 const quint32
id = element.attribute(
strId).toUInt();
2225 quint32 curve = element.attribute(
strSpline).toUInt();
2231 const quint32
id = element.attribute(
strId).toUInt();
2232 quint32 curve = element.attribute(
strArc).toUInt();
2253 const QDomNodeList listPoints = elementsByTagName(
strPoint);
2254 for (
int j = i+1; j < listPoints.size(); ++j)
2256 QDomElement element = listPoints.at(j).toElement();
2257 if (not element.isNull())
2259 const QString type = element.attribute(
strType);
2260 switch(pointTypes.indexOf(type))
2264 const quint32 spl = element.attribute(
strSplinePath).toUInt();
2265 if (spl ==
id+1 || spl ==
id+2)
2273 const quint32 spl = element.attribute(
strSpline).toUInt();
2274 if (spl ==
id+1 || spl ==
id+2)
2276 element.setAttribute(
strSpline, baseCurve);
2282 quint32 spl = element.attribute(
strCurve1).toUInt();
2283 if (spl ==
id+1 || spl ==
id+2)
2285 element.setAttribute(
strCurve1, baseCurve);
2288 spl = element.attribute(
strCurve2).toUInt();
2289 if (spl ==
id+1 || spl ==
id+2)
2291 element.setAttribute(
strCurve2, baseCurve);
2297 const quint32 spl = element.attribute(
strCurve).toUInt();
2298 if (spl ==
id+1 || spl ==
id+2)
2300 element.setAttribute(
strCurve, baseCurve);
2306 const quint32 spl = element.attribute(
strArc).toUInt();
2307 if (spl ==
id+1 || spl ==
id+2)
2309 element.setAttribute(
strArc, baseCurve);
2315 quint32 arc = element.attribute(
strFirstArc).toUInt();
2316 if (arc ==
id+1 || arc ==
id+2)
2322 if (arc ==
id+1 || arc ==
id+2)
2337 const QDomNodeList listSplines = elementsByTagName(
strSpline);
2338 for (
int j = 0; j < listSplines.size(); ++j)
2340 QDomElement element = listSplines.at(j).toElement();
2341 if (not element.isNull())
2343 const QString type = element.attribute(
strType);
2344 switch(splTypes.indexOf(type))
2349 const quint32 spl = element.attribute(
strIdObject).toUInt();
2350 if (spl ==
id+1 || spl ==
id+2)
2362 const QDomNodeList listArcs = elementsByTagName(
strArc);
2363 for (
int j = 0; j < listArcs.size(); ++j)
2365 QDomElement element = listArcs.at(j).toElement();
2366 if (not element.isNull())
2368 const QString type = element.attribute(
strType);
2371 const quint32 arc = element.attribute(
strIdObject).toUInt();
2372 if (arc ==
id+1 || arc ==
id+2)
2386 "Time to refactor the code.");
2388 const QDomNodeList list = elementsByTagName(
strModeling);
2389 for (
int i = 0; i < list.size(); ++i)
2391 QDomElement modeling = list.at(i).toElement();
2392 if (not modeling.isNull())
2394 QDomNode domNode = modeling.firstChild();
2395 while (not domNode.isNull())
2397 QDomElement domElement = domNode.toElement();
2398 if (not domElement.isNull())
2405 domNode = domNode.nextSibling();
2416 "Time to refactor the code.");
2418 const QDomNodeList list = elementsByTagName(
strDetail);
2419 for (
int i=0; i < list.size(); ++i)
2421 QDomElement dom = list.at(i).toElement();
2423 if (not dom.isNull())
2432 QDomElement tagData;
2433 QDomElement tagPatternInfo;
2434 QDomElement tagGrainline;
2435 QDomElement tagNodes = createElement(
strNodes);
2437 const QDomNodeList childList = dom.childNodes();
2438 for (qint32 i = 0; i < childList.size(); ++i)
2440 const QDomElement element = childList.at(i).toElement();
2441 if (not element.isNull())
2443 switch (tags.indexOf(element.tagName()))
2447 QDomElement tagNode = createElement(
strNode);
2456 if (element.hasAttribute(
strMx))
2458 tagNode.setAttribute(
strMx, element.attribute(
strMx,
"0"));
2461 if (element.hasAttribute(
strMy))
2463 tagNode.setAttribute(
strMy, element.attribute(
strMy,
"0"));
2468 tagNodes.appendChild(tagNode);
2473 tagData = element.cloneNode().toElement();
2476 tagPatternInfo = element.cloneNode().toElement();
2479 tagGrainline = element.cloneNode().toElement();
2489 dom.appendChild(tagData);
2490 dom.appendChild(tagPatternInfo);
2491 dom.appendChild(tagGrainline);
2492 dom.appendChild(tagNodes);
2500 QDomElement tagNodes = createElement(
strNodes);
2502 if (not piece.isNull())
2504 const QDomNodeList childList = piece.childNodes();
2505 for (qint32 i = 0; i < childList.size(); ++i)
2507 const QDomElement node = childList.at(i).toElement();
2508 if (not node.isNull())
2510 QDomElement tagNode = createElement(
strNode);
2521 tagNodes.appendChild(tagNode);
2532 QDomElement tagNodes = createElement(
strNodes);
2534 if (not piece.isNull())
2536 const QDomNodeList childList = piece.childNodes();
2537 for (qint32 i = 0; i < childList.size(); ++i)
2539 const QDomElement node = childList.at(i).toElement();
2540 if (not node.isNull())
2542 QDomElement tagNode = node.cloneNode().toElement();
2543 tagNodes.appendChild(tagNode);
2556 "Time to refactor the code.");
2559 const QStringList units = QStringList() <<
"mm" <<
"cm" <<
"inch";
2575 auto ConvertData = [unit](QDomElement &dom,
const QString &attribute)
2577 if (dom.hasAttribute(attribute))
2579 QString valStr = dom.attribute(attribute,
"1");
2581 qreal val = valStr.toDouble(&ok);
2586 dom.setAttribute(attribute, QString().setNum(
FromPixel(val, unit)));
2590 const QDomNodeList list = elementsByTagName(tagName);
2591 for (
int i=0; i < list.size(); ++i)
2593 QDomElement dom = list.at(i).toElement();
2595 if (not dom.isNull())
2608 "Time to refactor the code.");
2613 const QStringList tags = QStringList() <<
strUnit
2626 QDomElement pattern = documentElement();
2627 for (
int i = tags.indexOf(element.tagName())-1; i >= 0; --i)
2629 const QDomNodeList list = elementsByTagName(tags.at(i));
2630 if (not list.isEmpty())
2632 pattern.insertAfter(element, list.at(0));
2638 return list.at(0).toElement();
2646 "Time to refactor the code.");
2655 if (not author.isEmpty())
2677 if (not sizeField.isEmpty())
2695 int alignment,
int fontSizeIncrement)
2699 "Time to refactor the code.");
2701 QDomElement tagLine = createElement(
strLine);
2709 label.appendChild(tagLine);
2717 "Time to refactor the code.");
2719 const QDomNodeList nodeList = elementsByTagName(
strData);
2720 for (
int i = 0; i < nodeList.size(); ++i)
2722 QDomElement dataTag = nodeList.at(i).toElement();
2723 QDomNodeList nodeListMCP = dataTag.childNodes();
2724 const int count = nodeListMCP.count();
2737 for (
int iMCP = 0; iMCP < count; ++iMCP)
2739 QDomElement domMCP = nodeListMCP.at(iMCP).toElement();
2747 line.append(
"%mFabric%");
2750 line.append(
"%mLining%");
2753 line.append(
"%mInterfacing%");
2756 line.append(
"%mInterlining%");
2764 line.append(
", %wCut% %pQuantity%");
2767 line.append(
" %wOnFold%");
2780 "Time to refactor the code.");
2787 QDomNodeList nodeList = elementsByTagName(
strData);
2788 for (
int i = 0; i < nodeList.size(); ++i)
2790 QDomElement child = nodeList.at(i).firstChildElement(
strMCP);
2791 while (not child.isNull())
2793 nodeList.at(i).removeChild(child);
2794 child = nodeList.at(i).firstChildElement(
strMCP);
2804 "Time to refactor the code.");
2806 const QDomNodeList nodeList = elementsByTagName(tag);
2807 if (nodeList.isEmpty())
2812 QDomElement pattern = documentElement();
2813 pattern.removeChild(nodeList.at(0));
2821 "Time to refactor the code.");
2823 const QDomNodeList list = elementsByTagName(
strTools);
2824 for (
int i=0; i < list.size(); ++i)
2827 QDomElement toolDOM = list.at(i).toElement();
2828 if (not toolDOM.isNull())
2833 QDomElement tagChildrenNodes = createElement(
strChildren);
2835 const QDomNodeList childList = toolDOM.childNodes();
2836 for (qint32 i = 0; i < childList.size(); ++i)
2838 const QDomElement element = childList.at(i).toElement();
2839 if (not element.isNull())
2841 switch (tags.indexOf(element.tagName()))
2857 for (
int i = 0; i < nodes.size(); ++i)
2859 QDomElement tagDet = createElement(
strDet);
2860 tagDet.appendChild(nodes.at(i));
2861 toolDOM.appendChild(tagDet);
2863 toolDOM.appendChild(tagChildrenNodes);
2869 const QString &newName,
const QString &value)
const
2871 element.removeAttribute(oldName);
2872 element.setAttribute(newName, value);
void SetVersion(const QString &version)
void Replace(QString &formula, const QString &newName, int position, const QString &token, int &bias) const
Q_NORETURN void InvalidVersion(int ver) const
void CorrectionsPositions(int position, int bias, QMap< int, QString > &tokens) const
QString m_convertedFileName
QDomElement elementById(quint32 id, const QString &tagName=QString())
static QString GetParametrString(const QDomElement &domElement, const QString &name, const QString &defValue=QString())
Returns the string value of the given attribute. RENAME: see above.
static quint32 GetParametrUInt(const QDomElement &domElement, const QString &name, const QString &defValue)
Returns the long long value of the given attribute. RENAME: GetParameterLongLong?
static void ValidateXML(const QString &schema, const QString &fileName)
ValidateXML validate xml file by xsd schema.
static bool getParameterBool(const QDomElement &domElement, const QString &name, const QString &defValue)
QHash< quint32, QDomElement > map
Map used for finding element by id.
QString UniqueTagText(const QString &tagName, const QString &defVal=QString()) const
void SetAttribute(QDomElement &domElement, const QString &name, const T &value) const
SetAttribute set attribute in pattern file. Replace "," by ".".
static void RemoveAllChildren(QDomElement &domElement)
RemoveAllChildren remove all children from file.
The VExceptionEmptyParameter class for exception empty parameter.
virtual QString ErrorMessage() const Q_DECL_OVERRIDE
ErrorMessage return main error message.
The VException class parent for all exception. Could be use for abstract exception.
void AddMoreInformation(const QString &info)
AddMoreInformation add more information for error.
static const QString CurrentSchema
void ConvertMeasurementsToV0_2_1()
void ConvertArcExpressionsToV0_2_0(const QMap< QString, QString > &names)
void TagMeasurementsToV0_2_0()
void RemoveUniqueTagV0_6_0(const QString &tag)
QDomElement AddTagPatternLabelV0_5_1()
void TagRemoveAttributeTypeObjectInV0_4_0()
QDomElement GetUnionChildrenNodesV0_4_0(const QDomElement &detail)
QDomElement GetUnionDetailNodesV0_4_0(const QDomElement &detail)
void FixSubPaths(int i, quint32 id, quint32 baseCurve)
static const QString PatternMaxVerStr
void FixArcExpressionsToV0_2_0(const QSet< QString > &names)
void LabelTagToV0_4_4(const QString &tagName)
void ConvertPointExpressionsToV0_2_0(const QMap< QString, QString > &names)
void RemoveColorToolCutV0_3_1()
void ConvertMeasurementsToV0_2_0()
void SaveChildrenToolUnionToV0_2_4(quint32 id, const QVector< quint32 > &children)
void FixToolUnionToV0_2_4()
virtual void DowngradeToCurrentMaxVersion() Q_DECL_OVERRIDE
QString FixMeasurementInFormulaToV0_2_0(const QString &formula, const QMap< QString, QString > &names)
QDomElement TagMeasurementsV0_1_4() const
void PortPieceLabelstoV0_6_0()
void PortPatternLabeltoV0_6_0(QDomElement &label)
QSet< QString > FixIncrementsToV0_2_0()
void RemoveUnusedTagsV0_6_0()
void renameAttribute(QDomElement &element, const QString &oldName, const QString &newName, const QString &value) const
static QMap< QString, QString > OldNamesToNewNames_InV0_2_0()
virtual void ApplyPatches() Q_DECL_OVERRIDE
QString MUnitV0_1_4() const
static QMap< QString, QString > OldNamesToNewNames_InV0_2_1()
void TagUnionDetailsToV0_4_0()
void FixPathPointExpressionsToV0_2_0(const QSet< QString > &names)
virtual QString XSDSchema(int ver) const Q_DECL_OVERRIDE
static Q_DECL_CONSTEXPR const int PatternMinVer
static Q_DECL_CONSTEXPR const int PatternMaxVer
void FixPointExpressionsToV0_2_0(const QSet< QString > &names)
QString FixIncrementInFormulaToV0_2_0(const QString &formula, const QSet< QString > &names)
void AddLabelTemplateLineV0_6_0(QDomElement &label, const QString &text, bool bold, bool italic, int alignment, int fontSizeIncrement)
virtual bool IsReadOnly() const Q_DECL_OVERRIDE
void ParseModelingToV0_2_4(const QDomElement &modeling)
void ConvertPathPointExpressionsToV0_2_0(const QMap< QString, QString > &names)
void TagIncrementToV0_2_0()
QDomElement TagIncrementsV0_1_4() const
QMap< int, QString > GetTokens() const
double FromPixel(double pix, const Unit &unit)
#define CONVERTER_VERSION_CHECK(major, minor, patch)
static const QString strCutSpline
static const QString strPenStyle
static const QString strTopPin
static const QString strCurve2
static const QString strPointOfIntersectionArcs
static const QString strPoint
static const QString strArc
static const QString strPatternNum
static const QString strTwo
static const QString strElArc
static const QString strId
static const QString strMx
static const QString strChild
static const QString strAngle2
static const QString strLength
static const QString strItalic
static const QString strCompanyName
static const QString strIdTool
static const QString strSeamAllowance
static const QString strSize
static const QString strFirstArc
static const QString strData
static const QString strCurve
static const QString strAngle1
static const QString strTypeLine
static const QString strC2Radius
static const QString strPieces
static const QString strVersion
static const QString strLineType
static const QString strHeight
static const QString strDraw
static const QString strIncrement
static const QString strMCP
static const QString strCutArc
static const QString strOne
static const QString strPathPoint
static const QString strLineColor
static const QString strPassmarkAngle
static const QString strText
static const QString strPin
static const QString strPassmarkLine
static const QString strTypeObject
static const QString strForbidFlipping
static const QString strAngle
static const QString strNotchSubType
static const QString strThree
static const QString strNotchCount
static const QString strColor
static const QString strModelingSpline
static const QString strTrue
static const QString strUserDefined
static const QString strSpline
static const QString strReverse
static const QString strRadius
static const QString strCRadius
static const QString strMy
static const QString strKSize
static const QString strLetter
static const QString strBold
static const QString strNodes
static const QString strAlignment
static const QString strAuthor
static const QString strNode
static const QString strUnion
static const QString strDraftBlock
static const QString strPlacement
static const QString strSplinePath
static const QString strInLayout
static const QString strPassmark
static const QString strCurveIntersectAxis
static const QString strPatternLabel
static const QString strCutSplinePath
static const QString strVMark
static const QString strImage
static const QString strIdObject
static const QString strCenterPin
static const QString strShowNotch
static const QString strMeasurements
static const QString strFormula
static const QString strPiece
static const QString strTopLeftAnchor
static const QString strGradation
static const QString strPointFromArcAndTangent
static const QString strNotch
static const QString strNotchAngle
static const QString strSolidLine
static const QString strLine
static const QString strV_External
static const QString strNotes
static const QString strShowMeasurements
static const QString strShowSecondPassmark
static const QString strKGrowth
static const QString strPins
static const QString strShowDate
static const QString strPointOfIntersectionCurves
static const QString strType
static const QString strCustomerName
static const QString strModeling
static const QString strUnit
static const QString strSupplement
static const QString strLineWeight
static const QString strDetail
static const QString strTMark
static const QString strBottomRightAnchor
static const QString strDetails
static const QString strCenterAnchor
static const QString strMaterial
static const QString strDet
static const QString strKAsm1
static const QString strFSIncrement
static const QString strPatternName
static const QString strClosed
static const QString strTopAnchor
static const QString strWidth
static const QString strKAsm2
static const QString strCurve1
static const QString strSlitNotch
static const QString strBottomAnchor
static const QString strShowSecond
static const QString strChildren
static const QString strAnchor
static const QString strDescription
static const QString strName
static const QString strC1Radius
static const QString strBase
static const QString strReadOnly
static const QString strBottomPin
static const QString strNotchType
static const QString strPatternInfo
static const QString strIncrements
static const QString strHair
static const QString strAnchors
static const QString strPath
static const QString strBottomRightPin
static const QString strUnionDetail
static const QString strTools
static const QString strT_Notch
static const QString strModelingPath
static const QString strNodeType
static const QString strTopLeftPin
static const QString strGrainline
static const QString strSecondArc