Add option for Dxf Version and forced Polyline
- allows override of user parameter values.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -341,9 +341,10 @@ void ImpExpDxfWrite::setOptions(void)
|
||||
{
|
||||
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath(getOptionSource().c_str());
|
||||
optionMaxLength = hGrp->GetFloat("maxsegmentlength",5.0);
|
||||
optionPolyLine = hGrp->GetBool("DiscretizeEllipses",false);
|
||||
optionExpPoints = hGrp->GetBool("ExportPoints",false);
|
||||
m_version = hGrp->GetInt("DxfVersionOut",14);
|
||||
optionPolyLine = hGrp->GetBool("DiscretizeEllipses",false);
|
||||
m_polyOverride = hGrp->GetBool("DiscretizeEllipses",false);
|
||||
setDataDir(App::Application::getResourceDir() + "Mod/Import/DxfPlate/");
|
||||
}
|
||||
|
||||
@@ -370,37 +371,66 @@ void ImpExpDxfWrite::exportShape(const TopoDS_Shape input)
|
||||
gp_Pnt s = adapt.Value(f);
|
||||
gp_Pnt e = adapt.Value(l);
|
||||
if (fabs(l-f) > 1.0 && s.SquareDistance(e) < 0.001) {
|
||||
if ((optionPolyLine) &&
|
||||
(m_version >= 14) ) {
|
||||
exportLWPoly(adapt);
|
||||
} else if ((optionPolyLine) ||
|
||||
(m_version < 14) ) {
|
||||
exportPolyline(adapt);
|
||||
} else {
|
||||
if (m_polyOverride) {
|
||||
if (m_version >= 14) {
|
||||
exportLWPoly(adapt);
|
||||
} else { //m_version < 14
|
||||
exportPolyline(adapt);
|
||||
}
|
||||
} else if (optionPolyLine) {
|
||||
if (m_version >= 14) {
|
||||
exportLWPoly(adapt);
|
||||
} else { //m_version < 14
|
||||
exportPolyline(adapt);
|
||||
}
|
||||
} else { //no overrides, do what's right!
|
||||
if (m_version < 14) {
|
||||
exportPolyline(adapt);
|
||||
} else {
|
||||
exportEllipse(adapt);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((optionPolyLine) &&
|
||||
(m_version >= 14) ) {
|
||||
exportLWPoly(adapt);
|
||||
} else if ((optionPolyLine) ||
|
||||
(m_version < 14) ) {
|
||||
exportPolyline(adapt);
|
||||
} else {
|
||||
exportEllipseArc(adapt);
|
||||
} else { // it's an arc
|
||||
if (m_polyOverride) {
|
||||
if (m_version >= 14) {
|
||||
exportLWPoly(adapt);
|
||||
} else { //m_version < 14
|
||||
exportPolyline(adapt);
|
||||
}
|
||||
} else if (optionPolyLine) {
|
||||
if (m_version >= 14) {
|
||||
exportLWPoly(adapt);
|
||||
} else { //m_version < 14
|
||||
exportPolyline(adapt);
|
||||
}
|
||||
} else { //no overrides, do what's right!
|
||||
if (m_version < 14) {
|
||||
exportPolyline(adapt);
|
||||
} else {
|
||||
exportEllipseArc(adapt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else if (adapt.GetType() == GeomAbs_BSplineCurve) {
|
||||
if ((optionPolyLine) &&
|
||||
(m_version >= 14) ) {
|
||||
exportLWPoly(adapt);
|
||||
} else if ((optionPolyLine) ||
|
||||
(m_version < 14) ) {
|
||||
exportPolyline(adapt);
|
||||
} else {
|
||||
exportBSpline(adapt);
|
||||
}
|
||||
if (m_polyOverride) {
|
||||
if (m_version >= 14) {
|
||||
exportLWPoly(adapt);
|
||||
} else { //m_version < 14
|
||||
exportPolyline(adapt);
|
||||
}
|
||||
} else if (optionPolyLine) {
|
||||
if (m_version >= 14) {
|
||||
exportLWPoly(adapt);
|
||||
} else { //m_version < 14
|
||||
exportPolyline(adapt);
|
||||
}
|
||||
} else { //no overrides, do what's right!
|
||||
if (m_version < 14) {
|
||||
exportPolyline(adapt);
|
||||
} else {
|
||||
exportBSpline(adapt);
|
||||
}
|
||||
}
|
||||
} else if (adapt.GetType() == GeomAbs_BezierCurve) {
|
||||
exportBCurve(adapt);
|
||||
} else if (adapt.GetType() == GeomAbs_Line) {
|
||||
|
||||
@@ -63,7 +63,6 @@ void CDxfWrite::init(void)
|
||||
writeHeaderSection();
|
||||
makeBlockRecordTableHead();
|
||||
makeBlockSectionHead();
|
||||
|
||||
}
|
||||
|
||||
//! assemble pieces into output file
|
||||
|
||||
@@ -156,6 +156,7 @@ protected:
|
||||
int m_layerHandle;
|
||||
int m_blockHandle;
|
||||
int m_blkRecordHandle;
|
||||
bool m_polyOverride;
|
||||
|
||||
std::string m_saveModelSpaceHandle;
|
||||
std::string m_savePaperSpaceHandle;
|
||||
@@ -180,6 +181,8 @@ public:
|
||||
// bool isVersionValid(int vers);
|
||||
std::string getLayerName() { return m_layerName; }
|
||||
void setLayerName(std::string s);
|
||||
void setVersion(int v) { m_version = v;}
|
||||
void setPolyOverride(bool b) { m_polyOverride = b; }
|
||||
void addBlockName(std::string s, std::string blkRecordHandle);
|
||||
|
||||
void writeLine(const double* s, const double* e);
|
||||
|
||||
Reference in New Issue
Block a user