diff options
-rw-r--r-- | examples/example010.scad | 12 | ||||
-rw-r--r-- | mainwin.cc | 19 | ||||
-rw-r--r-- | openscad.h | 1 |
3 files changed, 29 insertions, 3 deletions
diff --git a/examples/example010.scad b/examples/example010.scad index 8e5be21..cb449e7 100644 --- a/examples/example010.scad +++ b/examples/example010.scad @@ -3,6 +3,12 @@ // d = (sin(1:0.2:10)' * cos(1:0.2:10)) * 10; // save("example010.dat", "d"); -surface(file = "example010.dat", - center = true, convexity = 5); - +intersection() +{ + surface(file = "example010.dat", + center = true, convexity = 5); + + rotate(45, [0 0 1]) + surface(file = "example010.dat", + center = true, convexity = 5); +} @@ -150,6 +150,7 @@ MainWindow::MainWindow(const char *filename) if (filename) { this->filename = QString(filename); + maybe_change_dir(); setWindowTitle(this->filename); load(); } else { @@ -200,6 +201,22 @@ void MainWindow::load() } } +void MainWindow::maybe_change_dir() +{ + if (filename.isEmpty()) + return; + + int dir_end_index = filename.lastIndexOf("/"); + if (dir_end_index < 0) + return; + + QString dirname = filename.mid(0, dir_end_index); + if (chdir(dirname.toAscii().data()) < 0) + return; + + filename = filename.mid(dir_end_index+1); +} + void MainWindow::find_root_tag(AbstractNode *n) { foreach(AbstractNode *v, n->children) { @@ -380,6 +397,7 @@ void MainWindow::actionOpen() if (!new_filename.isEmpty()) { filename = new_filename; + maybe_change_dir(); setWindowTitle(filename); QString text; @@ -420,6 +438,7 @@ void MainWindow::actionSaveAs() QString new_filename = QFileDialog::getSaveFileName(this, "Save File", filename, "OpenSCAD Designs (*.scad)"); if (!new_filename.isEmpty()) { filename = new_filename; + maybe_change_dir(); setWindowTitle(filename); actionSave(); } @@ -673,6 +673,7 @@ public: private: void load(); + void maybe_change_dir(); void find_root_tag(AbstractNode *n); void compile(); |