Developer Documentation

Python.cc
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41
42
43 #include <pybind11/include/pybind11/pybind11.h>
44 #include <pybind11/include/pybind11/embed.h>
45
46
47 #include <MovePlugin.hh>
48 #include <OpenFlipper/BasePlugin/PythonFunctions.hh>
49 #include <OpenFlipper/PythonInterpreter/PythonTypeConversions.hh>
50
51 namespace py = pybind11;
52
53 PYBIND11_EMBEDDED_MODULE(Move, m) {
54
55 QObject* pluginPointer = getPluginPointer("Move");
56
57 if (!pluginPointer) {
58 std::cerr << "Error Getting plugin pointer for Plugin-Move" << std::endl;
59 return;
60 }
61
62 MovePlugin* plugin = qobject_cast<MovePlugin*>(pluginPointer);
63
64 if (!plugin) {
65 std::cerr << "Error converting plugin pointer for Plugin-Move" << std::endl;
66 return;
67 }
68
69 // Export our core. Make sure that the c++ worlds core object is not deleted if
70 // the python side gets deleted!!
71 py::class_< MovePlugin,std::unique_ptr<MovePlugin, py::nodelete> > move(m, "Move");
72
73 // On the c++ side we will just return the existing core instance
74 // and prevent the system to recreate a new core as we need
75 // to work on the existing one.
76 move.def(py::init([plugin]() { return plugin; }));
77
78 move.def("moveToOrigin", &MovePlugin::slotMoveToOrigin,
79 QCoreApplication::translate("PythonDocMove","Move all target Meshes cog to the origin").toLatin1().data() );
80
81 move.def("unifyBoundingBoxDiagonal", &MovePlugin::slotUnifyBoundingBoxDiagonal,
82 QCoreApplication::translate("PythonDocMove","Unify bounding box diagonal of all target meshes").toLatin1().data() );
83
84 move.def("unifyBoundingBoxLongestAxis", &MovePlugin::slotUnifyBoundingBoxLongestAxis,
85 QCoreApplication::translate("PythonDocMove","Scale bounding box of all target meshes such that longest axis has unit size (keeps aspect ratio)").toLatin1().data() );
86
87 move.def("unifyBoundingBoxAllAxis", &MovePlugin::slotUnifyBoundingBoxAllAxis,
88 QCoreApplication::translate("PythonDocMove","Scale bounding box of all target meshes such that all axis have unit size").toLatin1().data() );
89
90 move.def("translate", static_cast<void (MovePlugin::*)(int,Vector)>(&MovePlugin::translate),
91 QCoreApplication::translate("PythonDocMove","Translate object by given vector.").toLatin1().data(),
92 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
93 py::arg(QCoreApplication::translate("PythonDocMove","Translation vector").toLatin1().data()) );
94
95 move.def("translate", static_cast<void (MovePlugin::*)(int,IdList,Vector)>(&MovePlugin::translate),
96 QCoreApplication::translate("PythonDocMove","Translate vertices of an object by given vector.").toLatin1().data(),
97 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
98 py::arg(QCoreApplication::translate("PythonDocMove","List of vertex indices to be moved").toLatin1().data()),
99 py::arg(QCoreApplication::translate("PythonDocMove","Translation vector").toLatin1().data()) );
100
101 move.def("translateVertexSelection", static_cast<void (MovePlugin::*)(int,Vector)>(&MovePlugin::translateVertexSelection),
102 QCoreApplication::translate("PythonDocMove","Translate current vertex selection of an object by given vector.").toLatin1().data(),
103 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
104 py::arg(QCoreApplication::translate("PythonDocMove","Translation vector").toLatin1().data()) );
105
106
107
108 move.def("translateFaceSelection", static_cast<void (MovePlugin::*)(int,Vector)>(&MovePlugin::translateFaceSelection),
109 QCoreApplication::translate("PythonDocMove","Translate current face selection of an object by given vector.").toLatin1().data(),
110 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
111 py::arg(QCoreApplication::translate("PythonDocMove","Translation vector").toLatin1().data()) );
112
113 move.def("translateEdgeSelection", static_cast<void (MovePlugin::*)(int,Vector)>(&MovePlugin::translateEdgeSelection),
114 QCoreApplication::translate("PythonDocMove","Translate current edge selection of an object by given vector.").toLatin1().data(),
115 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
116 py::arg(QCoreApplication::translate("PythonDocMove","Translation vector").toLatin1().data()) );
117
118 move.def("transform", static_cast<void (MovePlugin::*)(int,Matrix4x4)>(&MovePlugin::transform),
119 QCoreApplication::translate("PythonDocMove","Transform an object with a 4x4 matrix").toLatin1().data(),
120 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
121 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
122
123 move.def("transform", static_cast<void (MovePlugin::*)(int,IdList,Matrix4x4)>(&MovePlugin::transform),
124 QCoreApplication::translate("PythonDocMove","Transform an object with a 4x4 matrix").toLatin1().data(),
125 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
126 py::arg(QCoreApplication::translate("PythonDocMove","List of vertex handles to move").toLatin1().data()),
127 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
128
129 move.def("transformVertexSelection", static_cast<bool (MovePlugin::*)(int,Matrix4x4)>(&MovePlugin::transformVertexSelection),
130 QCoreApplication::translate("PythonDocMove","Transform selected vertices by given matrix.").toLatin1().data(),
131 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
132 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
133
134
135 move.def("transformFaceSelection", static_cast<bool (MovePlugin::*)(int,Matrix4x4)>(&MovePlugin::transformFaceSelection),
136 QCoreApplication::translate("PythonDocMove","Transform selected faces by given matrix.").toLatin1().data(),
137 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
138 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
139
140 move.def("transformEdgeSelection", static_cast<bool (MovePlugin::*)(int,Matrix4x4)>(&MovePlugin::transformEdgeSelection),
141 QCoreApplication::translate("PythonDocMove","Transform selected edges by given matrix.").toLatin1().data(),
142 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
143 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
144
145 move.def("transformCellSelection", static_cast<bool (MovePlugin::*)(int,Matrix4x4)>(&MovePlugin::transformCellSelection),
146 QCoreApplication::translate("PythonDocMove","Transform selected cells by given matrix.").toLatin1().data(),
147 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
148 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
149
150 move.def("transformHandleRegion", static_cast<void (MovePlugin::*)(int,Matrix4x4)>(&MovePlugin::transformHandleRegion),
151 QCoreApplication::translate("PythonDocMove","Transform handle region by given matrix.").toLatin1().data(),
152 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
153 py::arg(QCoreApplication::translate("PythonDocMove","Transformation matrix").toLatin1().data()) );
154
155 move.def("setManipulatorPosition", &MovePlugin::setManipulatorPosition,
156 QCoreApplication::translate("PythonDocMove","Set the position of the manipulator.").toLatin1().data(),
157 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
158 py::arg(QCoreApplication::translate("PythonDocMove","3D position").toLatin1().data()) );
159
160 move.def("manipulatorPosition", &MovePlugin::manipulatorPosition,
161 QCoreApplication::translate("PythonDocMove","Get the position of the manipulator.").toLatin1().data(),
162 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()) );
163
164 move.def("setManipulatorDirection", &MovePlugin::setManipulatorDirection,
165 QCoreApplication::translate("PythonDocMove","Set the direction of the manipulator.").toLatin1().data(),
166 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
167 py::arg(QCoreApplication::translate("PythonDocMove","X-Axis direction").toLatin1().data()),
168 py::arg(QCoreApplication::translate("PythonDocMove","Y-Axis direction").toLatin1().data()));
169
170 move.def("manipulatorDirectionX", &MovePlugin::manipulatorDirectionX,
171 QCoreApplication::translate("PythonDocMove","Get the x-direction of an object's manipulator.").toLatin1().data(),
172 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()) );
173
174 move.def("manipulatorDirectionY", &MovePlugin::manipulatorDirectionY,
175 QCoreApplication::translate("PythonDocMove","Get the y-direction of an object's manipulator.").toLatin1().data(),
176 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()) );
177
178 move.def("manipulatorDirectionZ", &MovePlugin::manipulatorDirectionZ,
179 QCoreApplication::translate("PythonDocMove","Get the z-direction of an object's manipulator.").toLatin1().data(),
180 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()) );
181
182 move.def("objectRenderingMatrixIdentity", &MovePlugin::objectRenderingMatrixIdentity,
183 QCoreApplication::translate("PythonDocMove","Resets the objects rendering matrix to identity.").toLatin1().data(),
184 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()) );
185
186 move.def("objectRenderingMatrixScale", &MovePlugin::objectRenderingMatrixScale,
187 QCoreApplication::translate("PythonDocMove","Adds a scaling factor to the Object rendering Matrix in the scenegraph.").toLatin1().data(),
188 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
189 py::arg(QCoreApplication::translate("PythonDocMove","scaling factor").toLatin1().data()) );
190
191 move.def("objectRenderingMatrixTranslate", &MovePlugin::objectRenderingMatrixTranslate,
192 QCoreApplication::translate("PythonDocMove","Adds a translation to the Object rendering Matrix in the scenegraph.").toLatin1().data(),
193 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
194 py::arg(QCoreApplication::translate("PythonDocMove","Translation vector").toLatin1().data()) );
195
196 move.def("objectRenderingMatrixRotate", &MovePlugin::objectRenderingMatrixRotate,
197 QCoreApplication::translate("PythonDocMove","Adds a rotation to the Object rendering Matrix in the scenegraph.").toLatin1().data(),
198 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()),
199 py::arg(QCoreApplication::translate("PythonDocMove","Rotation axis").toLatin1().data()),
200 py::arg(QCoreApplication::translate("PythonDocMove","Rotation angle").toLatin1().data()) );
201
202 move.def("getObjectRenderingMatrix", &MovePlugin::getObjectRenderingMatrix,
203 QCoreApplication::translate("PythonDocMove","Returns the current object transformation matrix from the Scenegraph.").toLatin1().data(),
204 py::arg(QCoreApplication::translate("PythonDocMove","ID of an object").toLatin1().data()));
205
206 }
MovePlugin::translate
void translate(int _objectId, Vector _vector)
translate an Object by a given vector
Definition: MovePluginScript.cc:160
MovePlugin::translateEdgeSelection
void translateEdgeSelection(int _objectId, Vector _vector)
translate current edge selection of an Object by a given vector
Definition: MovePluginScript.cc:615
MovePlugin::slotUnifyBoundingBoxDiagonal
void slotUnifyBoundingBoxDiagonal()
Scale Boundingbox Diagonal to unit size.
Definition: MovePlugin.cc:1902
pybind11
Definition: PythonTypeConversions.hh:49
MovePlugin::manipulatorDirectionX
Vector manipulatorDirectionX(int _objectId)
Get the x-direction of the manipulator.
Definition: MovePluginScript.cc:1838
MovePlugin::objectRenderingMatrixRotate
void objectRenderingMatrixRotate(int _objectId, Vector _axis, double _angle)
Adds a scaling factor to the Object rendering Matrix in the scenegraph.
Definition: MovePluginScript.cc:1934
OpenMesh::VectorT
Definition: Vector11T.hh:83
MovePlugin::translateVertexSelection
void translateVertexSelection(int _objectId, Vector _vector)
translate current vertex selection of an Object by a given vector
Definition: MovePluginScript.cc:359
MovePlugin::transform
void transform(int _objectId, Matrix4x4 _matrix)
transform an Object by a given matrix
Definition: MovePluginScript.cc:777
MovePlugin::manipulatorPosition
Vector manipulatorPosition(int _objectId)
Get the position of the manipulator.
Definition: MovePluginScript.cc:1786
IdList
std::vector< int > IdList
Standard Type for id Lists used for scripting.
Definition: DataTypes.hh:179
MovePlugin::slotUnifyBoundingBoxLongestAxis
void slotUnifyBoundingBoxLongestAxis()
Scale Boundingbox longest axis to unit size (keeps aspect ratio)
Definition: MovePlugin.cc:1907
MovePlugin::slotMoveToOrigin
void slotMoveToOrigin()
Move target Meshes cog to the origin.
Definition: MovePlugin.cc:1729
MovePlugin::manipulatorDirectionY
Vector manipulatorDirectionY(int _objectId)
Get the y-direction of the manipulator.
Definition: MovePluginScript.cc:1857
ACG::Matrix4x4T< double >
MovePlugin::transformVertexSelection
bool transformVertexSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
Definition: MovePluginScript.cc:1018
MovePlugin::objectRenderingMatrixScale
void objectRenderingMatrixScale(int _objectId, double _s)
Adds a scaling factor to the Object rendering Matrix in the scenegraph.
Definition: MovePluginScript.cc:1904
MovePlugin::transformCellSelection
bool transformCellSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
Definition: MovePluginScript.cc:1608
MovePlugin::setManipulatorDirection
void setManipulatorDirection(int _objectId, Vector _directionX, Vector _directionY)
Set the direction of the manipulator.
Definition: MovePluginScript.cc:1806
MovePlugin::setManipulatorPosition
void setManipulatorPosition(int _objectId, Vector _position)
Set the position of the manipulator.
Definition: MovePluginScript.cc:1742
MovePlugin::objectRenderingMatrixTranslate
void objectRenderingMatrixTranslate(int _objectId, Vector _translation)
Adds a scaling factor to the Object rendering Matrix in the scenegraph.
Definition: MovePluginScript.cc:1919
MovePlugin::manipulatorDirectionZ
Vector manipulatorDirectionZ(int _objectId)
Get the z-direction of the manipulator.
Definition: MovePluginScript.cc:1876
MovePlugin::transformFaceSelection
bool transformFaceSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
Definition: MovePluginScript.cc:1164
MovePlugin::translateFaceSelection
void translateFaceSelection(int _objectId, Vector _vector)
translate current face selection of an Object by a given vector
Definition: MovePluginScript.cc:483
MovePlugin::getObjectRenderingMatrix
Matrix4x4 getObjectRenderingMatrix(int _objectId)
Gets the Object Matrix in the scenegraph.
Definition: MovePluginScript.cc:1949
MovePlugin::transformHandleRegion
void transformHandleRegion(int _objectId, Matrix4x4 _matrix)
Transform handle region using the given transformation matrix.
Definition: MovePluginScript.cc:746
MovePlugin::slotUnifyBoundingBoxAllAxis
void slotUnifyBoundingBoxAllAxis()
Scale all Boundingbox axis to unit size.
Definition: MovePlugin.cc:1912
MovePlugin
Definition: MovePlugin.hh:81
MovePlugin::objectRenderingMatrixIdentity
void objectRenderingMatrixIdentity(int _objectId)
Sets the Object Matrix in the scenegraph to identity.
Definition: MovePluginScript.cc:1889
MovePlugin::transformEdgeSelection
bool transformEdgeSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
Definition: MovePluginScript.cc:1376