Part: [skip ci] implement getPyObject/setPyObject of TopoShape class
This commit is contained in:
@@ -912,17 +912,8 @@ private:
|
||||
|
||||
fm->Build();
|
||||
|
||||
if(fm->Shape().IsNull())
|
||||
return Py::asObject(new TopoShapePy(new TopoShape(fm->Shape())));
|
||||
|
||||
switch(fm->Shape().ShapeType()){
|
||||
case TopAbs_FACE:
|
||||
return Py::asObject(new TopoShapeFacePy(new TopoShape(fm->Shape())));
|
||||
case TopAbs_COMPOUND:
|
||||
return Py::asObject(new TopoShapeCompoundPy(new TopoShape(fm->Shape())));
|
||||
default:
|
||||
return Py::asObject(new TopoShapePy(new TopoShape(fm->Shape())));
|
||||
}
|
||||
TopoShape topo(fm->Shape());
|
||||
return Py::asObject(topo.getPyObject());
|
||||
}
|
||||
|
||||
throw Py::Exception(Base::BaseExceptionFreeCADError, std::string("Argument type signature not recognized. Should be either (list, string), or (shape, string)"));
|
||||
@@ -2012,36 +2003,7 @@ private:
|
||||
PyObject *object;
|
||||
if (PyArg_ParseTuple(args.ptr(),"O!",&(Part::TopoShapePy::Type), &object)) {
|
||||
TopoShape* ptr = static_cast<TopoShapePy*>(object)->getTopoShapePtr();
|
||||
TopoDS_Shape shape = ptr->getShape();
|
||||
if (!shape.IsNull()) {
|
||||
TopAbs_ShapeEnum type = shape.ShapeType();
|
||||
switch (type)
|
||||
{
|
||||
case TopAbs_COMPOUND:
|
||||
return Py::asObject(new TopoShapeCompoundPy(new TopoShape(shape)));
|
||||
case TopAbs_COMPSOLID:
|
||||
return Py::asObject(new TopoShapeCompSolidPy(new TopoShape(shape)));
|
||||
case TopAbs_SOLID:
|
||||
return Py::asObject(new TopoShapeSolidPy(new TopoShape(shape)));
|
||||
case TopAbs_SHELL:
|
||||
return Py::asObject(new TopoShapeShellPy(new TopoShape(shape)));
|
||||
case TopAbs_FACE:
|
||||
return Py::asObject(new TopoShapeFacePy(new TopoShape(shape)));
|
||||
case TopAbs_WIRE:
|
||||
return Py::asObject(new TopoShapeWirePy(new TopoShape(shape)));
|
||||
case TopAbs_EDGE:
|
||||
return Py::asObject(new TopoShapeEdgePy(new TopoShape(shape)));
|
||||
case TopAbs_VERTEX:
|
||||
return Py::asObject(new TopoShapeVertexPy(new TopoShape(shape)));
|
||||
case TopAbs_SHAPE:
|
||||
return Py::asObject(new TopoShapePy(new TopoShape(shape)));
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw Py::Exception(PartExceptionOCCError, "empty shape");
|
||||
}
|
||||
return Py::asObject(ptr->getPyObject());
|
||||
}
|
||||
|
||||
throw Py::Exception();
|
||||
|
||||
@@ -35,48 +35,7 @@
|
||||
namespace Part {
|
||||
PartExport Py::Object shape2pyshape(const TopoShape &shape)
|
||||
{
|
||||
PyObject* ret = 0;
|
||||
if (!shape.isNull()) {
|
||||
TopAbs_ShapeEnum type = shape.getShape().ShapeType();
|
||||
switch (type)
|
||||
{
|
||||
case TopAbs_COMPOUND:
|
||||
ret = new TopoShapeCompoundPy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_COMPSOLID:
|
||||
ret = new TopoShapeCompSolidPy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_SOLID:
|
||||
ret = new TopoShapeSolidPy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_SHELL:
|
||||
ret = new TopoShapeShellPy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_FACE:
|
||||
ret = new TopoShapeFacePy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_WIRE:
|
||||
ret = new TopoShapeWirePy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_EDGE:
|
||||
ret = new TopoShapeEdgePy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_VERTEX:
|
||||
ret = new TopoShapeVertexPy(new TopoShape(shape));
|
||||
break;
|
||||
case TopAbs_SHAPE:
|
||||
ret = new TopoShapePy(new TopoShape(shape));
|
||||
break;
|
||||
default:
|
||||
//shouldn't happen
|
||||
ret = new TopoShapePy(new TopoShape(shape));
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
ret = new TopoShapePy(new TopoShape(shape));
|
||||
}
|
||||
assert(ret);
|
||||
|
||||
PyObject* ret = const_cast<TopoShape &>(shape).getPyObject();
|
||||
return Py::asObject(ret);
|
||||
}
|
||||
|
||||
|
||||
@@ -146,47 +146,9 @@ void PropertyPartShape::transformGeometry(const Base::Matrix4D &rclTrf)
|
||||
|
||||
PyObject *PropertyPartShape::getPyObject(void)
|
||||
{
|
||||
Base::PyObjectBase* prop;
|
||||
const TopoDS_Shape& sh = _Shape.getShape();
|
||||
if (sh.IsNull()) {
|
||||
prop = new TopoShapePy(new TopoShape(sh));
|
||||
}
|
||||
else {
|
||||
TopAbs_ShapeEnum type = sh.ShapeType();
|
||||
switch (type)
|
||||
{
|
||||
case TopAbs_COMPOUND:
|
||||
prop = new TopoShapeCompoundPy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_COMPSOLID:
|
||||
prop = new TopoShapeCompSolidPy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_SOLID:
|
||||
prop = new TopoShapeSolidPy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_SHELL:
|
||||
prop = new TopoShapeShellPy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_FACE:
|
||||
prop = new TopoShapeFacePy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_WIRE:
|
||||
prop = new TopoShapeWirePy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_EDGE:
|
||||
prop = new TopoShapeEdgePy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_VERTEX:
|
||||
prop = new TopoShapeVertexPy(new TopoShape(sh));
|
||||
break;
|
||||
case TopAbs_SHAPE:
|
||||
default:
|
||||
prop = new TopoShapePy(new TopoShape(sh));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
prop->setConst();
|
||||
Base::PyObjectBase* prop = static_cast<Base::PyObjectBase*>(_Shape.getPyObject());
|
||||
if (prop)
|
||||
prop->setConst();
|
||||
return prop;
|
||||
}
|
||||
|
||||
|
||||
@@ -199,6 +199,11 @@
|
||||
#include "TopoShapeFacePy.h"
|
||||
#include "TopoShapeEdgePy.h"
|
||||
#include "TopoShapeVertexPy.h"
|
||||
#include "TopoShapeWirePy.h"
|
||||
#include "TopoShapeShellPy.h"
|
||||
#include "TopoShapeSolidPy.h"
|
||||
#include "TopoShapeCompoundPy.h"
|
||||
#include "TopoShapeCompSolidPy.h"
|
||||
#include "ProgressIndicator.h"
|
||||
#include "modelRefine.h"
|
||||
#include "Tools.h"
|
||||
@@ -542,6 +547,62 @@ PyObject * TopoShape::getPySubShape(const char* Type, bool silent) const
|
||||
return Py::new_reference_to(shape2pyshape(getSubShape(Type,silent)));
|
||||
}
|
||||
|
||||
PyObject * TopoShape::getPyObject()
|
||||
{
|
||||
Base::PyObjectBase* prop = nullptr;
|
||||
if (_Shape.IsNull()) {
|
||||
prop = new TopoShapePy(new TopoShape(_Shape));
|
||||
}
|
||||
else {
|
||||
TopAbs_ShapeEnum type = _Shape.ShapeType();
|
||||
switch (type)
|
||||
{
|
||||
case TopAbs_COMPOUND:
|
||||
prop = new TopoShapeCompoundPy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_COMPSOLID:
|
||||
prop = new TopoShapeCompSolidPy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_SOLID:
|
||||
prop = new TopoShapeSolidPy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_SHELL:
|
||||
prop = new TopoShapeShellPy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_FACE:
|
||||
prop = new TopoShapeFacePy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_WIRE:
|
||||
prop = new TopoShapeWirePy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_EDGE:
|
||||
prop = new TopoShapeEdgePy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_VERTEX:
|
||||
prop = new TopoShapeVertexPy(new TopoShape(_Shape));
|
||||
break;
|
||||
case TopAbs_SHAPE:
|
||||
default:
|
||||
prop = new TopoShapePy(new TopoShape(_Shape));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return prop;
|
||||
}
|
||||
|
||||
void TopoShape::setPyObject(PyObject* obj)
|
||||
{
|
||||
if (PyObject_TypeCheck(obj, &TopoShapePy::Type)) {
|
||||
this->_Shape = static_cast<TopoShapePy*>(obj)->getTopoShapePtr()->getShape();
|
||||
}
|
||||
else {
|
||||
std::string error = std::string("type must be 'Shape', not ");
|
||||
error += obj->ob_type->tp_name;
|
||||
throw Base::TypeError(error);
|
||||
}
|
||||
}
|
||||
|
||||
void TopoShape::operator = (const TopoShape& sh)
|
||||
{
|
||||
if (this != &sh) {
|
||||
|
||||
@@ -157,6 +157,8 @@ public:
|
||||
bool hasSubShape(TopAbs_ShapeEnum type) const;
|
||||
/// get the Topo"sub"Shape with the given name
|
||||
PyObject * getPySubShape(const char* Type, bool silent=false) const;
|
||||
PyObject * getPyObject();
|
||||
void setPyObject(PyObject*);
|
||||
|
||||
/** @name Save/restore */
|
||||
//@{
|
||||
|
||||
Reference in New Issue
Block a user