56 cfg (String, prog_coverer, ""); |
56 cfg (String, prog_coverer, ""); |
57 cfg (String, prog_ytruder, ""); |
57 cfg (String, prog_ytruder, ""); |
58 cfg (String, prog_rectifier, ""); |
58 cfg (String, prog_rectifier, ""); |
59 cfg (String, prog_edger2, ""); |
59 cfg (String, prog_edger2, ""); |
60 |
60 |
61 QString* const g_extProgPaths[] = |
61 String* const g_extProgPaths[] = |
62 { |
62 { |
63 &prog_isecalc, |
63 &prog_isecalc, |
64 &prog_intersector, |
64 &prog_intersector, |
65 &prog_coverer, |
65 &prog_coverer, |
66 &prog_ytruder, |
66 &prog_ytruder, |
111 |
111 |
112 // ============================================================================= |
112 // ============================================================================= |
113 // |
113 // |
114 static bool checkProgPath (const extprog prog) |
114 static bool checkProgPath (const extprog prog) |
115 { |
115 { |
116 QString& path = *g_extProgPaths[prog]; |
116 String& path = *g_extProgPaths[prog]; |
117 |
117 |
118 if (path.length() > 0) |
118 if (path.length() > 0) |
119 return true; |
119 return true; |
120 |
120 |
121 ExtProgPathPrompt* dlg = new ExtProgPathPrompt (g_extProgNames[prog]); |
121 ExtProgPathPrompt* dlg = new ExtProgPathPrompt (g_extProgNames[prog]); |
129 return false; |
129 return false; |
130 } |
130 } |
131 |
131 |
132 // ============================================================================= |
132 // ============================================================================= |
133 // |
133 // |
134 static QString processErrorString (extprog prog, QProcess& proc) |
134 static String processErrorString (extprog prog, QProcess& proc) |
135 { |
135 { |
136 switch (proc.error()) |
136 switch (proc.error()) |
137 { |
137 { |
138 case QProcess::FailedToStart: |
138 case QProcess::FailedToStart: |
139 { |
139 { |
140 QString wineblurb; |
140 String wineblurb; |
141 |
141 |
142 #ifndef _WIN32 |
142 #ifndef _WIN32 |
143 if (*g_extProgWine[prog]) |
143 if (*g_extProgWine[prog]) |
144 wineblurb = "make sure Wine is installed and "; |
144 wineblurb = "make sure Wine is installed and "; |
145 #endif |
145 #endif |
185 } |
185 } |
186 } |
186 } |
187 |
187 |
188 // ============================================================================= |
188 // ============================================================================= |
189 // |
189 // |
190 static void writeObjects (const LDObjectList& objects, QString fname) |
190 static void writeObjects (const LDObjectList& objects, String fname) |
191 { |
191 { |
192 // Write the input file |
192 // Write the input file |
193 QFile f (fname); |
193 QFile f (fname); |
194 |
194 |
195 if (not f.open (QIODevice::WriteOnly | QIODevice::Text)) |
195 if (not f.open (QIODevice::WriteOnly | QIODevice::Text)) |
206 #endif |
206 #endif |
207 } |
207 } |
208 |
208 |
209 // ============================================================================= |
209 // ============================================================================= |
210 // |
210 // |
211 void writeSelection (QString fname) |
211 void writeSelection (String fname) |
212 { |
212 { |
213 writeObjects (selection(), fname); |
213 writeObjects (selection(), fname); |
214 } |
214 } |
215 |
215 |
216 // ============================================================================= |
216 // ============================================================================= |
217 // |
217 // |
218 void writeColorGroup (const int colnum, QString fname) |
218 void writeColorGroup (const int colnum, String fname) |
219 { |
219 { |
220 LDObjectList objects; |
220 LDObjectList objects; |
221 |
221 |
222 for (LDObject* obj : getCurrentDocument()->objects()) |
222 for (LDObject* obj : getCurrentDocument()->objects()) |
223 { |
223 { |
230 writeObjects (objects, fname); |
230 writeObjects (objects, fname); |
231 } |
231 } |
232 |
232 |
233 // ============================================================================= |
233 // ============================================================================= |
234 // |
234 // |
235 bool runUtilityProcess (extprog prog, QString path, QString argvstr) |
235 bool runUtilityProcess (extprog prog, String path, String argvstr) |
236 { |
236 { |
237 QTemporaryFile input; |
237 QTemporaryFile input; |
238 QStringList argv = argvstr.split (" ", QString::SkipEmptyParts); |
238 QStringList argv = argvstr.split (" ", String::SkipEmptyParts); |
239 |
239 |
240 #ifndef _WIN32 |
240 #ifndef _WIN32 |
241 if (*g_extProgWine[prog]) |
241 if (*g_extProgWine[prog]) |
242 { |
242 { |
243 argv.insert (0, path); |
243 argv.insert (0, path); |
266 input.write ("\n"); |
266 input.write ("\n"); |
267 |
267 |
268 // Wait while it runs |
268 // Wait while it runs |
269 proc.waitForFinished(); |
269 proc.waitForFinished(); |
270 |
270 |
271 QString err = ""; |
271 String err = ""; |
272 |
272 |
273 if (proc.exitStatus() != QProcess::NormalExit) |
273 if (proc.exitStatus() != QProcess::NormalExit) |
274 err = processErrorString (prog, proc); |
274 err = processErrorString (prog, proc); |
275 |
275 |
276 // Check the return code |
276 // Check the return code |
359 |
359 |
360 const double depth = ui.planeDepth->value(), |
360 const double depth = ui.planeDepth->value(), |
361 condAngle = ui.condAngle->value(); |
361 condAngle = ui.condAngle->value(); |
362 |
362 |
363 QTemporaryFile indat, outdat; |
363 QTemporaryFile indat, outdat; |
364 QString inDATName, outDATName; |
364 String inDATName, outDATName; |
365 |
365 |
366 // Make temp files for the input and output files |
366 // Make temp files for the input and output files |
367 if (not mkTempFile (indat, inDATName) || not mkTempFile (outdat, outDATName)) |
367 if (not mkTempFile (indat, inDATName) || not mkTempFile (outdat, outDATName)) |
368 return; |
368 return; |
369 |
369 |
370 // Compose the command-line arguments |
370 // Compose the command-line arguments |
371 QString argv = join ( |
371 String argv = join ( |
372 { |
372 { |
373 (axis == X) ? "-x" : (axis == Y) ? "-y" : "-z", |
373 (axis == X) ? "-x" : (axis == Y) ? "-y" : "-z", |
374 (mode == Distance) ? "-d" : (mode == Symmetry) ? "-s" : (mode == Projection) ? "-p" : "-r", |
374 (mode == Distance) ? "-d" : (mode == Symmetry) ? "-s" : (mode == Projection) ? "-p" : "-r", |
375 depth, |
375 depth, |
376 "-a", |
376 "-a", |
403 |
403 |
404 if (not dlg->exec()) |
404 if (not dlg->exec()) |
405 return; |
405 return; |
406 |
406 |
407 QTemporaryFile indat, outdat; |
407 QTemporaryFile indat, outdat; |
408 QString inDATName, outDATName; |
408 String inDATName, outDATName; |
409 |
409 |
410 // Make temp files for the input and output files |
410 // Make temp files for the input and output files |
411 if (not mkTempFile (indat, inDATName) || not mkTempFile (outdat, outDATName)) |
411 if (not mkTempFile (indat, inDATName) || not mkTempFile (outdat, outDATName)) |
412 return; |
412 return; |
413 |
413 |
414 // Compose arguments |
414 // Compose arguments |
415 QString argv = join ( |
415 String argv = join ( |
416 { |
416 { |
417 (not ui.cb_condense->isChecked()) ? "-q" : "", |
417 (not ui.cb_condense->isChecked()) ? "-q" : "", |
418 (not ui.cb_subst->isChecked()) ? "-r" : "", |
418 (not ui.cb_subst->isChecked()) ? "-r" : "", |
419 (ui.cb_condlineCheck->isChecked()) ? "-a" : "", |
419 (ui.cb_condlineCheck->isChecked()) ? "-a" : "", |
420 (ui.cb_colorize->isChecked()) ? "-c" : "", |
420 (ui.cb_colorize->isChecked()) ? "-c" : "", |
477 // cutdat = cutter group file |
477 // cutdat = cutter group file |
478 // outdat = primary output |
478 // outdat = primary output |
479 // outdat2 = inverse output |
479 // outdat2 = inverse output |
480 // edgesdat = edges output (isecalc) |
480 // edgesdat = edges output (isecalc) |
481 QTemporaryFile indat, cutdat, outdat, outdat2, edgesdat; |
481 QTemporaryFile indat, cutdat, outdat, outdat2, edgesdat; |
482 QString inDATName, cutDATName, outDATName, outDAT2Name, edgesDATName; |
482 String inDATName, cutDATName, outDATName, outDAT2Name, edgesDATName; |
483 |
483 |
484 if (not mkTempFile (indat, inDATName) || |
484 if (not mkTempFile (indat, inDATName) || |
485 not mkTempFile (cutdat, cutDATName) || |
485 not mkTempFile (cutdat, cutDATName) || |
486 not mkTempFile (outdat, outDATName) || |
486 not mkTempFile (outdat, outDATName) || |
487 not mkTempFile (outdat2, outDAT2Name) || |
487 not mkTempFile (outdat2, outDAT2Name) || |
488 not mkTempFile (edgesdat, edgesDATName)) |
488 not mkTempFile (edgesdat, edgesDATName)) |
489 { |
489 { |
490 return; |
490 return; |
491 } |
491 } |
492 |
492 |
493 QString parms = join ( |
493 String parms = join ( |
494 { |
494 { |
495 (ui.cb_colorize->isChecked()) ? "-c" : "", |
495 (ui.cb_colorize->isChecked()) ? "-c" : "", |
496 (ui.cb_nocondense->isChecked()) ? "-t" : "", |
496 (ui.cb_nocondense->isChecked()) ? "-t" : "", |
497 "-s", |
497 "-s", |
498 ui.dsb_prescale->value() |
498 ui.dsb_prescale->value() |
499 }); |
499 }); |
500 |
500 |
501 QString argv_normal = join ( |
501 String argv_normal = join ( |
502 { |
502 { |
503 parms, |
503 parms, |
504 inDATName, |
504 inDATName, |
505 cutDATName, |
505 cutDATName, |
506 outDATName |
506 outDATName |
507 }); |
507 }); |
508 |
508 |
509 QString argv_inverse = join ( |
509 String argv_inverse = join ( |
510 { |
510 { |
511 parms, |
511 parms, |
512 cutDATName, |
512 cutDATName, |
513 inDATName, |
513 inDATName, |
514 outDAT2Name |
514 outDAT2Name |
566 |
566 |
567 break; |
567 break; |
568 } |
568 } |
569 |
569 |
570 QTemporaryFile in1dat, in2dat, outdat; |
570 QTemporaryFile in1dat, in2dat, outdat; |
571 QString in1DATName, in2DATName, outDATName; |
571 String in1DATName, in2DATName, outDATName; |
572 |
572 |
573 if (not mkTempFile (in1dat, in1DATName) || |
573 if (not mkTempFile (in1dat, in1DATName) || |
574 not mkTempFile (in2dat, in2DATName) || |
574 not mkTempFile (in2dat, in2DATName) || |
575 not mkTempFile (outdat, outDATName)) |
575 not mkTempFile (outdat, outDATName)) |
576 { |
576 { |
577 return; |
577 return; |
578 } |
578 } |
579 |
579 |
580 QString argv = join ( |
580 String argv = join ( |
581 { |
581 { |
582 (ui.cb_oldsweep->isChecked() ? "-s" : ""), |
582 (ui.cb_oldsweep->isChecked() ? "-s" : ""), |
583 (ui.cb_reverse->isChecked() ? "-r" : ""), |
583 (ui.cb_reverse->isChecked() ? "-r" : ""), |
584 (ui.dsb_segsplit->value() != 0 ? format ("-l %1", ui.dsb_segsplit->value()) : ""), |
584 (ui.dsb_segsplit->value() != 0 ? format ("-l %1", ui.dsb_segsplit->value()) : ""), |
585 (ui.sb_bias->value() != 0 ? format ("-s %1", ui.sb_bias->value()) : ""), |
585 (ui.sb_bias->value() != 0 ? format ("-s %1", ui.sb_bias->value()) : ""), |
632 |
632 |
633 break; |
633 break; |
634 } |
634 } |
635 |
635 |
636 QTemporaryFile in1dat, in2dat, outdat; |
636 QTemporaryFile in1dat, in2dat, outdat; |
637 QString in1DATName, in2DATName, outDATName; |
637 String in1DATName, in2DATName, outDATName; |
638 |
638 |
639 if (not mkTempFile (in1dat, in1DATName) || |
639 if (not mkTempFile (in1dat, in1DATName) || |
640 not mkTempFile (in2dat, in2DATName) || |
640 not mkTempFile (in2dat, in2DATName) || |
641 not mkTempFile (outdat, outDATName)) |
641 not mkTempFile (outdat, outDATName)) |
642 { |
642 { |
643 return; |
643 return; |
644 } |
644 } |
645 |
645 |
646 QString argv = join ( |
646 String argv = join ( |
647 { |
647 { |
648 in1DATName, |
648 in1DATName, |
649 in2DATName, |
649 in2DATName, |
650 outDATName |
650 outDATName |
651 }); |
651 }); |
671 |
671 |
672 if (not dlg->exec()) |
672 if (not dlg->exec()) |
673 return; |
673 return; |
674 |
674 |
675 QTemporaryFile in, out; |
675 QTemporaryFile in, out; |
676 QString inName, outName; |
676 String inName, outName; |
677 |
677 |
678 if (not mkTempFile (in, inName) || not mkTempFile (out, outName)) |
678 if (not mkTempFile (in, inName) || not mkTempFile (out, outName)) |
679 return; |
679 return; |
680 |
680 |
681 int unmatched = ui.unmatched->currentIndex(); |
681 int unmatched = ui.unmatched->currentIndex(); |
682 |
682 |
683 QString argv = join ( |
683 String argv = join ( |
684 { |
684 { |
685 format ("-p %1", ui.precision->value()), |
685 format ("-p %1", ui.precision->value()), |
686 format ("-af %1", ui.flatAngle->value()), |
686 format ("-af %1", ui.flatAngle->value()), |
687 format ("-ac %1", ui.condAngle->value()), |
687 format ("-ac %1", ui.condAngle->value()), |
688 format ("-ae %1", ui.edgeAngle->value()), |
688 format ("-ae %1", ui.edgeAngle->value()), |