Skip to content

Commit

Permalink
+ implement missing methods of Python API for SelectionObject
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed May 21, 2015
1 parent f20519d commit a4441f2
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 43 deletions.
10 changes: 4 additions & 6 deletions src/Gui/SelectionObject.cpp
Expand Up @@ -49,19 +49,19 @@ SelectionObject::~SelectionObject()

const App::DocumentObject * SelectionObject::getObject(void) const
{
if (DocName != "") {
if (!DocName.empty()) {
App::Document *doc = App::GetApplication().getDocument(DocName.c_str());
if (doc && FeatName != "")
if (doc && !FeatName.empty())
return doc->getObject(FeatName.c_str());
}
return 0;
}

App::DocumentObject * SelectionObject::getObject(void)
{
if (DocName != "") {
if (!DocName.empty()) {
App::Document *doc = App::GetApplication().getDocument(DocName.c_str());
if (doc && FeatName != "")
if (doc && !FeatName.empty())
return doc->getObject(FeatName.c_str());
}
return 0;
Expand Down Expand Up @@ -93,9 +93,7 @@ std::string SelectionObject::getAsPropertyLinkSubString(void)const
return buf;
}


PyObject* SelectionObject::getPyObject()
{
return new SelectionObjectPy(new SelectionObject(*this));
}

4 changes: 3 additions & 1 deletion src/Gui/SelectionObject.h
Expand Up @@ -58,8 +58,10 @@ class GuiExport SelectionObject : public Base::BaseClass
inline const char* getDocName(void) const { return DocName.c_str(); }
/// get the name of the Document Object of this SelectionObject
inline const char* getFeatName(void) const { return FeatName.c_str(); }
/// get the Type of the selcted Object
/// get the Type of the selected Object
inline const char* getTypeName(void) const { return TypeName.c_str(); }
/// get the selection points
inline const std::vector<Base::Vector3d> getSubPoints(void) const { return SelPoses; }

/// returns the selected DocumentObject or NULL if the object is already deleted
const App::DocumentObject *getObject(void) const;
Expand Down
22 changes: 17 additions & 5 deletions src/Gui/SelectionObjectPy.xml
Expand Up @@ -19,7 +19,7 @@
<UserDocu>Remove this selection item from the selection. This object becomes invalid.</UserDocu>
</Documentation>
</Methode>
<Methode Name="isA">
<Methode Name="isObjectTypeOf">
<Documentation>
<UserDocu>Test for a certain father class.</UserDocu>
</Documentation>
Expand All @@ -34,15 +34,21 @@
<Documentation>
<UserDocu>Name of the selected sub-element if any</UserDocu>
</Documentation>
<Parameter Name="SubElementNames" Type="List" />
<Parameter Name="SubElementNames" Type="Tuple" />
</Attribute>
<Attribute Name="FullName" ReadOnly="true">
<Documentation>
<UserDocu>Name of the selected object</UserDocu>
</Documentation>
<Parameter Name="FullName" Type="String" />
</Attribute>
<Attribute Name="DocumentName" ReadOnly="true">
<Attribute Name="TypeName" ReadOnly="true">
<Documentation>
<UserDocu>Type name of the selected object</UserDocu>
</Documentation>
<Parameter Name="TypeName" Type="String" />
</Attribute>
<Attribute Name="DocumentName" ReadOnly="true">
<Documentation>
<UserDocu>Name of the document of the selected object</UserDocu>
</Documentation>
Expand All @@ -64,9 +70,15 @@
<Documentation>
<UserDocu>Selected sub-element, if any</UserDocu>
</Documentation>
<Parameter Name="SubObjects" Type="List" />
<Parameter Name="SubObjects" Type="Tuple" />
</Attribute>
<Attribute Name="HasSubObjects" ReadOnly="true">
<Attribute Name="SubPoints" ReadOnly="true">
<Documentation>
<UserDocu>Selection points</UserDocu>
</Documentation>
<Parameter Name="SubPoints" Type="Tuple" />
</Attribute>
<Attribute Name="HasSubObjects" ReadOnly="true">
<Documentation>
<UserDocu>Selected sub-element, if any</UserDocu>
</Documentation>
Expand Down
84 changes: 53 additions & 31 deletions src/Gui/SelectionObjectPyImp.cpp
Expand Up @@ -22,10 +22,12 @@

#include "PreCompiled.h"

#include "Gui/SelectionObject.h"
#include "App/Document.h"
#include "App/DocumentObject.h"
#include "App/Application.h"
#include "SelectionObject.h"
#include "Selection.h"
#include <Base/GeometryPyCXX.h>
#include <App/Document.h>
#include <App/DocumentObject.h>
#include <App/Application.h>

// inclusion of the generated files (generated out of SelectionObjectPy.xml)
#include "SelectionObjectPy.h"
Expand All @@ -39,49 +41,56 @@ std::string SelectionObjectPy::representation(void) const
return "<SelectionObject>";
}



PyObject* SelectionObjectPy::remove(PyObject * /*args*/)
PyObject* SelectionObjectPy::remove(PyObject * args)
{
PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
return 0;
if (!PyArg_ParseTuple(args, ""))
return 0;
Selection().rmvSelection(getSelectionObjectPtr()->getDocName(),
getSelectionObjectPtr()->getFeatName());
Py_Return;
}

PyObject* SelectionObjectPy::isA(PyObject * /*args*/)
PyObject* SelectionObjectPy::isObjectTypeOf(PyObject * args)
{
PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
return 0;
char* type;
if (!PyArg_ParseTuple(args, "s", &type))
return 0;
Base::Type id = Base::Type::fromName(type);
if (id.isBad()) {
PyErr_SetString(PyExc_TypeError, "Not a valid type");
return 0;
}

bool ok = getSelectionObjectPtr()->isObjectTypeOf(id);

return Py_BuildValue("O", (ok ? Py_True : Py_False));
}



Py::String SelectionObjectPy::getObjectName(void) const
{
return Py::String(getSelectionObjectPtr()->getFeatName());
}

Py::List SelectionObjectPy::getSubElementNames(void) const
Py::Tuple SelectionObjectPy::getSubElementNames(void) const
{
Py::List temp;
std::vector<std::string> objs = getSelectionObjectPtr()->getSubNames();

Py::Tuple temp(objs.size());
Py::sequence_index_type index = 0;
for(std::vector<std::string>::const_iterator it= objs.begin();it!=objs.end();++it)
temp.append(Py::String(*it));
temp.setItem(index++, Py::String(*it));

return temp;
}

Py::String SelectionObjectPy::getFullName(void) const
{
std::string buf;
//buf = getSelectionObjectPtr()->getDocName();
//buf += ".";
//buf += getSelectionObjectPtr()->getFeatName();
//if(getSelectionObjectPtr()->getSubName()){
// buf += ".";
// buf += getSelectionObjectPtr()->getSubName();
//}
return Py::String(buf.c_str());
return Py::String(getSelectionObjectPtr()->getAsPropertyLinkSubString());
}

Py::String SelectionObjectPy::getTypeName(void) const
{
return Py::String(getSelectionObjectPtr()->getTypeName());
}

Py::String SelectionObjectPy::getDocumentName(void) const
Expand All @@ -99,12 +108,15 @@ Py::Object SelectionObjectPy::getObject(void) const
return Py::Object(getSelectionObjectPtr()->getObject()->getPyObject(), true);
}

