Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <rve_render_client/cone.h>
00031 #include <rve_render_client/material.h>
00032 #include <rve_render_client/scene.h>
00033 #include <rve_msgs/make_vector3.h>
00034
00035 #include <rve_interfaces/Cone.h>
00036
00037 #include <boost/bind.hpp>
00038
00039 namespace rve_render_client
00040 {
00041
00042 ConePtr createCone(Scene* scene)
00043 {
00044 ConePtr inst(new Cone(), destroySceneObject);
00045 scene->addObject(inst.get());
00046 return inst;
00047 }
00048
00049 Cone::Cone()
00050 : radius_(1.0)
00051 , height_(1.0)
00052 {
00053 orientation_.w = 1.0;
00054 proxy_index_ = addProxy("cone");
00055 }
00056
00057 Cone::~Cone()
00058 {
00059 }
00060
00061 rve_interfaces::ConeProxy* Cone::getProxy(const ContextInfo& context)
00062 {
00063 return SceneObject::getProxy<rve_interfaces::ConeProxy>(context, proxy_index_);
00064 }
00065
00066 void Cone::doCreate(ContextInfo& context)
00067 {
00068 rve_interfaces::ConeProxy* proxy = getProxy(context);
00069 proxy->create(getSceneID(context.scene), getID());
00070
00071 const rve_common::UUID& scene_id = getSceneID(context.scene);
00072
00073 if (material_)
00074 {
00075 proxy->setMaterialAsync(scene_id, getID(), material_->getID());
00076 }
00077
00078 proxy->setPositionAsync(scene_id, getID(), position_);
00079 proxy->setOrientationAsync(scene_id, getID(), orientation_);
00080 proxy->setRadiusAsync(scene_id, getID(), radius_);
00081 proxy->setHeightAsync(scene_id, getID(), height_);
00082 }
00083
00084 void Cone::doDestroy(ContextInfo& context)
00085 {
00086 rve_interfaces::ConeProxy* proxy = getProxy(context);
00087 proxy->destroy(getSceneID(context.scene), getID());
00088 }
00089
00090 #define CONE_MULTIPLEX(func, ...) \
00091 multiplex<rve_interfaces::ConeProxy>(boost::bind(&rve_interfaces::ConeProxy::func, _1, _2, getID(), __VA_ARGS__), proxy_index_);
00092
00093 void Cone::setPosition(const rve_msgs::Vector3& pos)
00094 {
00095 position_ = pos;
00096 CONE_MULTIPLEX(setPositionAsync, pos);
00097 }
00098
00099 void Cone::setOrientation(const rve_msgs::Quaternion& orient)
00100 {
00101 orientation_ = orient;
00102 CONE_MULTIPLEX(setOrientationAsync, orient);
00103 }
00104
00105 void Cone::setRadius(float radius)
00106 {
00107 radius_ = radius;
00108 CONE_MULTIPLEX(setRadiusAsync, radius);
00109 }
00110
00111 void Cone::setHeight(float height)
00112 {
00113 height_ = height;
00114 CONE_MULTIPLEX(setHeightAsync, height);
00115 }
00116
00117 void Cone::setMaterial(const MaterialPtr& mat)
00118 {
00119 material_ = mat;
00120 if (mat)
00121 {
00122 CONE_MULTIPLEX(setMaterialAsync, mat->getID());
00123 }
00124 }
00125
00126 void Cone::getContextDependencies(V_UUID& deps)
00127 {
00128 if (material_)
00129 {
00130 deps.push_back(material_->getID());
00131 }
00132 }
00133
00134 }
00135
00136