From b29d04ea33980e9df07f939374251284026aff0f Mon Sep 17 00:00:00 2001 From: nsubiron Date: Wed, 3 Apr 2019 16:49:26 +0200 Subject: [PATCH] Add extra constructors to carla.command objects to use actors directly --- PythonAPI/carla/source/libcarla/Commands.cpp | 36 +++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/PythonAPI/carla/source/libcarla/Commands.cpp b/PythonAPI/carla/source/libcarla/Commands.cpp index 9e77a9a05..565be2efe 100644 --- a/PythonAPI/carla/source/libcarla/Commands.cpp +++ b/PythonAPI/carla/source/libcarla/Commands.cpp @@ -7,63 +7,97 @@ #include #include +namespace command_impl { + + template + const T &Convert(const T &in) { + return in; + } + + carla::rpc::ActorId Convert(const boost::shared_ptr &actor) { + return actor->GetId(); + } + + carla::rpc::ActorDescription Convert(const carla::client::ActorBlueprint &blueprint) { + return blueprint.MakeActorDescription(); + } + + template + static boost::python::object CustomInit(boost::python::object self, ArgsT... args) { + return self.attr("__init__")(Convert(args)...); + } + +} // namespace command_impl + void export_commands() { using namespace boost::python; - namespace cr = carla::rpc; + namespace cc = carla::client; namespace cg = carla::geom; + namespace cr = carla::rpc; + + using ActorPtr = boost::shared_ptr; object command_module(handle<>(borrowed(PyImport_AddModule("libcarla.command")))); scope().attr("command") = command_module; scope io_scope = command_module; class_("DestroyActor") + .def("__init__", &command_impl::CustomInit, (arg("actor"))) .def(init((arg("actor_id")))) .def_readwrite("actor_id", &cr::Command::DestroyActor::actor) ; class_("ApplyVehicleControl") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("control"))) .def(init((arg("actor_id"), arg("control")))) .def_readwrite("actor_id", &cr::Command::ApplyVehicleControl::actor) .def_readwrite("control", &cr::Command::ApplyVehicleControl::control) ; class_("ApplyWalkerControl") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("control"))) .def(init((arg("actor_id"), arg("control")))) .def_readwrite("actor_id", &cr::Command::ApplyWalkerControl::actor) .def_readwrite("control", &cr::Command::ApplyWalkerControl::control) ; class_("ApplyTransform") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("transform"))) .def(init((arg("actor_id"), arg("transform")))) .def_readwrite("actor_id", &cr::Command::ApplyTransform::actor) .def_readwrite("transform", &cr::Command::ApplyTransform::transform) ; class_("ApplyVelocity") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("velocity"))) .def(init((arg("actor_id"), arg("velocity")))) .def_readwrite("actor_id", &cr::Command::ApplyVelocity::actor) .def_readwrite("velocity", &cr::Command::ApplyVelocity::velocity) ; class_("ApplyAngularVelocity") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("angular_velocity"))) .def(init((arg("actor_id"), arg("angular_velocity")))) .def_readwrite("actor_id", &cr::Command::ApplyAngularVelocity::actor) .def_readwrite("angular_velocity", &cr::Command::ApplyAngularVelocity::angular_velocity) ; class_("ApplyImpulse") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("impulse"))) .def(init((arg("actor_id"), arg("impulse")))) .def_readwrite("actor_id", &cr::Command::ApplyImpulse::actor) .def_readwrite("impulse", &cr::Command::ApplyImpulse::impulse) ; class_("SetSimulatePhysics") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("enabled"))) .def(init((arg("actor_id"), arg("enabled")))) .def_readwrite("actor_id", &cr::Command::SetSimulatePhysics::actor) .def_readwrite("enabled", &cr::Command::SetSimulatePhysics::enabled) ; class_("SetAutopilot") + .def("__init__", &command_impl::CustomInit, (arg("actor"), arg("enabled"))) .def(init((arg("actor_id"), arg("enabled")))) .def_readwrite("actor_id", &cr::Command::SetAutopilot::actor) .def_readwrite("enabled", &cr::Command::SetAutopilot::enabled)