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/box.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/Box.h>
00036
00037 #include <boost/bind.hpp>
00038
00039 namespace rve_render_client
00040 {
00041
00042 BoxPtr createBox()
00043 {
00044 BoxPtr inst(new Box(), destroySceneObject);
00045 return inst;
00046 }
00047
00048 BoxPtr createBox(Scene* scene)
00049 {
00050 BoxPtr inst = createBox();
00051 scene->addObject(inst.get());
00052 return inst;
00053 }
00054
00055 Box::Box()
00056 {
00057 orientation_.w = 1.0;
00058 scale_ = rve_msgs::makeVector3(1.0, 1.0, 1.0);
00059 proxy_index_ = addProxy("box");
00060 }
00061
00062 Box::~Box()
00063 {
00064 }
00065
00066 rve_interfaces::BoxProxy* Box::getProxy(const ContextInfo& context)
00067 {
00068 return SceneObject::getProxy<rve_interfaces::BoxProxy>(context, proxy_index_);
00069 }
00070
00071 void Box::doCreate(ContextInfo& context)
00072 {
00073 rve_interfaces::BoxProxy* proxy = getProxy(context);
00074 proxy->create(getSceneID(context.scene), getID());
00075
00076 const rve_common::UUID& scene_id = getSceneID(context.scene);
00077
00078 if (material_)
00079 {
00080 proxy->setMaterialAsync(scene_id, getID(), material_->getID());
00081 }
00082
00083 proxy->setPositionAsync(scene_id, getID(), position_);
00084 proxy->setOrientationAsync(scene_id, getID(), orientation_);
00085 proxy->setScaleAsync(scene_id, getID(), scale_);
00086 }
00087
00088 void Box::doDestroy(ContextInfo& context)
00089 {
00090 rve_interfaces::BoxProxy* proxy = getProxy(context);
00091 proxy->destroy(getSceneID(context.scene), getID());
00092 }
00093
00094 #define BOX_MULTIPLEX(func, ...) \
00095 multiplex<rve_interfaces::BoxProxy>(boost::bind(&rve_interfaces::BoxProxy::func, _1, _2, getID(), __VA_ARGS__), proxy_index_);
00096
00097 void Box::setPosition(const rve_msgs::Vector3& pos)
00098 {
00099 position_ = pos;
00100 BOX_MULTIPLEX(setPositionAsync, pos);
00101 }
00102
00103 void Box::setOrientation(const rve_msgs::Quaternion& orient)
00104 {
00105 orientation_ = orient;
00106 BOX_MULTIPLEX(setOrientationAsync, orient);
00107 }
00108
00109 void Box::setScale(const rve_msgs::Vector3& scale)
00110 {
00111 scale_ = scale;
00112 BOX_MULTIPLEX(setScaleAsync, scale);
00113 }
00114
00115 void Box::setMaterial(const MaterialPtr& mat)
00116 {
00117 material_ = mat;
00118 if (mat)
00119 {
00120 BOX_MULTIPLEX(setMaterialAsync, mat->getID());
00121 }
00122 }
00123
00124 void Box::getContextDependencies(V_UUID& deps)
00125 {
00126 if (material_)
00127 {
00128 deps.push_back(material_->getID());
00129 }
00130 }
00131
00132 }
00133
00134