FreeCAD
1/***************************************************************************
2* Copyright (c) 2014 Jürgen Riegel <juergen.riegel@web.de> *
3* *
4* This file is part of the FreeCAD CAx development system. *
5* *
6* This library is free software; you can redistribute it and/or *
7* modify it under the terms of the GNU Library General Public *
8* License as published by the Free Software Foundation; either *
9* version 2 of the License, or (at your option) any later version. *
10* *
11* This library is distributed in the hope that it will be useful, *
12* but WITHOUT ANY WARRANTY; without even the implied warranty of *
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14* GNU Library General Public License for more details. *
15* *
16* You should have received a copy of the GNU Library General Public *
17* License along with this library; see the file COPYING.LIB. If not, *
18* write to the Free Software Foundation, Inc., 59 Temple Place, *
19* Suite 330, Boston, MA 02111-1307, USA *
20* *
21***************************************************************************/
22
23
24#include "PreCompiled.h"25
26// inclusion of the generated files (generated out of AssemblyObject.xml)
27#include "AssemblyObjectPy.h"28#include "AssemblyObjectPy.cpp"29
30using namespace Assembly;31
32// returns a string which represents the object e.g. when printed in python
33std::string AssemblyObjectPy::representation() const34{
35return {"<Assembly object>"};36}
37
38PyObject* AssemblyObjectPy::getCustomAttributes(const char* /*attr*/) const39{
40return nullptr;41}
42
43int AssemblyObjectPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/)44{
45return 0;46}
47
48PyObject* AssemblyObjectPy::solve(PyObject* args)49{
50PyObject* enableUndoPy;51bool enableUndo;52
53if (!PyArg_ParseTuple(args, "O!", &PyBool_Type, &enableUndoPy)) {54PyErr_Clear();55if (!PyArg_ParseTuple(args, "")) {56return nullptr;57}58else {59enableUndo = false;60}61}62else {63enableUndo = Base::asBoolean(enableUndoPy);64}65
66int ret = this->getAssemblyObjectPtr()->solve(enableUndo);67return Py_BuildValue("i", ret);68}
69
70PyObject* AssemblyObjectPy::undoSolve(PyObject* args)71{
72if (!PyArg_ParseTuple(args, "")) {73return nullptr;74}75this->getAssemblyObjectPtr()->undoSolve();76Py_Return;77}
78
79PyObject* AssemblyObjectPy::clearUndo(PyObject* args)80{
81if (!PyArg_ParseTuple(args, "")) {82return nullptr;83}84this->getAssemblyObjectPtr()->clearUndo();85Py_Return;86}
87
88PyObject* AssemblyObjectPy::isPartConnected(PyObject* args)89{
90PyObject* pyobj;91
92if (!PyArg_ParseTuple(args, "O", &pyobj)) {93return nullptr;94}95auto* obj = static_cast<App::DocumentObjectPy*>(pyobj)->getDocumentObjectPtr();96bool ok = this->getAssemblyObjectPtr()->isPartConnected(obj);97return Py_BuildValue("O", (ok ? Py_True : Py_False));98}
99
100PyObject* AssemblyObjectPy::exportAsASMT(PyObject* args)101{
102char* utf8Name;103if (!PyArg_ParseTuple(args, "et", "utf-8", &utf8Name)) {104return nullptr;105}106
107std::string fileName = utf8Name;108PyMem_Free(utf8Name);109
110if (fileName.empty()) {111PyErr_SetString(PyExc_ValueError, "Passed string is empty");112return nullptr;113}114
115this->getAssemblyObjectPtr()->exportAsASMT(fileName);116
117Py_Return;118}
119