Search for included files first in the same location as the including module, then in the document root as a compatibility fallback. Fixes #217

felipesanches-svg
Marius Kintel 2013-05-09 11:02:31 +02:00
parent db8ad9631d
commit 0e938364fe
6 changed files with 64 additions and 0 deletions

35
src/fileutils.cc Normal file
View File

@ -0,0 +1,35 @@
#include "fileutils.h"
#include "printutils.h"
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
#include "boosty.h"
/*!
Returns the absolute path to the given filename, unless it's empty.
If the file isn't found in the given path, the fallback path will be
used to be backwards compatible with <= 2013.01 (see issue #217).
*/
std::string lookup_file(const std::string &filename,
const std::string &path, const std::string &fallbackpath)
{
std::string resultfile;
if (!filename.empty() && !boosty::is_absolute(fs::path(filename))) {
fs::path absfile;
if (!path.empty()) absfile = boosty::absolute(fs::path(path) / filename);
fs::path absfile_fallback;
if (!fallbackpath.empty()) absfile_fallback = boosty::absolute(fs::path(fallbackpath) / filename);
if (!fs::exists(absfile) && fs::exists(absfile_fallback)) {
resultfile = absfile_fallback.string();
PRINTB("WARNING: Imported file (%s) found in document root instead of relative to the importing module. This behavior is deprecated", filename);
}
else {
resultfile = absfile.string();
}
}
else {
resultfile = filename;
}
return resultfile;
}

9
src/fileutils.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef FILEUTILS_H_
#define FILEUTILS_H_
#include <string>
std::string lookup_file(const std::string &filename,
const std::string &path, const std::string &fallbackpath);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,20 @@
group() {
linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) {
import(file = "localfile.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
multmatrix([[1, 0, 0, -250], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(file = "localfile.dxf", layer = "", origin = [0, 0], scale = 1, height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 350], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(file = "localfile.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
multmatrix([[1, 0, 0, 250], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[200, 0, 0, 0], [0, 200, 0, 0], [0, 0, 50, 0], [0, 0, 0, 1]]) {
surface(file = "localfile.dat", center = false);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -200], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 100);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB