1 /***************************************************************************
2 * Copyright (C) 2021 by Abderrahman Taha *
3 * *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
19 ***************************************************************************/
20 #include "drawingoptions.h"
21 #include <qmessagebox.h>
22
23 static int IndexcurrentComponent = -1;
24 static int indexcurrentSet = 0;
25 static int CurrentFormulaType = -1; // 0:Pariso; 1:Parametric; 2:Isosurface
26 static QTreeWidgetItem *MyselectionItemReference;
27 static QStringList qlstPos, qlstStep, qlstmin, qlstmax, qlstnames;
28
29 // Error messages returned by ErrorMsg():
30 static const char *ScriptErrorMessage[] =
31 {
32 "SCRIPT_NO_ERROR", // 0
33 "MAXGRID_OUT_OF_RANGE", // 1
34 "MAXPT_OUT_OF_RANGE", // 2
35 "MAXTRI_OUT_OF_RANGE", // 3
36 "FXYZ_OUT_OF_RANGE", // 4
37 "FX_OUT_OF_RANGE",
38 "XMAX_NBCOMPONENT_MISMATCH", // 5
39 "YMAX_NBCOMPONENT_MISMATCH", // 6
40 "ZMAX_NBCOMPONENT_MISMATCH", // 7
41 "XMIN_NBCOMPONENT_MISMATCH", // 8
42 "YMIN_NBCOMPONENT_MISMATCH", // 9
43 "ZMIN_NBCOMPONENT_MISMATCH", // 10
44 "FY_FX_MISMATCH", // 11
45 "FZ_FX_MISMATCH", // 12
46 "FW_FX_MISMATCH", // 13
47 "UMAX_NBCOMPONENT_MISMATCH", // 14
48 "VMAX_NBCOMPONENT_MISMATCH", // 15
49 "WMAX_NBCOMPONENT_MISMATCH", // 16
50 "UMIN_NBCOMPONENT_MISMATCH", // 17
51 "VMIN_NBCOMPONENT_MISMATCH", // 18
52 "WMIN_NBCOMPONENT_MISMATCH", // 19
53 "GRID_NBCOMPONENT_MISMATCH", // 20
54 "COMPONENT_NBCOMPONENT_MISMATCH", // 21
55 "CND_NBCOMPONENT_MISMATCH", // 22
56 "NBSLIDERS_OUT_OF_RANGE", // 23
57 "NBSLIDERSVALUES_OUT_OF_RANGE", // 24
58 "VERTEX_TAB_MEM_OVERFLOW", // 25
59 "TRIANGLES_TAB_MEM_OVERFLOW", // 26
60 "MINPOLY_TAB_MEM_OVERFLOW", // 27
61 "POLY_TAB_MEM_OVERFLOW", // 28
62 "CND_TAB_MEM_OVERFLOW", // 29
63 "CND_POL_MEM_OVERFLOW", // 30
64 "DEFINED_PARAM_GRID_VERTEX_TAB_OVERFLOW", // 31
65 "DEFINED_PARAM_GRID_TRIANGLE_TAB_OVERFLOW", // 32
66 "GRID_SUPERIOR_TO_GRIDMAX", // 33
67 "Vect_DIMENSION_ERROR", // 34
68 "Not enough memory available to complete this operation", // 35
69 "EMPTY_MANDATORY_FIELD" // 36
70 };
71
ErrorMsg() const72 void DrawingOptions::ErrorMsg() const
73 {
74 QMessageBox msgBox;
75 if (scriptErrorType != SCRIPT_NO_ERROR)
76 {
77 statusBar()->showMessage(ScriptErrorMessage[scriptErrorType]);
78 msgBox.setText(ScriptErrorMessage[scriptErrorType]);
79 msgBox.exec();
80 }
81 }
82
MemoryErrorMsg(int err) const83 void DrawingOptions::MemoryErrorMsg(int err) const
84 {
85 QMessageBox msgBox;
86 if (err != SCRIPT_NO_ERROR)
87 {
88 msgBox.setText(ScriptErrorMessage[err]);
89 msgBox.exec();
90 }
91 }
92
editorwin()93 void DrawingOptions::editorwin()
94 {
95 editor *editorwindow = new editor();
96 editorwindow->show();
97 }
98
colorsoptions()99 void DrawingOptions::colorsoptions()
100 {
101 ColorsOptions *colorwindow = new ColorsOptions();
102 connect(colorwindow->ui.color_2, SIGNAL(activated(int)), this,SLOT(oncolor_2activated(int)));
103 connect(colorwindow->ui.red_2, SIGNAL(valueChanged(int)), this,SLOT(onred_2valueChanged(int)));
104 connect(colorwindow->ui.green_2, SIGNAL(valueChanged(int)), this,SLOT(ongreen_2valueChanged(int)));
105 connect(colorwindow->ui.blue_2, SIGNAL(valueChanged(int)), this,SLOT(onblue_2valueChanged(int)));
106 colorwindow->show();
107 }
108
videoplay()109 void DrawingOptions::videoplay()
110 {
111 QImage buf = MathmodRef->Copyscreenshot();
112 screenimage *player = new screenimage(buf);
113 player->connectcontrols();
114 player->show();
115 }
116
~DrawingOptions()117 DrawingOptions::~DrawingOptions()
118 {
119 delete[] SliderArray;
120 }
121
DrawingOptions(QWidget * parent)122 DrawingOptions::DrawingOptions(QWidget *parent) : QMainWindow(parent)
123 {
124 ui.setupUi(this);
125 IndexcurrentComponent = -1;
126 IsolistItemRef = nullptr;
127 select.selectedoptions.showall = false;
128 select.selectedoptions.sensitive = false;
129 select.selectedoptions.AND = true;
130 select.selectedoptions.parsefunctions = true;
131 select.selectedoptions.parsenames = true;
132 select.selectedoptions.parsecmpnames = true;
133 connect(sliderconf.ui.SaveButton, SIGNAL(clicked()), this,SLOT(update_slider_param()));
134 connect(sliderconf.ui.ParametersComboBox, SIGNAL(activated(int)), this,SLOT(update_infos_param(int)));
135 connect(addnewparam.ui.SaveButton, SIGNAL(clicked()), this,SLOT(add_new_param()));
136 connect(&select, SIGNAL(UpdateSignal()), this, SLOT(SearchListModels()));
137 statusBar()->addPermanentWidget(ui.Progressbarwidget, 1);
138 SaveSlidersRef();
139 BuildAllVect();
140 ui.ObjectClasseCurrent->hide();
141 ui.ObjectClasseCurrent->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
142 }
143
SaveSlidersRef(int nb)144 void DrawingOptions::SaveSlidersRef(int nb)
145 {
146 SliderArray = new SliderStruct[nb];
147
148 SliderArray[0].SliderScrollBar = ui.C1ScrollBar;
149 SliderArray[0].SliderLabel = ui.C1label;
150 SliderArray[0].SliderLabelMax = ui.C1labelMax;
151 SliderArray[0].SliderLabelMin = ui.C1labelMin;
152 SliderArray[0].SliderGroupeBox = ui.groupBox_9;
153
154 SliderArray[1].SliderScrollBar = ui.C2ScrollBar;
155 SliderArray[1].SliderLabel = ui.C2label;
156 SliderArray[1].SliderLabelMax = ui.C2labelMax;
157 SliderArray[1].SliderLabelMin = ui.C2labelMin;
158 SliderArray[1].SliderGroupeBox = ui.groupBox_10;
159
160 SliderArray[2].SliderScrollBar = ui.C3ScrollBar;
161 SliderArray[2].SliderLabel = ui.C3label;
162 SliderArray[2].SliderLabelMax = ui.C3labelMax;
163 SliderArray[2].SliderLabelMin = ui.C3labelMin;
164 SliderArray[2].SliderGroupeBox = ui.groupBox_11;
165
166 SliderArray[3].SliderScrollBar = ui.C4ScrollBar;
167 SliderArray[3].SliderLabel = ui.C4label;
168 SliderArray[3].SliderLabelMax = ui.C4labelMax;
169 SliderArray[3].SliderLabelMin = ui.C4labelMin;
170 SliderArray[3].SliderGroupeBox = ui.groupBox_12;
171
172 SliderArray[4].SliderScrollBar = ui.C5ScrollBar;
173 SliderArray[4].SliderLabel = ui.C5label;
174 SliderArray[4].SliderLabelMax = ui.C5labelMax;
175 SliderArray[4].SliderLabelMin = ui.C5labelMin;
176 SliderArray[4].SliderGroupeBox = ui.groupBox_13;
177
178 SliderArray[5].SliderScrollBar = ui.C6ScrollBar;
179 SliderArray[5].SliderLabel = ui.C6label;
180 SliderArray[5].SliderLabelMax = ui.C6labelMax;
181 SliderArray[5].SliderLabelMin = ui.C6labelMin;
182 SliderArray[5].SliderGroupeBox = ui.groupBox_14;
183
184 SliderArray[6].SliderScrollBar = ui.C7ScrollBar;
185 SliderArray[6].SliderLabel = ui.C7label;
186 SliderArray[6].SliderLabelMax = ui.C7labelMax;
187 SliderArray[6].SliderLabelMin = ui.C7labelMin;
188 SliderArray[6].SliderGroupeBox = ui.groupBox_15;
189
190 SliderArray[7].SliderScrollBar = ui.C8ScrollBar;
191 SliderArray[7].SliderLabel = ui.C8label;
192 SliderArray[7].SliderLabelMax = ui.C8labelMax;
193 SliderArray[7].SliderLabelMin = ui.C8labelMin;
194 SliderArray[7].SliderGroupeBox = ui.groupBox_16;
195
196 SliderArray[8].SliderScrollBar = ui.C9ScrollBar;
197 SliderArray[8].SliderLabel = ui.C9label;
198 SliderArray[8].SliderLabelMax = ui.C9labelMax;
199 SliderArray[8].SliderLabelMin = ui.C9labelMin;
200 SliderArray[8].SliderGroupeBox = ui.groupBox_17;
201
202 SliderArray[9].SliderScrollBar = ui.C10ScrollBar;
203 SliderArray[9].SliderLabel = ui.C10label;
204 SliderArray[9].SliderLabelMax = ui.C10labelMax;
205 SliderArray[9].SliderLabelMin = ui.C10labelMin;
206 SliderArray[9].SliderGroupeBox = ui.groupBox_18;
207
208 SliderArray[10].SliderScrollBar = ui.C11ScrollBar;
209 SliderArray[10].SliderLabel = ui.C11label;
210 SliderArray[10].SliderLabelMax = ui.C11labelMax;
211 SliderArray[10].SliderLabelMin = ui.C11labelMin;
212 SliderArray[10].SliderGroupeBox = ui.groupBox_19;
213
214 SliderArray[11].SliderScrollBar = ui.C12ScrollBar;
215 SliderArray[11].SliderLabel = ui.C12label;
216 SliderArray[11].SliderLabelMax = ui.C12labelMax;
217 SliderArray[11].SliderLabelMin = ui.C12labelMin;
218 SliderArray[11].SliderGroupeBox = ui.groupBox_20;
219
220 SliderArray[12].SliderScrollBar = ui.C13ScrollBar;
221 SliderArray[12].SliderLabel = ui.C13label;
222 SliderArray[12].SliderLabelMax = ui.C13labelMax;
223 SliderArray[12].SliderLabelMin = ui.C13labelMin;
224 SliderArray[12].SliderGroupeBox = ui.groupBox_21;
225
226 SliderArray[13].SliderScrollBar = ui.C14ScrollBar;
227 SliderArray[13].SliderLabel = ui.C14label;
228 SliderArray[13].SliderLabelMax = ui.C14labelMax;
229 SliderArray[13].SliderLabelMin = ui.C14labelMin;
230 SliderArray[13].SliderGroupeBox = ui.groupBox_22;
231
232 SliderArray[14].SliderScrollBar = ui.C15ScrollBar;
233 SliderArray[14].SliderLabel = ui.C15label;
234 SliderArray[14].SliderLabelMax = ui.C15labelMax;
235 SliderArray[14].SliderLabelMin = ui.C15labelMin;
236 SliderArray[14].SliderGroupeBox = ui.groupBox_23;
237
238 SliderArray[15].SliderScrollBar = ui.C16ScrollBar;
239 SliderArray[15].SliderLabel = ui.C16label;
240 SliderArray[15].SliderLabelMax = ui.C16labelMax;
241 SliderArray[15].SliderLabelMin = ui.C16labelMin;
242 SliderArray[15].SliderGroupeBox = ui.groupBox_24;
243
244 SliderArray[16].SliderScrollBar = ui.C17ScrollBar;
245 SliderArray[16].SliderLabel = ui.C17label;
246 SliderArray[16].SliderLabelMax = ui.C17labelMax;
247 SliderArray[16].SliderLabelMin = ui.C17labelMin;
248 SliderArray[16].SliderGroupeBox = ui.groupBox_25;
249
250 SliderArray[17].SliderScrollBar = ui.C18ScrollBar;
251 SliderArray[17].SliderLabel = ui.C18label;
252 SliderArray[17].SliderLabelMax = ui.C18labelMax;
253 SliderArray[17].SliderLabelMin = ui.C18labelMin;
254 SliderArray[17].SliderGroupeBox = ui.groupBox_26;
255
256 SliderArray[18].SliderScrollBar = ui.C19ScrollBar;
257 SliderArray[18].SliderLabel = ui.C19label;
258 SliderArray[18].SliderLabelMax = ui.C19labelMax;
259 SliderArray[18].SliderLabelMin = ui.C19labelMin;
260 SliderArray[18].SliderGroupeBox = ui.groupBox_27;
261
262 SliderArray[19].SliderScrollBar = ui.C20ScrollBar;
263 SliderArray[19].SliderLabel = ui.C20label;
264 SliderArray[19].SliderLabelMax = ui.C20labelMax;
265 SliderArray[19].SliderLabelMin = ui.C20labelMin;
266 SliderArray[19].SliderGroupeBox = ui.groupBox_28;
267 }
268
on_xyzg_valueChanged(int value)269 void DrawingOptions::on_xyzg_valueChanged(int value)
270 {
271 ui.Isogroupbox->setTitle("Grid/MaxGrid = (" +
272 QString::number(ui.xyzg->value()) + " / " +
273 QString::number(Parameters->IsoMaxGrid) + ")");
274 if (!MathmodRef->IsoObjet->isRunning())
275 {
276 (MathmodRef->RootObjet.CurrentJsonObject["ParIso"].isArray()) ?
277 MathmodRef->xyzg_valueChanged(value, PARISO_TYPE) : MathmodRef->xyzg_valueChanged(value, ISO_TYPE);
278 }
279 else
280 {
281 ui.ChangeGrid->blockSignals(true);
282 ui.ChangeGrid->setChecked(false);
283 ui.ChangeGrid->blockSignals(false);
284 MathmodRef->xyzactivated = -1;
285 }
286 }
287
on_ChangeGrid_clicked()288 void DrawingOptions::on_ChangeGrid_clicked()
289 {
290 (MathmodRef->RootObjet.CurrentJsonObject["ParIso"].isArray()) ?
291 MathmodRef->slot_checkBox73_clicked(PARISO_TYPE) : MathmodRef->slot_checkBox73_clicked(ISO_TYPE);
292 }
293
AddParObjectToTree(QTreeWidgetItem * paramlistItem,TreeStruct & currentstruct)294 void DrawingOptions::AddParObjectToTree(QTreeWidgetItem *paramlistItem,
295 TreeStruct ¤tstruct)
296 {
297 if (!currentstruct.name.empty())
298 paramlistItem->setText(0, currentstruct.name[0]);
299 QColor greenColor = QColor(0, 255, 0, 50);
300 paramlistItem->setBackground(0, greenColor);
301
302 if (currentstruct.Component.size() > 0)
303 {
304 QTreeWidgetItem *cmpitem = new QTreeWidgetItem(paramlistItem);
305 cmpitem->setText(0, "Components (" +QString::number(currentstruct.Component.size()) +"):");
306
307 for (int j = 0; j < currentstruct.Component.size(); j++)
308 {
309 QTreeWidgetItem *cmpitem2 = new QTreeWidgetItem(cmpitem);
310 cmpitem2->setText(0, currentstruct.Component.at(j));
311 QTreeWidgetItem *cmpitem3 = new QTreeWidgetItem(cmpitem2);
312 cmpitem3->setText(0, "fx(u,v,t) = " + currentstruct.fx.at(j));
313 QTreeWidgetItem *cmpitem4 = new QTreeWidgetItem(cmpitem2);
314 cmpitem4->setText(0, "fy(u,v,t) = " + currentstruct.fy.at(j));
315 QTreeWidgetItem *cmpitem5 = new QTreeWidgetItem(cmpitem2);
316 cmpitem5->setText(0, "fz(u,v,t) = " + currentstruct.fz.at(j));
317 if (MathmodRef->RootObjet.CurrentJsonObject["Param4D"].isObject())
318 {
319 QTreeWidgetItem *cmpitem8 = new QTreeWidgetItem(cmpitem2);
320 cmpitem8->setText(0, "fw(u,v,t) = " + currentstruct.fw.at(j));
321 }
322 QTreeWidgetItem *cmpitem6 = new QTreeWidgetItem(cmpitem2);
323 cmpitem6->setText(0, "U = [" + currentstruct.umin.at(j) + ", " +currentstruct.umax.at(j) + "]");
324 QTreeWidgetItem *cmpitem7 = new QTreeWidgetItem(cmpitem2);
325 cmpitem7->setText(0, "V = [" + currentstruct.vmin.at(j) + ", " +currentstruct.vmax.at(j) + "]");
326 // Grid resolution:
327 if (currentstruct.Grid.size() > 0 &&(2 * j + 1) < currentstruct.Grid.size() &&
328 !MathmodRef->RootObjet.CurrentJsonObject["Param4D"].isObject())
329 {
330 QTreeWidgetItem *cmpitem7 = new QTreeWidgetItem(cmpitem2);
331 cmpitem7->setText(0, "Grid = (" + currentstruct.Grid.at(2 * j) + " , " +currentstruct.Grid.at(2 * j + 1) + ")");
332 }
333 }
334 // Add Global parameters:
335 AddParametersToTree(paramlistItem, currentstruct);
336 }
337 }
338
AddIsoObjectToTree(QTreeWidgetItem * IsolistItem,TreeStruct & currentstruct)339 void DrawingOptions::AddIsoObjectToTree(QTreeWidgetItem *IsolistItem, TreeStruct ¤tstruct)
340 {
341 if (!currentstruct.name.empty())
342 IsolistItem->setText(0, currentstruct.name[0]);
343 QColor greenColor = QColor(0, 255, 0, 50);
344 IsolistItem->setBackground(0, greenColor);
345 if (currentstruct.Component.size() > 0)
346 {
347 QTreeWidgetItem *cmpitem = new QTreeWidgetItem(IsolistItem);
348 cmpitem->setText(0, "Components (" +
349 QString::number(currentstruct.Component.size()) +
350 "):");
351 for (int j = 0; j < currentstruct.Component.size(); j++)
352 {
353 QTreeWidgetItem *cmpitem2 = new QTreeWidgetItem(cmpitem);
354 cmpitem2->setText(0, currentstruct.Component.at(j));
355 QTreeWidgetItem *cmpitem3 = new QTreeWidgetItem(cmpitem2);
356 cmpitem3->setText(0, "f(x,y,z) = " + currentstruct.fxyz.at(j));
357 QTreeWidgetItem *cmpitem4 = new QTreeWidgetItem(cmpitem2);
358 cmpitem4->setText(0, "X = [" + currentstruct.xmin.at(j) + ", " +currentstruct.xmax.at(j) + "]");
359 QTreeWidgetItem *cmpitem5 = new QTreeWidgetItem(cmpitem2);
360 cmpitem5->setText(0, "Y = [" + currentstruct.ymin.at(j) + ", " +currentstruct.ymax.at(j) + "]");
361 QTreeWidgetItem *cmpitem6 = new QTreeWidgetItem(cmpitem2);
362 cmpitem6->setText(0, "Z = [" + currentstruct.zmin.at(j) + ", " +currentstruct.zmax.at(j) + "]");
363 // Grid resolution:
364 if (currentstruct.Grid.size() > 0 && j < currentstruct.Grid.size())
365 {
366 QTreeWidgetItem *cmpitem7 = new QTreeWidgetItem(cmpitem2);
367 cmpitem7->setText(0, "Grid = " + currentstruct.Grid.at(j));
368 }
369 }
370 // Add Global parameters:
371 AddParametersToTree(IsolistItem, currentstruct);
372 }
373 }
374
AddParametersToTree(QTreeWidgetItem * parameterslistItem,TreeStruct & currentstruct)375 void DrawingOptions::AddParametersToTree(QTreeWidgetItem *parameterslistItem,
376 TreeStruct ¤tstruct)
377 {
378 QTreeWidgetItem *parameteritem = new QTreeWidgetItem(parameterslistItem);
379 parameteritem->setText(0, "Parameters:");
380 int size = 0;
381
382 if ((size = currentstruct.Const.size()) > 0)
383 {
384 QTreeWidgetItem *cstitem = new QTreeWidgetItem(parameteritem);
385 cstitem->setText(0, "Constantes:");
386 for (int j = 0; j < size; j++)
387 {
388 QTreeWidgetItem *cstitem2 = new QTreeWidgetItem(cstitem);
389 cstitem2->setText(0, currentstruct.Const.at(j));
390 }
391 }
392 if ((size = currentstruct.Funct.size()) > 0)
393 {
394 QTreeWidgetItem *fctitem = new QTreeWidgetItem(parameteritem);
395 fctitem->setText(0, "Functions:");
396 for (int j = 0; j < size; j++)
397 {
398 QTreeWidgetItem *fctitem2 = new QTreeWidgetItem(fctitem);
399 fctitem2->setText(0, currentstruct.Funct.at(j));
400 }
401 }
402 }
403
AddObjectToMySelectionTree()404 void DrawingOptions::AddObjectToMySelectionTree()
405 {
406 if (MathmodRef->RootObjet.CurrentJsonObject["Iso3D"].isObject())
407 {
408 QTreeWidgetItem *isolistItem =
409 new QTreeWidgetItem(MyselectionItemReference);
410 AddIsoObjectToTree(isolistItem, MathmodRef->RootObjet.CurrentTreestruct);
411 }
412 else if (MathmodRef->RootObjet.CurrentJsonObject["Param3D"].isObject() ||
413 MathmodRef->RootObjet.CurrentJsonObject["Param4D"].isObject() ||
414 MathmodRef->RootObjet.CurrentJsonObject["Param3D_C"].isObject() ||
415 MathmodRef->RootObjet.CurrentJsonObject["Param4D_C"].isObject())
416 {
417 QTreeWidgetItem *paramlistItem =
418 new QTreeWidgetItem(MyselectionItemReference);
419 AddParObjectToTree(paramlistItem, MathmodRef->RootObjet.CurrentTreestruct);
420 }
421 }
422
UpdateTreeObject()423 void DrawingOptions::UpdateTreeObject()
424 {
425 // Update Object Tree
426 if (MathmodRef->RootObjet.CurrentJsonObject["ParIso"].isArray()) // isoObject
427 {
428 ui.ObjectClasseCurrent->model()->removeRows(
429 0, ui.ObjectClasseCurrent->model()->rowCount());
430 for (uint i = 0; i < MathmodRef->RootObjet.CurrentParisoTreestruct.size();
431 i++)
432 {
433 QTreeWidgetItem *parisochild = new QTreeWidgetItem(ui.ObjectClasseCurrent);
434 if (MathmodRef->RootObjet.CurrentParisoTreestruct[i].type == ISO_TYPE)
435 AddIsoObjectToTree(parisochild,MathmodRef->RootObjet.CurrentParisoTreestruct[i]);
436 else
437 AddParObjectToTree(parisochild,MathmodRef->RootObjet.CurrentParisoTreestruct[i]);
438 }
439 }
440 else
441 {
442 if (MathmodRef->RootObjet.CurrentJsonObject["Iso3D"].isObject()) // isoObject
443 {
444 ui.ObjectClasseCurrent->model()->removeRows(0, ui.ObjectClasseCurrent->model()->rowCount());
445 QTreeWidgetItem *IsolistItem = new QTreeWidgetItem(ui.ObjectClasseCurrent);
446 AddIsoObjectToTree(IsolistItem, MathmodRef->RootObjet.CurrentTreestruct);
447 }
448 else if (MathmodRef->RootObjet.CurrentJsonObject["Param3D"].isObject() ||
449 MathmodRef->RootObjet.CurrentJsonObject["Param4D"].isObject() ||
450 MathmodRef->RootObjet.CurrentJsonObject["Param3D_C"].isObject() ||
451 MathmodRef->RootObjet.CurrentJsonObject["Param4D_C"].isObject() )
452 {
453 ui.ObjectClasseCurrent->model()->removeRows(0, ui.ObjectClasseCurrent->model()->rowCount());
454 QTreeWidgetItem *paramlistItem =new QTreeWidgetItem(ui.ObjectClasseCurrent);
455 AddParObjectToTree(paramlistItem,MathmodRef->RootObjet.CurrentTreestruct);
456 }
457 }
458 }
459
UpdatePar4DModelDetailsPage(TreeStruct & currentstruct)460 void DrawingOptions::UpdatePar4DModelDetailsPage(TreeStruct ¤tstruct)
461 {
462 ui.ParamComponent_2->clear();
463 if (!currentstruct.name.empty())
464 ui.groupBox->setTitle(currentstruct.name.at(0));
465 ui.ParamComponent_2->insertItems(0, currentstruct.Component);
466 ui.stackedProperties->setCurrentIndex(3);
467 UpdateDescription(0, PAR_4D_TYPE, currentstruct);
468 }
469
UpdatePar3DModelDetailsPage(TreeStruct & currentstruct)470 void DrawingOptions::UpdatePar3DModelDetailsPage(TreeStruct ¤tstruct)
471 {
472 ui.ParamComponent->clear();
473 if (!currentstruct.name.empty())
474 ui.groupBox->setTitle(currentstruct.name.at(0));
475 ui.ParamComponent->insertItems(0, currentstruct.Component);
476 ui.stackedProperties->setCurrentIndex(2);
477 ui.ShowParComp->setChecked(true);
478 ui.ShowParComp->setText("Show");
479 UpdateDescription(0, PAR_TYPE, currentstruct);
480 }
481
UpdateIsoModelDetailsPage(TreeStruct & currentstruct)482 void DrawingOptions::UpdateIsoModelDetailsPage(TreeStruct ¤tstruct)
483 {
484 ui.stackedProperties->setCurrentIndex(1);
485 if (!currentstruct.name.empty())
486 ui.groupBox->setTitle(currentstruct.name.at(0));
487 ui.IsoComponent->clear();
488 ui.IsoComponent->insertItems(0, currentstruct.Component);
489 ui.ShowIsoComp->setChecked(true);
490 ui.ShowIsoComp->setText("Show");
491 UpdateDescription(0, ISO_TYPE, currentstruct);
492 }
493
UpdateScriptEditorAndTreeObject()494 void DrawingOptions::UpdateScriptEditorAndTreeObject()
495 {
496 // Update the current Tree Object:
497 if (ShowCurrentObjectTree)
498 UpdateTreeObject();
499 // Update the "Script Edit" page
500 ui.ParamEdit->setText(MathmodRef->RootObjet.CurrentTreestruct.text);
501 // Update the "Model Details" page
502 if (MathmodRef->RootObjet.CurrentJsonObject["ParIso"].isArray())
503 {
504 ui.parisocomboBox->clear();
505 if (MathmodRef->RootObjet.CurrentParisoTreestruct.size() > 0)
506 {
507 for (uint i = 0; i < MathmodRef->RootObjet.CurrentParisoTreestruct.size();i++)
508 ui.parisocomboBox->insertItem(i, MathmodRef->RootObjet.CurrentParisoTreestruct[i].name[0]);
509 if (MathmodRef->RootObjet.CurrentParisoTreestruct[0].fxyz.size() != 0)
510 UpdateIsoModelDetailsPage(MathmodRef->RootObjet.CurrentParisoTreestruct[0]);
511 else if (MathmodRef->RootObjet.CurrentParisoTreestruct[0].fw.size() != 0)
512 UpdatePar4DModelDetailsPage(MathmodRef->RootObjet.CurrentParisoTreestruct[0]);
513 else if (MathmodRef->RootObjet.CurrentParisoTreestruct[0].fx.size() != 0)
514 UpdatePar3DModelDetailsPage(MathmodRef->RootObjet.CurrentParisoTreestruct[0]);
515 }
516 }
517 else if (MathmodRef->RootObjet.CurrentJsonObject["Iso3D"].isObject())
518 UpdateIsoModelDetailsPage(MathmodRef->RootObjet.CurrentTreestruct);
519 else if (MathmodRef->RootObjet.CurrentJsonObject["Param3D"].isObject() ||
520 MathmodRef->RootObjet.CurrentJsonObject["Param3D_C"].isObject())
521 UpdatePar3DModelDetailsPage(MathmodRef->RootObjet.CurrentTreestruct);
522 else if (MathmodRef->RootObjet.CurrentJsonObject["Param4D"].isObject() ||
523 MathmodRef->RootObjet.CurrentJsonObject["Param4D_C"].isObject())
524 UpdatePar4DModelDetailsPage(MathmodRef->RootObjet.CurrentTreestruct);
525 else
526 ui.stackedProperties->setCurrentIndex(0);
527 }
528
HideSliders()529 void DrawingOptions::HideSliders()
530 {
531 ui.groupBox_9->hide();
532 ui.groupBox_10->hide();
533 ui.groupBox_11->hide();
534 ui.groupBox_12->hide();
535 ui.groupBox_13->hide();
536 ui.groupBox_14->hide();
537 ui.groupBox_15->hide();
538 ui.groupBox_16->hide();
539 ui.groupBox_17->hide();
540 ui.groupBox_18->hide();
541 ui.groupBox_19->hide();
542 ui.groupBox_20->hide();
543 ui.groupBox_21->hide();
544 ui.groupBox_22->hide();
545 ui.groupBox_23->hide();
546 ui.groupBox_24->hide();
547 ui.groupBox_25->hide();
548 ui.groupBox_26->hide();
549 ui.groupBox_27->hide();
550 ui.groupBox_28->hide();
551 ui.PredefinedSets->clear();
552 ui.PredefinedSets->addItem("Predefined Sets");
553 ui.ParametersList->clear();
554 ui.ParametersList->addItem("Parameters List");
555 sliderconf.ui.ParametersComboBox->clear();
556 sliderconf.ui.ParametersComboBox->addItem("Parameters List");
557 }
558
ObjArrayToString(QJsonArray & lst,QString & str)559 void DrawingOptions::ObjArrayToString(QJsonArray &lst, QString &str)
560 {
561 str = "";
562 for (int j = 0; j < lst.size() - 1; j++)
563 str += lst[j].toString() + ";";
564 if (lst.size() >= 1)
565 str += lst[lst.size() - 1].toString();
566 str.replace("\n", "");
567 str.replace("\t", "");
568 str.replace(" ", "");
569 }
570
ShowSliders(const QJsonObject & Jobj)571 void DrawingOptions::ShowSliders(const QJsonObject &Jobj)
572 {
573 QString result;
574 QJsonArray lst;
575 QJsonObject QObj;
576 if (Jobj["Sliders"].isObject())
577 {
578 // Hide all sliders
579 HideSliders();
580 QObj = Jobj["Sliders"].toObject();
581 // Min
582 lst = QObj["Min"].toArray();
583 ObjArrayToString(lst, result);
584 qlstmin = result.split(";", QString::SkipEmptyParts);
585 // Max
586 lst = QObj["Max"].toArray();
587 ObjArrayToString(lst, result);
588 qlstmax = result.split(";", QString::SkipEmptyParts);
589 // Position
590 lst = QObj["Position"].toArray();
591 ObjArrayToString(lst, result);
592 qlstPos = result.split(";", QString::SkipEmptyParts);
593 for (int i = 0; i < qlstPos.size(); ++i)
594 {
595 MathmodRef->IsoObjet->masterthread->SliderValues.push_back(
596 qlstPos.at(i).toDouble());
597 MathmodRef->ParObjet->masterthread->SliderValues.push_back(
598 qlstPos.at(i).toDouble());
599 }
600 // Name
601 lst = QObj["Name"].toArray();
602 ObjArrayToString(lst, result);
603 qlstnames = result.split(";", QString::SkipEmptyParts);
604 for (int i = 0; i < qlstnames.size(); ++i)
605 {
606 MathmodRef->IsoObjet->masterthread->SliderNames.push_back(
607 qlstnames.at(i).toStdString());
608 MathmodRef->ParObjet->masterthread->SliderNames.push_back(
609 qlstnames.at(i).toStdString());
610 }
611 MathmodRef->IsoObjet->masterthread->Nb_Sliders =
612 uint(qlstnames.size());
613 MathmodRef->ParObjet->masterthread->Nb_Sliders =
614 uint(qlstnames.size());
615 ui.ParametersList->clear();
616 ui.ParametersList->addItem("Parameters List (" +
617 QString::number(qlstnames.size()) + ")");
618 ui.ParametersList->addItems(qlstnames);
619 sliderconf.ui.ParametersComboBox->clear();
620 sliderconf.ui.ParametersComboBox->addItem(
621 "Parameters List (" + QString::number(qlstnames.size()) + ")");
622 sliderconf.ui.ParametersComboBox->addItems(qlstnames);
623 // Step
624 lst = QObj["Step"].toArray();
625 ObjArrayToString(lst, result);
626 qlstStep = result.split(";", QString::SkipEmptyParts);
627 QStringList qlist;
628 if (qlstPos.size() >= qlstnames.size())
629 {
630 ui.PredefinedSets->clear();
631 int NbSets = (qlstPos.size() == 0 || qlstnames.size() == 0)
632 ? 0
633 : qlstPos.size() / qlstnames.size();
634 qlist += "Predefined Sets (" + QString::number(NbSets) + ")";
635 if (QObj["SetNames"].isArray() &&
636 (lst = QObj["SetNames"].toArray()).size())
637 {
638 ObjArrayToString(lst, result);
639 qlist += result.split(";", QString::SkipEmptyParts);
640 }
641 else
642 {
643 for (int i = 1; i < NbSets + 1; i++)
644 {
645 qlist += "Set_" + QString::number(i);
646 }
647 }
648 ui.PredefinedSets->addItems(qlist);
649 }
650 for (int sl = 0; sl < 20; sl++)
651 {
652 if (qlstnames.size() >= (sl + 1))
653 {
654 (SliderArray[sl].SliderScrollBar)->blockSignals(true);
655 (SliderArray[sl].SliderScrollBar)->setMaximum(qlstmax.at(sl).toInt());
656 (SliderArray[sl].SliderScrollBar)->setMinimum(qlstmin.at(sl).toInt());
657 (SliderArray[sl].SliderScrollBar)
658 ->setSingleStep(qlstStep.at(sl).toInt());
659 (SliderArray[sl].SliderScrollBar)->setPageStep(qlstStep.at(sl).toInt());
660 (SliderArray[sl].SliderScrollBar)
661 ->setSliderPosition(qlstPos.at(sl).toInt());
662 (SliderArray[sl].SliderLabel)
663 ->setText(qlstnames.at(sl) + " = " + qlstPos.at(sl) + "(" +
664 qlstStep.at(sl) + ")");
665 (SliderArray[sl].SliderLabelMin)->setText(qlstmin.at(sl));
666 (SliderArray[sl].SliderLabelMax)->setText(qlstmax.at(sl));
667 (SliderArray[sl].SliderScrollBar)->blockSignals(false);
668 (SliderArray[sl].SliderGroupeBox)->show();
669 }
670 }
671 }
672 else
673 {
674 MathmodRef->IsoObjet->masterthread->Nb_Sliders = 0;
675 MathmodRef->ParObjet->masterthread->Nb_Sliders = 0;
676 HideSliders();
677 }
678 }
679
DrawJsonModel(const QJsonObject & Jobj,int textureIndex,bool Inspect)680 void DrawingOptions::DrawJsonModel(const QJsonObject &Jobj, int textureIndex,
681 bool Inspect)
682 {
683 if (!MathmodRef->ParObjet->isRunning() &&
684 !MathmodRef->IsoObjet->isRunning())
685 {
686 if (Inspect & !VerifiedJsonModel(Jobj, Inspect))
687 return;
688 ShowJsonModel(Jobj, textureIndex);
689 UpdateScriptEditorAndTreeObject();
690 }
691 }
692
MandatoryParFieldToQString(const MandatoryParField & idx)693 QString DrawingOptions::MandatoryParFieldToQString(const MandatoryParField &idx)
694 {
695 QString arg = "";
696 switch (idx)
697 {
698 case PAR_FX:
699 arg = "Fx";
700 break;
701 case PAR_FY:
702 arg = "Fy";
703 break;
704 case PAR_FZ:
705 arg = "Fz";
706 break;
707 case PAR_FW:
708 arg = "Fw";
709 break;
710 case PAR_UMAX:
711 arg = "Umax";
712 break;
713 case PAR_UMIN:
714 arg = "Umin";
715 break;
716 case PAR_VMAX:
717 arg = "Vmax";
718 break;
719 case PAR_VMIN:
720 arg = "Vmin";
721 break;
722 case PAR_NAME:
723 arg = "Name";
724 break;
725 case PAR_COMP:
726 arg = "Component";
727 break;
728 }
729 return(arg);
730 }
731
MandatoryIsoFieldToQString(const MandatoryIsoField & idx)732 QString DrawingOptions::MandatoryIsoFieldToQString(const MandatoryIsoField &idx)
733 {
734 QString arg = "";
735 switch (idx)
736 {
737 case ISO_FXYZ:
738 arg = "Fxyz";
739 break;
740 case ISO_XMAX:
741 arg = "Xmax";
742 break;
743 case ISO_YMAX:
744 arg = "Ymax";
745 break;
746 case ISO_ZMAX:
747 arg = "Zmax";
748 break;
749 case ISO_XMIN:
750 arg = "Xmin";
751 break;
752 case ISO_YMIN:
753 arg = "Ymin";
754 break;
755 case ISO_ZMIN:
756 arg = "Zmin";
757 break;
758 case ISO_NAME:
759 arg = "Name";
760 break;
761 case ISO_COMP:
762 arg = "Component";
763 break;
764 }
765 return(arg);
766 }
767
VerifyIsoFieldEmptySpace(const QJsonObject & QObj,const MandatoryIsoField & idx)768 bool DrawingOptions::VerifyIsoFieldEmptySpace(const QJsonObject &QObj, const MandatoryIsoField &idx)
769 {
770 QString arg = MandatoryIsoFieldToQString(idx);
771 for(int i=0; i<(QObj[arg].toArray()).size(); i++)
772 {
773 if((QObj[arg].toArray())[i].toString().replace(" ","") == "")
774 {
775 return false;
776 }
777 }
778 return true;
779 }
780
VerifyParFieldEmptySpace(const QJsonObject & QObj,const MandatoryParField & idx)781 bool DrawingOptions::VerifyParFieldEmptySpace(const QJsonObject &QObj, const MandatoryParField &idx)
782 {
783 QString arg = MandatoryParFieldToQString(idx);
784 for(int i=0; i<(QObj[arg].toArray()).size(); i++)
785 {
786 if((QObj[arg].toArray())[i].toString().replace(" ","") == "")
787 return false;
788 }
789 return true;
790 }
791
VerifyParEmptySpace(const QJsonObject & QObj)792 bool DrawingOptions::VerifyParEmptySpace(const QJsonObject& QObj)
793 {
794 for (std::vector<MandatoryParField>::const_iterator it =
795 MandParFields.begin();
796 it != MandParFields.end(); ++it)
797 {
798 MandatoryParField Opt = *it;
799 if(!VerifyParFieldEmptySpace(QObj, Opt))
800 return false;
801 }
802 return true;
803 }
804
VerifyIsoEmptySpace(const QJsonObject & QObj)805 bool DrawingOptions::VerifyIsoEmptySpace(const QJsonObject& QObj)
806 {
807 for (std::vector<MandatoryIsoField>::const_iterator it =
808 MandIsoFields.begin();
809 it != MandIsoFields.end(); ++it)
810 {
811 MandatoryIsoField Opt = *it;
812 if(!VerifyIsoFieldEmptySpace(QObj, Opt))
813 return false;
814 }
815 return true;
816 }
817
VerifiedIsoJsonModel(const QJsonObject & QObj)818 bool DrawingOptions::VerifiedIsoJsonModel(const QJsonObject &QObj)
819 {
820 QJsonArray lst;
821 int NbFxyz;
822 if (!VerifyIsoEmptySpace(QObj))
823 {
824 scriptErrorType = EMPTY_MANDATORY_FIELD;
825 ErrorMsg();
826 return false;
827 }
828 // Fxyz
829 NbFxyz = (QObj["Fxyz"].toArray()).size();
830 if ((QObj["Xmax"].toArray()).size() != NbFxyz)
831 {
832 scriptErrorType = XMAX_NBCOMPONENT_MISMATCH;
833 ErrorMsg();
834 return false;
835 }
836 if ((QObj["Ymax"].toArray()).size() != NbFxyz)
837 {
838 scriptErrorType = YMAX_NBCOMPONENT_MISMATCH;
839 ErrorMsg();
840 return false;
841 }
842 if ((QObj["Zmax"].toArray()).size() != NbFxyz)
843 {
844 scriptErrorType = ZMAX_NBCOMPONENT_MISMATCH;
845 ErrorMsg();
846 return false;
847 }
848 if ((QObj["Xmin"].toArray()).size() != NbFxyz)
849 {
850 scriptErrorType = XMIN_NBCOMPONENT_MISMATCH;
851 ErrorMsg();
852 return false;
853 }
854 if ((QObj["Ymin"].toArray()).size() != NbFxyz)
855 {
856 scriptErrorType = YMIN_NBCOMPONENT_MISMATCH;
857 ErrorMsg();
858 return false;
859 }
860 if ((QObj["Zmin"].toArray()).size() != NbFxyz)
861 {
862 scriptErrorType = ZMIN_NBCOMPONENT_MISMATCH;
863 ErrorMsg();
864 return false;
865 }
866 if ((QObj["Component"].toArray()).size() != NbFxyz)
867 {
868 scriptErrorType = COMPONENT_NBCOMPONENT_MISMATCH;
869 ErrorMsg();
870 return false;
871 }
872 if (((lst = QObj["Grid"].toArray()).size() > 0) && (lst.size() != NbFxyz))
873 {
874 scriptErrorType = GRID_NBCOMPONENT_MISMATCH;
875 ErrorMsg();
876 return false;
877 }
878 // variables
879 if (((lst = QObj["Vect"].toArray()).size() > 1))
880 {
881 scriptErrorType = VECT_DIMENSION_ERROR;
882 ErrorMsg();
883 return false;
884 }
885 if (lst.size() > 0)
886 {
887 for (int i = 0; i < lst.size(); i++)
888 if ((lst[i].toString()).toUInt() >= uint(Parameters->IsoMaxGrid))
889 {
890 scriptErrorType = GRID_SUPERIOR_TO_GRIDMAX;
891 ErrorMsg();
892 return false;
893 }
894 }
895 if (((QObj["Cnd"].toArray()).size() > 0) &&
896 ((QObj["Cnd"].toArray()).size() != NbFxyz))
897 {
898 scriptErrorType = CND_NBCOMPONENT_MISMATCH;
899 ErrorMsg();
900 return false;
901 }
902 return true;
903 }
904
VerifiedParJsonModel(const QJsonObject & QObj)905 bool DrawingOptions::VerifiedParJsonModel(const QJsonObject &QObj)
906 {
907 QJsonArray lst;
908 int NbFx;
909 if (!VerifyParEmptySpace(QObj))
910 {
911 scriptErrorType = EMPTY_MANDATORY_FIELD;
912 ErrorMsg();
913 return false;
914 }
915 // Fx
916 NbFx = (QObj["Fx"].toArray()).size();
917 // Fy
918 if ((QObj["Fy"].toArray()).size() != NbFx)
919 {
920 scriptErrorType = FY_FX_MISMATCH;
921 ErrorMsg();
922 return false;
923 }
924 // Fz
925 if ((QObj["Fz"].toArray()).size() != NbFx)
926 {
927 scriptErrorType = FZ_FX_MISMATCH;
928 ErrorMsg();
929 return false;
930 }
931 if (((QObj["Fw"].toArray()).size() != 0) &&
932 ((QObj["Fw"].toArray()).size() != NbFx))
933 {
934 scriptErrorType = FW_FX_MISMATCH;
935 ErrorMsg();
936 return false;
937 }
938 if ((QObj["Umax"].toArray()).size() != NbFx)
939 {
940 scriptErrorType = UMAX_NBCOMPONENT_MISMATCH;
941 ErrorMsg();
942 return false;
943 }
944 if ((QObj["Vmax"].toArray()).size() != NbFx)
945 {
946 scriptErrorType = VMAX_NBCOMPONENT_MISMATCH;
947 ErrorMsg();
948 return false;
949 }
950 if (((QObj["Wmax"].toArray()).size() > 0) &&
951 ((QObj["Wmax"].toArray()).size() != NbFx))
952 {
953 scriptErrorType = WMAX_NBCOMPONENT_MISMATCH;
954 ErrorMsg();
955 return false;
956 }
957 if ((QObj["Umin"].toArray()).size() != NbFx)
958 {
959 scriptErrorType = UMIN_NBCOMPONENT_MISMATCH;
960 ErrorMsg();
961 return false;
962 }
963 if ((QObj["Vmin"].toArray()).size() != NbFx)
964 {
965 scriptErrorType = VMIN_NBCOMPONENT_MISMATCH;
966 ErrorMsg();
967 return false;
968 }
969 if (((QObj["Wmin"].toArray()).size() > 0) &&
970 ((QObj["Wmin"].toArray()).size() != NbFx))
971 {
972 scriptErrorType = WMIN_NBCOMPONENT_MISMATCH;
973 ErrorMsg();
974 return false;
975 }
976 if ((QObj["Component"].toArray()).size() != NbFx)
977 {
978 scriptErrorType = COMPONENT_NBCOMPONENT_MISMATCH;
979 ErrorMsg();
980 return false;
981 }
982 // Start Grid field processing
983 if ((lst = QObj["Grid"].toArray()).size() > 0 && (lst.size() != 2 * NbFx))
984 {
985 scriptErrorType = GRID_NBCOMPONENT_MISMATCH;
986 ErrorMsg();
987 return false;
988 }
989 if (((lst = QObj["Vect"].toArray()).size() > 1))
990 {
991 scriptErrorType = VECT_DIMENSION_ERROR;
992 ErrorMsg();
993 return false;
994 }
995 if (((QObj["Cnd"].toArray()).size() > 0) &&
996 ((QObj["Cnd"].toArray()).size() != NbFx))
997 {
998 scriptErrorType = CND_NBCOMPONENT_MISMATCH;
999 ErrorMsg();
1000 return false;
1001 }
1002 return true;
1003 }
1004
VerifiedJsonModel(const QJsonObject & Jobj,bool Inspect)1005 bool DrawingOptions::VerifiedJsonModel(const QJsonObject &Jobj, bool Inspect)
1006 {
1007 QJsonObject QObj;
1008 bool verif = false;
1009 if (!Inspect)
1010 return true;
1011 if (Jobj["Iso3D"].isObject())
1012 {
1013 QObj = Jobj["Iso3D"].toObject();
1014 verif = VerifiedIsoJsonModel(QObj);
1015 if (verif)
1016 {
1017 MathmodRef->LocalScene.componentsinfos.pariso = false;
1018 MathmodRef->LocalScene.componentsinfos.ParisoNbComponents =1;
1019 MathmodRef->LocalScene.componentsinfos.ParisoCurrentComponentIndex = 0;
1020 }
1021 return (verif);
1022 }
1023 if (Jobj["Param3D"].isObject() || Jobj["Param3D_C"].isObject() ||
1024 Jobj["Param4D"].isObject() || Jobj["Param4D_C"].isObject())
1025 {
1026 if(Jobj["Param3D"].isObject())
1027 QObj = Jobj["Param3D"].toObject();
1028 else if(Jobj["Param4D"].isObject())
1029 QObj = Jobj["Param4D"].toObject();
1030 else if(Jobj["Param3D_C"].isObject())
1031 QObj = Jobj["Param3D_C"].toObject();
1032 else if(Jobj["Param4D_C"].isObject())
1033 QObj = Jobj["Param4D_C"].toObject();
1034 MathmodRef->LocalScene.componentsinfos.ParisoNbComponents = 1;
1035 verif = VerifiedParJsonModel(QObj);
1036 if (verif)
1037 {
1038 MathmodRef->LocalScene.componentsinfos.pariso = false;
1039 MathmodRef->LocalScene.componentsinfos.ParisoNbComponents = 1;
1040 MathmodRef->LocalScene.componentsinfos.ParisoCurrentComponentIndex = 0;
1041 }
1042 return (verif);
1043 }
1044 if (Jobj["ParIso"].isArray())
1045 {
1046 QJsonArray listeObj = Jobj["ParIso"].toArray();
1047 QJsonArray listeIsoObj;
1048 QJsonArray listeParObj;
1049 for (int i = 0; i < listeObj.size(); i++)
1050 if ((listeObj[i].toObject())["Iso3D"].isObject())
1051 listeIsoObj.append(listeObj[i].toObject()["Iso3D"].toObject());
1052 else
1053 listeParObj.append(listeObj[i].toObject()["Param3D"].toObject());
1054 MathmodRef->LocalScene.componentsinfos.pariso = true;
1055 MathmodRef->LocalScene.componentsinfos.ParisoNbComponents = listeIsoObj.size() + listeParObj.size();
1056 MathmodRef->LocalScene.componentsinfos.ParisoCurrentComponentIndex = 0;
1057 for (int i = 0; i < listeIsoObj.size(); i++)
1058 if (!VerifiedIsoJsonModel(listeIsoObj[i].toObject()))
1059 return (false);
1060 for (int i = 0; i < listeParObj.size(); i++)
1061 if (!VerifiedParJsonModel(listeParObj[i].toObject()))
1062 return (false);
1063 }
1064 return true;
1065 }
1066
LoadTexture(const QJsonObject & QObj,const ModelType & opt)1067 void DrawingOptions::LoadTexture(const QJsonObject &QObj,
1068 const ModelType &opt)
1069 {
1070 QString noise1 = QObj["Noise"].toString();
1071 QJsonArray lst = QObj["Colors"].toArray();
1072 noise1.replace("\n", "");
1073 noise1.replace("\t", "");
1074 noise1.replace(" ", "");
1075 QString result;
1076 ObjArrayToString(lst, result);
1077
1078 if (opt == ISO_TYPE)
1079 {
1080 MathmodRef->LocalScene.componentsinfos.hsv.push_back(result.contains("H="));
1081 MathmodRef->IsoObjet->masterthread->Rgbt = result.toStdString();
1082 MathmodRef->IsoObjet->masterthread->Noise = noise1.toStdString();
1083 MathmodRef->IsoObjet->masterthread->RgbtSize = uint(lst.size());
1084 }
1085 else if (opt == PAR_TYPE || opt == PAR_4D_TYPE)
1086 {
1087 MathmodRef->LocalScene.componentsinfos.hsv.push_back(result.contains("H="));
1088 MathmodRef->ParObjet->masterthread->Rgbt = result.toStdString();
1089 MathmodRef->ParObjet->masterthread->Noise = noise1.toStdString();
1090 MathmodRef->ParObjet->masterthread->RgbtSize = uint(lst.size());
1091 }
1092 MathmodRef->RootObjet.CurrentTreestruct.Noise = noise1;
1093 MathmodRef->RootObjet.CurrentTreestruct.RGBT = result.split(";", QString::SkipEmptyParts);
1094 }
1095
LoadPigment(const QJsonObject & QObj,const ModelType & opt)1096 void DrawingOptions::LoadPigment(const QJsonObject &QObj,
1097 const ModelType &opt)
1098 {
1099 QString noise = "";
1100 QJsonArray tmp;
1101 QString strtmp = QObj["Gradient"].toString();
1102 noise = QObj["Noise"].toString();
1103 QJsonArray lst = QObj["Colors"].toArray();
1104 QString result = "";
1105 int VRgbtSize = 0;
1106 for (int j = 0; j < lst.size(); j++)
1107 {
1108 tmp = (lst[j].toObject())["Color"].toObject()["Vrgba"].toArray();
1109 for (int k = 0; k < tmp.count(); k++)
1110 {
1111 result += tmp[k].toString() + ";";
1112 VRgbtSize++;
1113 }
1114 }
1115 strtmp.replace("\n", "");
1116 strtmp.replace("\t", "");
1117 strtmp.replace(" ", "");
1118 noise.replace("\n", "");
1119 noise.replace("\t", "");
1120 noise.replace(" ", "");
1121 result.replace("\n", "");
1122 result.replace("\t", "");
1123 result.replace(" ", "");
1124 if (opt == ISO_TYPE)
1125 {
1126 MathmodRef->IsoObjet->masterthread->Gradient = strtmp.toStdString();
1127 MathmodRef->IsoObjet->masterthread->VRgbt = result.toStdString();
1128 MathmodRef->IsoObjet->masterthread->Noise = noise.toStdString();
1129 MathmodRef->IsoObjet->masterthread->VRgbtSize = uint(VRgbtSize);
1130 }
1131 else if (opt == PAR_TYPE || opt == PAR_4D_TYPE)
1132 {
1133 MathmodRef->ParObjet->masterthread->Gradient = strtmp.toStdString();
1134 MathmodRef->ParObjet->masterthread->VRgbt = result.toStdString();
1135 MathmodRef->ParObjet->masterthread->Noise = noise.toStdString();
1136 MathmodRef->ParObjet->masterthread->VRgbtSize = uint(VRgbtSize);
1137 }
1138 MathmodRef->RootObjet.CurrentTreestruct.Noise = noise;
1139 MathmodRef->RootObjet.CurrentTreestruct.VRGBT =
1140 result.split(";", QString::SkipEmptyParts);
1141 }
1142
ShowJsonModel(const QJsonObject & Jobj,int textureIndex)1143 void DrawingOptions::ShowJsonModel(const QJsonObject &Jobj, int textureIndex)
1144 {
1145 QJsonObject QObj, QIso, QPar;
1146 QJsonObject QTextureObj, QPigmentObj;
1147 bool loadtext, loadpigm;
1148 QJsonDocument document;
1149 if (textureIndex != -1)
1150 {
1151 if (textureIndex < 1000)
1152 QTextureObj = MathmodRef->collection.JTextures[textureIndex]
1153 .toObject()["Texture"]
1154 .toObject();
1155 else
1156 QPigmentObj = MathmodRef->collection.JPigments[textureIndex - 1000]
1157 .toObject()["Pigment"]
1158 .toObject();
1159 }
1160 else
1161 {
1162 if (Jobj["Texture"].isObject())
1163 QTextureObj = Jobj["Texture"].toObject();
1164
1165 if (Jobj["Pigment"].isObject())
1166 QPigmentObj = Jobj["Pigment"].toObject();
1167 }
1168
1169 ShowSliders(Jobj);
1170 updateCurrentTreestruct();
1171 MathmodRef->LocalScene.componentsinfos.ParisoCondition.clear();
1172 MathmodRef->LocalScene.componentsinfos.hsv.clear();
1173 if (Jobj["ParIso"].isArray())
1174 {
1175 QJsonArray listeObj = Jobj["ParIso"].toArray();
1176 QJsonArray listeIsoObj;
1177 QJsonArray listeParObj;
1178 for (int i = 0; i < listeObj.size(); i++)
1179 if ((listeObj[i].toObject())["Iso3D"].isObject())
1180 listeIsoObj.append(listeObj[i].toObject());
1181 else
1182 listeParObj.append(listeObj[i].toObject());
1183 // Right now, we only support pariso object with 1 Iso3D and 1 Param3D objects.
1184 if (listeParObj.size() > 0)
1185 QPar = listeParObj[0].toObject();
1186 if (listeIsoObj.size() > 0)
1187 QIso = listeIsoObj[0].toObject();
1188
1189 loadtext = loadpigm = false;
1190 if (QPar["Texture"].isObject())
1191 QTextureObj = QPar["Texture"].toObject();
1192 if (QPar["Pigment"].isObject())
1193 QPigmentObj = QPar["Pigment"].toObject();
1194 // Colors
1195 loadtext = MathmodRef->ParObjet->masterthread->rgbtnotnull =
1196 (QPar["Texture"].isObject() ||
1197 ((textureIndex < 1000) && (textureIndex != -1)));
1198 // Pigment
1199 loadpigm = MathmodRef->ParObjet->masterthread->vrgbtnotnull =
1200 (QPar["Pigment"].isObject() ||
1201 ((textureIndex != -1) && (textureIndex > 999)));
1202 LoadMandatoryAndOptionnalFields(QPar["Param3D"].toObject(), PAR_TYPE,
1203 loadtext, QTextureObj, loadpigm,
1204 QPigmentObj);
1205 // Save this Current Parametric Tree struct
1206 MathmodRef->RootObjet.CurrentParisoTreestruct.push_back(
1207 MathmodRef->RootObjet.CurrentTreestruct);
1208
1209 loadtext = loadpigm = false;
1210 if (QIso["Texture"].isObject())
1211 QTextureObj = QIso["Texture"].toObject();
1212 if (QIso["Pigment"].isObject())
1213 QPigmentObj = QIso["Pigment"].toObject();
1214 // Colors
1215 loadtext = MathmodRef->IsoObjet->masterthread->rgbtnotnull =
1216 (QIso["Texture"].isObject() ||
1217 ((textureIndex < 1000) && (textureIndex != -1)));
1218 // Pigment
1219 loadpigm = MathmodRef->IsoObjet->masterthread->vrgbtnotnull =
1220 (QIso["Pigment"].isObject() ||
1221 ((textureIndex != -1) && (textureIndex > 999)));
1222 LoadMandatoryAndOptionnalFields(QIso["Iso3D"].toObject(), ISO_TYPE,
1223 loadtext, QTextureObj, loadpigm,
1224 QPigmentObj);
1225 // Save this Current Isosurface Tree struct
1226 MathmodRef->RootObjet.CurrentParisoTreestruct.push_back(
1227 MathmodRef->RootObjet.CurrentTreestruct);
1228
1229 document.setObject(Jobj);
1230 MathmodRef->RootObjet.CurrentTreestruct.text = QString(document.toJson());
1231
1232 // Update the current pariso struct
1233 MathmodRef->RootObjet.CurrentJsonObject = Jobj;
1234 CurrentFormulaType = 2;
1235 /// process the new surface
1236 if (textureIndex == -1)
1237 {
1238 MathmodRef->LocalScene.componentsinfos.pariso = true;
1239 MathmodRef->ParisoObjectProcess();
1240 }
1241
1242 ui.parisogroupbox->show();
1243 }
1244 else
1245 {
1246 ui.parisogroupbox->hide();
1247 MathmodRef->LocalScene.componentsinfos.pariso = false;
1248 if (Jobj["Iso3D"].isObject())
1249 {
1250 QObj = Jobj["Iso3D"].toObject();
1251
1252 // Colors
1253 loadtext = MathmodRef->IsoObjet->masterthread->rgbtnotnull =
1254 (Jobj["Texture"].isObject() ||
1255 ((textureIndex < 1000) && (textureIndex != -1)));
1256
1257 // Pigment
1258 loadpigm = MathmodRef->IsoObjet->masterthread->vrgbtnotnull =
1259 (Jobj["Pigment"].isObject() ||
1260 ((textureIndex != -1) && (textureIndex > 999)));
1261
1262 LoadMandatoryAndOptionnalFields(QObj, ISO_TYPE, loadtext, QTextureObj,
1263 loadpigm, QPigmentObj);
1264
1265 QJsonObject Jobjtmp = Jobj;
1266 // Some keys cleaning..
1267 Jobjtmp.remove("ParIso");
1268 Jobjtmp.remove("Param3D");Jobjtmp.remove("Param3D_C");
1269 Jobjtmp.remove("Param4D");Jobjtmp.remove("Param4D_C");
1270 document.setObject(Jobjtmp);
1271 MathmodRef->RootObjet.CurrentTreestruct.text = QString(document.toJson());
1272
1273 // Update the current parametric struct
1274 MathmodRef->RootObjet.CurrentJsonObject = Jobjtmp;
1275 CurrentFormulaType = 2;
1276 /// process the new surface
1277 if (textureIndex == -1)
1278 {
1279 if (MathmodRef->RootObjet.CurrentTreestruct.fxyz.count() > 0)
1280 MathmodRef->ProcessNewIsoSurface();
1281 }
1282 else
1283 {
1284 int result = MathmodRef->ParseIso();
1285 if (result == -1)
1286 return;
1287 textureIndex < 1000
1288 ? MathmodRef->CalculateTexturePoints(1)
1289 : MathmodRef->CalculatePigmentPoints(1);
1290 MathmodRef->LocalScene.componentsinfos.Interleave=true;
1291 MathmodRef->update();
1292 }
1293 }
1294 else if (Jobj["Param3D"].isObject() || (MathmodRef->ParObjet->masterthread->param3d_C=Jobj["Param3D_C"].isObject()))
1295 {
1296 if(Jobj["Param3D"].isObject())
1297 QObj = Jobj["Param3D"].toObject();
1298 else
1299 QObj = Jobj["Param3D_C"].toObject();
1300 // Colors
1301 loadtext = MathmodRef->ParObjet->masterthread->rgbtnotnull =
1302 (Jobj["Texture"].isObject() ||
1303 ((textureIndex < 1000) && (textureIndex != -1)));
1304
1305 // Pigment
1306 loadpigm = MathmodRef->ParObjet->masterthread->vrgbtnotnull =
1307 (Jobj["Pigment"].isObject() ||
1308 ((textureIndex != -1) && (textureIndex > 999)));
1309
1310 LoadMandatoryAndOptionnalFields(QObj, PAR_TYPE, loadtext, QTextureObj,
1311 loadpigm, QPigmentObj);
1312
1313 QJsonObject Jobjtmp = Jobj;
1314 // Some keys cleaning..
1315 if(Jobj["Param3D"].isObject())
1316 Jobjtmp.remove("Param3D_C");
1317 else
1318 Jobjtmp.remove("Param3D");
1319 Jobjtmp.remove("ParIso");
1320 Jobjtmp.remove("Iso3D");
1321 Jobjtmp.remove("Param4D");
1322
1323 QJsonDocument document;
1324 document.setObject(Jobjtmp);
1325 MathmodRef->RootObjet.CurrentTreestruct.text = QString(document.toJson());
1326
1327 MathmodRef->RootObjet.CurrentJsonObject = Jobjtmp;
1328 CurrentFormulaType = 1;
1329 /// process the new surface
1330 if (textureIndex == -1)
1331 {
1332 MathmodRef->ParametricSurfaceProcess(1);
1333 }
1334 else
1335 {
1336 int result = MathmodRef->ParsePar();
1337 if (result == -1)
1338 return;
1339 textureIndex < 1000
1340 ? MathmodRef->CalculateTexturePoints(0)
1341 : MathmodRef->CalculatePigmentPoints(0);
1342 MathmodRef->LocalScene.componentsinfos.Interleave=true;
1343 MathmodRef->update();
1344 }
1345 }
1346
1347 else if (Jobj["Param4D"].isObject() || (MathmodRef->ParObjet->masterthread->param4d_C=Jobj["Param4D_C"].isObject()))
1348 {
1349 if (Jobj["Param4D"].isObject())
1350 QObj = Jobj["Param4D"].toObject();
1351 else
1352 QObj = Jobj["Param4D_C"].toObject();
1353
1354 // Colors
1355 loadtext = MathmodRef->ParObjet->masterthread->rgbtnotnull =
1356 (Jobj["Texture"].isObject() ||
1357 ((textureIndex < 1000) && (textureIndex != -1)));
1358
1359 // Pigment
1360 loadpigm = MathmodRef->ParObjet->masterthread->vrgbtnotnull =
1361 (Jobj["Pigment"].isObject() ||
1362 ((textureIndex != -1) && (textureIndex > 1000)));
1363
1364 LoadMandatoryAndOptionnalFields(QObj, PAR_4D_TYPE, loadtext, QTextureObj,
1365 loadpigm, QPigmentObj);
1366
1367 QJsonObject Jobjtmp = Jobj;
1368 // Some keys cleaning..
1369 if (Jobj["Param4D"].isObject())
1370 Jobjtmp.remove("Param4D_C");
1371 else
1372 Jobjtmp.remove("Param4D");
1373 Jobjtmp.remove("Iso3D");
1374 Jobjtmp.remove("Param3D");
1375
1376 QJsonDocument document;
1377 document.setObject(Jobjtmp);
1378 MathmodRef->RootObjet.CurrentTreestruct.text = QString(document.toJson());
1379
1380 MathmodRef->RootObjet.CurrentJsonObject = Jobjtmp;
1381 CurrentFormulaType = 3;
1382
1383 /// process the new surface
1384 if (textureIndex == -1)
1385 {
1386 MathmodRef->ParametricSurfaceProcess(3);
1387 }
1388 else
1389 {
1390 int result = MathmodRef->ParsePar();
1391 if (result == -1)
1392 return;
1393 textureIndex < 1000
1394 ? MathmodRef->CalculateTexturePoints(0)
1395 : MathmodRef->CalculatePigmentPoints(0);
1396 MathmodRef->LocalScene.componentsinfos.Interleave=true;
1397 MathmodRef->update();
1398 }
1399 }
1400 }
1401 }
1402
updateCurrentTreestruct()1403 void DrawingOptions::updateCurrentTreestruct()
1404 {
1405 // Initialize the current Object struct
1406 MathmodRef->RootObjet.CurrentTreestruct
1407 .fw = MathmodRef->RootObjet.CurrentTreestruct
1408 .fx = MathmodRef->RootObjet.CurrentTreestruct
1409 .fy = MathmodRef->RootObjet.CurrentTreestruct.fz =
1410 MathmodRef->RootObjet.CurrentTreestruct
1411 .Cnd = MathmodRef->RootObjet.CurrentTreestruct
1412 .RGBT = MathmodRef->RootObjet.CurrentTreestruct.Const =
1413 MathmodRef->RootObjet.CurrentTreestruct
1414 .Funct = MathmodRef->RootObjet.CurrentTreestruct.VRGBT =
1415 MathmodRef->RootObjet.CurrentTreestruct
1416 .Gradient = MathmodRef->RootObjet.CurrentTreestruct.fxyz =
1417 MathmodRef->RootObjet.CurrentTreestruct
1418 .umin = MathmodRef->RootObjet.CurrentTreestruct.umax =
1419 MathmodRef->RootObjet.CurrentTreestruct
1420 .vmin = MathmodRef->RootObjet.CurrentTreestruct.vmax =
1421 MathmodRef->RootObjet.CurrentTreestruct
1422 .xmin = MathmodRef->RootObjet.CurrentTreestruct
1423 .xmax = MathmodRef->RootObjet
1424 .CurrentTreestruct.ymin =
1425 MathmodRef->RootObjet.CurrentTreestruct.ymax =
1426 MathmodRef->RootObjet.CurrentTreestruct.zmin = MathmodRef->RootObjet
1427 .CurrentTreestruct.zmax = MathmodRef->RootObjet.CurrentTreestruct.tmin = MathmodRef->RootObjet
1428 .CurrentTreestruct.tmax = MathmodRef->RootObjet
1429 .CurrentTreestruct.name = MathmodRef->RootObjet
1430 .CurrentTreestruct.Component = MathmodRef->RootObjet
1431 .CurrentTreestruct.Grid = QStringList();
1432 MathmodRef->RootObjet.CurrentTreestruct.Noise =
1433 MathmodRef->RootObjet.CurrentTreestruct.text = "";
1434 MathmodRef->RootObjet.CurrentTreestruct.type = UNDEFINED_TYPE;
1435 // Initialize the current JSON Object
1436 MathmodRef->RootObjet.CurrentJsonObject = QJsonObject();
1437 // Initialize the Current Pariso Trees truct
1438 MathmodRef->RootObjet.CurrentParisoTreestruct.clear();
1439 }
1440
1441
MandatoryParFieldprocess(const QJsonObject & QObj,const MandatoryParField & idx,const ModelType & mod)1442 void DrawingOptions::MandatoryParFieldprocess(const QJsonObject &QObj,
1443 const MandatoryParField &idx,
1444 const ModelType &mod)
1445 {
1446 QString result, arg = MandatoryParFieldToQString(idx);
1447 QJsonArray lst;
1448
1449 lst = QObj[arg].toArray();
1450 ObjArrayToString(lst, result);
1451 switch (idx)
1452 {
1453 case PAR_FX:
1454 MathmodRef->ParObjet->masterthread->expression_X =
1455 result.toStdString();
1456 MathmodRef->ParObjet->masterthread->componentsNumber =
1457 uint(lst.size());
1458 MathmodRef->RootObjet.CurrentTreestruct.fx =
1459 result.split(";", QString::SkipEmptyParts);
1460 break;
1461 case PAR_FY:
1462 MathmodRef->ParObjet->masterthread->expression_Y =
1463 result.toStdString();
1464 MathmodRef->ParObjet->masterthread->expression_YSize =
1465 lst.size();
1466 MathmodRef->RootObjet.CurrentTreestruct.fy =
1467 result.split(";", QString::SkipEmptyParts);
1468 break;
1469 case PAR_FZ:
1470 MathmodRef->ParObjet->masterthread->expression_Z =
1471 result.toStdString();
1472 MathmodRef->ParObjet->masterthread->expression_ZSize =
1473 lst.size();
1474 MathmodRef->RootObjet.CurrentTreestruct.fz =
1475 result.split(";", QString::SkipEmptyParts);
1476 break;
1477 case PAR_FW:
1478 if (mod == PAR_4D_TYPE)
1479 {
1480 MathmodRef->ParObjet->masterthread->expression_W =
1481 result.toStdString();
1482 MathmodRef->RootObjet.CurrentTreestruct.fw =
1483 result.split(";", QString::SkipEmptyParts);
1484 }
1485 break;
1486 case PAR_UMIN:
1487 MathmodRef->ParObjet->masterthread->inf_u =
1488 result.toStdString();
1489 MathmodRef->RootObjet.CurrentTreestruct.umin =
1490 result.split(";", QString::SkipEmptyParts);
1491 break;
1492 case PAR_UMAX:
1493 MathmodRef->ParObjet->masterthread->sup_u =
1494 result.toStdString();
1495 MathmodRef->RootObjet.CurrentTreestruct.umax =
1496 result.split(";", QString::SkipEmptyParts);
1497 break;
1498 case PAR_VMAX:
1499 MathmodRef->ParObjet->masterthread->sup_v =
1500 result.toStdString();
1501 MathmodRef->RootObjet.CurrentTreestruct.vmax =
1502 result.split(";", QString::SkipEmptyParts);
1503 break;
1504 case PAR_VMIN:
1505 MathmodRef->ParObjet->masterthread->inf_v =
1506 result.toStdString();
1507 MathmodRef->RootObjet.CurrentTreestruct.vmin =
1508 result.split(";", QString::SkipEmptyParts);
1509 break;
1510 case PAR_COMP:
1511 MathmodRef->RootObjet.CurrentTreestruct.Component =
1512 result.split(";", QString::SkipEmptyParts);
1513 break;
1514 case PAR_NAME:
1515 MathmodRef->RootObjet.CurrentTreestruct.name =
1516 result.split(";", QString::SkipEmptyParts);
1517 break;
1518 }
1519 }
1520
1521
MandatoryIsoFieldprocess(const QJsonObject & QObj,const MandatoryIsoField & idx)1522 void DrawingOptions::MandatoryIsoFieldprocess(const QJsonObject &QObj,
1523 const MandatoryIsoField &idx)
1524 {
1525 QString result, arg = MandatoryIsoFieldToQString(idx);
1526 QJsonArray lst;
1527
1528 lst = QObj[arg].toArray();
1529 ObjArrayToString(lst, result);
1530 switch (idx)
1531 {
1532 case ISO_FXYZ:
1533 MathmodRef->IsoObjet->masterthread->ImplicitFunction =
1534 result.toStdString();
1535 MathmodRef->IsoObjet->masterthread->componentsNumber =
1536 uint(lst.size());
1537 MathmodRef->RootObjet.CurrentTreestruct.fxyz =
1538 result.split(";", QString::SkipEmptyParts);
1539 break;
1540 case ISO_XMAX:
1541 MathmodRef->IsoObjet->masterthread->XlimitSup =
1542 result.toStdString();
1543 MathmodRef->RootObjet.CurrentTreestruct.xmax =
1544 result.split(";", QString::SkipEmptyParts);
1545 break;
1546 case ISO_YMAX:
1547 MathmodRef->IsoObjet->masterthread->YlimitSup =
1548 result.toStdString();
1549 MathmodRef->RootObjet.CurrentTreestruct.ymax =
1550 result.split(";", QString::SkipEmptyParts);
1551 break;
1552 case ISO_ZMAX:
1553 MathmodRef->IsoObjet->masterthread->ZlimitSup =
1554 result.toStdString();
1555 MathmodRef->RootObjet.CurrentTreestruct.zmax =
1556 result.split(";", QString::SkipEmptyParts);
1557 break;
1558 case ISO_XMIN:
1559 MathmodRef->IsoObjet->masterthread->XlimitInf =
1560 result.toStdString();
1561 MathmodRef->RootObjet.CurrentTreestruct.xmin =
1562 result.split(";", QString::SkipEmptyParts);
1563 break;
1564 case ISO_YMIN:
1565 MathmodRef->IsoObjet->masterthread->YlimitInf =
1566 result.toStdString();
1567 MathmodRef->RootObjet.CurrentTreestruct.ymin =
1568 result.split(";", QString::SkipEmptyParts);
1569 break;
1570 case ISO_ZMIN:
1571 MathmodRef->IsoObjet->masterthread->ZlimitInf =
1572 result.toStdString();
1573 MathmodRef->RootObjet.CurrentTreestruct.zmin =
1574 result.split(";", QString::SkipEmptyParts);
1575 break;
1576 case ISO_COMP:
1577 MathmodRef->RootObjet.CurrentTreestruct.Component =
1578 result.split(";", QString::SkipEmptyParts);
1579 break;
1580 case ISO_NAME:
1581 MathmodRef->RootObjet.CurrentTreestruct.name =
1582 result.split(";", QString::SkipEmptyParts);
1583 break;
1584 }
1585 }
1586
OptionalIsoScriptFieldprocess(const QJsonObject & QObj,OptionnalIsoScriptFIELD idx)1587 void DrawingOptions::OptionalIsoScriptFieldprocess(
1588 const QJsonObject &QObj, OptionnalIsoScriptFIELD idx)
1589 {
1590 QString result, arg = "";
1591 QJsonArray lst;
1592 bool argnotnull = false;
1593 switch (idx)
1594 {
1595 case ISO_VECT:
1596 arg = "Vect";
1597 argnotnull = MathmodRef->IsoObjet->masterthread->vectnotnull =
1598 QObj[arg].isArray();
1599 break;
1600 case ISO_GRID:
1601 arg = "Grid";
1602 argnotnull = MathmodRef->IsoObjet->masterthread->gridnotnull =
1603 QObj[arg].isArray();
1604 break;
1605 case ISO_CND:
1606 arg = "Cnd";
1607 argnotnull = MathmodRef->IsoObjet->masterthread->cndnotnull =
1608 QObj[arg].isArray();
1609 break;
1610 case ISO_CONST:
1611 arg = "Const";
1612 argnotnull = MathmodRef->IsoObjet->masterthread->constnotnull =
1613 QObj[arg].isArray();
1614 break;
1615 case ISO_FUNCT:
1616 arg = "Funct";
1617 argnotnull = MathmodRef->IsoObjet->masterthread->functnotnull =
1618 QObj[arg].isArray();
1619 break;
1620 }
1621 if (argnotnull)
1622 {
1623 lst = QObj[arg].toArray();
1624 ObjArrayToString(lst, result);
1625 }
1626 switch (idx)
1627 {
1628 case ISO_VECT:
1629 if (argnotnull)
1630 {
1631 MathmodRef->IsoObjet->masterthread->vect.clear();
1632 for (int j = 0; j < lst.size(); j++)
1633 MathmodRef->IsoObjet->masterthread->vect.push_back(
1634 (lst[j].toString()).toUInt());
1635 MathmodRef->IsoObjet->masterthread->Vect =
1636 result.toStdString();
1637 MathmodRef->RootObjet.CurrentTreestruct.Vect =
1638 result.split(";", QString::SkipEmptyParts);
1639 }
1640 else
1641 {
1642 MathmodRef->IsoObjet->masterthread->Vect = "";
1643 }
1644 break;
1645 case ISO_GRID:
1646 if (argnotnull)
1647 {
1648 MathmodRef->IsoObjet->masterthread->grid.clear();
1649 for (int j = 0; j < lst.size(); j++)
1650 MathmodRef->IsoObjet->masterthread->grid.push_back(
1651 (lst[j].toString()).toUInt());
1652 MathmodRef->IsoObjet->masterthread->Grid =
1653 result.toStdString();
1654 MathmodRef->RootObjet.CurrentTreestruct.Grid =
1655 result.split(";", QString::SkipEmptyParts);
1656 }
1657 else
1658 {
1659 MathmodRef->IsoObjet->masterthread->Grid = "";
1660 }
1661 break;
1662 case ISO_CND:
1663 if (argnotnull)
1664 {
1665 MathmodRef->IsoObjet->masterthread->Condition = result.toStdString();
1666 for(int i=0; i<lst.size(); i++)
1667 MathmodRef->LocalScene.componentsinfos.ParisoCondition.push_back((lst[i].toString()).replace(" ", "")=="");
1668 MathmodRef->RootObjet.CurrentTreestruct.Cnd = result.split(";");
1669 }
1670 else
1671 {
1672 for(int i=0; i<lst.size(); i++)
1673 MathmodRef->LocalScene.componentsinfos.ParisoCondition.push_back(false);
1674 MathmodRef->IsoObjet->masterthread->Condition = "";
1675 }
1676 break;
1677 case ISO_FUNCT:
1678 if (argnotnull)
1679 {
1680 MathmodRef->IsoObjet->masterthread->Funct = result.toStdString();
1681 MathmodRef->IsoObjet->masterthread->FunctSize = uint(lst.size());
1682 MathmodRef->RootObjet.CurrentTreestruct.Funct = result.split(";", QString::SkipEmptyParts);
1683 }
1684 else
1685 {
1686 MathmodRef->IsoObjet->masterthread->Funct = "";
1687 MathmodRef->IsoObjet->masterthread->FunctSize = 0;
1688 }
1689 break;
1690 case ISO_CONST:
1691 if (argnotnull)
1692 {
1693 MathmodRef->IsoObjet->masterthread->Const =
1694 result.toStdString();
1695 MathmodRef->IsoObjet->masterthread->ConstSize =
1696 uint(lst.size());
1697 MathmodRef->RootObjet.CurrentTreestruct.Const =
1698 result.split(";", QString::SkipEmptyParts);
1699 }
1700 else
1701 {
1702 MathmodRef->IsoObjet->masterthread->Const = "";
1703 MathmodRef->IsoObjet->masterthread->ConstSize = 0;
1704 }
1705 break;
1706 }
1707 }
1708
OptionalParScriptFieldprocess(const QJsonObject & QObj,OptionnalParScriptFIELD idx)1709 void DrawingOptions::OptionalParScriptFieldprocess(
1710 const QJsonObject &QObj, OptionnalParScriptFIELD idx)
1711 {
1712 QString result, arg = "";
1713 QJsonArray lst;
1714 bool argnotnull = false;
1715 switch (idx)
1716 {
1717 case PAR_VECT:
1718 arg = "Vect";
1719 argnotnull = MathmodRef->ParObjet->masterthread->vectnotnull =
1720 QObj[arg].isArray();
1721 break;
1722 case PAR_GRID:
1723 arg = "Grid";
1724 argnotnull = MathmodRef->ParObjet->masterthread->gridnotnull =
1725 QObj[arg].isArray();
1726 break;
1727 case PAR_CONST:
1728 arg = "Const";
1729 argnotnull = MathmodRef->ParObjet->masterthread->constnotnull =
1730 QObj[arg].isArray();
1731 break;
1732 case PAR_FUNCT:
1733 arg = "Funct";
1734 argnotnull = MathmodRef->ParObjet->masterthread->functnotnull =
1735 QObj[arg].isArray();
1736 break;
1737 case PAR_CND:
1738 arg = "Cnd";
1739 argnotnull = MathmodRef->ParObjet->masterthread->cndnotnull =
1740 QObj[arg].isArray();
1741 break;
1742 }
1743 if (argnotnull)
1744 {
1745 lst = QObj[arg].toArray();
1746 ObjArrayToString(lst, result);
1747 }
1748 switch (idx)
1749 {
1750 case PAR_VECT:
1751 if (argnotnull)
1752 {
1753 MathmodRef->ParObjet->masterthread->vect.clear();
1754 for (int j = 0; j < lst.size(); j++)
1755 MathmodRef->ParObjet->masterthread->vect.push_back(
1756 (lst[j].toString()).toUInt());
1757 MathmodRef->ParObjet->masterthread->Vect =
1758 result.toStdString();
1759 MathmodRef->RootObjet.CurrentTreestruct.Vect =
1760 result.split(";", QString::SkipEmptyParts);
1761 }
1762 else
1763 {
1764 MathmodRef->ParObjet->masterthread->Vect = "";
1765 }
1766 break;
1767 case PAR_GRID:
1768 if (argnotnull)
1769 {
1770 MathmodRef->ParObjet->masterthread->grid.clear();
1771 for (int j = 0; j < lst.size(); j++)
1772 MathmodRef->ParObjet->masterthread->grid.push_back(
1773 (lst[j].toString()).toUInt());
1774 MathmodRef->ParObjet->masterthread->Grid =
1775 result.toStdString();
1776 MathmodRef->RootObjet.CurrentTreestruct.Grid =
1777 result.split(";", QString::SkipEmptyParts);
1778 }
1779 else
1780 {
1781 MathmodRef->ParObjet->masterthread->Grid = "";
1782 }
1783 break;
1784 case PAR_CND:
1785 if (argnotnull)
1786 {
1787 MathmodRef->ParObjet->masterthread->expression_CND = result.toStdString();
1788 for(int i=0; i<lst.size(); i++)
1789 MathmodRef->LocalScene.componentsinfos.ParisoCondition.push_back((lst[i].toString()).replace(" ", "") == "");
1790 MathmodRef->RootObjet.CurrentTreestruct.Cnd = result.split(";");
1791 }
1792 else
1793 {
1794 for(int i=0; i<lst.size(); i++)
1795 MathmodRef->LocalScene.componentsinfos.ParisoCondition.push_back(false);
1796 MathmodRef->ParObjet->masterthread->expression_CND = "";
1797 }
1798 break;
1799 case PAR_CONST:
1800 if (argnotnull)
1801 {
1802 MathmodRef->ParObjet->masterthread->Const = result.toStdString();
1803 MathmodRef->ParObjet->masterthread->ConstSize = uint(lst.size());
1804 MathmodRef->RootObjet.CurrentTreestruct.Const = result.split(";", QString::SkipEmptyParts);
1805 }
1806 else
1807 {
1808 MathmodRef->ParObjet->masterthread->Const = "";
1809 MathmodRef->ParObjet->masterthread->ConstSize = 0;
1810 }
1811 break;
1812 case PAR_FUNCT:
1813 if (argnotnull)
1814 {
1815 MathmodRef->ParObjet->masterthread->Funct =
1816 result.toStdString();
1817 MathmodRef->ParObjet->masterthread->FunctSize =
1818 uint(lst.size());
1819 MathmodRef->RootObjet.CurrentTreestruct.Funct =
1820 result.split(";", QString::SkipEmptyParts);
1821 }
1822 else
1823 {
1824 MathmodRef->ParObjet->masterthread->Funct = "";
1825 MathmodRef->ParObjet->masterthread->FunctSize = 0;
1826 }
1827 break;
1828 }
1829 }
1830
BuildAllVect()1831 void DrawingOptions::BuildAllVect()
1832 {
1833 const OptionnalIsoScriptFIELD optiso[] = {ISO_GRID, ISO_VECT, ISO_CND, ISO_CONST, ISO_FUNCT};
1834 OptIsoFields = std::vector<OptionnalIsoScriptFIELD>(
1835 optiso, optiso + sizeof(optiso) / sizeof(OptionnalIsoScriptFIELD));
1836
1837 const OptionnalParScriptFIELD optpar[] = {PAR_GRID, PAR_VECT,PAR_CND, PAR_CONST,
1838 PAR_FUNCT
1839 };
1840 OptParFields = std::vector<OptionnalParScriptFIELD>(
1841 optpar, optpar + sizeof(optpar) / sizeof(OptionnalParScriptFIELD));
1842 const MandatoryIsoField maniso[] = {ISO_FXYZ, ISO_XMIN, ISO_XMAX,
1843 ISO_YMIN, ISO_YMAX, ISO_ZMIN,
1844 ISO_ZMAX, ISO_COMP, ISO_NAME
1845 };
1846 MandIsoFields = std::vector<MandatoryIsoField>(
1847 maniso, maniso + sizeof(maniso) / sizeof(MandatoryIsoField));
1848 const MandatoryParField manpar[] = {PAR_FX, PAR_FY, PAR_FZ, PAR_FW,
1849 PAR_UMIN, PAR_UMAX, PAR_VMIN, PAR_VMAX,
1850 PAR_COMP, PAR_NAME
1851 };
1852 MandParFields = std::vector<MandatoryParField>(
1853 manpar, manpar + sizeof(manpar) / sizeof(MandatoryParField));
1854 }
1855
JSON_choice_activated(const QString & arg1)1856 int DrawingOptions::JSON_choice_activated(const QString &arg1)
1857 {
1858 QString result;
1859 QJsonArray array = JSONMathModels["MathModels"].toArray();
1860 QJsonArray lst;
1861 QJsonObject QObj, QObj1;
1862 QJsonObject QTextureObj, QPigmentObj;
1863 bool loadtext, loadpigm;
1864 QMessageBox msgBox;
1865 updateCurrentTreestruct();
1866 MathmodRef->LocalScene.componentsinfos.ParisoCondition.clear();
1867 MathmodRef->LocalScene.componentsinfos.hsv.clear();
1868 for (int i = 0; i < array.size(); i++)
1869 {
1870 if ((QObj1 = array[i].toObject())["ParIso"].isArray() &&
1871 (QObj1)["Name"].toString() == arg1)
1872 {
1873 if (!VerifiedJsonModel((array[i].toObject())))
1874 return (0);
1875 ShowSliders(array[i].toObject());
1876 QJsonArray listeObj = QObj1["ParIso"].toArray();
1877 QJsonArray listeIsoObj;
1878 QJsonArray listeParObj;
1879 QJsonObject QPar, QIso;
1880 for (int i = 0; i < listeObj.size(); i++)
1881 if ((listeObj[i].toObject())["Iso3D"].isObject())
1882 listeIsoObj.append(listeObj[i].toObject());
1883 else
1884 listeParObj.append(listeObj[i].toObject());
1885 // Right now, we only support pariso object with 1 Iso3D and 1 Param3D objects.
1886 if (listeParObj.size() > 0)
1887 QPar = listeParObj[0].toObject();
1888 if (listeIsoObj.size() > 0)
1889 QIso = listeIsoObj[0].toObject();
1890 loadtext = loadpigm = false;
1891 if (QPar["Texture"].isObject())
1892 QTextureObj = QPar["Texture"].toObject();
1893 if (QPar["Pigment"].isObject())
1894 QPigmentObj = QPar["Pigment"].toObject();
1895 // Colors
1896 loadtext = MathmodRef->ParObjet->masterthread->rgbtnotnull =
1897 (QPar["Texture"].isObject());
1898 // Pigment
1899 loadpigm = MathmodRef->ParObjet->masterthread->vrgbtnotnull =
1900 (QPar["Pigment"].isObject());
1901 LoadMandatoryAndOptionnalFields(QPar["Param3D"].toObject(), PAR_TYPE,
1902 loadtext, QTextureObj, loadpigm,
1903 QPigmentObj);
1904 // Save this Current Parametric Tree struct
1905 MathmodRef->RootObjet.CurrentParisoTreestruct.push_back(
1906 MathmodRef->RootObjet.CurrentTreestruct);
1907 loadtext = loadpigm = false;
1908 if (QIso["Texture"].isObject())
1909 QTextureObj = QIso["Texture"].toObject();
1910 if (QIso["Pigment"].isObject())
1911 QPigmentObj = QIso["Pigment"].toObject();
1912 // Colors
1913 loadtext = MathmodRef->IsoObjet->masterthread->rgbtnotnull =
1914 (QIso["Texture"].isObject());
1915 // Pigment
1916 loadpigm = MathmodRef->IsoObjet->masterthread->vrgbtnotnull =
1917 (QIso["Pigment"].isObject());
1918 LoadMandatoryAndOptionnalFields(QIso["Iso3D"].toObject(), ISO_TYPE,
1919 loadtext, QTextureObj, loadpigm,
1920 QPigmentObj);
1921 // Save this Current Isosurface Tree struct
1922 MathmodRef->RootObjet.CurrentParisoTreestruct.push_back(
1923 MathmodRef->RootObjet.CurrentTreestruct);
1924 QJsonDocument document;
1925 document.setObject(QObj1);
1926 MathmodRef->RootObjet.CurrentTreestruct.text = QString(document.toJson());
1927 // Update the current pariso struct
1928 MathmodRef->RootObjet.CurrentJsonObject = QObj1;
1929 CurrentFormulaType = 2;
1930 /// process the new surface
1931 MathmodRef->LocalScene.componentsinfos.ParisoCurrentComponentIndex = 0;
1932 MathmodRef->LocalScene.componentsinfos.ParisoNbComponents =2;
1933 MathmodRef->LocalScene.componentsinfos.pariso = true;
1934 MathmodRef->ParisoObjectProcess();
1935 ui.parisogroupbox->show();
1936 return (1);
1937 }
1938 else
1939 {
1940 MathmodRef->LocalScene.componentsinfos.pariso = false;
1941 MathmodRef->LocalScene.componentsinfos.ParisoNbComponents = 1;
1942 MathmodRef->LocalScene.componentsinfos.ParisoCurrentComponentIndex = 0;
1943 ui.parisogroupbox->hide();
1944 if ((QObj1 = array[i].toObject())["Iso3D"].isObject() &&
1945 (QObj = (array[i].toObject())["Iso3D"].toObject())["Name"]
1946 .toArray()[0]
1947 .toString() == arg1)
1948 {
1949 if (!VerifiedJsonModel((array[i].toObject())))
1950 return (0);
1951 ShowSliders(array[i].toObject());
1952 // Colors
1953 if ((loadtext = MathmodRef->IsoObjet->masterthread->rgbtnotnull = QObj1["Texture"].isObject()))
1954 QTextureObj = QObj1["Texture"].toObject();
1955 // Pigment
1956 if ((loadpigm = MathmodRef->IsoObjet->masterthread->vrgbtnotnull = QObj1["Pigment"].isObject()))
1957 QPigmentObj = QObj1["Pigment"].toObject();
1958 LoadMandatoryAndOptionnalFields(QObj, ISO_TYPE, loadtext, QTextureObj,
1959 loadpigm, QPigmentObj);
1960 QJsonDocument document;
1961 document.setObject(array[i].toObject());
1962 MathmodRef->RootObjet.CurrentTreestruct.text =
1963 QString(document.toJson());
1964 // Update the current parametric struct
1965 // MathmodRef->RootObjet.CurrentIsoStruct =
1966 // MathmodRef->RootObjet.IsoTable[indextable];
1967 MathmodRef->RootObjet.CurrentJsonObject = array[i].toObject();
1968 CurrentFormulaType = 2;
1969 /// process the new surface
1970 MathmodRef->ProcessNewIsoSurface();
1971 return (2);
1972 }
1973 else if (((array[i].toObject())["Param3D"].isObject() &&
1974 (QObj = (array[i].toObject())["Param3D"].toObject())["Name"]
1975 .toArray()[0]
1976 .toString() == arg1) ||
1977
1978 ( (MathmodRef->ParObjet->masterthread->param3d_C = (array[i].toObject())["Param3D_C"].isObject() ) &&
1979 (QObj = (array[i].toObject())["Param3D_C"].toObject())["Name"]
1980 .toArray()[0]
1981 .toString() == arg1))
1982 {
1983 if (!VerifiedJsonModel((array[i].toObject())))
1984 return (0);
1985 ShowSliders(array[i].toObject());
1986 // Colors
1987 if ((loadtext =
1988 MathmodRef->ParObjet->masterthread->rgbtnotnull =
1989 QObj1["Texture"].isObject()))
1990 QTextureObj = QObj1["Texture"].toObject();
1991 // Pigment
1992 if ((loadpigm =
1993 MathmodRef->ParObjet->masterthread->vrgbtnotnull =
1994 QObj1["Pigment"].isObject()))
1995 QPigmentObj = QObj1["Pigment"].toObject();
1996 LoadMandatoryAndOptionnalFields(QObj, PAR_TYPE, loadtext, QTextureObj,
1997 loadpigm, QPigmentObj);
1998 QJsonDocument document;
1999 document.setObject(array[i].toObject());
2000 MathmodRef->RootObjet.CurrentTreestruct.text =
2001 QString(document.toJson());
2002
2003 MathmodRef->RootObjet.CurrentJsonObject = array[i].toObject();
2004 CurrentFormulaType = 1;
2005 /// process the new surface
2006 MathmodRef->ParametricSurfaceProcess(1);
2007 return (1);
2008 }
2009 else if (((array[i].toObject())["Param4D"].isObject() &&
2010 (QObj = (array[i].toObject())["Param4D"].toObject())["Name"]
2011 .toArray()[0]
2012 .toString() == arg1) ||
2013
2014 ((MathmodRef->ParObjet->masterthread->param4d_C = (array[i].toObject())["Param4D_C"].isObject()) &&
2015 (QObj = (array[i].toObject())["Param4D_C"].toObject())["Name"]
2016 .toArray()[0]
2017 .toString() == arg1))
2018 {
2019 if (!VerifiedJsonModel((array[i].toObject())))
2020 return (0);
2021 ShowSliders(array[i].toObject());
2022 // Colors
2023 if ((loadtext =
2024 MathmodRef->ParObjet->masterthread->rgbtnotnull =
2025 QObj1["Texture"].isObject()))
2026 QTextureObj = QObj1["Texture"].toObject();
2027 // Pigment
2028 if ((loadpigm =
2029 MathmodRef->ParObjet->masterthread->vrgbtnotnull =
2030 QObj1["Pigment"].isObject()))
2031 QPigmentObj = QObj1["Pigment"].toObject();
2032 LoadMandatoryAndOptionnalFields(QObj, PAR_4D_TYPE, loadtext,
2033 QTextureObj, loadpigm, QPigmentObj);
2034 QJsonDocument document;
2035 document.setObject(array[i].toObject());
2036 MathmodRef->RootObjet.CurrentTreestruct.text =
2037 QString(document.toJson());
2038 MathmodRef->RootObjet.CurrentJsonObject = array[i].toObject();
2039 CurrentFormulaType = 3;
2040 /// process the new surface
2041 MathmodRef->ParametricSurfaceProcess(3);
2042 return (3);
2043 }
2044 }
2045 }
2046 return (0);
2047 }
2048
LoadMandatoryAndOptionnalFields(const QJsonObject & qobj,const ModelType & mod,bool loadtext,const QJsonObject & QTextureObj,bool loadpigm,const QJsonObject & QPigmentObj)2049 void DrawingOptions::LoadMandatoryAndOptionnalFields(
2050 const QJsonObject &qobj, const ModelType &mod, bool loadtext,
2051 const QJsonObject &QTextureObj, bool loadpigm,
2052 const QJsonObject &QPigmentObj)
2053 {
2054 // We First deactivate the pariso flag
2055 MathmodRef->LocalScene.componentsinfos.pariso = false;
2056 MathmodRef->RootObjet.CurrentTreestruct.type = mod;
2057 switch (mod)
2058 {
2059 case PAR_TYPE:
2060 for (std::vector<MandatoryParField>::const_iterator it =
2061 MandParFields.begin();
2062 it != MandParFields.end(); ++it)
2063 {
2064 MandatoryParField Opt = *it;
2065 MandatoryParFieldprocess(qobj, Opt);
2066 }
2067
2068 for (std::vector<OptionnalParScriptFIELD>::const_iterator it =
2069 OptParFields.begin();
2070 it != OptParFields.end(); ++it)
2071 {
2072 OptionnalParScriptFIELD Opt = *it;
2073 OptionalParScriptFieldprocess(qobj, Opt);
2074 }
2075 break;
2076 case PAR_4D_TYPE:
2077 for (std::vector<MandatoryParField>::const_iterator it =
2078 MandParFields.begin();
2079 it != MandParFields.end(); ++it)
2080 {
2081 MandatoryParField Opt = *it;
2082 MandatoryParFieldprocess(qobj, Opt, PAR_4D_TYPE);
2083 }
2084
2085 for (std::vector<OptionnalParScriptFIELD>::const_iterator it =
2086 OptParFields.begin();
2087 it != OptParFields.end(); ++it)
2088 {
2089 OptionnalParScriptFIELD Opt = *it;
2090 OptionalParScriptFieldprocess(qobj, Opt);
2091 }
2092 break;
2093 case ISO_TYPE:
2094 for (std::vector<MandatoryIsoField>::const_iterator it =
2095 MandIsoFields.begin();
2096 it != MandIsoFields.end(); ++it)
2097 {
2098 MandatoryIsoField Opt = *it;
2099 MandatoryIsoFieldprocess(qobj, Opt);
2100 }
2101
2102 for (std::vector<OptionnalIsoScriptFIELD>::const_iterator it =
2103 OptIsoFields.begin();
2104 it != OptIsoFields.end(); ++it)
2105 {
2106 OptionnalIsoScriptFIELD Opt = *it;
2107 OptionalIsoScriptFieldprocess(qobj, Opt);
2108 }
2109 break;
2110 case PARISO_TYPE:
2111 break;
2112 case UNDEFINED_TYPE:
2113 break;
2114 }
2115 // Colors
2116 if (loadtext)
2117 {
2118 LoadTexture(QTextureObj, mod);
2119 }
2120 // Pigment
2121 if (loadpigm)
2122 {
2123 LoadPigment(QPigmentObj, mod);
2124 }
2125 }
2126
on_choice_activated(const QString & arg)2127 int DrawingOptions::on_choice_activated(const QString &arg)
2128 {
2129 // Draw here
2130 int Result = JSON_choice_activated(arg);
2131 if (Result != 0)
2132 {
2133 UpdateScriptEditorAndTreeObject();
2134 }
2135
2136 return Result;
2137 }
2138
Run_JsonObject_activeted()2139 void DrawingOptions::Run_JsonObject_activeted()
2140 {
2141 QJsonParseError err;
2142 QString script =
2143 ui.ParamEdit->toPlainText()
2144 .trimmed()
2145 .replace("\n", "")
2146 .replace("\t", "")
2147 .replace("DOTSYMBOL", Parameters->dotsymbol.toStdString().c_str());
2148 QJsonDocument doc = QJsonDocument::fromJson(script.toUtf8(), &err);
2149 if (err.error)
2150 {
2151 ShowErrorMessage(err, script);
2152 return;
2153 }
2154
2155 // Draw here
2156 DrawJsonModel(doc.object());
2157 }
2158
slot_comboBox18_3_activated(const QString & arg1)2159 void DrawingOptions::slot_comboBox18_3_activated(const QString &arg1)
2160 {
2161 if (arg1 == "Triangles")
2162 {
2163 MathmodRef->slot_triangles_clicked();
2164 return;
2165 }
2166 if (arg1 == "Normales")
2167 {
2168 MathmodRef->draw_norm_clicked();
2169 return;
2170 }
2171 if (arg1 == "Infos")
2172 {
2173 MathmodRef->iso_infos();
2174 return;
2175 }
2176 if (arg1 == "Fill")
2177 {
2178 MathmodRef->fill();
2179 return;
2180 }
2181 if (arg1 == "Mesh")
2182 {
2183 MathmodRef->Mesh();
2184 return;
2185 }
2186 }
2187
slot_checkBox_clicked()2188 void DrawingOptions::slot_checkBox_clicked()
2189 {
2190 MathmodRef->slot_uv_clicked();
2191 }
2192
LoadNewFileModels(bool upd)2193 void DrawingOptions::LoadNewFileModels(bool upd)
2194 {
2195 QString mathmodcollection;
2196
2197 mathmodcollection = QFileDialog::getOpenFileName(
2198 nullptr, tr("Load Json Script"), "", tr("Json (*.js)"));
2199 if (upd)
2200 {
2201 ui.ObjectClasse->clear();
2202 for (int i = 0; i < MathmodRef->RootObjet.MyJsonObjectSelection.count();
2203 i++)
2204 MathmodRef->RootObjet.MyJsonObjectSelection.removeAt(i);
2205 MathmodRef->RootObjet.NbIsoStruct = MathmodRef->RootObjet.NbParamStruct = 0;
2206 MathmodRef->collection.JPar.clear();
2207 MathmodRef->collection.JIso.clear();
2208 }
2209 MathmodRef->RootObjet.ReadJsonFile(mathmodcollection, JSONMathModels);
2210 QJsonArray array = JSONMathModels["MathModels"].toArray();
2211 QStringList lst;
2212 QString a;
2213 QJsonObject jsobj;
2214
2215 for (int i = 0; i < array.size(); i++)
2216 {
2217 if ((array[i].toObject())["Iso3D"].isObject())
2218 {
2219 jiso newjiso;
2220 jsobj = (array[i].toObject())["Iso3D"].toObject();
2221 newjiso.read(jsobj);
2222 MathmodRef->collection.JIso.append(newjiso);
2223 a = (jsobj)["Name"].toArray()[0].toString();
2224 lst.append(a);
2225 }
2226 else if ((array[i].toObject())["Param3D"].isObject())
2227 {
2228 jpar newjpar;
2229 jsobj = ((array[i].toObject())["Param3D"].toObject());
2230 newjpar.read(jsobj);
2231 MathmodRef->collection.JPar.append(newjpar);
2232 a = (jsobj)["Name"].toArray()[0].toString();
2233 lst.append(a);
2234 }
2235 else if ((array[i].toObject())["Param4D"].isObject())
2236 {
2237 jpar newjpar;
2238 jsobj = ((array[i].toObject())["Param4D"].toObject());
2239 newjpar.read(jsobj);
2240 MathmodRef->collection.JPar.append(newjpar);
2241 a = (jsobj)["Name"].toArray()[0].toString();
2242 lst.append(a);
2243 }
2244 else if ((array[i].toObject())["Param3D_C"].isObject())
2245 {
2246 jpar newjpar;
2247 jsobj = ((array[i].toObject())["Param3D_C"].toObject());
2248 newjpar.read(jsobj);
2249 MathmodRef->collection.JPar.append(newjpar);
2250 a = (jsobj)["Name"].toArray()[0].toString();
2251 lst.append(a);
2252 }
2253 else if ((array[i].toObject())["Param4D_C"].isObject())
2254 {
2255 jpar newjpar;
2256 jsobj = ((array[i].toObject())["Param4D_C"].toObject());
2257 newjpar.read(jsobj);
2258 MathmodRef->collection.JPar.append(newjpar);
2259 a = (jsobj)["Name"].toArray()[0].toString();
2260 lst.append(a);
2261 }
2262 }
2263 lst.insert(0, "Examples (" + QString::number(lst.count()) + ")");
2264 // Load the script containing isosurface and parametric formulas:
2265 ui.choice->clear();
2266 ui.choice->insertItems(0, lst);
2267 AddListModels(upd);
2268 }
2269
LoadK3DSurfScript(QString filename,int type)2270 void DrawingOptions::LoadK3DSurfScript(QString filename, int type)
2271 {
2272 int current = 0, currentfunction = 0, separator = 0;
2273 QString name, line, IsoFct, Xfct, Yfct, Zfct, xlimit, ylimit, zlimit, ulimit,
2274 vlimit, xmin, xmax, ymin, ymax, zmin, zmax, umin, umax, vmin, vmax,
2275 condition, Au, Bu, Cu, Duv, Euv, Fuv, comments, fctcomts;
2276 int EquationsNumber = 0;
2277 QString JsonString = "";
2278 int FctType = -1;
2279 filename = QFileDialog::getOpenFileName(
2280 nullptr, QObject::tr("Open K3DSurf script File"), "",
2281 QObject::tr("K3DS (*.k3ds)"));
2282 QFile file(filename);
2283 if (type == 1)
2284 {
2285 if (file.open(QIODevice::ReadOnly | QIODevice::Text))
2286 {
2287 QTextStream stream(&file);
2288 while (!stream.atEnd())
2289 {
2290 line = (stream.readLine()).trimmed(); // line of text excluding '\n'
2291 if (line.contains("F():"))
2292 {
2293 currentfunction = 1;
2294 FctType = 0;
2295 }
2296 else if (line.contains("[x]:"))
2297 currentfunction = 2;
2298 else if (line.contains("[y]:"))
2299 currentfunction = 3;
2300 else if (line.contains("[z]:"))
2301 currentfunction = 4;
2302
2303 else if (line.contains("X():"))
2304 {
2305 currentfunction = 21;
2306 FctType = 1;
2307 }
2308 else if (line.contains("Y():"))
2309 currentfunction = 22;
2310 else if (line.contains("Z():"))
2311 currentfunction = 23;
2312 else if (line.contains("[u]:"))
2313 currentfunction = 24;
2314 else if (line.contains("[v]:"))
2315 currentfunction = 25;
2316
2317 else if (line.contains("Cnd:"))
2318 currentfunction = 5;
2319 else if (line.contains("A[u]:"))
2320 currentfunction = 6;
2321 else if (line.contains("B[u]:"))
2322 currentfunction = 7;
2323 else if (line.contains("C[u]:"))
2324 currentfunction = 8;
2325 else if (line.contains("D[u,v]:"))
2326 currentfunction = 9;
2327 else if (line.contains("E[u,v]:"))
2328 currentfunction = 10;
2329 else if (line.contains("F[u,v]:"))
2330 currentfunction = 11;
2331 else if (line.contains("#"))
2332 currentfunction = 12;
2333 else if (line.contains("/*"))
2334 currentfunction = 13;
2335 else if (line.contains("*/"))
2336 currentfunction = 14;
2337 else if (line.contains("Name:"))
2338 currentfunction = 15;
2339 else if (line.contains(";"))
2340 currentfunction = 16;
2341 else
2342 currentfunction = 18;
2343 switch (currentfunction)
2344 {
2345 case 1:
2346 IsoFct += line.remove(0, 4);
2347 current = 1;
2348 break;
2349
2350 case 21:
2351 Xfct += line.replace("X():", "");
2352 current = 21;
2353 break;
2354 case 22:
2355 Yfct += line.replace("Y():", "");
2356 current = 22;
2357 break;
2358 case 23:
2359 Zfct += line.replace("Z():", "");
2360 current = 23;
2361 break;
2362 case 24:
2363 ulimit += line.replace("[u]:", "");
2364 current = 24;
2365 break;
2366 case 25:
2367 vlimit += line.replace("[v]:", "");
2368 current = 25;
2369 break;
2370
2371 case 2:
2372 xlimit = line.remove(0, 4);
2373 current = 2;
2374 break;
2375 case 3:
2376 ylimit = line.remove(0, 4);
2377 current = 3;
2378 break;
2379 case 4:
2380 zlimit = line.remove(0, 4);
2381 current = 4;
2382 break;
2383 case 5:
2384 condition = line.remove(0, 4);
2385 current = 5;
2386 break;
2387 case 6:
2388 Au = line.remove(0, 5);
2389 current = 6;
2390 break;
2391 case 7:
2392 Bu = line.remove(0, 5);
2393 current = 7;
2394 break;
2395 case 8:
2396 Cu = line.remove(0, 5);
2397 current = 8;
2398 break;
2399 case 9:
2400 Duv = line.remove(0, 7);
2401 current = 9;
2402 break;
2403 case 10:
2404 Euv = line.remove(0, 7);
2405 current = 10;
2406 break;
2407 case 11:
2408 Fuv = line.remove(0, 7);
2409 current = 11;
2410 break;
2411 case 12:
2412 comments += line.replace("#", "");
2413 current = 12;
2414 break;
2415 case 13:
2416 comments += line.replace("/*", "").replace("*/", "");
2417 current = 13;
2418 break;
2419 case 14:
2420 comments += line.replace("*/", "");
2421 current = 14;
2422 break;
2423 case 15:
2424 name = line.remove(0, 5);
2425 current = 15;
2426 break;
2427 case 16:
2428 // Save the equation:
2429 name = name.trimmed();
2430 if (FctType == 0)
2431 {
2432 EquationsNumber++;
2433 if (name == "")
2434 name = "_" + QString::number(EquationsNumber);
2435 xlimit = xlimit.trimmed();
2436 separator = xlimit.indexOf(",");
2437 xmin = xlimit.left(separator);
2438 xmax = xlimit.remove(xmin + ",");
2439 ylimit = ylimit.trimmed();
2440 separator = ylimit.indexOf(",");
2441 ymin = ylimit.left(separator);
2442 ymax = ylimit.remove(ymin + ",");
2443 zlimit = zlimit.trimmed();
2444 separator = zlimit.indexOf(",");
2445 zmin = zlimit.left(separator);
2446 zmax = zlimit.remove(zmin + ",");
2447 if (JsonString != "")
2448 JsonString += ",";
2449 JsonString += "{\"Iso3D\": { \
2450 \"Description \": [ \"" +
2451 comments + "\"], ";
2452 JsonString += "\"Name\": [\"" + name + "\"], ";
2453 JsonString += "\"Component\": [\"" + name + "\"], ";
2454 JsonString += "\"Fxyz\": [\"" + IsoFct.trimmed() + "\"], ";
2455 JsonString += "\"Cnd\": [\"" + condition + "\"], ";
2456 JsonString += "\"Xmin\": [\"" + xmin + "\"], ";
2457 JsonString += "\"Xmax\": [\"" + xmax + "\"], ";
2458 JsonString += "\"Ymin\": [\"" + ymin + "\"], ";
2459 JsonString += "\"Ymax\": [\"" + ymax + "\"], ";
2460 JsonString += "\"Zmin\": [\"" + zmin + "\"], ";
2461 JsonString += "\"Zmax\": [\"" + zmax + "\"] ";
2462 JsonString += "}}";
2463 }
2464
2465 else if (FctType == 1)
2466 {
2467 EquationsNumber++;
2468 if (name == "")
2469 name = "_" + QString::number(EquationsNumber);
2470
2471 ulimit = ulimit.trimmed();
2472 separator = ulimit.indexOf(",");
2473 umin = ulimit.left(separator);
2474 umax = ulimit.remove(umin + ",");
2475 vlimit = vlimit.trimmed();
2476 separator = vlimit.indexOf(",");
2477 vmin = vlimit.left(separator);
2478 vmax = vlimit.remove(vmin + ",");
2479 if (JsonString != "")
2480 JsonString += ",";
2481 JsonString += "{\"Param3D\": { \
2482 \"Description \": [ \"" +
2483 comments + "\"],";
2484 JsonString += "\"Name\": [\"" + name + "\"],";
2485 JsonString += "\"Component\": [\"" + name + "\"],";
2486 JsonString += "\"Fx\": [\"" + Xfct.trimmed() + "\"],";
2487 JsonString += "\"Fy\": [\"" + Yfct.trimmed() + "\"],";
2488 JsonString += "\"Fz\": [\"" + Zfct.trimmed() + "\"],";
2489 JsonString += "\"Cnd\": [\"" + condition + "\"],";
2490 JsonString += "\"Umin\": [\"" + umin + "\"],";
2491 JsonString += "\"Umax\": [\"" + umax + "\"],";
2492 JsonString += "\"Vmin\": [\"" + vmin + "\"],";
2493 JsonString += "\"Vmax\": [\"" + vmax + "\"]";
2494 JsonString += "}}";
2495 }
2496 current = 16;
2497 // Init all Parameters fo new formula:
2498 IsoFct = Xfct = Yfct = Zfct = name = comments = condition = "";
2499 umin = umax = vmin = vmax = xmin = xmax = ymin = ymax = zmin = zmax = "";
2500 ulimit = vlimit = xlimit = ylimit = zlimit = "";
2501 FctType = -1;
2502 break;
2503 case 18:
2504 if (current == 1)
2505 IsoFct += line;
2506 else if (current == 2)
2507 xlimit += line;
2508 else if (current == 3)
2509 ylimit += line;
2510 else if (current == 4)
2511 zlimit += line;
2512 else if (current == 21)
2513 Xfct += line;
2514 else if (current == 22)
2515 Yfct += line;
2516 else if (current == 23)
2517 Zfct += line;
2518 else if (current == 24)
2519 ulimit += line;
2520 else if (current == 25)
2521 vlimit += line;
2522 else if (current == 5)
2523 condition += line;
2524 else if (current == 6)
2525 Au += line;
2526 else if (current == 7)
2527 Bu += line;
2528 else if (current == 8)
2529 Cu += line;
2530 else if (current == 9)
2531 Duv += line;
2532 else if (current == 10)
2533 Euv += line;
2534 else if (current == 11)
2535 Fuv += line;
2536 else if (current == 12)
2537 comments += line;
2538 else if (current == 13)
2539 comments += line;
2540 else if (current == 14)
2541 comments += line;
2542 else if (current == 15)
2543 name += line;
2544 break;
2545 }
2546 }
2547 file.close();
2548 JsonString = " { \"MathModels\": [ " + JsonString + "]}";
2549 QFile f(filename.replace(".k3ds", ".js"));
2550 if (f.exists())
2551 f.remove();
2552 if (!f.open(QIODevice::ReadWrite | QIODevice::Text))
2553 {
2554 statusBar()->showMessage(tr("Could not write to %1").arg(filename),2000);
2555 return;
2556 }
2557 QTextStream t(&f);
2558 t << JsonString;
2559 f.close();
2560 }
2561 }
2562 }
2563
ChildItemTreeProperty(QTreeWidgetItem * item,QString proprty)2564 QTreeWidgetItem *DrawingOptions::ChildItemTreeProperty(QTreeWidgetItem *item,
2565 QString proprty)
2566 {
2567 int childcount = item->childCount();
2568 for (int j = 0; j < childcount; j++)
2569 {
2570 if ((item->child(j))->text(0).contains(proprty))
2571 return item->child(j);
2572 }
2573 return nullptr;
2574 }
2575
ParseItemTree(QTreeWidgetItem * item,QList<bool> & list,bool viewall)2576 void DrawingOptions::ParseItemTree(QTreeWidgetItem *item, QList<bool> &list, bool viewall)
2577 {
2578 int childcount = item->childCount();
2579 bool sel = false;
2580 bool result;
2581 for (int j = 0; j < childcount; j++)
2582 {
2583 item->child(j)->setForeground(0, QColor(255, 255, 255, 255));
2584 if (!viewall)
2585 {
2586 result = false;
2587 for (int k = 1; k < select.selectedoptions.selectedwords.count(); k++)
2588 {
2589 sel = (item->child(j))
2590 ->text(0)
2591 .contains(select.selectedoptions.selectedwords[k],
2592 (select.selectedoptions.sensitive
2593 ? Qt::CaseSensitive
2594 : Qt::CaseInsensitive));
2595 result = result || sel;
2596 list[k - 1] = (list.at(k - 1) || sel);
2597 }
2598 if (result)
2599 item->child(j)->setForeground(0, QColor(255, 0, 0, 255));
2600 }
2601 }
2602 }
2603
SearchListModels()2604 void DrawingOptions::SearchListModels()
2605 {
2606 QTreeWidgetItem *Toplevel;
2607 QTreeWidgetItem *Childlevel = nullptr;
2608 QTreeWidgetItem *SubChildlevel;
2609 int topcount = ui.ObjectClasse->topLevelItemCount();
2610 int childcount;
2611 bool sel1 = false;
2612 int searchresult = 0;
2613 // init boolean lists:
2614 for (int i = 0; i < select.selectedoptions.selectedwords.count() - 1; i++)
2615 {
2616 select.selectedoptions.namelist.append(false);
2617 select.selectedoptions.functlist.append(false);
2618 select.selectedoptions.cmpnamelist.append(false);
2619 select.selectedoptions.complist.append(false);
2620 }
2621 for (int i = 0; i < topcount; ++i)
2622 {
2623 Toplevel = ui.ObjectClasse->topLevelItem(i);
2624 childcount = Toplevel->childCount();
2625 searchresult = 0;
2626 for (int j = 0; j < childcount; j++)
2627 {
2628 sel1 = true;
2629 if (!select.selectedoptions.showall)
2630 {
2631 // init boolean lists:
2632 for (int m = 0; m < select.selectedoptions.selectedwords.count() - 1;
2633 m++)
2634 {
2635 select.selectedoptions.namelist[m] = false;
2636 select.selectedoptions.functlist[m] = false;
2637 select.selectedoptions.cmpnamelist[m] = false;
2638 select.selectedoptions.complist[m] = false;
2639 }
2640 // Search in scripts names:
2641 if (select.selectedoptions.parsenames)
2642 for (int k = 1; k < select.selectedoptions.selectedwords.count();
2643 k++)
2644 {
2645 select.selectedoptions.namelist[k - 1] =
2646 (Toplevel->child(j))
2647 ->text(0)
2648 .contains(select.selectedoptions.selectedwords[k],
2649 (select.selectedoptions.sensitive
2650 ? Qt::CaseSensitive
2651 : Qt::CaseInsensitive));
2652 }
2653 // continue searching in the functions list when needed:
2654 if (select.selectedoptions.parsefunctions &&
2655 (Childlevel = ChildItemTreeProperty(Toplevel->child(j),
2656 "Parameters")) != nullptr)
2657 if ((SubChildlevel =
2658 ChildItemTreeProperty(Childlevel, "Functions")) != nullptr)
2659 {
2660 ParseItemTree(SubChildlevel, select.selectedoptions.functlist);
2661 }
2662 // continue searching in the components names list when needed:
2663 if (select.selectedoptions.parsecmpnames &&
2664 (Childlevel = ChildItemTreeProperty(Toplevel->child(j),
2665 "Components")) != nullptr)
2666 {
2667 ParseItemTree(Childlevel, select.selectedoptions.cmpnamelist);
2668 int ct = Childlevel->childCount();
2669 for (int m = 0; m < ct; m++)
2670 ParseItemTree(Childlevel->child(m),
2671 select.selectedoptions.complist);
2672 }
2673 // now look in the search results
2674 if (select.selectedoptions.AND)
2675 {
2676 sel1 = true;
2677 for (int l = 0; l < select.selectedoptions.selectedwords.count() - 1;
2678 l++)
2679 sel1 = sel1 && (select.selectedoptions.namelist.at(l) ||
2680 select.selectedoptions.functlist.at(l) ||
2681 select.selectedoptions.cmpnamelist.at(l) ||
2682 select.selectedoptions.complist.at(l));
2683 }
2684 else
2685 {
2686 sel1 = false;
2687 for (int l = 0; l < select.selectedoptions.selectedwords.count() - 1;
2688 l++)
2689 sel1 = sel1 || (select.selectedoptions.namelist.at(l) ||
2690 select.selectedoptions.functlist.at(l) ||
2691 select.selectedoptions.cmpnamelist.at(l) ||
2692 select.selectedoptions.complist.at(l));
2693 }
2694 }
2695 else
2696 {
2697 // Make sure the text color is white when showall is activated
2698 if ((Childlevel = ChildItemTreeProperty(Toplevel->child(j),
2699 "Parameters")) != nullptr)
2700 if ((SubChildlevel =
2701 ChildItemTreeProperty(Childlevel, "Functions")) != nullptr)
2702 {
2703 ParseItemTree(SubChildlevel, select.selectedoptions.functlist,
2704 true);
2705 }
2706 // Components names and their childs:
2707 if ((Childlevel = ChildItemTreeProperty(Toplevel->child(j),
2708 "Components")) != nullptr)
2709 {
2710 ParseItemTree(Childlevel, select.selectedoptions.cmpnamelist, true);
2711 int ct = Childlevel->childCount();
2712 for (int m = 0; m < ct; m++)
2713 ParseItemTree(Childlevel->child(m), select.selectedoptions.complist, true);
2714 }
2715 }
2716 // Now count and show only scripts with appropiate search results:
2717 if (sel1)
2718 searchresult++;
2719 (Toplevel->child(j))->setHidden(!sel1);
2720 if (Toplevel->text(0).contains("IsoSurfaces"))
2721 Toplevel->setText(0, "IsoSurfaces (" + QString::number(searchresult) +
2722 ")");
2723 else if (Toplevel->text(0).contains("Parametric"))
2724 Toplevel->setText(0,
2725 "Parametric (" + QString::number(searchresult) + ")");
2726 else
2727 Toplevel->setText(0, "My Selection (" + QString::number(searchresult) +
2728 ")");
2729 }
2730 }
2731 // Clear boolean lists:
2732 select.selectedoptions.namelist.clear();
2733 select.selectedoptions.functlist.clear();
2734 select.selectedoptions.cmpnamelist.clear();
2735 select.selectedoptions.complist.clear();
2736 }
2737
AddListModels(bool update)2738 void DrawingOptions::AddListModels(bool update)
2739 {
2740 if (!update)
2741 {
2742 QMenu *contextMenu = new QMenu(ui.ObjectClasse);
2743 ui.ObjectClasse->setContextMenuPolicy(Qt::ActionsContextMenu);
2744 QAction *addElement =
2745 new QAction("Add Current Model to MySelection", contextMenu);
2746 QAction *deleteElement =
2747 new QAction("Erase selected row from MySelection", contextMenu);
2748 QAction *separator = new QAction(ui.ObjectClasse);
2749 separator->setSeparator(true);
2750 ui.ObjectClasse->addAction(addElement);
2751 ui.ObjectClasse->addAction(separator);
2752 ui.ObjectClasse->addAction(deleteElement);
2753 connect(addElement, SIGNAL(triggered()), this,
2754 SLOT(slot_pushButton_2_clicked()));
2755 connect(deleteElement, SIGNAL(triggered()), this,
2756 SLOT(slot_unselect_clicked()));
2757 }
2758 QColor greenColor = QColor(0, 255, 0, 50);
2759 // Parametric:
2760 QTreeWidgetItem *ParlistItem = new QTreeWidgetItem(ui.ObjectClasse);
2761 QString Text = "Parametric (" +
2762 QString::number(MathmodRef->collection.JPar.count()) + ")";
2763 ParlistItem->setBackground(0, greenColor);
2764 ParlistItem->setText(0, Text);
2765 for (int i = 0; i < MathmodRef->collection.JPar.count(); ++i)
2766 {
2767 QTreeWidgetItem *nameitem = new QTreeWidgetItem(ParlistItem);
2768 nameitem->setText(0, MathmodRef->collection.JPar[i].Name[0]);
2769 if (MathmodRef->collection.JPar[i].Component.count() > 0)
2770 {
2771 QTreeWidgetItem *cmpitem = new QTreeWidgetItem(nameitem);
2772 cmpitem->setText(0, "Components");
2773 for (int j = 0; j < MathmodRef->collection.JPar[i].Component.count();
2774 j++)
2775 {
2776 QTreeWidgetItem *cmpitem2 = new QTreeWidgetItem(cmpitem);
2777 cmpitem2->setText(0, MathmodRef->collection.JPar[i].Component.at(j));
2778 QTreeWidgetItem *cmpitem3 = new QTreeWidgetItem(cmpitem2);
2779 cmpitem3->setText(0, "X(u,v) = " +
2780 MathmodRef->collection.JPar[i].Fx.at(j));
2781 QTreeWidgetItem *cmpitem4 = new QTreeWidgetItem(cmpitem2);
2782 cmpitem4->setText(0, "Y(u,v) = " +
2783 MathmodRef->collection.JPar[i].Fy.at(j));
2784 QTreeWidgetItem *cmpitem5 = new QTreeWidgetItem(cmpitem2);
2785 cmpitem5->setText(0, "Z(u,v) = " +
2786 MathmodRef->collection.JPar[i].Fz.at(j));
2787 QTreeWidgetItem *cmpitem6 = new QTreeWidgetItem(cmpitem2);
2788 cmpitem6->setText(
2789 0, "U = [" + MathmodRef->collection.JPar[i].Umin.at(j) + ", " +
2790 MathmodRef->collection.JPar[i].Umax.at(j) + "]");
2791 QTreeWidgetItem *cmpitem7 = new QTreeWidgetItem(cmpitem2);
2792 cmpitem7->setText(
2793 0, "V = [" + MathmodRef->collection.JPar[i].Vmin.at(j) + ", " +
2794 MathmodRef->collection.JPar[i].Vmax.at(j) + "]");
2795 // Grid resolution:
2796 if (MathmodRef->collection.JPar[i].Grid.size() > 0 &&
2797 2 * j + 1 < MathmodRef->collection.JPar[i].Grid.size())
2798 {
2799 QTreeWidgetItem *cmpitem8 = new QTreeWidgetItem(cmpitem2);
2800 cmpitem8->setText(
2801 0, "Grid = (" + MathmodRef->collection.JPar[i].Grid.at(2 * j) +
2802 " , " + MathmodRef->collection.JPar[i].Grid.at(2 * j + 1) +
2803 ")");
2804 }
2805 }
2806 }
2807 // Add Global parameters:
2808 if (MathmodRef->collection.JPar[i].Csts.count() ||
2809 MathmodRef->collection.JPar[i].Funct.count())
2810 {
2811 QTreeWidgetItem *parameteritem = new QTreeWidgetItem(nameitem);
2812 parameteritem->setText(0, "Parameters:");
2813 if (MathmodRef->collection.JPar[i].Csts.count() > 0)
2814 {
2815 QTreeWidgetItem *cstitem = new QTreeWidgetItem(parameteritem);
2816 cstitem->setText(0, "Constantes:");
2817 for (int j = 0; j < MathmodRef->collection.JPar[i].Csts.count(); j++)
2818 {
2819 QTreeWidgetItem *cstitem2 = new QTreeWidgetItem(cstitem);
2820 cstitem2->setText(0, MathmodRef->collection.JPar[i].Csts.at(j));
2821 }
2822 }
2823 if (MathmodRef->collection.JPar[i].Funct.count() > 0)
2824 {
2825 QTreeWidgetItem *fctitem = new QTreeWidgetItem(parameteritem);
2826 fctitem->setText(0, "Functions:");
2827 for (int j = 0; j < MathmodRef->collection.JPar[i].Funct.count(); j++)
2828 {
2829 QTreeWidgetItem *fctitem2 = new QTreeWidgetItem(fctitem);
2830 fctitem2->setText(0, MathmodRef->collection.JPar[i].Funct.at(j));
2831 }
2832 }
2833 }
2834 }
2835 ParlistItem->sortChildren(0, Qt::AscendingOrder);
2836 // Iso:
2837 QTreeWidgetItem *IsolistItem = IsolistItemRef =
2838 new QTreeWidgetItem(ui.ObjectClasse);
2839 Text = "IsoSurfaces (" +
2840 QString::number(MathmodRef->collection.JIso.count()) + ")";
2841 IsolistItem->setBackground(0, greenColor);
2842 IsolistItem->setText(0, Text);
2843 for (int i = 0; i < MathmodRef->collection.JIso.count(); ++i)
2844 {
2845 QTreeWidgetItem *nameitem = new QTreeWidgetItem(IsolistItem);
2846 nameitem->setText(0, MathmodRef->collection.JIso[i].Name[0]);
2847 if (MathmodRef->collection.JIso[i].Component.count() > 0)
2848 {
2849 QTreeWidgetItem *cmpitem = new QTreeWidgetItem(nameitem);
2850 cmpitem->setText(0, "Components");
2851 for (int j = 0; j < MathmodRef->collection.JIso[i].Component.count();
2852 j++)
2853 {
2854 QTreeWidgetItem *cmpitem2 = new QTreeWidgetItem(cmpitem);
2855 cmpitem2->setText(0, MathmodRef->collection.JIso[i].Component.at(j));
2856 QTreeWidgetItem *cmpitem3 = new QTreeWidgetItem(cmpitem2);
2857 cmpitem3->setText(0, "F(x,y,z) = " +
2858 MathmodRef->collection.JIso[i].Fxyz.at(j));
2859 QTreeWidgetItem *cmpitem6 = new QTreeWidgetItem(cmpitem2);
2860 cmpitem6->setText(
2861 0, "X = [" + MathmodRef->collection.JIso[i].Xmin.at(j) + ", " +
2862 MathmodRef->collection.JIso[i].Xmax.at(j) + "]");
2863 QTreeWidgetItem *cmpitem7 = new QTreeWidgetItem(cmpitem2);
2864 cmpitem7->setText(
2865 0, "Y = [" + MathmodRef->collection.JIso[i].Ymin.at(j) + ", " +
2866 MathmodRef->collection.JIso[i].Ymax.at(j) + "]");
2867 QTreeWidgetItem *cmpitem8 = new QTreeWidgetItem(cmpitem2);
2868 cmpitem8->setText(
2869 0, "Z = [" + MathmodRef->collection.JIso[i].Zmin.at(j) + ", " +
2870 MathmodRef->collection.JIso[i].Zmax.at(j) + "]");
2871 // Grid resolution:
2872 if (MathmodRef->collection.JIso[i].Grid.size() > 0 &&
2873 j < MathmodRef->collection.JIso[i].Grid.size())
2874 {
2875 QTreeWidgetItem *cmpitem9 = new QTreeWidgetItem(cmpitem2);
2876 cmpitem9->setText(0, "Grid = " +
2877 MathmodRef->collection.JIso[i].Grid.at(j));
2878 }
2879 }
2880 }
2881 // Add Global parameters:
2882 if (MathmodRef->collection.JIso[i].Csts.count() ||
2883 MathmodRef->collection.JIso[i].Funct.count())
2884 {
2885 QTreeWidgetItem *parameteritem = new QTreeWidgetItem(nameitem);
2886 parameteritem->setText(0, "Parameters:");
2887 if (MathmodRef->collection.JIso[i].Csts.count() > 0)
2888 {
2889 QTreeWidgetItem *cstitem = new QTreeWidgetItem(parameteritem);
2890 cstitem->setText(0, "Constantes:");
2891 for (int j = 0; j < MathmodRef->collection.JIso[i].Csts.count(); j++)
2892 {
2893 QTreeWidgetItem *cstitem2 = new QTreeWidgetItem(cstitem);
2894 cstitem2->setText(0, MathmodRef->collection.JIso[i].Csts.at(j));
2895 }
2896 }
2897 if (MathmodRef->collection.JIso[i].Funct.count() > 0)
2898 {
2899 QTreeWidgetItem *fctitem = new QTreeWidgetItem(parameteritem);
2900 fctitem->setText(0, "Functions:");
2901 for (int j = 0; j < MathmodRef->collection.JIso[i].Funct.count(); j++)
2902 {
2903 QTreeWidgetItem *fctitem2 = new QTreeWidgetItem(fctitem);
2904 fctitem2->setText(0, MathmodRef->collection.JIso[i].Funct.at(j));
2905 }
2906 }
2907 }
2908 }
2909 IsolistItemRef->sortChildren(0, Qt::AscendingOrder);
2910 // Parametric:
2911 QTreeWidgetItem *ParisolistItem = new QTreeWidgetItem(ui.ObjectClasse);
2912 Text = "Pariso (" +
2913 QString::number(MathmodRef->collection.JParIso.count()) + ")";
2914 ParisolistItem->setBackground(0, greenColor);
2915 ParisolistItem->setText(0, Text);
2916 for (int i = 0; i < MathmodRef->collection.JParIso.count(); ++i)
2917 {
2918 QTreeWidgetItem *nameitem = new QTreeWidgetItem(ParisolistItem);
2919 nameitem->setText(0, MathmodRef->collection.JParIso[i].Name);
2920
2921 }
2922 ParisolistItem->sortChildren(0, Qt::AscendingOrder);
2923 // My Selection:
2924 // Isosurfaces:
2925 QTreeWidgetItem *MyselectionItem = new QTreeWidgetItem(ui.ObjectClasse);
2926 MyselectionItemReference = MyselectionItem;
2927 MyselectionItem->setBackground(0, greenColor);
2928 MyselectionItem->setText(0, "My Selection");
2929 return;
2930 }
2931
on_pushButton_clicked()2932 void DrawingOptions::on_pushButton_clicked()
2933 {
2934 static int checked = 1;
2935 checked *= -1;
2936 (checked == -1) ? ui.ObjectClasse->hide() : ui.ObjectClasse->show();
2937 }
2938
on_action_Exit_triggered()2939 void DrawingOptions::on_action_Exit_triggered()
2940 {
2941 MathmodRef->LabelInfos.close();
2942 MathmodRef->close();
2943 this->close();
2944 }
2945
on_actionTriangles_triggered()2946 void DrawingOptions::on_actionTriangles_triggered()
2947 {
2948 MathmodRef->slot_triangles_clicked();
2949 }
2950
on_actionInfos_triggered()2951 void DrawingOptions::on_actionInfos_triggered()
2952 {
2953 MathmodRef->iso_infos();
2954 }
2955
on_actionFill_triggered()2956 void DrawingOptions::on_actionFill_triggered()
2957 {
2958 MathmodRef->fill();
2959 }
2960
on_ObjectClasse_clicked(const QModelIndex & index)2961 void DrawingOptions::on_ObjectClasse_clicked(const QModelIndex &index)
2962 {
2963 if (!MathmodRef->IsoObjet->isRunning() &&
2964 !MathmodRef->ParObjet->isRunning())
2965 {
2966 on_InitTButton_clicked();
2967 // int result;
2968 QString tst;
2969 MathmodRef->LocalScene.IndexCurrentFormula = -1;
2970 if (index.data().isValid())
2971 {
2972 QVariant data = index.data();
2973 QString s = data.toString();
2974 QModelIndex parent = index.parent();
2975 if (parent.data().isValid())
2976 {
2977 QString prt = parent.data().toString();
2978 if (prt != "My Selection")
2979 {
2980 on_choice_activated(s);
2981 }
2982 else
2983 {
2984 for (int i = 0;
2985 i < MathmodRef->RootObjet.MyJsonObjectSelection.size(); i++)
2986 if ((MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Iso3D"].isObject()))
2987 {
2988 if (s == (tst = (MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Iso3D"]).toObject()["Name"].toArray()[0].toString()))
2989 {
2990 // Draw here
2991
2992 DrawJsonModel(MathmodRef->RootObjet.MyJsonObjectSelection.at(i).toObject());
2993 return;
2994 }
2995 }
2996 else if ((MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param3D"].isObject()))
2997 {
2998 if (s == (tst = (MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param3D"]).toObject()["Name"].toArray()[0].toString()))
2999 {
3000 // Draw here
3001 DrawJsonModel(MathmodRef->RootObjet.MyJsonObjectSelection.at(i).toObject());
3002 return;
3003 }
3004 }
3005 else if ((MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param4D"].isObject()))
3006 {
3007 if (s == (tst = (MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param4D"]).toObject()["Name"].toArray()[0].toString()))
3008 {
3009 // Draw here
3010 DrawJsonModel(MathmodRef->RootObjet.MyJsonObjectSelection.at(i).toObject());
3011 return;
3012 }
3013 }
3014 else if ((MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param3D_C"].isObject()))
3015 {
3016 if (s == (tst = (MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param3D_C"]).toObject()["Name"].toArray()[0].toString()))
3017 {
3018 // Draw here
3019 DrawJsonModel(MathmodRef->RootObjet.MyJsonObjectSelection.at(i).toObject());
3020 return;
3021 }
3022 }
3023 else if ((MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param4D_C"].isObject()))
3024 {
3025 if (s == (tst = (MathmodRef->RootObjet.MyJsonObjectSelection[i].toObject()["Param4D_C"]).toObject()["Name"].toArray()[0].toString()))
3026 {
3027 // Draw here
3028 DrawJsonModel(MathmodRef->RootObjet.MyJsonObjectSelection.at(i).toObject());
3029 return;
3030 }
3031 }
3032 }
3033 }
3034 }
3035 return;
3036 }
3037 }
3038
slot_pushButton_2_clicked()3039 void DrawingOptions::slot_pushButton_2_clicked()
3040 {
3041 MathmodRef->RootObjet.MyJsonObjectSelection.append(MathmodRef->RootObjet.CurrentJsonObject);
3042 AddObjectToMySelectionTree();
3043 }
3044
slot_unselect_clicked()3045 void DrawingOptions::slot_unselect_clicked()
3046 {
3047 int index =
3048 MyselectionItemReference->indexOfChild(ui.ObjectClasse->currentItem());
3049 MathmodRef->RootObjet.MyJsonObjectSelection.removeAt(index);
3050 MyselectionItemReference->removeChild(ui.ObjectClasse->currentItem());
3051 }
3052
slot_XYZscrollBar_valueChanged(int value)3053 void DrawingOptions::slot_XYZscrollBar_valueChanged(int value)
3054 {
3055 MathmodRef->xyzg_valueChanged(value, ISO_TYPE);
3056 }
3057
UpdateDescription(int position,ModelType type,TreeStruct & currentstruct)3058 void DrawingOptions::UpdateDescription(int position, ModelType type, TreeStruct ¤tstruct)
3059 {
3060 if (type == PAR_TYPE)
3061 {
3062 if (position > -1)
3063 {
3064 IndexcurrentComponent = position;
3065 MathmodRef->LocalScene.IndexCurrentFormula == position
3066 ? MathmodRef->LocalScene.IndexCurrentFormula = -1
3067 : MathmodRef->LocalScene.IndexCurrentFormula = position;
3068 // currentFormula = sparent;
3069 ui.paramNameEdit->setText(currentstruct.Component.at(position));
3070 ui.XEdit->setText(currentstruct.fx.at(position));
3071 ui.YEdit->setText(currentstruct.fy.at(position));
3072 ui.ZEdit->setText(currentstruct.fz.at(position));
3073 ui.umin->setText(currentstruct.umin.at(position));
3074 ui.vmin->setText(currentstruct.vmin.at(position));
3075 ui.umax->setText(currentstruct.umax.at(position));
3076 ui.vmax->setText(currentstruct.vmax.at(position));
3077 if (!currentstruct.Component.empty())
3078 ui.paramNameEdit->setText(currentstruct.Component.at(position));
3079 else
3080 ui.paramNameEdit->setText("");
3081 if (!currentstruct.Cnd.empty())
3082 {
3083 ui.CndUpdateEdit_2->setText(currentstruct.Cnd.at(position));
3084 }
3085 else
3086 {
3087 ui.CndUpdateEdit_2->setText("");
3088 }
3089 // Function:
3090 if (!currentstruct.Funct.empty())
3091 {
3092 ui.tableWidget_Fct_2->clearContents();
3093 ui.tableWidget_Fct_2->setRowCount(0);
3094 for (int i = 0; i < currentstruct.Funct.size(); i++)
3095 {
3096 ui.tableWidget_Fct_2->setRowCount(i + 1);
3097 ui.tableWidget_Fct_2->setItem(i, 0, new QTableWidgetItem(currentstruct.Funct.at(i)));
3098 }
3099 }
3100 else
3101 {
3102 ui.tableWidget_Fct_2->clearContents();
3103 ui.tableWidget_Fct_2->setRowCount(0);
3104 }
3105 // Constantes:
3106 if (!currentstruct.Const.empty())
3107 {
3108 ui.tableWidget_Cst_2->clearContents();
3109 ui.tableWidget_Cst_2->setRowCount(0);
3110 for (int i = 0; i < currentstruct.Const.size(); i++)
3111 {
3112 ui.tableWidget_Cst_2->setRowCount(i + 1);
3113 ui.tableWidget_Cst_2->setItem(i, 0, new QTableWidgetItem(currentstruct.Const.at(i)));
3114 }
3115 }
3116 else
3117 {
3118 ui.tableWidget_Cst_2->clearContents();
3119 ui.tableWidget_Cst_2->setRowCount(0);
3120 }
3121 }
3122 ui.stackedProperties->setCurrentIndex(2);
3123 }
3124 if (type == PAR_4D_TYPE)
3125 {
3126 if (position > -1)
3127 {
3128 IndexcurrentComponent = position;
3129 MathmodRef->LocalScene.IndexCurrentFormula == position
3130 ? MathmodRef->LocalScene.IndexCurrentFormula = -1
3131 : MathmodRef->LocalScene.IndexCurrentFormula = position;
3132 // currentFormula = sparent;
3133 ui.paramNameEdit_2->setText(currentstruct.Component.at(position));
3134 ui.XEdit_2->setText(currentstruct.fx.at(position));
3135 ui.YEdit_2->setText(currentstruct.fy.at(position));
3136 ui.ZEdit_2->setText(currentstruct.fz.at(position));
3137 ui.WEdit_2->setText(currentstruct.fw.at(position));
3138 ui.umin_2->setText(currentstruct.umin.at(position));
3139 ui.vmin_2->setText(currentstruct.vmin.at(position));
3140 ui.umax_2->setText(currentstruct.umax.at(position));
3141 ui.vmax_2->setText(currentstruct.vmax.at(position));
3142 if (!currentstruct.Component.empty())
3143 ui.paramNameEdit_2->setText(currentstruct.Component.at(position));
3144 else
3145 ui.paramNameEdit_2->setText("");
3146 }
3147 ui.stackedProperties->setCurrentIndex(3);
3148 }
3149 if (type == ISO_TYPE)
3150 {
3151 if (position > -1)
3152 {
3153 IndexcurrentComponent = position;
3154 MathmodRef->LocalScene.IndexCurrentFormula == position
3155 ? MathmodRef->LocalScene.IndexCurrentFormula = -1
3156 : MathmodRef->LocalScene.IndexCurrentFormula = position;
3157 ui.UpdateEdit->setText(currentstruct.fxyz.at(position));
3158 ui.xmin->setText(currentstruct.xmin.at(position));
3159 ui.ymin->setText(currentstruct.ymin.at(position));
3160 ui.zmin->setText(currentstruct.zmin.at(position));
3161 ui.xmax->setText(currentstruct.xmax.at(position));
3162 ui.ymax->setText(currentstruct.ymax.at(position));
3163 ui.zmax->setText(currentstruct.zmax.at(position));
3164 if (!currentstruct.Component.empty())
3165 ui.isoNameEdit->setText(currentstruct.Component.at(position));
3166 else
3167 ui.isoNameEdit->setText("");
3168
3169 if (!currentstruct.Cnd.empty())
3170 {
3171 position < currentstruct.Cnd.size()
3172 ? ui.CndUpdateEdit->setText(currentstruct.Cnd.at(position))
3173 : ui.CndUpdateEdit->setText(currentstruct.Cnd.at(0));
3174 }
3175 else
3176 {
3177 ui.CndUpdateEdit->setText("");
3178 }
3179 // Function:
3180 if (!currentstruct.Funct.empty())
3181 {
3182 ui.tableWidget_Fct->clearContents();
3183 ui.tableWidget_Fct->setRowCount(0);
3184 for (int i = 0; i < currentstruct.Funct.size(); i++)
3185 {
3186 ui.tableWidget_Fct->setRowCount(i + 1);
3187 ui.tableWidget_Fct->setItem(i, 0, new QTableWidgetItem(currentstruct.Funct.at(i)));
3188 }
3189 }
3190 else
3191 {
3192 ui.tableWidget_Fct->clearContents();
3193 ui.tableWidget_Fct->setRowCount(0);
3194 }
3195 // Constantes:
3196 if (!currentstruct.Const.empty())
3197 {
3198 ui.tableWidget_Cst->clearContents();
3199 ui.tableWidget_Cst->setRowCount(0);
3200 for (int i = 0; i < currentstruct.Const.size(); i++)
3201 {
3202 ui.tableWidget_Cst->setRowCount(i + 1);
3203 ui.tableWidget_Cst->setItem(i, 0, new QTableWidgetItem(currentstruct.Const.at(i)));
3204 }
3205 }
3206 else
3207 {
3208 ui.tableWidget_Cst->clearContents();
3209 ui.tableWidget_Cst->setRowCount(0);
3210 }
3211 }
3212 ui.stackedProperties->setCurrentIndex(1);
3213 }
3214 }
3215
oncolor_2activated(int index)3216 void DrawingOptions::oncolor_2activated(int index)
3217 {
3218 MathmodRef->colorstype(index);
3219 }
3220
onred_2valueChanged(int value)3221 void DrawingOptions::onred_2valueChanged(int value)
3222 {
3223 MathmodRef->red(value, IndexcurrentComponent);
3224 }
3225
ongreen_2valueChanged(int value)3226 void DrawingOptions::ongreen_2valueChanged(int value)
3227 {
3228 MathmodRef->green(value, IndexcurrentComponent);
3229 }
3230
onblue_2valueChanged(int value)3231 void DrawingOptions::onblue_2valueChanged(int value)
3232 {
3233 MathmodRef->blue(value, IndexcurrentComponent);
3234 }
3235
on_red_ParIso_valueChanged(int value)3236 void DrawingOptions::on_red_ParIso_valueChanged(int value)
3237 {
3238 MathmodRef->red(value, IndexcurrentComponent);
3239 }
3240
on_green_ParIso_valueChanged(int value)3241 void DrawingOptions::on_green_ParIso_valueChanged(int value)
3242 {
3243 MathmodRef->green(value, IndexcurrentComponent);
3244 }
3245
on_blue_ParIso_valueChanged(int value)3246 void DrawingOptions::on_blue_ParIso_valueChanged(int value)
3247 {
3248 MathmodRef->blue(value, IndexcurrentComponent);
3249 }
3250
removeat(int idx,QJsonObject & QObj,QString str)3251 void DrawingOptions::removeat(int idx, QJsonObject& QObj, QString str)
3252 {
3253 QJsonArray array;
3254 array = QObj[str].toArray();
3255 array.removeAt(idx);
3256 QObj[str] = array;
3257 }
3258
removeat2(int idx,QJsonObject & QObj,QString str)3259 void DrawingOptions::removeat2(int idx, QJsonObject& QObj, QString str)
3260 {
3261 if (QObj[str].isArray())
3262 {
3263 QJsonArray array;
3264 array = QObj[str].toArray();
3265 array.removeAt(idx);
3266 QObj[str] = array;
3267 }
3268 else
3269 QObj.remove(str);
3270 }
3271
appendall(QJsonObject & QObj,QString str,QTableWidget * table)3272 void DrawingOptions::appendall(QJsonObject& QObj, QString str, QTableWidget* table)
3273 {
3274 if (QObj[str].isArray() && table->rowCount() > 0)
3275 {
3276 QJsonArray array2;
3277 for (int i = 0; i < table->rowCount(); i++)
3278 {
3279 if ((table->item(i, 0))->text() != "")
3280 array2.append((table->item(i, 0))->text());
3281 }
3282 QObj[str] = array2;
3283 }
3284 else
3285 QObj.remove(str);
3286 }
3287
replaceat(int idx,QJsonObject & QObj,QString str,QTextEdit * text)3288 void DrawingOptions::replaceat(int idx, QJsonObject& QObj, QString str, QTextEdit* text)
3289 {
3290 QJsonArray array;
3291 array = QObj[str].toArray();
3292 array.replace(idx, text->toPlainText());
3293 QObj[str] = array;
3294 }
3295
insertat(int idx,QJsonObject & QObj,QString str,QTextEdit * text)3296 void DrawingOptions::insertat(int idx, QJsonObject& QObj, QString str, QTextEdit* text)
3297 {
3298 QJsonArray array;
3299 array = QObj[str].toArray();
3300 array.insert(idx, text->toPlainText());
3301 QObj[str] = array;
3302 }
3303
appednew(QJsonObject & QObj,QString str,QTextEdit * text)3304 void DrawingOptions::appednew(QJsonObject& QObj, QString str, QTextEdit* text)
3305 {
3306 QJsonArray array;
3307 array = QObj[str].toArray();
3308 array.append(text->toPlainText());
3309 QObj[str] = array;
3310 }
3311
on_updateJObject(QJsonObject & copyCurrentObject)3312 void DrawingOptions::on_updateJObject(QJsonObject ©CurrentObject)
3313 {
3314 QJsonArray array;
3315 if (copyCurrentObject["Iso3D"].isObject())
3316 {
3317 if (IndexcurrentComponent != -1)
3318 {
3319 QJsonObject copyCurrentObject2 = copyCurrentObject["Iso3D"].toObject();
3320 // Cut the component at the index indexcurrentFormula :
3321 if ((ui.isoNameEdit->toPlainText()).replace(" ", "") == "")
3322 {
3323 for(uint ui=0; ui<MandatoryIsosurfaceFields.size(); ui++)
3324 removeat(IndexcurrentComponent, copyCurrentObject2, MandatoryIsosurfaceFields[ui]);
3325
3326 removeat2(IndexcurrentComponent, copyCurrentObject2, "Grid");
3327 removeat2(IndexcurrentComponent, copyCurrentObject2, "Cnd");
3328 appendall(copyCurrentObject2, "Funct", ui.tableWidget_Fct);
3329 appendall(copyCurrentObject2, "Const", ui.tableWidget_Cst);
3330 // Some keys cleaning..
3331 copyCurrentObject2.remove("Param3D");
3332 copyCurrentObject2.remove("Param4D");
3333 copyCurrentObject["Iso3D"] = copyCurrentObject2;
3334 }
3335 // Update the component at the index indexcurrentFormula;
3336 else if ((copyCurrentObject["Iso3D"].toObject())["Component"].toArray().size() > 0 &&
3337 IndexcurrentComponent > -1 && IndexcurrentComponent <
3338 (copyCurrentObject["Iso3D"].toObject())["Component"].toArray().size() &&
3339 (((copyCurrentObject["Iso3D"].toObject())["Component"].toArray())[IndexcurrentComponent]).toString().replace(" ", "") ==
3340 (ui.isoNameEdit->toPlainText()).replace(" ", ""))
3341 {
3342 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fxyz", ui.UpdateEdit);
3343 replaceat(IndexcurrentComponent, copyCurrentObject2, "Xmin", ui.xmin);
3344 replaceat(IndexcurrentComponent, copyCurrentObject2, "Xmax", ui.xmax);
3345 replaceat(IndexcurrentComponent, copyCurrentObject2, "Ymin", ui.ymin);
3346 replaceat(IndexcurrentComponent, copyCurrentObject2, "Ymax", ui.ymax);
3347 replaceat(IndexcurrentComponent, copyCurrentObject2, "Zmin", ui.zmin);
3348 replaceat(IndexcurrentComponent, copyCurrentObject2, "Zmax", ui.zmax);
3349 appendall(copyCurrentObject2, "Funct", ui.tableWidget_Fct);
3350 appendall(copyCurrentObject2, "Const", ui.tableWidget_Cst);
3351
3352 copyCurrentObject2.remove("Param3D");
3353 copyCurrentObject2.remove("Param4D");
3354 copyCurrentObject["Iso3D"] = copyCurrentObject2;
3355 }
3356 else
3357 {
3358 // Add new component:
3359 if ((((copyCurrentObject["Iso3D"].toObject())["Component"].toArray())[IndexcurrentComponent]).toString().replace(" ", "") !=
3360 (ui.isoNameEdit->toPlainText()).replace(" ", ""))
3361 {
3362 appednew(copyCurrentObject2, "Component", ui.isoNameEdit);
3363 appednew(copyCurrentObject2, "Fxyz", ui.UpdateEdit);
3364 appednew(copyCurrentObject2, "Xmin", ui.xmin);
3365 appednew(copyCurrentObject2, "Xmax", ui.xmax);
3366 appednew(copyCurrentObject2, "Ymin", ui.ymin);
3367 appednew(copyCurrentObject2, "Ymax", ui.ymax);
3368 appednew(copyCurrentObject2, "Zmin", ui.zmin);
3369 appednew(copyCurrentObject2, "Zmax", ui.zmax);
3370
3371 if (copyCurrentObject2["Cnd"].isArray())
3372 {
3373 array = copyCurrentObject2["Cnd"].toArray();
3374 array.append(ui.CndUpdateEdit->toPlainText());
3375 copyCurrentObject2["Cnd"] = array;
3376 }
3377 else if (ui.CndUpdateEdit->toPlainText() != "")
3378 {
3379 array = copyCurrentObject2["Cnd"].toArray();
3380 for (int i = 0; i < copyCurrentObject2["Fxyz"].toArray().count();
3381 i++)
3382 array.append(ui.CndUpdateEdit->toPlainText());
3383 copyCurrentObject2["Cnd"] = array;
3384 }
3385 else
3386 copyCurrentObject2.remove("Cnd");
3387
3388 if (copyCurrentObject2["Grid"].isArray())
3389 {
3390 array = copyCurrentObject2["Grid"].toArray();
3391 array.append(QString::number(ui.xyzg->value()));
3392 copyCurrentObject2["Grid"] = array;
3393 }
3394 else
3395 copyCurrentObject2.remove("Grid");
3396 }
3397 else
3398 {
3399 insertat(IndexcurrentComponent, copyCurrentObject2, "Fxyz", ui.UpdateEdit);
3400 insertat(IndexcurrentComponent, copyCurrentObject2, "Xmin", ui.xmin);
3401 insertat(IndexcurrentComponent, copyCurrentObject2, "Xmax", ui.xmax);
3402 insertat(IndexcurrentComponent, copyCurrentObject2, "Ymin", ui.ymin);
3403 insertat(IndexcurrentComponent, copyCurrentObject2, "Ymax", ui.ymax);
3404 insertat(IndexcurrentComponent, copyCurrentObject2, "Zmin", ui.zmin);
3405 insertat(IndexcurrentComponent, copyCurrentObject2, "Zmax", ui.zmax);
3406
3407 if (copyCurrentObject2["Cnd"].isArray())
3408 {
3409 array = copyCurrentObject2["Cnd"].toArray();
3410 array.insert(IndexcurrentComponent, ui.CndUpdateEdit->toPlainText());
3411 copyCurrentObject2["Cnd"] = array;
3412 }
3413 else if (ui.CndUpdateEdit->toPlainText() != "")
3414 {
3415 array = copyCurrentObject2["Cnd"].toArray();
3416 for (int i = 0; i < copyCurrentObject2["Fxyz"].toArray().count();
3417 i++)
3418 array.append(ui.CndUpdateEdit->toPlainText());
3419 copyCurrentObject2["Cnd"] = array;
3420 }
3421 else
3422 copyCurrentObject2.remove("Cnd");
3423 }
3424
3425 appendall(copyCurrentObject2, "Funct", ui.tableWidget_Fct);
3426 appendall(copyCurrentObject2, "Const", ui.tableWidget_Cst);
3427
3428 copyCurrentObject["Iso3D"] = copyCurrentObject2;
3429 }
3430 }
3431 }
3432 else if (copyCurrentObject["Param3D"].isObject() || copyCurrentObject["Param3D_C"].isObject())
3433 {
3434 copyCurrentObject.remove("Iso3D");
3435 QJsonObject copyCurrentObject2 =
3436 copyCurrentObject["Param3D"].isObject() ? copyCurrentObject["Param3D"].toObject() : copyCurrentObject["Param3D_C"].toObject();
3437 if (IndexcurrentComponent != -1)
3438 {
3439 if ((ui.paramNameEdit->toPlainText()).replace(" ", "") == "")
3440 {
3441 for(uint ui=0; ui<MandatoryParmetric3DFields.size(); ui++)
3442 removeat(IndexcurrentComponent, copyCurrentObject2, MandatoryParmetric3DFields[ui]);
3443 removeat2(2*IndexcurrentComponent, copyCurrentObject2, "Grid");
3444 removeat2(2*IndexcurrentComponent, copyCurrentObject2, "Grid");
3445 removeat2(IndexcurrentComponent, copyCurrentObject2, "Cnd");
3446 appendall(copyCurrentObject2, "Funct", ui.tableWidget_Fct_2);
3447 appendall(copyCurrentObject2, "Const", ui.tableWidget_Cst_2);
3448 // Some keys cleaning..
3449 copyCurrentObject2.remove("Iso3D");
3450 copyCurrentObject2.remove("Param4D");
3451 if(copyCurrentObject["Param3D"].isObject())
3452 copyCurrentObject["Param3D"] = copyCurrentObject2;
3453 else
3454 copyCurrentObject["Param3D_C"] = copyCurrentObject2;
3455 }
3456 else if ((((copyCurrentObject["Param3D"].toObject())["Component"].toArray()).count() > 0 &&
3457 IndexcurrentComponent > -1 && IndexcurrentComponent <
3458 ((copyCurrentObject["Param3D"].toObject())["Component"].toArray()).size() &&
3459 ((copyCurrentObject["Param3D"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") ==
3460 (ui.paramNameEdit->toPlainText()).replace(" ", "")) ||
3461
3462 (((copyCurrentObject["Param3D_C"].toObject())["Component"].toArray()).count() > 0 &&
3463 IndexcurrentComponent > -1 && IndexcurrentComponent <
3464 ((copyCurrentObject["Param3D_C"].toObject())["Component"].toArray()).size() &&
3465 ((copyCurrentObject["Param3D_C"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") ==
3466 (ui.paramNameEdit->toPlainText()).replace(" ", ""))
3467 )
3468 {
3469 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fx", ui.XEdit);
3470 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fy", ui.YEdit);
3471 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fz", ui.ZEdit);
3472 replaceat(IndexcurrentComponent, copyCurrentObject2, "Umin", ui.umin);
3473 replaceat(IndexcurrentComponent, copyCurrentObject2, "Umax", ui.umax);
3474 replaceat(IndexcurrentComponent, copyCurrentObject2, "Vmin", ui.vmin);
3475 replaceat(IndexcurrentComponent, copyCurrentObject2, "Vmax", ui.vmax);
3476 appendall(copyCurrentObject2, "Funct", ui.tableWidget_Fct_2);
3477 appendall(copyCurrentObject2, "Const", ui.tableWidget_Cst_2);
3478 if (copyCurrentObject2["Cnd"].isArray() &&
3479 copyCurrentObject2["Cnd"].toArray().count() > IndexcurrentComponent)
3480 {
3481 array = copyCurrentObject2["Cnd"].toArray();
3482 array.replace(IndexcurrentComponent, ui.CndUpdateEdit_2->toPlainText());
3483 copyCurrentObject2["Cnd"] = array;
3484 }
3485 else if (ui.CndUpdateEdit_2->toPlainText() != "")
3486 {
3487 array = copyCurrentObject2["Cnd"].toArray();
3488 for (int i = 0; i < copyCurrentObject2["Fx"].toArray().count(); i++)
3489 array.append(ui.CndUpdateEdit_2->toPlainText());
3490 copyCurrentObject2["Cnd"] = array;
3491 }
3492 else
3493 copyCurrentObject2.remove("Cnd");
3494 if(copyCurrentObject["Param3D"].isObject())
3495 copyCurrentObject["Param3D"] = copyCurrentObject2;
3496 else
3497 copyCurrentObject["Param3D_C"] = copyCurrentObject2;
3498 }
3499 else
3500 {
3501 if ((((copyCurrentObject["Param3D"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") !=
3502 (ui.paramNameEdit->toPlainText()).replace(" ", "")) ||
3503 (((copyCurrentObject["Param3D_C"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") !=
3504 (ui.paramNameEdit->toPlainText()).replace(" ", ""))
3505 )
3506 {
3507 appednew(copyCurrentObject2, "Component", ui.paramNameEdit);
3508 appednew(copyCurrentObject2, "Fx", ui.XEdit);
3509 appednew(copyCurrentObject2, "Fy", ui.YEdit);
3510 appednew(copyCurrentObject2, "Fz", ui.ZEdit);
3511 appednew(copyCurrentObject2, "Umin", ui.umin);
3512 appednew(copyCurrentObject2, "Umax", ui.umax);
3513 appednew(copyCurrentObject2, "Vmin", ui.vmin);
3514 appednew(copyCurrentObject2, "Vmax", ui.vmax);
3515 if (copyCurrentObject2["Grid"].isArray())
3516 {
3517 array = copyCurrentObject2["Grid"].toArray();
3518 int pos=2*IndexcurrentComponent;
3519 array.append((array.at(pos).toString()));
3520 array.append((array.at(pos+1).toString()));
3521 copyCurrentObject2["Grid"] = array;
3522 }
3523 else
3524 copyCurrentObject2.remove("Grid");
3525
3526 if (copyCurrentObject2["Cnd"].isArray())
3527 {
3528 array = copyCurrentObject2["Cnd"].toArray();
3529 array.append(ui.CndUpdateEdit_2->toPlainText());
3530 copyCurrentObject2["Cnd"] = array;
3531 }
3532 else if (ui.CndUpdateEdit_2->toPlainText() != "")
3533 {
3534 array = copyCurrentObject2["Cnd"].toArray();
3535 for (int i = 0; i < copyCurrentObject2["Fx"].toArray().count(); i++)
3536 array.append(ui.CndUpdateEdit_2->toPlainText());
3537 copyCurrentObject2["Cnd"] = array;
3538 }
3539 else
3540 copyCurrentObject2.remove("Cnd");
3541 }
3542 else
3543 {
3544 insertat(IndexcurrentComponent, copyCurrentObject2, "Fx", ui.XEdit);
3545 insertat(IndexcurrentComponent, copyCurrentObject2, "Fy", ui.YEdit);
3546 insertat(IndexcurrentComponent, copyCurrentObject2, "Fz", ui.ZEdit);
3547 insertat(IndexcurrentComponent, copyCurrentObject2, "Umin", ui.umin);
3548 insertat(IndexcurrentComponent, copyCurrentObject2, "Umax", ui.umax);
3549 insertat(IndexcurrentComponent, copyCurrentObject2, "Vmin", ui.vmin);
3550 insertat(IndexcurrentComponent, copyCurrentObject2, "Vmax", ui.vmax);
3551 array = copyCurrentObject2["Component"].toArray();
3552 array.insert(IndexcurrentComponent, ui.paramNameEdit->toPlainText());
3553 copyCurrentObject2["Component"] = array;
3554 if (copyCurrentObject2["Cnd"].isArray())
3555 {
3556 array = copyCurrentObject2["Cnd"].toArray();
3557 array.append(ui.CndUpdateEdit_2->toPlainText());
3558 copyCurrentObject2["Cnd"] = array;
3559 }
3560 else if (ui.CndUpdateEdit_2->toPlainText() != "")
3561 {
3562 array = copyCurrentObject2["Cnd"].toArray();
3563 for (int i = 0; i < copyCurrentObject2["Fx"].toArray().count(); i++)
3564 array.append(ui.CndUpdateEdit_2->toPlainText());
3565 copyCurrentObject2["Cnd"] = array;
3566 }
3567 else
3568 copyCurrentObject2.remove("Cnd");
3569 }
3570 appendall(copyCurrentObject2, "Funct", ui.tableWidget_Fct_2);
3571 appendall(copyCurrentObject2, "Const", ui.tableWidget_Cst_2);
3572 if(copyCurrentObject["Param3D"].isObject())
3573 copyCurrentObject["Param3D"] = copyCurrentObject2;
3574 else
3575 copyCurrentObject["Param3D_C"] = copyCurrentObject2;
3576 }
3577 }
3578 }
3579 else if (copyCurrentObject["Param4D"].isObject() || copyCurrentObject["Param4D_C"].isObject())
3580 {
3581 copyCurrentObject.remove("Iso3D");
3582 copyCurrentObject.remove("Param3D");
3583 copyCurrentObject.remove("Param3D_C");
3584 QJsonObject copyCurrentObject2 = copyCurrentObject["Param4D"].isObject() ? copyCurrentObject["Param4D"].toObject() : copyCurrentObject["Param4D_C"].toObject();
3585 if (IndexcurrentComponent != -1)
3586 {
3587 if ((ui.paramNameEdit_2->toPlainText()).replace(" ", "") == "")
3588 {
3589 for(uint ui=0; ui<MandatoryParmetric4DFields.size(); ui++)
3590 removeat(IndexcurrentComponent, copyCurrentObject2, MandatoryParmetric4DFields[ui]);
3591 removeat2(2*IndexcurrentComponent, copyCurrentObject2, "Grid");
3592 removeat2(2*IndexcurrentComponent, copyCurrentObject2, "Grid");
3593 if(copyCurrentObject["Param4D"].isObject())
3594 copyCurrentObject["Param4D"] = copyCurrentObject2;
3595 else
3596 copyCurrentObject["Param4D_C"] = copyCurrentObject2;
3597 }
3598 else if ((((copyCurrentObject["Param4D"].toObject())["Component"].toArray()).count() > 0 &&
3599 IndexcurrentComponent > -1 && IndexcurrentComponent <((copyCurrentObject["Param4D"].toObject())["Component"].toArray()).size() &&
3600 ((copyCurrentObject["Param4D"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") ==(ui.paramNameEdit_2->toPlainText()).replace(" ", ""))
3601 ||
3602 (((copyCurrentObject["Param4D_C"].toObject())["Component"].toArray()).count() > 0 &&
3603 IndexcurrentComponent > -1 && IndexcurrentComponent <((copyCurrentObject["Param4D_C"].toObject())["Component"].toArray()).size() &&
3604 ((copyCurrentObject["Param4D_C"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") ==(ui.paramNameEdit_2->toPlainText()).replace(" ", ""))
3605 )
3606 {
3607 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fx", ui.XEdit_2);
3608 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fy", ui.YEdit_2);
3609 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fz", ui.ZEdit_2);
3610 replaceat(IndexcurrentComponent, copyCurrentObject2, "Fw", ui.WEdit_2);
3611 replaceat(IndexcurrentComponent, copyCurrentObject2, "Umin", ui.umin_2);
3612 replaceat(IndexcurrentComponent, copyCurrentObject2, "Umax", ui.umax_2);
3613 replaceat(IndexcurrentComponent, copyCurrentObject2, "Vmin", ui.vmin_2);
3614 replaceat(IndexcurrentComponent, copyCurrentObject2, "Vmax", ui.vmax_2);
3615 if(copyCurrentObject["Param4D"].isObject())
3616 copyCurrentObject["Param4D"] = copyCurrentObject2;
3617 else
3618 copyCurrentObject["Param4D_C"] = copyCurrentObject2;
3619 }
3620 else
3621 {
3622 if ((((copyCurrentObject["Param4D"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") !=
3623 (ui.paramNameEdit_2->toPlainText()).replace(" ", "")) ||
3624 (((copyCurrentObject["Param4D_C"].toObject())["Component"].toArray())[IndexcurrentComponent].toString().replace(" ", "") !=
3625 (ui.paramNameEdit_2->toPlainText()).replace(" ", ""))
3626 )
3627 {
3628 appednew(copyCurrentObject2, "Component", ui.paramNameEdit_2);
3629 appednew(copyCurrentObject2, "Fx", ui.XEdit_2);
3630 appednew(copyCurrentObject2, "Fy", ui.YEdit_2);
3631 appednew(copyCurrentObject2, "Fz", ui.ZEdit_2);
3632 appednew(copyCurrentObject2, "Fw", ui.WEdit_2);
3633 appednew(copyCurrentObject2, "Umin", ui.umin_2);
3634 appednew(copyCurrentObject2, "Umax", ui.umax_2);
3635 appednew(copyCurrentObject2, "Vmin", ui.vmin_2);
3636 appednew(copyCurrentObject2, "Vmax", ui.vmax_2);
3637 if (copyCurrentObject2["Grid"].isArray())
3638 {
3639 array = copyCurrentObject2["Grid"].toArray();
3640 int pos=2*IndexcurrentComponent;
3641 array.append((array.at(pos).toString()));
3642 array.append((array.at(pos+1).toString()));
3643 copyCurrentObject2["Grid"] = array;
3644 }
3645 else
3646 copyCurrentObject2.remove("Grid");
3647 if(copyCurrentObject["Param4D"].isObject())
3648 copyCurrentObject["Param4D"] = copyCurrentObject2;
3649 else
3650 copyCurrentObject["Param4D_C"] = copyCurrentObject2;
3651 }
3652 else
3653 {
3654 insertat(IndexcurrentComponent, copyCurrentObject2, "Component", ui.paramNameEdit_2);
3655 insertat(IndexcurrentComponent, copyCurrentObject2, "Fx", ui.XEdit_2);
3656 insertat(IndexcurrentComponent, copyCurrentObject2, "Fy", ui.YEdit_2);
3657 insertat(IndexcurrentComponent, copyCurrentObject2, "Fz", ui.ZEdit_2);
3658 insertat(IndexcurrentComponent, copyCurrentObject2, "Fw", ui.WEdit_2);
3659 insertat(IndexcurrentComponent, copyCurrentObject2, "Umin", ui.umin_2);
3660 insertat(IndexcurrentComponent, copyCurrentObject2, "Umax", ui.umax_2);
3661 insertat(IndexcurrentComponent, copyCurrentObject2, "Vmin", ui.vmin_2);
3662 insertat(IndexcurrentComponent, copyCurrentObject2, "Vmax", ui.vmax_2);
3663
3664 if(copyCurrentObject["Param4D"].isObject())
3665 copyCurrentObject["Param4D"] = copyCurrentObject2;
3666 else
3667 copyCurrentObject["Param4D_C"] = copyCurrentObject2;
3668 }
3669 }
3670 }
3671 }
3672 }
3673
RunUpdatedJObject(QJsonObject & CurrentObject)3674 void DrawingOptions::RunUpdatedJObject(QJsonObject &CurrentObject)
3675 {
3676 if (IndexcurrentComponent != -1)
3677 {
3678 if (CurrentObject["Iso3D"].isObject())
3679 {
3680 CurrentObject.remove("Param3D");CurrentObject.remove("Param3D_C");
3681 CurrentObject.remove("Param4D");CurrentObject.remove("Param4D_C");
3682 CurrentObject.remove("ParIso");
3683 DrawJsonModel(CurrentObject);
3684 }
3685 else if (CurrentObject["Param3D"].isObject() || CurrentObject["Param3D_C"].isObject())
3686 {
3687 CurrentObject.remove("Iso3D");
3688 CurrentObject.remove("Param4D");CurrentObject.remove("Param4D_C");
3689 CurrentObject.remove("ParIso");
3690 DrawJsonModel(CurrentObject);
3691 }
3692 else if (CurrentObject["Param4D"].isObject() || CurrentObject["Param4D_C"].isObject())
3693 {
3694 CurrentObject.remove("Iso3D");
3695 CurrentObject.remove("Param3D");CurrentObject.remove("Param3D_C");
3696 CurrentObject.remove("ParIso");
3697 DrawJsonModel(CurrentObject);
3698 }
3699 else
3700 {
3701 CurrentObject.remove("Iso3D");
3702 CurrentObject.remove("Param3D");
3703 CurrentObject.remove("Param4D");
3704 CurrentObject.remove("Param3D_C");
3705 CurrentObject.remove("Param4D_C");
3706 DrawJsonModel(CurrentObject);
3707 }
3708 }
3709 }
3710
on_updateButton_clicked()3711 void DrawingOptions::on_updateButton_clicked()
3712 {
3713 QJsonObject CurrentObject = MathmodRef->RootObjet.CurrentJsonObject;
3714 QJsonObject parisoComponent;
3715 if (CurrentObject["ParIso"].isArray())
3716 {
3717 QJsonArray listeObj = CurrentObject["ParIso"].toArray();
3718 QJsonArray listeIsoObj;
3719 QJsonArray listeParObj;
3720 for (int i = 0; i < listeObj.size(); i++)
3721 if ((listeObj[i].toObject())["Iso3D"].isObject())
3722 listeIsoObj.append(listeObj[i].toObject());
3723 else
3724 listeParObj.append(listeObj[i].toObject());
3725 int page = ui.parisocomboBox->currentIndex();
3726 if (page == 1) // Iso3D
3727 {
3728 parisoComponent = listeIsoObj[0].toObject();
3729 on_updateJObject(parisoComponent);
3730 QJsonArray newlisteObj;
3731 newlisteObj.append(parisoComponent);
3732 if (listeParObj.size() > 0)
3733 newlisteObj.append(listeParObj[0].toObject());
3734 CurrentObject["ParIso"] = newlisteObj;
3735 RunUpdatedJObject(CurrentObject);
3736 }
3737 else if (page == 0) // Param3D
3738 {
3739 parisoComponent = listeParObj[0].toObject();
3740 on_updateJObject(parisoComponent);
3741 QJsonArray newlisteObj;
3742 newlisteObj.append(parisoComponent);
3743 if (listeIsoObj.size() > 0)
3744 newlisteObj.append(listeIsoObj[0].toObject());
3745 CurrentObject["ParIso"] = newlisteObj;
3746 RunUpdatedJObject(CurrentObject);
3747 }
3748 }
3749 else
3750 {
3751 CurrentObject.remove("ParIso");
3752 on_updateJObject(CurrentObject);
3753 RunUpdatedJObject(CurrentObject);
3754 }
3755 }
3756
on_updateParam_clicked()3757 void DrawingOptions::on_updateParam_clicked()
3758 {
3759 on_updateButton_clicked();
3760 }
3761
on_actionPolygonWavefront_obj_triggered()3762 void DrawingOptions::on_actionPolygonWavefront_obj_triggered()
3763 {
3764 MathmodRef->SaveSceneAsObjPoly();
3765 }
3766
on_actionColorPolygonWavefront_obj_triggered()3767 void DrawingOptions::on_actionColorPolygonWavefront_obj_triggered()
3768 {
3769 MathmodRef->SaveSceneAsObjPoly(1);
3770 }
3771
on_linecolumn_2_valueChanged(int value)3772 void DrawingOptions::on_linecolumn_2_valueChanged(int value)
3773 {
3774 ui.ParamgroupBox_2->setTitle("Grid(u,v)/MaxGrid = (" + QString::number(value) +
3775 ", " + QString::number(value) +") / "+QString::number(Parameters->ParMaxGrid));
3776 if (!MathmodRef->ParObjet->isRunning())
3777 {
3778 (MathmodRef->RootObjet.CurrentJsonObject["ParIso"].isArray()) ?
3779 MathmodRef->linecolumn_valueChanged(value, PARISO_TYPE) : MathmodRef->linecolumn_valueChanged(value, PAR_TYPE);
3780 }
3781 else
3782 {
3783 ui.uv->blockSignals(true);
3784 ui.uv->setChecked(false);
3785 ui.uv->blockSignals(false);
3786 MathmodRef->uvactivated = -1;
3787 }
3788 }
3789
on_lineScrollBar_valueChanged(int value)3790 void DrawingOptions::on_lineScrollBar_valueChanged(int value)
3791 {
3792 ui.ParamgroupBox_2->setTitle(
3793 "Grid(u,v)/MaxGrid = (" + QString::number(value) + ", " +
3794 QString::number(MathmodRef->ParObjet->Ugrid) +") / "+QString::number(Parameters->ParMaxGrid));
3795 if (!MathmodRef->ParObjet->isRunning())
3796 {
3797 MathmodRef->line_valueChanged(value);
3798 }
3799 else
3800 {
3801 ui.uv->blockSignals(true);
3802 ui.uv->setChecked(false);
3803 ui.uv->blockSignals(false);
3804 MathmodRef->uvactivated = -1;
3805 }
3806 }
3807
on_coloneScrollBar_valueChanged(int value)3808 void DrawingOptions::on_coloneScrollBar_valueChanged(int value)
3809 {
3810 ui.ParamgroupBox_2->setTitle(
3811 "Param Grid(u,v)/MaxGrid = (" +
3812 QString::number(MathmodRef->ParObjet->Vgrid) + ", " +
3813 QString::number(value) +") / "+QString::number(Parameters->ParMaxGrid));
3814 if (!MathmodRef->ParObjet->isRunning())
3815 {
3816 MathmodRef->column_valueChanged(value);
3817 }
3818 else
3819 {
3820 ui.uv->blockSignals(true);
3821 ui.uv->setChecked(false);
3822 ui.uv->blockSignals(false);
3823 MathmodRef->uvactivated = -1;
3824 }
3825 }
3826
on_IsoComponent_activated(int index)3827 void DrawingOptions::on_IsoComponent_activated(int index)
3828 {
3829 UpdateDescription(index, ISO_TYPE, MathmodRef->RootObjet.CurrentTreestruct);
3830 updateShowIsoCmp(index);
3831 }
updateShowParComp(int index)3832 void DrawingOptions::updateShowParComp(int index)
3833 {
3834 if(MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[index])
3835 {
3836 ui.ShowParComp->setChecked(true);
3837 ui.ShowParComp->setText("Hide");
3838 }
3839 else
3840 {
3841 ui.ShowParComp->setChecked(false);
3842 ui.ShowParComp->setText("Show");
3843 }
3844 }
updateShowIsoCmp(int index)3845 void DrawingOptions::updateShowIsoCmp(int index)
3846 {
3847 uint idx=0;
3848 if(!MathmodRef->LocalScene.componentsinfos.pariso)
3849 idx = index;
3850 else
3851 idx = MathmodRef->LocalScene.componentsinfos.NbComponentsType[0]+index;
3852 if(MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[idx])
3853 {
3854 ui.ShowIsoComp->setChecked(true);
3855 ui.ShowIsoComp->setText("Hide");
3856 }
3857 else
3858 {
3859 ui.ShowIsoComp->setChecked(false);
3860 ui.ShowIsoComp->setText("Show");
3861 }
3862 }
on_ParamComponent_activated(int index)3863 void DrawingOptions::on_ParamComponent_activated(int index)
3864 {
3865 UpdateDescription(index, PAR_TYPE, MathmodRef->RootObjet.CurrentTreestruct);
3866 updateShowParComp(index);
3867 }
3868
on_xyzcheckBox2_clicked()3869 void DrawingOptions::on_xyzcheckBox2_clicked()
3870 {
3871 MathmodRef->LocalScene.animxyz *= -1;
3872 }
3873
on_xycheckBox2_clicked()3874 void DrawingOptions::on_xycheckBox2_clicked()
3875 {
3876 MathmodRef->LocalScene.animx *= -1;
3877 }
3878
on_xyhorizontalScrollBar2_valueChanged(int value)3879 void DrawingOptions::on_xyhorizontalScrollBar2_valueChanged(int value)
3880 {
3881 MathmodRef->LocalScene.animxValueStep = float(value) / 4;
3882 }
3883
on_xzcheckBox2_clicked()3884 void DrawingOptions::on_xzcheckBox2_clicked()
3885 {
3886 MathmodRef->LocalScene.animy *= -1;
3887 }
3888
on_xzhorizontalScrollBar2_valueChanged(int value)3889 void DrawingOptions::on_xzhorizontalScrollBar2_valueChanged(int value)
3890 {
3891 MathmodRef->LocalScene.animyValueStep = float(value) / 4;
3892 }
3893
on_yzcheckBox2_clicked()3894 void DrawingOptions::on_yzcheckBox2_clicked()
3895 {
3896 MathmodRef->LocalScene.animz *= -1;
3897 }
3898
on_yzhorizontalScrollBar2_valueChanged(int value)3899 void DrawingOptions::on_yzhorizontalScrollBar2_valueChanged(int value)
3900 {
3901 MathmodRef->LocalScene.animzValueStep = float(value) / 4;
3902 }
3903
on_InitMatrix_2_clicked()3904 void DrawingOptions::on_InitMatrix_2_clicked()
3905 {
3906 MathmodRef->LocalScene.RotStrength =
3907 MathmodRef->LocalScene.animxValueStep =
3908 MathmodRef->LocalScene.animyValueStep =
3909 MathmodRef->LocalScene.animzValueStep = 0.0;
3910 }
3911
on_xycheckBox_clicked()3912 void DrawingOptions::on_xycheckBox_clicked()
3913 {
3914 MathmodRef->ParObjet->tetaxy_ok *= -1;
3915 }
3916
on_xyhorizontalScrollBar_valueChanged(int value)3917 void DrawingOptions::on_xyhorizontalScrollBar_valueChanged(int value)
3918 {
3919 MathmodRef->ParObjet->tetaxy = value / 4.0;
3920 }
3921
on_xzcheckBox_clicked()3922 void DrawingOptions::on_xzcheckBox_clicked()
3923 {
3924 MathmodRef->ParObjet->tetaxz_ok *= -1;
3925 }
3926
on_xzhorizontalScrollBar_valueChanged(int value)3927 void DrawingOptions::on_xzhorizontalScrollBar_valueChanged(int value)
3928 {
3929 MathmodRef->ParObjet->tetaxz = value / 4.0;
3930 }
3931
on_yzcheckBox_clicked()3932 void DrawingOptions::on_yzcheckBox_clicked()
3933 {
3934 MathmodRef->ParObjet->tetayz_ok *= -1;
3935 }
3936
on_yzhorizontalScrollBar_valueChanged(int value)3937 void DrawingOptions::on_yzhorizontalScrollBar_valueChanged(int value)
3938 {
3939 MathmodRef->ParObjet->tetayz = value / 4.0;
3940 }
3941
on_xwcheckBox_clicked()3942 void DrawingOptions::on_xwcheckBox_clicked()
3943 {
3944 MathmodRef->ParObjet->tetaxw_ok *= -1;
3945 }
3946
on_xwhorizontalScrollBar_valueChanged(int value)3947 void DrawingOptions::on_xwhorizontalScrollBar_valueChanged(int value)
3948 {
3949 MathmodRef->ParObjet->tetaxw = value / 4.0;
3950 }
3951
on_ywcheckBox_clicked()3952 void DrawingOptions::on_ywcheckBox_clicked()
3953 {
3954 MathmodRef->ParObjet->tetayw_ok *= -1;
3955 }
3956
on_ywhorizontalScrollBar_valueChanged(int value)3957 void DrawingOptions::on_ywhorizontalScrollBar_valueChanged(int value)
3958 {
3959 MathmodRef->ParObjet->tetayw = value / 4.0;
3960 }
3961
on_zwcheckBox_clicked()3962 void DrawingOptions::on_zwcheckBox_clicked()
3963 {
3964 MathmodRef->ParObjet->tetazw_ok *= -1;
3965 }
3966
on_zwhorizontalScrollBar_valueChanged(int value)3967 void DrawingOptions::on_zwhorizontalScrollBar_valueChanged(int value)
3968 {
3969 MathmodRef->ParObjet->tetazw = value / 4.0;
3970 }
3971
on_linecolumn_3_valueChanged(int value)3972 void DrawingOptions::on_linecolumn_3_valueChanged(int value)
3973 {
3974 ui.ParamgroupBox_3->setTitle("Grid(u,v)/MaxGrid = (" + QString::number(value) +
3975 ", " + QString::number(value) +") / "+QString::number(Parameters->ParMaxGrid));
3976 if (!MathmodRef->ParObjet->isRunning())
3977 {
3978 MathmodRef->linecolumn_valueChanged_2(value);
3979 }
3980 else
3981 {
3982 ui.uv4D->blockSignals(true);
3983 ui.uv4D->setChecked(false);
3984 ui.uv4D->blockSignals(false);
3985 MathmodRef->uvactivated4D = -1;
3986 }
3987 }
3988
oncolor_4activated(int index)3989 void DrawingOptions::oncolor_4activated(int index)
3990 {
3991 MathmodRef->colorstypeParam(index);
3992 }
3993
on_uv4D_clicked()3994 void DrawingOptions::on_uv4D_clicked()
3995 {
3996 MathmodRef->slot_uv4D_clicked();
3997 }
3998
on_uv_clicked()3999 void DrawingOptions::on_uv_clicked()
4000 {
4001 (MathmodRef->RootObjet.CurrentJsonObject["ParIso"].isArray()) ?
4002 MathmodRef->slot_uv_clicked(PARISO_TYPE) : MathmodRef->slot_uv_clicked(PAR_TYPE);
4003 }
4004
on_InitMatrix_clicked()4005 void DrawingOptions::on_InitMatrix_clicked()
4006 {
4007 MathmodRef->ParObjet->mat4D.unit();
4008 on_calculate_clicked();
4009 }
4010
on_ActivateCND_clicked(bool checked)4011 void DrawingOptions::on_ActivateCND_clicked(bool checked)
4012 {
4013 ui.CNDgroupBox->setEnabled(checked);
4014 MathmodRef->LocalScene.activarecnd = checked;
4015 MathmodRef->update();
4016 }
4017
on_TCNDcheckBox_clicked(bool checked)4018 void DrawingOptions::on_TCNDcheckBox_clicked(bool checked)
4019 {
4020 MathmodRef->LocalScene.cndoptions[3] = checked;
4021 MathmodRef->update();
4022 }
4023
on_FCNDcheckBox_clicked(bool checked)4024 void DrawingOptions::on_FCNDcheckBox_clicked(bool checked)
4025 {
4026 MathmodRef->LocalScene.cndoptions[0] = checked;
4027 MathmodRef->update();
4028 }
4029
on_TNCNDcheckBox_clicked(bool checked)4030 void DrawingOptions::on_TNCNDcheckBox_clicked(bool checked)
4031 {
4032 MathmodRef->LocalScene.cndoptions[4] = checked;
4033 MathmodRef->update();
4034 }
4035
on_FNCNDcheckBox_clicked(bool checked)4036 void DrawingOptions::on_FNCNDcheckBox_clicked(bool checked)
4037 {
4038 MathmodRef->LocalScene.cndoptions[1] = checked;
4039 MathmodRef->update();
4040 }
4041
on_TBordercheckBox_clicked(bool checked)4042 void DrawingOptions::on_TBordercheckBox_clicked(bool checked)
4043 {
4044 MathmodRef->LocalScene.cndoptions[2] = checked;
4045 MathmodRef->update();
4046 }
4047
on_actionMesh_triggered()4048 void DrawingOptions::on_actionMesh_triggered()
4049 {
4050 MathmodRef->Mesh();
4051 }
4052
on_calculate_clicked()4053 void DrawingOptions::on_calculate_clicked()
4054 {
4055 on_InitTButton_clicked();
4056 Run_JsonObject_activeted();
4057 }
4058
on_actionAbout_2_triggered()4059 void DrawingOptions::on_actionAbout_2_triggered()
4060 {
4061 ab.show();
4062 }
4063
on_actionLoad_json_script_triggered()4064 void DrawingOptions::on_actionLoad_json_script_triggered()
4065 {
4066 LoadNewFileModels(true);
4067 }
4068
on_actionScreenshot_triggered()4069 void DrawingOptions::on_actionScreenshot_triggered()
4070 {
4071 videoplay();
4072 }
4073
on_actionEditor_triggered()4074 void DrawingOptions::on_actionEditor_triggered()
4075 {
4076 editorwin();
4077 }
4078
on_actionColors_triggered()4079 void DrawingOptions::on_actionColors_triggered()
4080 {
4081 colorsoptions();
4082 }
4083
on_Infos_clicked()4084 void DrawingOptions::on_Infos_clicked()
4085 {
4086 MathmodRef->iso_infos();
4087 }
4088
on_Mesh_clicked()4089 void DrawingOptions::on_Mesh_clicked()
4090 {
4091 MathmodRef->Mesh();
4092 }
4093
on_Fill_clicked()4094 void DrawingOptions::on_Fill_clicked()
4095 {
4096 MathmodRef->fill();
4097 }
4098
on_Trian_clicked()4099 void DrawingOptions::on_Trian_clicked()
4100 {
4101 MathmodRef->slot_triangles_clicked();
4102 }
4103
on_actionOpenGL_triggered()4104 void DrawingOptions::on_actionOpenGL_triggered()
4105 {
4106 Parameters->on_loadconfig_clicked();
4107 Parameters->show();
4108 }
4109
on_cut_clicked()4110 void DrawingOptions::on_cut_clicked()
4111 {
4112 if (ui.IsoComponent->count() > 1)
4113 {
4114 ui.isoNameEdit->setText("");
4115 on_updateButton_clicked();
4116 }
4117 else
4118 {
4119 QMessageBox msgBox;
4120 msgBox.setText("Only one component in this mathematical model.");
4121 msgBox.exec();
4122 }
4123 }
4124
on_actionConvert_K3DS_script_triggered()4125 void DrawingOptions::on_actionConvert_K3DS_script_triggered()
4126 {
4127 LoadK3DSurfScript("", 1);
4128 }
4129
on_actionConfiguration_triggered()4130 void DrawingOptions::on_actionConfiguration_triggered()
4131 {
4132 on_actionOpenGL_triggered();
4133 }
4134
on_actionColors_2_triggered()4135 void DrawingOptions::on_actionColors_2_triggered()
4136 {
4137 on_actionColors_triggered();
4138 }
4139
on_Load_clicked()4140 void DrawingOptions::on_Load_clicked()
4141 {
4142 LoadNewFileModels(true);
4143 }
4144
on_ParamComponent_2_activated(int index)4145 void DrawingOptions::on_ParamComponent_2_activated(int index)
4146 {
4147 UpdateDescription(index, PAR_4D_TYPE,
4148 MathmodRef->RootObjet.CurrentTreestruct);
4149 }
4150
on_updateParam_2_clicked()4151 void DrawingOptions::on_updateParam_2_clicked()
4152 {
4153 on_updateButton_clicked();
4154 }
4155
Multiplier(int x,int y,int z,QJsonObject & iso,int index)4156 void DrawingOptions::Multiplier(int x, int y, int z, QJsonObject &iso,
4157 int index)
4158 {
4159 QString Minx, Miny, Minz, Maxx, Maxy, Maxz;
4160 QString Difx, Dify, Difz;
4161 QString componentName, fct, cnd, grid;
4162 QJsonArray oldminx, oldminy, oldminz, oldmaxx, oldmaxy, oldmaxz, oldcmpname,
4163 oldfxyz, oldcnd, oldgrid;
4164 bool cndb = false;
4165 bool gridb = false;
4166 oldminx = iso["Iso3D"].toObject()["Xmin"].toArray();
4167 oldminy = iso["Iso3D"].toObject()["Ymin"].toArray();
4168 oldminz = iso["Iso3D"].toObject()["Zmin"].toArray();
4169 oldmaxx = iso["Iso3D"].toObject()["Xmax"].toArray();
4170 oldmaxy = iso["Iso3D"].toObject()["Ymax"].toArray();
4171 oldmaxz = iso["Iso3D"].toObject()["Zmax"].toArray();
4172 oldcmpname = iso["Iso3D"].toObject()["Component"].toArray();
4173 oldfxyz = iso["Iso3D"].toObject()["Fxyz"].toArray();
4174 if ((gridb = (iso["Iso3D"].toObject()["Grid"].isArray())))
4175 grid =
4176 (oldgrid = iso["Iso3D"].toObject()["Grid"].toArray())[index].toString();
4177 if ((cndb = (iso["Iso3D"].toObject()["Cnd"].isArray())))
4178 cnd = (oldcnd = iso["Iso3D"].toObject()["Cnd"].toArray())[index].toString();
4179 componentName = oldcmpname[index].toString();
4180 fct = oldfxyz[index].toString();
4181 Minx = "(" + oldminx[index].toString() + ")";
4182 Miny = "(" + oldminy[index].toString() + ")";
4183 Minz = "(" + oldminz[index].toString() + ")";
4184 Maxx = "(" + oldmaxx[index].toString() + ")";
4185 Maxy = "(" + oldmaxy[index].toString() + ")";
4186 Maxz = "(" + oldmaxz[index].toString() + ")";
4187 Difx = "((" + Maxx + "-" + Minx + ")/" + QString::number(x) + ")";
4188 Dify = "((" + Maxy + "-" + Miny + ")/" + QString::number(y) + ")";
4189 Difz = "((" + Maxz + "-" + Minz + ")/" + QString::number(z) + ")";
4190 int l = 0;
4191 for (int i = 0; i < x; i++)
4192 for (int j = 0; j < y; j++)
4193 for (int k = 0; k < z; k++)
4194 {
4195 oldminx.append(Minx + "+" + QString::number(i) + "*" + Difx);
4196 oldmaxx.append(Minx + "+" + QString::number(i + 1) + "*" + Difx);
4197 oldminy.append(Miny + "+" + QString::number(j) + "*" + Dify);
4198 oldmaxy.append(Miny + "+" + QString::number(j + 1) + "*" + Dify);
4199 oldminz.append(Minz + "+" + QString::number(k) + "*" + Difz);
4200 oldmaxz.append(Minz + "+" + QString::number(k + 1) + "*" + Difz);
4201 oldcmpname.append(componentName + QString::number(l));
4202 oldfxyz.append(fct);
4203 if (cndb)
4204 oldcnd.append(cnd);
4205 if (gridb)
4206 oldgrid.append(grid);
4207 l++;
4208 }
4209 oldminx.removeAt(index);
4210 oldminy.removeAt(index);
4211 oldminz.removeAt(index);
4212 oldmaxx.removeAt(index);
4213 oldmaxy.removeAt(index);
4214 oldmaxz.removeAt(index);
4215 oldcmpname.removeAt(index);
4216 oldfxyz.removeAt(index);
4217 if (cndb)
4218 oldcnd.removeAt(index);
4219 if (gridb)
4220 oldgrid.removeAt(index);
4221 QJsonObject tmp = iso["Iso3D"].toObject();
4222 tmp["Xmin"] = oldminx;
4223 tmp["Ymin"] = oldminy;
4224 tmp["Zmin"] = oldminz;
4225 tmp["Xmax"] = oldmaxx;
4226 tmp["Ymax"] = oldmaxy;
4227 tmp["Zmax"] = oldmaxz;
4228 tmp["Component"] = oldcmpname;
4229 tmp["Fxyz"] = oldfxyz;
4230 if (cndb)
4231 tmp["Cnd"] = oldcnd;
4232 if (gridb)
4233 tmp["Grid"] = oldgrid;
4234 iso["Iso3D"] = tmp;
4235 }
4236
on_Multiplier_clicked()4237 void DrawingOptions::on_Multiplier_clicked()
4238 {
4239 int i = ui.xcomboBox->currentIndex(), j = ui.ycomboBox->currentIndex(),
4240 k = ui.zcomboBox->currentIndex();
4241 if (i > 0 && j > 0 && k > 0)
4242 {
4243 QJsonObject copyCurrentObject = MathmodRef->RootObjet.CurrentJsonObject;
4244 // Erase unused Keys:
4245 copyCurrentObject.remove("Param3D");
4246 copyCurrentObject.remove("Param4D");
4247 copyCurrentObject.remove("Param3D_C");
4248 copyCurrentObject.remove("Param4D_C");
4249 Multiplier(i, j, k, copyCurrentObject, IndexcurrentComponent);
4250 // Draw here
4251 DrawJsonModel(copyCurrentObject);
4252 }
4253 // Init Combo
4254 ui.xcomboBox->setCurrentIndex(0);
4255 ui.ycomboBox->setCurrentIndex(0);
4256 ui.zcomboBox->setCurrentIndex(0);
4257 }
4258
UpdateGuiMaxgrid()4259 void DrawingOptions::UpdateGuiMaxgrid()
4260 {
4261 int maxgrd = int(Parameters->IsoMaxGrid);
4262 ui.xyzg->blockSignals(true);
4263 ui.xyzg->setMaximum(maxgrd);
4264 ui.xyzg->setValue(int(Parameters->InitIsoGrid));
4265 ui.xyzg->blockSignals(false);
4266 ui.linecolumn_2->blockSignals(true);
4267 ui.linecolumn_2->setMaximum(int(Parameters->ParMaxGrid));
4268 ui.linecolumn_2->setValue(int(Parameters->InitParGrid));
4269 ui.linecolumn_2->blockSignals(false);
4270 ui.linecolumn_3->blockSignals(true);
4271 ui.linecolumn_3->setMaximum(int(Parameters->ParMaxGrid));
4272 ui.linecolumn_3->setValue(int(Parameters->InitParGrid));
4273 ui.linecolumn_3->blockSignals(false);
4274 }
4275
UpdateGui(int argc)4276 void DrawingOptions::UpdateGui(int argc)
4277 {
4278 UpdateGuiMaxgrid();
4279 ListeModelTexture LstModelTexture = (Parameters->LoadCollectionModels(
4280 JSONMathModels, MathmodRef->collection, argc));
4281 // Load the script containing isosurface and parametric formulas:
4282 ui.choice->insertItems(0, LstModelTexture.listeModels);
4283 ui.comboBoxTexture->insertItems(0, LstModelTexture.listeTextures);
4284 ui.comboBoxPigment->insertItems(0, LstModelTexture.listePigments);
4285 AddListModels();
4286 // Threads setting:
4287 SetThreadValues(Parameters->Threads);
4288 // OpenGl specular:
4289 SetSpecularValues(Parameters->Specular);
4290 // OpenGl shininess:
4291 SetShininessValue(Parameters->Shininess);
4292 // OpenGl diffuse:
4293 SetDiffuseValues(Parameters->Diffuse);
4294 // OpenGl Ambient:
4295 SetAmbientValues(Parameters->Ambient);
4296 // Gl Front Face Suupport
4297 if(!Parameters->glFrontFacingSupport)
4298 SetglFrontFacingSupport();
4299 // Show the two windows of the application:
4300 move(Parameters->ControlX, Parameters->ControlY);
4301 resize(Parameters->ControlW, Parameters->ControlH);
4302 // ui.CndGroupBox->hide();
4303 // ui.NameLabel->hide();
4304 MathmodRef->move(Parameters->GlwinX, Parameters->GlwinY);
4305 MathmodRef->resize(Parameters->GlwinW, Parameters->GlwinH);
4306 //MathmodRef->setFixedSize(Parameters->GlwinW, Parameters->GlwinH);
4307 // Pigment/texture
4308 ui.textureEdit->hide();
4309 // Hide all sliders
4310 HideSliders();
4311 // ProgressBar + text informations (set to minimum size 0)
4312 QList<int> Sizes;
4313 Sizes << 500 << 300;
4314 ui.splitter_6->setSizes(Sizes);
4315 ui.Messagetext->setFontPointSize(10);
4316 }
4317
on_TimeStepScrollBar_valueChanged(int value)4318 void DrawingOptions::on_TimeStepScrollBar_valueChanged(int value)
4319 {
4320 double P = 1.0 / double(value);
4321 uint maxnbthreads = MathmodRef->IsoObjet->WorkerThreadsNumber;
4322 ui.label_5->setText("1/" + QString::number(value));
4323 MathmodRef->IsoObjet->masterthread->pace = P;
4324 for (uint nbthreds = 0; nbthreds < maxnbthreads - 1; nbthreds++)
4325 MathmodRef->IsoObjet->workerthreads[nbthreds].pace = P;
4326 MathmodRef->ParObjet->masterthread->pace = P;
4327 for (uint nbthreds = 0; nbthreds < maxnbthreads - 1; nbthreds++)
4328 MathmodRef->ParObjet->workerthreads[nbthreds].pace = P;
4329 }
4330
on_InitTButton_clicked()4331 void DrawingOptions::on_InitTButton_clicked()
4332 {
4333 uint maxnbthreads = MathmodRef->IsoObjet->WorkerThreadsNumber;
4334 MathmodRef->IsoObjet->masterthread->stepMorph = 0;
4335 for (uint nbthreds = 0; nbthreds < maxnbthreads - 1; nbthreds++)
4336 MathmodRef->IsoObjet->workerthreads[nbthreds].stepMorph = 0;
4337 MathmodRef->ParObjet->masterthread->stepMorph = 0;
4338 for (uint nbthreds = 0; nbthreds < maxnbthreads - 1; nbthreds++)
4339 MathmodRef->ParObjet->workerthreads[nbthreds].stepMorph = 0;
4340 }
4341
ShowErrorMessage(QJsonParseError & err,QString & script)4342 void DrawingOptions::ShowErrorMessage(QJsonParseError &err, QString &script)
4343 {
4344 QString sortie;
4345 QMessageBox message;
4346 message.setWindowTitle("Error at : ");
4347 sortie = (script);
4348 int before, after;
4349 if (sortie.length() > (err.offset + 30))
4350 after = 30;
4351 else
4352 after = sortie.length() - err.offset;
4353 sortie.truncate(err.offset + after);
4354 if (err.offset - 30 > 0)
4355 before = 30;
4356 else
4357 before = 0;
4358 sortie = sortie.remove(0, err.offset - before);
4359 sortie.replace("\t", " ");
4360 sortie.replace("\n", " ");
4361 sortie.insert(before, " >>> Error <<< ");
4362 message.setText("Error : " + err.errorString() +
4363 " at position: " + QString::number(err.offset) +
4364 "\n\n***********\n" + "..." + sortie + "...");
4365 message.adjustSize();
4366 message.exec();
4367 return;
4368 }
4369
on_pushButton_2_clicked()4370 void DrawingOptions::on_pushButton_2_clicked()
4371 {
4372 QJsonParseError err;
4373 QString sortie;
4374 QString script =
4375 ui.ParamEdit->toPlainText().trimmed().replace("\n", "").replace("\t", "").replace("DOTSYMBOL", Parameters->dotsymbol.toStdString().c_str());
4376 QJsonDocument doc = QJsonDocument::fromJson(script.toUtf8(), &err);
4377 if (err.error)
4378 {
4379 ShowErrorMessage(err, script);
4380 return;
4381 }
4382 Parameters->SaveToFile_CurentMathModel(doc.object());
4383 }
4384
on_pushButton_3_clicked()4385 void DrawingOptions::on_pushButton_3_clicked()
4386 {
4387 ui.isoNameEdit->setText(ui.isoNameEdit->toPlainText() + "_01");
4388 on_updateButton_clicked();
4389 }
4390
on_cut_2_clicked()4391 void DrawingOptions::on_cut_2_clicked()
4392 {
4393 if (ui.ParamComponent->count() > 1)
4394 {
4395 ui.paramNameEdit->setText("");
4396 on_updateButton_clicked();
4397 }
4398 else
4399 {
4400 QMessageBox msgBox;
4401 msgBox.setText("Only one component in this mathematical model.");
4402 msgBox.exec();
4403 }
4404 }
4405
on_pushButton_4_clicked()4406 void DrawingOptions::on_pushButton_4_clicked()
4407 {
4408 ui.paramNameEdit->setText(ui.paramNameEdit->toPlainText() + "_01");
4409 on_updateButton_clicked();
4410 }
4411
on_color_5_activated(int index)4412 void DrawingOptions::on_color_5_activated(int index)
4413 {
4414 MathmodRef->colorstypeParIso(index);
4415 }
4416
on_transparent_ParIso_valueChanged(int value)4417 void DrawingOptions::on_transparent_ParIso_valueChanged(int value)
4418 {
4419 MathmodRef->transparency(value, IndexcurrentComponent);
4420 }
4421
on_comboBoxTexture_activated(int index)4422 void DrawingOptions::on_comboBoxTexture_activated(int index)
4423 {
4424 QJsonObject tmp;
4425 tmp = MathmodRef->RootObjet.CurrentJsonObject;
4426
4427 if (index > 0)
4428 {
4429 QJsonDocument document;
4430 document.setObject(MathmodRef->collection.JTextures[index - 1].toObject());
4431 ui.textureEdit->setText(QString(document.toJson()));
4432 DrawJsonModel(tmp, index - 1);
4433 }
4434 return;
4435 }
4436
on_comboBoxPigment_activated(int index)4437 void DrawingOptions::on_comboBoxPigment_activated(int index)
4438 {
4439 QJsonObject tmp;
4440 tmp = MathmodRef->RootObjet.CurrentJsonObject;
4441 if (index > 0)
4442 {
4443 QJsonDocument document;
4444 document.setObject(MathmodRef->collection.JPigments[index - 1].toObject());
4445 ui.textureEdit->setText(QString(document.toJson()));
4446 DrawJsonModel(tmp, 1000 + index - 1);
4447 }
4448 return;
4449 }
4450
on_actionTrianglesWavefront_obj_triggered()4451 void DrawingOptions::on_actionTrianglesWavefront_obj_triggered()
4452 {
4453 MathmodRef->SaveSceneAsObjTrian();
4454 }
4455
on_actionColorTrianglesWavefront_obj_triggered()4456 void DrawingOptions::on_actionColorTrianglesWavefront_obj_triggered()
4457 {
4458 MathmodRef->SaveSceneAsObjTrian(1);
4459 }
4460
on_ShowtextureScript_clicked()4461 void DrawingOptions::on_ShowtextureScript_clicked()
4462 {
4463 static int show = -1;
4464 show *= -1;
4465 if (show == 1)
4466 {
4467 ui.textureEdit->show();
4468 ui.ShowtextureScript->setText("Hide Script");
4469 }
4470 else
4471 {
4472 ui.textureEdit->hide();
4473 ui.ShowtextureScript->setText("Show Script");
4474 }
4475 }
4476
on_pushButton_5_clicked()4477 void DrawingOptions::on_pushButton_5_clicked()
4478 {
4479 QJsonParseError err;
4480 QString sortie;
4481 QString script = ui.textureEdit->toPlainText().trimmed().replace("\n", "").replace("\t", "").replace("DOTSYMBOL", Parameters->dotsymbol.toStdString().c_str());
4482 QJsonDocument doc = QJsonDocument::fromJson(script.toUtf8(), &err);
4483 if (err.error)
4484 {
4485 ShowErrorMessage(err, script);
4486 return;
4487 }
4488 QJsonObject tmp = doc.object();
4489 if (tmp["Texture"].isObject())
4490 {
4491 MathmodRef->collection.JTextures[ui.comboBoxTexture->currentIndex() - 1] =doc.object();
4492 on_comboBoxTexture_activated(ui.comboBoxTexture->currentIndex());
4493 }
4494 else
4495 {
4496 MathmodRef->collection.JPigments[ui.comboBoxPigment->currentIndex() - 1] =doc.object();
4497 on_comboBoxPigment_activated(ui.comboBoxPigment->currentIndex());
4498 }
4499 }
4500
on_C1ScrollBar_valueChanged(int val)4501 void DrawingOptions::on_C1ScrollBar_valueChanged(int val)
4502 {
4503 CScrollBar_valueChanged(val, 0);
4504 }
4505
on_C2ScrollBar_valueChanged(int val)4506 void DrawingOptions::on_C2ScrollBar_valueChanged(int val)
4507 {
4508 CScrollBar_valueChanged(val, 1);
4509 }
4510
on_C3ScrollBar_valueChanged(int val)4511 void DrawingOptions::on_C3ScrollBar_valueChanged(int val)
4512 {
4513 CScrollBar_valueChanged(val, 2);
4514 }
4515
on_C4ScrollBar_valueChanged(int val)4516 void DrawingOptions::on_C4ScrollBar_valueChanged(int val)
4517 {
4518 CScrollBar_valueChanged(val, 3);
4519 }
4520
on_C5ScrollBar_valueChanged(int val)4521 void DrawingOptions::on_C5ScrollBar_valueChanged(int val)
4522 {
4523 CScrollBar_valueChanged(val, 4);
4524 }
4525
on_C6ScrollBar_valueChanged(int val)4526 void DrawingOptions::on_C6ScrollBar_valueChanged(int val)
4527 {
4528 CScrollBar_valueChanged(val, 5);
4529 }
4530
on_C7ScrollBar_valueChanged(int val)4531 void DrawingOptions::on_C7ScrollBar_valueChanged(int val)
4532 {
4533 CScrollBar_valueChanged(val, 6);
4534 }
4535
on_C8ScrollBar_valueChanged(int val)4536 void DrawingOptions::on_C8ScrollBar_valueChanged(int val)
4537 {
4538 CScrollBar_valueChanged(val, 7);
4539 }
4540
on_C9ScrollBar_valueChanged(int val)4541 void DrawingOptions::on_C9ScrollBar_valueChanged(int val)
4542 {
4543 CScrollBar_valueChanged(val, 8);
4544 }
4545
on_C10ScrollBar_valueChanged(int val)4546 void DrawingOptions::on_C10ScrollBar_valueChanged(int val)
4547 {
4548 CScrollBar_valueChanged(val, 9);
4549 }
4550
on_C11ScrollBar_valueChanged(int val)4551 void DrawingOptions::on_C11ScrollBar_valueChanged(int val)
4552 {
4553 CScrollBar_valueChanged(val, 10);
4554 }
4555
on_C12ScrollBar_valueChanged(int val)4556 void DrawingOptions::on_C12ScrollBar_valueChanged(int val)
4557 {
4558 CScrollBar_valueChanged(val, 11);
4559 }
4560
on_C13ScrollBar_valueChanged(int val)4561 void DrawingOptions::on_C13ScrollBar_valueChanged(int val)
4562 {
4563 CScrollBar_valueChanged(val, 12);
4564 }
4565
on_C14ScrollBar_valueChanged(int val)4566 void DrawingOptions::on_C14ScrollBar_valueChanged(int val)
4567 {
4568 CScrollBar_valueChanged(val, 13);
4569 }
4570
on_C15ScrollBar_valueChanged(int val)4571 void DrawingOptions::on_C15ScrollBar_valueChanged(int val)
4572 {
4573 CScrollBar_valueChanged(val, 14);
4574 }
4575
on_C16ScrollBar_valueChanged(int val)4576 void DrawingOptions::on_C16ScrollBar_valueChanged(int val)
4577 {
4578 CScrollBar_valueChanged(val, 15);
4579 }
4580
on_C17ScrollBar_valueChanged(int val)4581 void DrawingOptions::on_C17ScrollBar_valueChanged(int val)
4582 {
4583 CScrollBar_valueChanged(val, 16);
4584 }
4585
on_C18ScrollBar_valueChanged(int val)4586 void DrawingOptions::on_C18ScrollBar_valueChanged(int val)
4587 {
4588 CScrollBar_valueChanged(val, 17);
4589 }
4590
on_C19ScrollBar_valueChanged(int val)4591 void DrawingOptions::on_C19ScrollBar_valueChanged(int val)
4592 {
4593 CScrollBar_valueChanged(val, 18);
4594 }
4595
on_C20ScrollBar_valueChanged(int val)4596 void DrawingOptions::on_C20ScrollBar_valueChanged(int val)
4597 {
4598 CScrollBar_valueChanged(val, 19);
4599 }
4600
CScrollBar_valueChanged(int val,int idx)4601 void DrawingOptions::CScrollBar_valueChanged(int val, int idx)
4602 {
4603 MathmodRef->LocalScene.slider = 1;
4604 MathmodRef->IsoObjet->masterthread->SliderValues[uint(idx)] =val;
4605 MathmodRef->ParObjet->masterthread->SliderValues[uint(idx)] =val;
4606 SliderArray[idx].SliderLabel->setText(qlstnames.at(idx) + " = " +QString::number(val));
4607 if (CurrentFormulaType == 2)
4608 MathmodRef->ProcessNewIsoSurface();
4609 else
4610 MathmodRef->ParametricSurfaceProcess(CurrentFormulaType);
4611 MathmodRef->LocalScene.slider = -1;
4612 }
4613
on_PredefinedSets_activated(int index)4614 void DrawingOptions::on_PredefinedSets_activated(int index)
4615 {
4616 indexcurrentSet = index;
4617 if (index > 0)
4618 {
4619 int size = (qlstnames.size());
4620 MathmodRef->LocalScene.slider = 1;
4621 for (int i = 0; i < size; ++i)
4622 {
4623 MathmodRef->IsoObjet->masterthread->SliderValues[uint(i)] =
4624 qlstPos.at(i + (index - 1) * size).toDouble();
4625 MathmodRef->ParObjet->masterthread->SliderValues[uint(i)] =
4626 qlstPos.at(i + (index - 1) * size).toDouble();
4627 }
4628 for (int sl = 0; sl < 20; sl++)
4629 {
4630 if (size >= (sl + 1))
4631 {
4632 (SliderArray[sl].SliderLabel)
4633 ->setText(qlstnames.at(sl) + " = " +qlstPos.at(sl + (index - 1) * size) + "(" +qlstStep.at(sl) + ")");
4634 (SliderArray[sl].SliderScrollBar)->blockSignals(true);
4635 if (qlstmin.size() > qlstnames.size())
4636 {
4637 (SliderArray[sl].SliderScrollBar)->setMaximum(qlstmax.at(sl + (index - 1) * size).toInt());
4638 (SliderArray[sl].SliderScrollBar)->setMinimum(qlstmin.at(sl + (index - 1) * size).toInt());
4639 (SliderArray[sl].SliderScrollBar)->setSingleStep(qlstStep.at(sl + (index - 1) * size).toInt());
4640 (SliderArray[sl].SliderLabel)->setText(qlstnames.at(sl) + " = " +qlstPos.at(sl + (index - 1) * size) + "(" +qlstStep.at(sl + (index - 1) * size) + ")");
4641 (SliderArray[sl].SliderLabelMin)->setText(qlstmin.at(sl + (index - 1) * size));
4642 (SliderArray[sl].SliderLabelMax)->setText(qlstmax.at(sl + (index - 1) * size));
4643 }
4644 (SliderArray[sl].SliderScrollBar)->setSliderPosition(qlstPos.at(sl + (index - 1) * size).toInt());
4645 (SliderArray[sl].SliderScrollBar)->blockSignals(false);
4646 }
4647 }
4648 // Draw
4649 if (CurrentFormulaType == 2)
4650 MathmodRef->ProcessNewIsoSurface();
4651 else
4652 MathmodRef->ParametricSurfaceProcess(CurrentFormulaType);
4653 MathmodRef->LocalScene.slider = -1;
4654 }
4655 }
CIndextoolButton_clicked(int idx)4656 void DrawingOptions::CIndextoolButton_clicked(int idx)
4657 {
4658 int range = (indexcurrentSet < 1)? (idx - 1) : (indexcurrentSet - 1) * qlstnames.size() + (idx - 1);
4659 sliderconf.currentSlider = (idx - 1);
4660 sliderconf.ui.MaxEdit->setText(qlstmax[range]);
4661 sliderconf.ui.MinEdit->setText(qlstmin[range]);
4662 sliderconf.ui.StepEdit->setText(qlstStep[range]);
4663 sliderconf.ui.PosEdit->setText(qlstPos[range]);
4664 sliderconf.ui.ParametersComboBox->blockSignals(true);
4665 sliderconf.ui.ParametersComboBox->setCurrentIndex(idx);
4666 sliderconf.ui.ParametersComboBox->blockSignals(false);
4667 sliderconf.show();
4668 }
4669
on_C20toolButton_clicked()4670 void DrawingOptions::on_C20toolButton_clicked()
4671 {
4672 CIndextoolButton_clicked(20);
4673 }
4674
on_C19toolButton_clicked()4675 void DrawingOptions::on_C19toolButton_clicked()
4676 {
4677 CIndextoolButton_clicked(19);
4678 }
4679
on_C18toolButton_clicked()4680 void DrawingOptions::on_C18toolButton_clicked()
4681 {
4682 CIndextoolButton_clicked(18);
4683 }
4684
on_C17toolButton_clicked()4685 void DrawingOptions::on_C17toolButton_clicked()
4686 {
4687 CIndextoolButton_clicked(17);
4688 }
4689
on_C16toolButton_clicked()4690 void DrawingOptions::on_C16toolButton_clicked()
4691 {
4692 CIndextoolButton_clicked(16);
4693 }
4694
on_C15toolButton_clicked()4695 void DrawingOptions::on_C15toolButton_clicked()
4696 {
4697 CIndextoolButton_clicked(15);
4698 }
4699
on_C14toolButton_clicked()4700 void DrawingOptions::on_C14toolButton_clicked()
4701 {
4702 CIndextoolButton_clicked(14);
4703 }
4704
on_C13toolButton_clicked()4705 void DrawingOptions::on_C13toolButton_clicked()
4706 {
4707 CIndextoolButton_clicked(13);
4708 }
4709
on_C12toolButton_clicked()4710 void DrawingOptions::on_C12toolButton_clicked()
4711 {
4712 CIndextoolButton_clicked(12);
4713 }
4714
on_C11toolButton_clicked()4715 void DrawingOptions::on_C11toolButton_clicked()
4716 {
4717 CIndextoolButton_clicked(11);
4718 }
4719
on_C10toolButton_clicked()4720 void DrawingOptions::on_C10toolButton_clicked()
4721 {
4722 CIndextoolButton_clicked(10);
4723 }
4724
on_C9toolButton_clicked()4725 void DrawingOptions::on_C9toolButton_clicked()
4726 {
4727 CIndextoolButton_clicked(9);
4728 }
4729
on_C8toolButton_clicked()4730 void DrawingOptions::on_C8toolButton_clicked()
4731 {
4732 CIndextoolButton_clicked(8);
4733 }
4734
on_C7toolButton_clicked()4735 void DrawingOptions::on_C7toolButton_clicked()
4736 {
4737 CIndextoolButton_clicked(7);
4738 }
4739
on_C6toolButton_clicked()4740 void DrawingOptions::on_C6toolButton_clicked()
4741 {
4742 CIndextoolButton_clicked(6);
4743 }
4744
on_C5toolButton_clicked()4745 void DrawingOptions::on_C5toolButton_clicked()
4746 {
4747 CIndextoolButton_clicked(5);
4748 }
4749
on_C4toolButton_clicked()4750 void DrawingOptions::on_C4toolButton_clicked()
4751 {
4752 CIndextoolButton_clicked(4);
4753 }
4754
on_C3toolButton_clicked()4755 void DrawingOptions::on_C3toolButton_clicked()
4756 {
4757 CIndextoolButton_clicked(3);
4758 }
4759
on_C2toolButton_clicked()4760 void DrawingOptions::on_C2toolButton_clicked()
4761 {
4762 CIndextoolButton_clicked(2);
4763 }
4764
on_C1toolButton_clicked()4765 void DrawingOptions::on_C1toolButton_clicked()
4766 {
4767 CIndextoolButton_clicked(1);
4768 }
4769
update_slider_param()4770 void DrawingOptions::update_slider_param()
4771 {
4772 int SliderIndex = sliderconf.currentSlider;
4773
4774 for (int sl = 0; sl < 20; sl++)
4775 {
4776 if (SliderIndex == sl)
4777 {
4778 qlstmax[sl] = sliderconf.ui.MaxEdit->text();
4779 qlstmin[sl] = sliderconf.ui.MinEdit->text();
4780 qlstStep[sl] = sliderconf.ui.StepEdit->text();
4781 qlstPos[sl] = sliderconf.ui.PosEdit->text();
4782 (SliderArray[sl].SliderScrollBar)->blockSignals(true);
4783 (SliderArray[sl].SliderScrollBar)->setMaximum(qlstmax.at(sl).toInt());
4784 (SliderArray[sl].SliderScrollBar)->setMinimum(qlstmin.at(sl).toInt());
4785 (SliderArray[sl].SliderScrollBar)->setSingleStep(qlstStep.at(sl).toInt());
4786 (SliderArray[sl].SliderScrollBar)->setPageStep(qlstStep.at(sl).toInt());
4787 (SliderArray[sl].SliderScrollBar)->setSliderPosition(qlstPos.at(sl).toInt());
4788 (SliderArray[sl].SliderLabel)->setText(qlstnames.at(sl) + " = " + qlstPos.at(sl) + "(" +qlstStep.at(sl) + ")");
4789 (SliderArray[sl].SliderLabelMin)->setText(qlstmin.at(sl));
4790 (SliderArray[sl].SliderLabelMax)->setText(qlstmax.at(sl));
4791 (SliderArray[sl].SliderScrollBar)->blockSignals(false);
4792 MathmodRef->IsoObjet->masterthread->SliderNames.push_back(qlstnames.at(sl).toStdString());
4793 MathmodRef->ParObjet->masterthread->SliderNames.push_back(qlstnames.at(sl).toStdString());
4794 MathmodRef->IsoObjet->masterthread->SliderValues.push_back(qlstPos.at(sl).toDouble());
4795 MathmodRef->ParObjet->masterthread->SliderValues.push_back(qlstPos.at(sl).toDouble());
4796 }
4797 }
4798 // Draw
4799 MathmodRef->LocalScene.slider = 1;
4800 if (CurrentFormulaType == 2)
4801 MathmodRef->ProcessNewIsoSurface();
4802 else
4803 MathmodRef->ParametricSurfaceProcess(CurrentFormulaType);
4804 MathmodRef->LocalScene.slider = -1;
4805 }
4806
on_AddSetButton_clicked()4807 void DrawingOptions::on_AddSetButton_clicked()
4808 {
4809 QJsonArray array1, array2, array3, array4, array5;
4810 QJsonObject tmp, tmp2;
4811 tmp = MathmodRef->RootObjet.CurrentJsonObject;
4812 tmp2 = tmp["Sliders"].toObject();
4813 array2 = tmp2["Position"].toArray();
4814 array3 = tmp2["Min"].toArray();
4815 array4 = tmp2["Max"].toArray();
4816 array5 = tmp2["Step"].toArray();
4817 int size = qlstnames.size();
4818 if (tmp2["SetNames"].isArray())
4819 {
4820 array1 = tmp2["SetNames"].toArray();
4821 array1.append("Objet_"+QString::number(tmp2["SetNames"].toArray().size()));
4822 }
4823 else
4824 tmp2.remove("SetNames");
4825 for (int sl = 0; sl < 20; sl++)
4826 {
4827 if (size >= (sl + 1))
4828 {
4829 array2.append(QString::number((SliderArray[sl].SliderScrollBar)->sliderPosition()));
4830 array3.append(QString::number((SliderArray[sl].SliderScrollBar)->minimum()));
4831 array4.append(QString::number((SliderArray[sl].SliderScrollBar)->maximum()));
4832 array5.append(QString::number((SliderArray[sl].SliderScrollBar)->singleStep()));
4833 }
4834 }
4835 if (tmp2["SetNames"].isArray())
4836 {
4837 tmp2["SetNames"] = array1;
4838 }
4839 else
4840 tmp2.remove("SetNames");
4841 tmp2["Position"] = array2;
4842 tmp2["Min"] = array3;
4843 tmp2["Max"] = array4;
4844 tmp2["Step"] = array5;
4845 tmp["Sliders"] = tmp2;
4846 // Draw here
4847 DrawJsonModel(tmp);
4848 }
4849
on_CutSetButton_clicked()4850 void DrawingOptions::on_CutSetButton_clicked()
4851 {
4852 int size2 = qlstPos.size();
4853 int size = qlstnames.size();
4854 if (size2 >= 2 * size)
4855 {
4856 QJsonArray array1, array2, array3, array4, array5;
4857 QJsonObject tmp, tmp2;
4858 tmp = MathmodRef->RootObjet.CurrentJsonObject;
4859 tmp2 = tmp["Sliders"].toObject();
4860 if (tmp2["SetNames"].isArray())
4861 {
4862 array1 = tmp2["SetNames"].toArray();
4863 array1.removeAt(indexcurrentSet - 1);
4864 }
4865 array2 = tmp2["Position"].toArray();
4866 for (int i = 0; i < size; i++)
4867 array2.removeAt((indexcurrentSet - 1) * size);
4868 array3 = tmp2["Min"].toArray();
4869 for (int i = 0; i < size; i++)
4870 array3.removeAt((indexcurrentSet - 1) * size);
4871 array4 = tmp2["Max"].toArray();
4872 for (int i = 0; i < size; i++)
4873 array4.removeAt((indexcurrentSet - 1) * size);
4874 array5 = tmp2["Step"].toArray();
4875 for (int i = 0; i < size; i++)
4876 array5.removeAt((indexcurrentSet - 1) * size);
4877 if (tmp2["SetNames"].isArray())
4878 {
4879 tmp2["SetNames"] = array1;
4880 }
4881 else
4882 tmp2.remove("SetNames");
4883 tmp2["Position"] = array2;
4884 tmp2["Min"] = array3;
4885 tmp2["Max"] = array4;
4886 tmp2["Step"] = array5;
4887 tmp["Sliders"] = tmp2;
4888 // Draw here
4889 DrawJsonModel(tmp);
4890 }
4891 }
4892
on_AddParam_clicked()4893 void DrawingOptions::on_AddParam_clicked()
4894 {
4895 addnewparam.ui.NameEdit->setText("ParamName");
4896 addnewparam.ui.MaxEdit->setText("50");
4897 addnewparam.ui.MinEdit->setText("0");
4898 addnewparam.ui.StepEdit->setText("1");
4899 addnewparam.ui.PosEdit->setText("10");
4900 addnewparam.show();
4901 }
4902
on_CutParam_clicked()4903 void DrawingOptions::on_CutParam_clicked()
4904 {
4905 int index = ui.ParametersList->currentIndex();
4906 if (index > 0)
4907 {
4908 QJsonArray array2;
4909 QJsonObject tmp, tmp2;
4910 int names, position;
4911 tmp = MathmodRef->RootObjet.CurrentJsonObject;
4912 tmp2 = tmp["Sliders"].toObject();
4913 array2 = tmp2["Name"].toArray();
4914 names = array2.size();
4915 array2.removeAt(index - 1);
4916 tmp2["Name"] = array2;
4917 array2 = tmp2["Max"].toArray();
4918 position = array2.size();
4919 for (int i = 0; i * names < position; i++)
4920 array2.removeAt(index - 1 - i + i * names);
4921 tmp2["Max"] = array2;
4922 array2 = tmp2["Min"].toArray();
4923 position = array2.size();
4924 for (int i = 0; i * names < position; i++)
4925 array2.removeAt(index - 1 - i + i * names);
4926 tmp2["Min"] = array2;
4927 array2 = tmp2["Step"].toArray();
4928 position = array2.size();
4929 for (int i = 0; i * names < position; i++)
4930 array2.removeAt(index - 1 - i + i * names);
4931 tmp2["Step"] = array2;
4932 array2 = tmp2["Position"].toArray();
4933 position = array2.size();
4934 for (int i = 0; i * names < position; i++)
4935 array2.removeAt(index - 1 - i + i * names);
4936 tmp2["Position"] = array2;
4937 tmp["Sliders"] = tmp2;
4938 // Draw here
4939 DrawJsonModel(tmp);
4940 }
4941 }
4942
add_new_param()4943 void DrawingOptions::add_new_param()
4944 {
4945 QJsonArray array2;
4946 QJsonObject tmp, tmp2;
4947 int names, position;
4948 tmp = MathmodRef->RootObjet.CurrentJsonObject;
4949 tmp2 = tmp["Sliders"].toObject();
4950 array2 = tmp2["Name"].toArray();
4951 names = array2.empty() ? 0 : array2.size();
4952 array2.append(addnewparam.ui.NameEdit->text());
4953 tmp2["Name"] = array2;
4954 array2 = tmp2["Position"].toArray();
4955 position = array2.empty() ? 0 : array2.size();
4956 if (names == 0)
4957 array2.append(addnewparam.ui.PosEdit->text());
4958 else
4959 for (int i = 1; i * names <= position; i++)
4960 array2.insert(i * names + i - 1, addnewparam.ui.PosEdit->text());
4961 tmp2["Position"] = array2;
4962 array2 = tmp2["Max"].toArray();
4963 position = array2.empty() ? 0 : array2.size();
4964 if (names == 0)
4965 array2.append(addnewparam.ui.MaxEdit->text());
4966 else
4967 for (int i = 1; i * names <= position; i++)
4968 array2.insert(i * names + i - 1, addnewparam.ui.MaxEdit->text());
4969 tmp2["Max"] = array2;
4970 array2 = tmp2["Min"].toArray();
4971 position = array2.empty() ? 0 : array2.size();
4972 if (names == 0)
4973 array2.append(addnewparam.ui.MinEdit->text());
4974 else
4975 for (int i = 1; i * names <= position; i++)
4976 array2.insert(i * names + i - 1, addnewparam.ui.MinEdit->text());
4977 tmp2["Min"] = array2;
4978 array2 = tmp2["Step"].toArray();
4979 position = array2.empty() ? 0 : array2.size();
4980 if (names == 0)
4981 array2.append(addnewparam.ui.StepEdit->text());
4982 else
4983 for (int i = 1; i * names <= position; i++)
4984 array2.insert(i * names + i - 1, addnewparam.ui.StepEdit->text());
4985 tmp2["Step"] = array2;
4986 tmp["Sliders"] = tmp2;
4987 // Draw here
4988 DrawJsonModel(tmp);
4989 }
4990
update_infos_param(int index)4991 void DrawingOptions::update_infos_param(int index)
4992 {
4993 CIndextoolButton_clicked(index);
4994 sliderconf.currentSlider = index - 1;
4995 }
4996
on_actionFrames_triggered()4997 void DrawingOptions::on_actionFrames_triggered()
4998 {
4999 MathmodRef->frames_clicked();
5000 }
5001
SetSpecularValues(int * spec)5002 void DrawingOptions::SetSpecularValues(int *spec)
5003 {
5004 ui.red_Specular->blockSignals(true);
5005 ui.red_Specular->setSliderPosition(spec[0]);
5006 ui.red_Specular->blockSignals(false);
5007 ui.green_Specular->blockSignals(true);
5008 ui.green_Specular->setSliderPosition(spec[1]);
5009 ui.green_Specular->blockSignals(false);
5010 ui.blue_Specular->blockSignals(true);
5011 ui.blue_Specular->setSliderPosition(spec[2]);
5012 ui.blue_Specular->blockSignals(false);
5013 ui.transparent_Specular->blockSignals(true);
5014 ui.transparent_Specular->setSliderPosition(spec[3]);
5015 ui.transparent_Specular->blockSignals(false);
5016 MathmodRef->lightSpecular[0]= Parameters->Specular[0]/100.0f;
5017 MathmodRef->lightSpecular[1]= Parameters->Specular[1]/100.0f;
5018 MathmodRef->lightSpecular[2]= Parameters->Specular[2]/100.0f;
5019 MathmodRef->lightSpecular[3]= Parameters->Specular[3]/100.0f;
5020 }
SetDiffuseValues(int * spec)5021 void DrawingOptions::SetDiffuseValues(int *spec)
5022 {
5023 ui.red_Diffuse->blockSignals(true);
5024 ui.red_Diffuse->setSliderPosition(spec[0]);
5025 ui.red_Diffuse->blockSignals(false);
5026 ui.green_Diffuse->blockSignals(true);
5027 ui.green_Diffuse->setSliderPosition(spec[1]);
5028 ui.green_Diffuse->blockSignals(false);
5029 ui.blue_Diffuse->blockSignals(true);
5030 ui.blue_Diffuse->setSliderPosition(spec[2]);
5031 ui.blue_Diffuse->blockSignals(false);
5032 ui.transparent_Diffuse->blockSignals(true);
5033 ui.transparent_Diffuse->setSliderPosition(spec[3]);
5034 ui.transparent_Diffuse->blockSignals(false);
5035 MathmodRef->lightDiffuse[0]= Parameters->Diffuse[0]/100.0f;
5036 MathmodRef->lightDiffuse[1]= Parameters->Diffuse[1]/100.0f;
5037 MathmodRef->lightDiffuse[2]= Parameters->Diffuse[2]/100.0f;
5038 MathmodRef->lightDiffuse[3]= Parameters->Diffuse[3]/100.0f;
5039 }
SetAmbientValues(int * spec)5040 void DrawingOptions::SetAmbientValues(int *spec)
5041 {
5042 ui.red_Ambient->blockSignals(true);
5043 ui.red_Ambient->setSliderPosition(spec[0]);
5044 ui.red_Ambient->blockSignals(false);
5045 ui.green_Ambient->blockSignals(true);
5046 ui.green_Ambient->setSliderPosition(spec[1]);
5047 ui.green_Ambient->blockSignals(false);
5048 ui.blue_Ambient->blockSignals(true);
5049 ui.blue_Ambient->setSliderPosition(spec[2]);
5050 ui.blue_Ambient->blockSignals(false);
5051 ui.transparent_Ambient->blockSignals(true);
5052 ui.transparent_Ambient->setSliderPosition(spec[3]);
5053 ui.transparent_Ambient->blockSignals(false);
5054 MathmodRef->lightAmbient[0]= Parameters->Ambient[0]/100.0f;
5055 MathmodRef->lightAmbient[1]= Parameters->Ambient[1]/100.0f;
5056 MathmodRef->lightAmbient[2]= Parameters->Ambient[2]/100.0f;
5057 MathmodRef->lightAmbient[3]= Parameters->Ambient[3]/100.0f;
5058 }
5059
SetThreadValues(int * thread)5060 void DrawingOptions::SetThreadValues(int *thread)
5061 {
5062 ui.ThreadNumberScrollBar->blockSignals(true);
5063 ui.ThreadNumberScrollBar->setSliderPosition(thread[0]);
5064 ui.ThreadNumberScrollBar->setMinimum(thread[1]);
5065 ui.ThreadNumberScrollBar->setMaximum(thread[2]);
5066 ui.ThreadgroupBox->setTitle(
5067 "Threads: " + QString::number(ui.ThreadNumberScrollBar->minimum()) +
5068 " < " + QString::number(thread[0]) + " < " +
5069 QString::number(ui.ThreadNumberScrollBar->maximum()));
5070 ui.ThreadNumberScrollBar->blockSignals(false);
5071 }
5072
SetShininessValue(int shin)5073 void DrawingOptions::SetShininessValue(int shin)
5074 {
5075 ui.ShininessScrollBar->blockSignals(true);
5076 ui.ShininessScrollBar->setSliderPosition(shin);
5077 ui.ShininessScrollBar->blockSignals(false);
5078 MathmodRef->LocalScene.shininess = Parameters->Shininess;
5079 }
5080
SetglFrontFacingSupport()5081 void DrawingOptions::SetglFrontFacingSupport()
5082 {
5083 ui.GLFrontSurfaceSupport->blockSignals(true);
5084 ui.GLFrontSurfaceSupport->setChecked(false);
5085 ui.GLFrontSurfaceSupport->blockSignals(false);
5086 MathmodRef->LocalScene.glFrontFacingSupport = 0;
5087 }
5088
on_red_Specular_valueChanged(int value)5089 void DrawingOptions::on_red_Specular_valueChanged(int value)
5090 {
5091 MathmodRef->redSpec(value);
5092 if (ui.GcheckBox->isChecked())
5093 {
5094 ui.green_Specular->blockSignals(true);
5095 ui.green_Specular->setSliderPosition(value);
5096 ui.green_Specular->blockSignals(false);
5097 MathmodRef->greenSpec(value);
5098 }
5099 if (ui.BcheckBox->isChecked())
5100 {
5101 ui.blue_Specular->blockSignals(true);
5102 ui.blue_Specular->setSliderPosition(value);
5103 ui.blue_Specular->blockSignals(false);
5104 MathmodRef->blueSpec(value);
5105 }
5106 //MathmodRef->InitSpecularParameters();
5107 }
5108
on_green_Specular_valueChanged(int value)5109 void DrawingOptions::on_green_Specular_valueChanged(int value)
5110 {
5111 MathmodRef->greenSpec(value);
5112 if (ui.RcheckBox->isChecked())
5113 {
5114 ui.red_Specular->blockSignals(true);
5115 ui.red_Specular->setSliderPosition(value);
5116 ui.red_Specular->blockSignals(false);
5117 MathmodRef->redSpec(value);
5118 }
5119 if (ui.BcheckBox->isChecked())
5120 {
5121 ui.blue_Specular->blockSignals(true);
5122 ui.blue_Specular->setSliderPosition(value);
5123 ui.blue_Specular->blockSignals(false);
5124 MathmodRef->blueSpec(value);
5125 }
5126 //MathmodRef->InitSpecularParameters();
5127 }
5128
on_blue_Specular_valueChanged(int value)5129 void DrawingOptions::on_blue_Specular_valueChanged(int value)
5130 {
5131 MathmodRef->blueSpec(value);
5132 if (ui.GcheckBox->isChecked())
5133 {
5134 ui.green_Specular->blockSignals(true);
5135 ui.green_Specular->setSliderPosition(value);
5136 ui.green_Specular->blockSignals(false);
5137 MathmodRef->greenSpec(value);
5138 }
5139 if (ui.RcheckBox->isChecked())
5140 {
5141 ui.red_Specular->blockSignals(true);
5142 ui.red_Specular->setSliderPosition(value);
5143 ui.red_Specular->blockSignals(false);
5144 MathmodRef->redSpec(value);
5145 }
5146 //MathmodRef->InitSpecularParameters();
5147 }
5148
on_transparent_Specular_valueChanged(int value)5149 void DrawingOptions::on_transparent_Specular_valueChanged(int value)
5150 {
5151 MathmodRef->transSpec(value);
5152 }
5153
on_ShininessScrollBar_valueChanged(int value)5154 void DrawingOptions::on_ShininessScrollBar_valueChanged(int value)
5155 {
5156 MathmodRef->Shininess(value);
5157 }
5158
on_ThreadNumberScrollBar_valueChanged(int value)5159 void DrawingOptions::on_ThreadNumberScrollBar_valueChanged(int value)
5160 {
5161 MathmodRef->ParObjet->UpdateThredsNumber(uint(value));
5162 MathmodRef->IsoObjet->UpdateThredsNumber(uint(value));
5163 ui.ThreadgroupBox->setTitle(
5164 "Threads: " + QString::number(ui.ThreadNumberScrollBar->minimum()) +
5165 " < " + QString::number(value) + " < " +
5166 QString::number(ui.ThreadNumberScrollBar->maximum()));
5167 }
5168
on_StopCalculationsButton_clicked()5169 void DrawingOptions::on_StopCalculationsButton_clicked()
5170 {
5171 MathmodRef->IsoObjet->stopcalculations(true);
5172 MathmodRef->ParObjet->stopcalculations(true);
5173 }
5174
on_stopButton_clicked()5175 void DrawingOptions::on_stopButton_clicked()
5176 {
5177 on_StopCalculationsButton_clicked();
5178 }
5179
on_actionScripts_selection_triggered()5180 void DrawingOptions::on_actionScripts_selection_triggered()
5181 {
5182 select.show();
5183 }
5184
on_actionBoundingBox_clicked()5185 void DrawingOptions::on_actionBoundingBox_clicked()
5186 {
5187 MathmodRef->boundingboxOk();
5188 MathmodRef->update();
5189 }
5190
on_actionAnimation_Rotation_triggered()5191 void DrawingOptions::on_actionAnimation_Rotation_triggered()
5192 {
5193 MathmodRef->anim();
5194 }
5195
on_actionMorph_use_t_parameter_triggered()5196 void DrawingOptions::on_actionMorph_use_t_parameter_triggered()
5197 {
5198 MathmodRef->morph();
5199 }
5200
on_TreeViewButton_clicked()5201 void DrawingOptions::on_TreeViewButton_clicked()
5202 {
5203 ShowCurrentObjectTree = !ShowCurrentObjectTree;
5204 if (ShowCurrentObjectTree)
5205 {
5206 UpdateTreeObject();
5207 ui.ObjectClasseCurrent->show();
5208 }
5209 else
5210 {
5211 UpdateTreeObject();
5212 ui.ObjectClasseCurrent->hide();
5213 }
5214 }
5215
ApplypushButton_clicked()5216 void DrawingOptions::ApplypushButton_clicked()
5217 {
5218 int maxisogrid = 0;
5219 int maxpargrid = 0;
5220 if ((Parameters->ui.IsoMaxGridLineEdit->text()).replace(" ", "")!= "" &&
5221 (maxisogrid = (Parameters->ui.IsoMaxGridLineEdit->text()).toInt()) !=
5222 Parameters->IsoMaxGrid)
5223 {
5224 Parameters->IsoMaxGrid = maxisogrid;
5225 ui.Isogroupbox->setTitle("Iso Grid/MaxGrid ( " +
5226 QString::number(ui.xyzg->value()) + " / " +
5227 QString::number(maxisogrid) + " ) :");
5228 ui.xyzg->blockSignals(true);
5229 ui.xyzg->setMaximum(maxisogrid);
5230 ui.xyzg->blockSignals(false);
5231 }
5232
5233 if ((Parameters->ui.ParMaxGridLineEdit->text()).replace(" ", "")!= "" &&
5234 (maxpargrid = (Parameters->ui.ParMaxGridLineEdit->text()).toInt()) !=
5235 Parameters->ParMaxGrid)
5236 {
5237 Parameters->ParMaxGrid = maxpargrid;
5238 ui.ParamgroupBox_2->setTitle("Grid(u,v)/MaxGrid = ( " + QString::number(ui.linecolumn_2->value()) +
5239 ", " + QString::number(ui.linecolumn_2->value()) + " ) / "+QString::number(maxpargrid));
5240 ui.linecolumn_2->blockSignals(true);
5241 ui.linecolumn_2->setMaximum(int(Parameters->ParMaxGrid));
5242 ui.linecolumn_2->blockSignals(false);
5243 ui.ParamgroupBox_3->setTitle("Grid(u,v)/MaxGrid = ( " + QString::number(ui.linecolumn_3->value()) +
5244 ", " + QString::number(ui.linecolumn_3->value()) + " ) / "+QString::number(maxpargrid));
5245 ui.linecolumn_3->blockSignals(true);
5246 ui.linecolumn_3->setMaximum(int(Parameters->ParMaxGrid));
5247 ui.linecolumn_3->blockSignals(false);
5248 }
5249 }
5250
on_ObjectClasseCurrent_clicked(const QModelIndex & idx)5251 void DrawingOptions::on_ObjectClasseCurrent_clicked(const QModelIndex &idx)
5252 {
5253 QModelIndex parentItem = idx.parent();
5254 if (!parentItem.isValid())
5255 {
5256 int row = idx.row();
5257 if (MathmodRef->RootObjet.CurrentParisoTreestruct.size() > 0 &&
5258 int(MathmodRef->RootObjet.CurrentParisoTreestruct.size()) > row)
5259 ui.parisocomboBox->setCurrentIndex(row);
5260 }
5261 }
5262
on_parisocomboBox_currentIndexChanged(int index)5263 void DrawingOptions::on_parisocomboBox_currentIndexChanged(int index)
5264 {
5265 if (index >= 0)
5266 {
5267 ModelType type = MathmodRef->RootObjet.CurrentParisoTreestruct[index].type;
5268 if (type == ISO_TYPE)
5269 UpdateIsoModelDetailsPage(MathmodRef->RootObjet.CurrentParisoTreestruct[index]);
5270 else if (type == PAR_TYPE)
5271 UpdatePar3DModelDetailsPage(MathmodRef->RootObjet.CurrentParisoTreestruct[index]);
5272 else if (type == PAR_4D_TYPE)
5273 UpdatePar4DModelDetailsPage(MathmodRef->RootObjet.CurrentParisoTreestruct[index]);
5274 }
5275 }
5276
on_ApplypushButton_clicked()5277 void DrawingOptions::on_ApplypushButton_clicked()
5278 {
5279 int maxisogrid = 0;
5280 if ((ui.IsoMaxGridLineEdit->text()).replace(" ", "")!= "" &&
5281 (maxisogrid = (ui.IsoMaxGridLineEdit->text()).toInt()) != Parameters->IsoMaxGrid)
5282 {
5283 Parameters->IsoMaxGrid = maxisogrid;
5284 ui.Isogroupbox->setTitle("Grid/MaxGrid = (" +
5285 QString::number(ui.xyzg->value()) + "/" +
5286 QString::number(maxisogrid) + ")");
5287 ui.xyzg->blockSignals(true);
5288 ui.xyzg->setMaximum(maxisogrid);
5289 ui.xyzg->blockSignals(false);
5290 }
5291 }
5292
updateParametricGridSliders(int maxpargrid)5293 void DrawingOptions::updateParametricGridSliders(int maxpargrid)
5294 {
5295 Parameters->ParMaxGrid = maxpargrid;
5296 ui.ParamgroupBox_2->setTitle("Grid(u,v)/MaxGrid = ("+ QString::number(ui.linecolumn_2->value()) +
5297 ", " + QString::number(ui.linecolumn_2->value()) +")/"+QString::number(maxpargrid));
5298 ui.linecolumn_2->blockSignals(true);
5299 ui.linecolumn_2->setMaximum(int(maxpargrid));
5300 ui.linecolumn_2->blockSignals(false);
5301 ui.ParamgroupBox_3->setTitle("Grid(u,v)/MaxGrid = ("+ QString::number(ui.linecolumn_3->value()) +
5302 ", " + QString::number(ui.linecolumn_3->value()) +")/"+QString::number(maxpargrid));
5303 ui.linecolumn_3->blockSignals(true);
5304 ui.linecolumn_3->setMaximum(int(maxpargrid));
5305 ui.linecolumn_3->blockSignals(false);
5306 }
5307
on_ApplypushButton_2_clicked()5308 void DrawingOptions::on_ApplypushButton_2_clicked()
5309 {
5310 int maxpargrid = 0;
5311 if ((ui.ParMaxGridLineEdit->text()).replace(" ", "")!= "" &&
5312 (maxpargrid = (ui.ParMaxGridLineEdit->text()).toInt()) != Parameters->ParMaxGrid)
5313 updateParametricGridSliders(maxpargrid);
5314 }
on_ApplypushButton_3_clicked()5315 void DrawingOptions::on_ApplypushButton_3_clicked()
5316 {
5317 int maxpargrid = 0;
5318 if ((ui.ParMaxGridLineEdit_2->text()).replace(" ", "")!= "" &&
5319 (maxpargrid = (ui.ParMaxGridLineEdit_2->text()).toInt()) != Parameters->ParMaxGrid)
5320 updateParametricGridSliders(maxpargrid);
5321 }
5322
5323 #include <QDesktopServices>
on_actionDocumentation_triggered()5324 void DrawingOptions::on_actionDocumentation_triggered()
5325 {
5326 QString link = QApplication::applicationDirPath() + "/../Resources/documentation/index.html";
5327 QDesktopServices::openUrl(QUrl(QUrl::fromLocalFile(link)));
5328 }
5329
on_ScaleButton_clicked()5330 void DrawingOptions::on_ScaleButton_clicked()
5331 {
5332 bool valx, valy, valz;
5333 double fx = ui.lineEditSx->text().toDouble(&valx);
5334 double fy = ui.lineEditSy->text().toDouble(&valy);
5335 double fz = ui.lineEditSz->text().toDouble(&valz);
5336 if (valx && valy && valz)
5337 {
5338 MathmodRef->factx=fx;
5339 MathmodRef->facty=fy;
5340 MathmodRef->factz=fz;
5341 }
5342 else
5343 {
5344 QMessageBox msgBox;
5345 msgBox.setText("Invalid number");
5346 msgBox.exec();
5347 }
5348 }
5349
on_ShowIsoComp_clicked()5350 void DrawingOptions::on_ShowIsoComp_clicked()
5351 {
5352 if(!ui.ShowIsoComp->isChecked())
5353 {
5354 ui.ShowIsoComp->setText("Show");
5355 if(!MathmodRef->LocalScene.componentsinfos.pariso)
5356 MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[IndexcurrentComponent]=false;
5357 else
5358 MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[MathmodRef->LocalScene.componentsinfos.NbComponentsType[0]+IndexcurrentComponent]=false;
5359 }
5360 else
5361 {
5362 ui.ShowIsoComp->setText("Hide");
5363 if(!MathmodRef->LocalScene.componentsinfos.pariso)
5364 MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[IndexcurrentComponent]=true;
5365 else
5366 MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[MathmodRef->LocalScene.componentsinfos.NbComponentsType[0]+IndexcurrentComponent]=true;
5367 }
5368 MathmodRef->update();
5369 }
5370
on_ShowParComp_clicked()5371 void DrawingOptions::on_ShowParComp_clicked()
5372 {
5373 if(!ui.ShowParComp->isChecked())
5374 {
5375 ui.ShowParComp->setText("Show");
5376 MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[IndexcurrentComponent]=false;
5377 }
5378 else
5379 {
5380 ui.ShowParComp->setText("Hide");
5381 MathmodRef->LocalScene.componentsinfos.ShowParIsoCmp[IndexcurrentComponent]=true;
5382 }
5383 MathmodRef->update();
5384 }
5385
on_actionAxe_triggered()5386 void DrawingOptions::on_actionAxe_triggered()
5387 {
5388 MathmodRef->LocalScene.axe *=-1;
5389 MathmodRef->update();
5390 }
5391
on_actionPlan_triggered()5392 void DrawingOptions::on_actionPlan_triggered()
5393 {
5394 MathmodRef->LocalScene.plan *=-1;
5395 MathmodRef->update();
5396 }
5397
on_actionDetach_WinInfos_triggered()5398 void DrawingOptions::on_actionDetach_WinInfos_triggered()
5399 {
5400 MathmodRef->LocalScene.attachwininfos*=-1;
5401 MathmodRef->attachinfos();
5402 }
5403
on_red_Ambient_valueChanged(int value)5404 void DrawingOptions::on_red_Ambient_valueChanged(int value)
5405 {
5406 MathmodRef->redAmb(value);
5407 }
5408
on_green_Ambient_valueChanged(int value)5409 void DrawingOptions::on_green_Ambient_valueChanged(int value)
5410 {
5411 MathmodRef->greenAmb(value);
5412 }
5413
on_blue_Ambient_valueChanged(int value)5414 void DrawingOptions::on_blue_Ambient_valueChanged(int value)
5415 {
5416 MathmodRef->blueAmb(value);
5417 }
5418
on_transparent_Ambient_valueChanged(int value)5419 void DrawingOptions::on_transparent_Ambient_valueChanged(int value)
5420 {
5421 MathmodRef->transAmb(value);
5422 }
5423
on_red_Diffuse_valueChanged(int value)5424 void DrawingOptions::on_red_Diffuse_valueChanged(int value)
5425 {
5426 MathmodRef->redDiff(value);
5427 }
5428
on_green_Diffuse_valueChanged(int value)5429 void DrawingOptions::on_green_Diffuse_valueChanged(int value)
5430 {
5431 MathmodRef->greenDiff(value);
5432 }
5433
on_blue_Diffuse_valueChanged(int value)5434 void DrawingOptions::on_blue_Diffuse_valueChanged(int value)
5435 {
5436 MathmodRef->blueDiff(value);
5437 }
5438
on_transparent_Diffuse_valueChanged(int value)5439 void DrawingOptions::on_transparent_Diffuse_valueChanged(int value)
5440 {
5441 MathmodRef->transDiff(value);
5442 }
5443
on_GLFrontSurfaceSupport_clicked()5444 void DrawingOptions::on_GLFrontSurfaceSupport_clicked()
5445 {
5446 if(!(ui.GLFrontSurfaceSupport->isChecked()))
5447 MathmodRef->glfrontfacesupp(0);
5448 else
5449 MathmodRef->glfrontfacesupp(1);
5450 }
5451