Add option for Dxf Version and forced Polyline

- allows override of user parameter values.
This commit is contained in:
wandererfan
2018-08-13 16:04:29 -04:00
committed by wmayer
parent e757e4f7e7
commit 0865468918
4 changed files with 143 additions and 36 deletions

View File

@@ -95,10 +95,10 @@ public:
"readDXF(filename,[document,ignore_errors]): Imports a DXF file into the given document. ignore_errors is True by default."
);
add_varargs_method("writeDXFShape",&Module::writeDXFShape,
"writeDXFShape([shape],filename): Exports Shape(s) to a DXF file."
"writeDXFShape([shape],filename [version,usePolyline,optionSource]): Exports Shape(s) to a DXF file."
);
add_varargs_method("writeDXFObject",&Module::writeDXFObject,
"writeDXFObject([objects],filename): Exports DocumentObject(s) to a DXF file."
"writeDXFObject([objects],filename [,version,usePolyline,optionSource]): Exports DocumentObject(s) to a DXF file."
);
initialize("This module is the Import module."); // register with Python
}
@@ -385,21 +385,44 @@ private:
const char* optionSource = nullptr;
char* defaultOptions = "User parameter:BaseApp/Preferences/Mod/Import";
char* useOptionSource = nullptr;
int versionParm = -1;
bool versionOverride = false;
bool polyOverride = false;
PyObject *usePolyline = Py_False;
if (PyArg_ParseTuple(args.ptr(), "O!et|s", &(PyList_Type) ,&shapeObj, "utf-8",&fname, &optionSource)) {
//handle list of shapes
if (PyArg_ParseTuple(args.ptr(), "O!et|iOs", &(PyList_Type) ,
&shapeObj,
"utf-8",
&fname,
&versionParm,
&usePolyline,
&optionSource)) {
filePath = std::string(fname);
layerName = "none";
PyMem_Free(fname);
if ((versionParm == 12) or
(versionParm == 14)) {
versionOverride = true;
}
if (usePolyline == Py_True) {
polyOverride = true;
}
if (optionSource) {
strcpy(useOptionSource,optionSource);
} else {
useOptionSource = defaultOptions;
}
try {
ImpExpDxfWrite writer(filePath);
writer.setOptionSource(useOptionSource);
writer.setOptions();
if (versionOverride) {
writer.setVersion(versionParm);
}
writer.setPolyOverride(true);
writer.setLayerName(layerName);
writer.init();
Py::Sequence list(shapeObj);
@@ -415,25 +438,40 @@ private:
catch (const Base::Exception& e) {
throw Py::RuntimeError(e.what());
}
} else if (PyArg_ParseTuple(args.ptr(), "O!et|s",
} else if (PyArg_ParseTuple(args.ptr(), "O!et|iOs",
&(Part::TopoShapePy::Type) ,
&shapeObj,
"utf-8",
&fname,
&versionParm,
&usePolyline,
&optionSource)) {
filePath = std::string(fname);
layerName = "none";
PyMem_Free(fname);
if ((versionParm == 12) or
(versionParm == 14)) {
versionOverride = true;
}
if (usePolyline == Py_True) {
polyOverride = true;
}
if (optionSource) {
strcpy(useOptionSource,optionSource);
} else {
useOptionSource = defaultOptions;
}
try {
ImpExpDxfWrite writer(filePath);
writer.setOptionSource(useOptionSource);
writer.setOptions();
if (versionOverride) {
writer.setVersion(versionParm);
}
writer.setPolyOverride(polyOverride);
writer.setLayerName(layerName);
writer.init();
Part::TopoShape* obj = static_cast<Part::TopoShapePy*>(shapeObj)->getTopoShapePtr();
@@ -459,22 +497,44 @@ private:
const char* optionSource = nullptr;
char* defaultOptions = "User parameter:BaseApp/Preferences/Mod/Import";
char* useOptionSource = nullptr;
int versionParm = -1;
bool versionOverride = false;
bool polyOverride = false;
PyObject *usePolyline = Py_False;
if (PyArg_ParseTuple(args.ptr(), "O!et|s", &(PyList_Type) ,&docObj, "utf-8",&fname, &optionSource)) {
filePath = std::string(fname);
if (PyArg_ParseTuple(args.ptr(), "O!et|iOs", &(PyList_Type) ,
&docObj,
"utf-8",
&fname,
&versionParm,
&usePolyline,
&optionSource)) {
filePath = std::string(fname);
layerName = "none";
PyMem_Free(fname);
if ((versionParm == 12) or
(versionParm == 14)) {
versionOverride = true;
}
if (usePolyline == Py_True) {
polyOverride = true;
}
if (optionSource) {
strcpy(useOptionSource,optionSource);
} else {
useOptionSource = defaultOptions;
}
try {
ImpExpDxfWrite writer(filePath);
writer.setOptionSource(useOptionSource);
writer.setOptions();
if (versionOverride) {
writer.setVersion(versionParm);
}
writer.setPolyOverride(polyOverride);
writer.setLayerName(layerName);
writer.init();
Py::Sequence list(docObj);
@@ -494,25 +554,40 @@ private:
catch (const Base::Exception& e) {
throw Py::RuntimeError(e.what());
}
} else if (PyArg_ParseTuple(args.ptr(), "O!et|s",
} else if (PyArg_ParseTuple(args.ptr(), "O!et|iOs",
&(Part::PartFeaturePy::Type) ,
&docObj,
"utf-8",
&fname,
&versionParm,
&usePolyline,
&optionSource)) {
filePath = std::string(fname);
layerName = "none";
PyMem_Free(fname);
if ((versionParm == 12) or
(versionParm == 14)) {
versionOverride = true;
}
if (usePolyline == Py_True) {
polyOverride = true;
}
if (optionSource) {
strcpy(useOptionSource,optionSource);
} else {
useOptionSource = defaultOptions;
}
try {
ImpExpDxfWrite writer(filePath);
writer.setOptionSource(useOptionSource);
writer.setOptions();
if (versionOverride) {
writer.setVersion(versionParm);
}
writer.setPolyOverride(true);
writer.setLayerName(layerName);
writer.init();
App::DocumentObject* obj = static_cast<App::DocumentObjectPy*>(docObj)->getDocumentObjectPtr();