1 /*
2  * Copyright (c) 2011-2021, The DART development contributors
3  * All rights reserved.
4  *
5  * The list of contributors can be found at:
6  *   https://github.com/dartsim/dart/blob/master/LICENSE
7  *
8  * This file is provided under the following "BSD-style" License:
9  *   Redistribution and use in source and binary forms, with or
10  *   without modification, are permitted provided that the following
11  *   conditions are met:
12  *   * Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *   * Redistributions in binary form must reproduce the above
15  *     copyright notice, this list of conditions and the following
16  *     disclaimer in the documentation and/or other materials provided
17  *     with the distribution.
18  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19  *   CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20  *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21  *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  *   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  *   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26  *   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27  *   AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  *   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  *   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  *   POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #include <dart/dart.hpp>
34 #include <eigen_geometry_pybind.h>
35 #include <pybind11/eigen.h>
36 #include <pybind11/pybind11.h>
37 #include "Joint.hpp"
38 
39 namespace py = pybind11;
40 
41 namespace dart {
42 namespace python {
43 
TranslationalJoint2D(py::module & m)44 void TranslationalJoint2D(py::module& m)
45 {
46   ::py::class_<dart::dynamics::TranslationalJoint2D::UniqueProperties>(
47       m, "TranslationalJoint2DUniqueProperties")
48       .def(::py::init<>());
49 
50   ::py::class_<
51       dart::dynamics::TranslationalJoint2D::Properties,
52       dart::dynamics::GenericJoint<math::R2Space>::Properties,
53       dart::dynamics::TranslationalJoint2D::UniqueProperties>(
54       m, "TranslationalJoint2DProperties")
55       .def(::py::init<>())
56       .def(
57           ::py::init<const dart::dynamics::GenericJoint<
58               dart::math::R2Space>::Properties&>(),
59           ::py::arg("genericJointProperties"))
60       .def(
61           ::py::init<
62               const dart::dynamics::GenericJoint<
63                   dart::math::R2Space>::Properties&,
64               const dart::dynamics::TranslationalJoint2D::UniqueProperties&>(),
65           ::py::arg("genericJointProperties"),
66           ::py::arg("uniqueProperties"));
67 
68   DARTPY_DEFINE_JOINT_COMMON_BASE(TranslationalJoint2D, R2Space)
69 
70   ::py::class_<
71       dart::dynamics::TranslationalJoint2D,
72       dart::common::EmbedPropertiesOnTopOf<
73           dart::dynamics::TranslationalJoint2D,
74           dart::dynamics::detail::TranslationalJoint2DUniqueProperties,
75           dart::dynamics::GenericJoint<dart::math::RealVectorSpace<2> > >,
76       std::shared_ptr<dart::dynamics::TranslationalJoint2D> >(
77       m, "TranslationalJoint2D")
78       .def(
79           "hasTranslationalJoint2DAspect",
80           +[](const dart::dynamics::TranslationalJoint2D* self) -> bool {
81             return self->hasTranslationalJoint2DAspect();
82           })
83       .def(
84           "setTranslationalJoint2DAspect",
85           +[](dart::dynamics::TranslationalJoint2D* self,
86               const dart::common::EmbedPropertiesOnTopOf<
87                   dart::dynamics::TranslationalJoint2D,
88                   dart::dynamics::detail::TranslationalJoint2DUniqueProperties,
89                   dart::dynamics::GenericJoint<
90                       dart::math::RealVectorSpace<2> > >::Aspect* aspect) {
91             self->setTranslationalJoint2DAspect(aspect);
92           },
93           ::py::arg("aspect"))
94       .def(
95           "removeTranslationalJoint2DAspect",
96           +[](dart::dynamics::TranslationalJoint2D* self) {
97             self->removeTranslationalJoint2DAspect();
98           })
99       .def(
100           "releaseTranslationalJoint2DAspect",
101           +[](dart::dynamics::TranslationalJoint2D* self)
102               -> std::unique_ptr<dart::common::EmbedPropertiesOnTopOf<
103                   dart::dynamics::TranslationalJoint2D,
104                   dart::dynamics::detail::TranslationalJoint2DUniqueProperties,
105                   dart::dynamics::GenericJoint<
106                       dart::math::RealVectorSpace<2> > >::Aspect> {
107             return self->releaseTranslationalJoint2DAspect();
108           })
109       .def(
110           "setProperties",
111           +[](dart::dynamics::TranslationalJoint2D* self,
112               const dart::dynamics::TranslationalJoint2D::Properties&
113                   properties) { self->setProperties(properties); },
114           ::py::arg("properties"))
115       .def(
116           "setProperties",
117           +[](dart::dynamics::TranslationalJoint2D* self,
118               const dart::dynamics::TranslationalJoint2D::UniqueProperties&
119                   properties) { self->setProperties(properties); },
120           ::py::arg("properties"))
121       .def(
122           "setAspectProperties",
123           +[](dart::dynamics::TranslationalJoint2D* self,
124               const dart::common::EmbedPropertiesOnTopOf<
125                   dart::dynamics::TranslationalJoint2D,
126                   dart::dynamics::detail::TranslationalJoint2DUniqueProperties,
127                   dart::dynamics::GenericJoint<
128                       dart::math::RealVectorSpace<2> > >::AspectProperties&
129                   properties) { self->setAspectProperties(properties); },
130           ::py::arg("properties"))
131       .def(
132           "getTranslationalJoint2DProperties",
133           +[](const dart::dynamics::TranslationalJoint2D* self)
134               -> dart::dynamics::TranslationalJoint2D::Properties {
135             return self->getTranslationalJoint2DProperties();
136           })
137       .def(
138           "copy",
139           +[](dart::dynamics::TranslationalJoint2D* self,
140               const dart::dynamics::TranslationalJoint2D* otherJoint) {
141             self->copy(otherJoint);
142           },
143           ::py::arg("otherJoint"))
144       .def(
145           "getType",
146           +[](const dart::dynamics::TranslationalJoint2D* self)
147               -> const std::string& { return self->getType(); },
148           ::py::return_value_policy::reference_internal)
149       .def(
150           "isCyclic",
151           +[](const dart::dynamics::TranslationalJoint2D* self,
152               std::size_t index) -> bool { return self->isCyclic(index); },
153           ::py::arg("index"))
154       .def(
155           "setXYPlane",
156           +[](dart::dynamics::TranslationalJoint2D* self) {
157             self->setXYPlane();
158           })
159       .def(
160           "setXYPlane",
161           +[](dart::dynamics::TranslationalJoint2D* self, bool renameDofs) {
162             self->setXYPlane(renameDofs);
163           },
164           ::py::arg("renameDofs"))
165       .def(
166           "setYZPlane",
167           +[](dart::dynamics::TranslationalJoint2D* self) {
168             self->setYZPlane();
169           })
170       .def(
171           "setYZPlane",
172           +[](dart::dynamics::TranslationalJoint2D* self, bool renameDofs) {
173             self->setYZPlane(renameDofs);
174           },
175           ::py::arg("renameDofs"))
176       .def(
177           "setZXPlane",
178           +[](dart::dynamics::TranslationalJoint2D* self) {
179             self->setZXPlane();
180           })
181       .def(
182           "setZXPlane",
183           +[](dart::dynamics::TranslationalJoint2D* self, bool renameDofs) {
184             self->setZXPlane(renameDofs);
185           },
186           ::py::arg("renameDofs"))
187       .def(
188           "setArbitraryPlane",
189           +[](dart::dynamics::TranslationalJoint2D* self,
190               const Eigen::Vector3d& transAxis1,
191               const Eigen::Vector3d& transAxis2) {
192             self->setArbitraryPlane(transAxis1, transAxis2);
193           },
194           ::py::arg("transAxis1"),
195           ::py::arg("transAxis2"))
196       .def(
197           "setArbitraryPlane",
198           +[](dart::dynamics::TranslationalJoint2D* self,
199               const Eigen::Vector3d& transAxis1,
200               const Eigen::Vector3d& transAxis2,
201               bool renameDofs) {
202             self->setArbitraryPlane(transAxis1, transAxis2, renameDofs);
203           },
204           ::py::arg("transAxis1"),
205           ::py::arg("transAxis2"),
206           ::py::arg("renameDofs"))
207       .def(
208           "getPlaneType",
209           +[](const dart::dynamics::TranslationalJoint2D* self)
210               -> dart::dynamics::TranslationalJoint2D::PlaneType {
211             return self->getPlaneType();
212           })
213       .def(
214           "getTranslationalAxis1",
215           +[](const dart::dynamics::TranslationalJoint2D* self)
216               -> Eigen::Vector3d { return self->getTranslationalAxis1(); })
217       .def(
218           "getTranslationalAxis2",
219           +[](const dart::dynamics::TranslationalJoint2D* self)
220               -> Eigen::Vector3d { return self->getTranslationalAxis2(); })
221       .def(
222           "getRelativeJacobianStatic",
223           +[](const dart::dynamics::TranslationalJoint2D* self,
224               const Eigen::Vector2d& positions) -> Eigen::Matrix<double, 6, 2> {
225             return self->getRelativeJacobianStatic(positions);
226           },
227           ::py::arg("positions"))
228       .def_static(
229           "getStaticType",
230           +[]() -> const std::string& {
231             return dart::dynamics::TranslationalJoint2D::getStaticType();
232           },
233           ::py::return_value_policy::reference_internal);
234 }
235 
236 } // namespace python
237 } // namespace dart
238