Py::List SelectionObjectPy::getSubObjects(void) const
Py::Tuple SelectionObjectPy::getSubObjects(void) const
{
Py::List temp;
std::vector<PyObject *> objs = getSelectionObjectPtr()->getObject()->getPySubObjects(getSelectionObjectPtr()->getSubNames());

Py::Tuple temp(objs.size());
Py::sequence_index_type index = 0;
for(std::vector<PyObject *>::const_iterator it= objs.begin();it!=objs.end();++it)
temp.append(Py::Object(*it,true));
temp.setItem(index++, Py::asObject(*it));

return temp;
}

Expand All @@ -113,6 +125,18 @@ Py::Boolean SelectionObjectPy::getHasSubObjects(void) const
return Py::Boolean(getSelectionObjectPtr()->hasSubNames());
}

Py::Tuple SelectionObjectPy::getSubPoints(void) const
{
const std::vector<Base::Vector3d>& points = getSelectionObjectPtr()->getSubPoints();

Py::Tuple temp(points.size());
Py::sequence_index_type index = 0;
for(std::vector<Base::Vector3d>::const_iterator it= points.begin();it!=points.end();++it)
temp.setItem(index++, Py::Vector(*it));

return temp;
}

PyObject *SelectionObjectPy::getCustomAttributes(const char* /*attr*/) const
{
return 0;
Expand All @@ -122,5 +146,3 @@ int SelectionObjectPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj
{
return 0;
}


3 changes: 3 additions & 0 deletions src/Gui/SoFCDB.cpp
Expand Up @@ -48,6 +48,7 @@
#include "propertyeditor/PropertyItem.h"
#include "NavigationStyle.h"
#include "Flag.h"
#include "SelectionObject.h"

using namespace Gui;
using namespace Gui::Inventor;
Expand Down Expand Up @@ -140,6 +141,8 @@ void Gui::SoFCDB::init()
GLGraphicsItem ::init();
GLFlagWindow ::init();

SelectionObject ::init();

qRegisterMetaType<Base::Vector3f>("Base::Vector3f");
qRegisterMetaType<Base::Vector3d>("Base::Vector3d");
qRegisterMetaType<Base::Quantity>("Base::Quantity");
Expand Down

0 comments on commit a4441f2

Please sign in to comment.