+ Allow to get clean copy of a shape from Python
This commit is contained in:
@@ -361,6 +361,15 @@ into BSpline surfaces.</UserDocu>
|
||||
<UserDocu>Create a copy of this shape</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="cleaned" Const="true">
|
||||
<Documentation>
|
||||
<UserDocu>This creates a cleaned copy of the shape with the triangulation removed.
|
||||
This can be useful to reduce file size when exporting as a BRep file.
|
||||
Warning: Use the cleaned shape with care because certain algorithms may work incorrectly
|
||||
if the shape has no internal triangulation any more.
|
||||
</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="replaceShape" Const="true">
|
||||
<Documentation>
|
||||
<UserDocu>Replace a sub-shape with a new shape and return a new shape.
|
||||
|
||||
@@ -172,6 +172,31 @@ PyObject* TopoShapePy::copy(PyObject *args)
|
||||
return cpy;
|
||||
}
|
||||
|
||||
PyObject* TopoShapePy::cleaned(PyObject *args)
|
||||
{
|
||||
if (!PyArg_ParseTuple(args, ""))
|
||||
return NULL;
|
||||
|
||||
const TopoDS_Shape& shape = this->getTopoShapePtr()->_Shape;
|
||||
PyTypeObject* type = this->GetType();
|
||||
PyObject* cpy = 0;
|
||||
// let the type object decide
|
||||
if (type->tp_new)
|
||||
cpy = type->tp_new(type, this, 0);
|
||||
if (!cpy) {
|
||||
PyErr_SetString(PyExc_TypeError, "failed to create copy of shape");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!shape.IsNull()) {
|
||||
BRepBuilderAPI_Copy c(shape);
|
||||
const TopoDS_Shape& copiedShape = c.Shape();
|
||||
BRepTools::Clean(copiedShape); // remove triangulation
|
||||
static_cast<TopoShapePy*>(cpy)->getTopoShapePtr()->_Shape = c.Shape();
|
||||
}
|
||||
return cpy;
|
||||
}
|
||||
|
||||
PyObject* TopoShapePy::replaceShape(PyObject *args)
|
||||
{
|
||||
PyObject *l;
|
||||
|
||||
Reference in New Issue
Block a user