12#define _CONST_MPTR(mobj) static_cast<const xcal::mobject::MObject*>(mobj)
13#define _CONST_CPTR(mobj) static_cast<const xcal::camera::AbsCamera*>(mobj)
14#define _CONST_PCPTR(mobj) \
15 static_cast<const xcal::camera::PerspectiveCamera*>(mobj)
16#define _PCPTR(mobj) static_cast<xcal::camera::PerspectiveCamera*>(mobj)
18bool xcal::render::opengl::ui::ListUi::render_vec3f_edit(
20 const char* y_label,
const char* z_label) {
23 I::Text(
"%s: ", label);
24 I::Text(
"%s: ", x_label);
26 I::InputFloat(
"##X", &tmp.x());
27 I::Text(
"%s: ", y_label);
29 I::InputFloat(
"##Y", &tmp.y());
30 I::Text(
"%s: ", z_label);
32 I::InputFloat(
"##Z", &tmp.z());
33 if ((tmp == vec3f).all()) {
39void xcal::render::opengl::ui::ListUi::render_obj(ObjectHandle& obj) {
63void xcal::render::opengl::ui::ListUi::render_camera(CameraHandle& cam) {
64 if (!cam.camera)
return;
67 if (I::CollapsingHeader(cam.name.c_str())) {
71 if (render_vec3f_edit(
_CONST_CPTR(cam.camera)->position().value(),
73 cam.camera->position() = vec3f_tmp_;
74 _D(
"updating position of camera: "
75 << cam.camera <<
" to: " << vec3f_tmp_
76 <<
" change state: " << cam.camera->position().is_changed());
82 if (render_vec3f_edit(
_CONST_CPTR(cam.camera)->target().value(),
83 "target",
"X",
"Y",
"Z")) {
84 cam.camera->target() = vec3f_tmp_;
85 _D(
"updating target of camera: "
86 << cam.camera <<
" to: " << vec3f_tmp_
87 <<
" change state: " << cam.camera->target().is_changed());
93 if (render_vec3f_edit(
_CONST_CPTR(cam.camera)->up().value(),
"up",
95 cam.camera->up() = vec3f_tmp_;
96 _D(
"updating up of camera: "
97 << cam.camera <<
" to: " << vec3f_tmp_
98 <<
" change state: " << cam.camera->up().is_changed());
103 I::Text(
"Perspective properties: ");
106 if (I::InputFloat(
"FOV", &tmp_)) {
107 _PCPTR(cam.camera)->fov() = tmp_;
108 _D(
"updating fov of camera: "
109 << cam.camera <<
" to: " << tmp_ <<
" change state: "
110 <<
_PCPTR(cam.camera)->fov().is_changed());
114 if (I::InputFloat(
"Near", &tmp_)) {
115 _PCPTR(cam.camera)->near() = tmp_;
116 _D(
"updating near of camera: "
117 << cam.camera <<
" to: " << tmp_ <<
" change state: "
118 <<
_PCPTR(cam.camera)->near().is_changed());
122 if (I::InputFloat(
"Far", &tmp_)) {
123 _PCPTR(cam.camera)->far() = tmp_;
124 _D(
"updating far of camera: "
125 << cam.camera <<
" to: " << tmp_ <<
" change state: "
126 <<
_PCPTR(cam.camera)->far().is_changed());
131void xcal::render::opengl::ui::ListUi::render_animation(AnimationHandle& anim) {
132 if (!anim.animation)
return;
134 if (I::CollapsingHeader(anim.name.c_str())) {
138void xcal::render::opengl::ui::ListUi::render_timeline(
139 TimelineHandle& timeline) {
140 if (!timeline.timeline)
return;
142 if (I::CollapsingHeader(timeline.name.c_str())) {
144 if (I::Button(
"Play")) {
145 _I(
"play timeline:" << timeline.timeline);
146 renderer()->play_timeline(timeline.timeline);
152 default_camera_handle().camera = renderer()->default_camera();
153 I::Begin(
"XCAL UI", &show_);
154 I::SetWindowFontScale(2);
156 if (I::CollapsingHeader(
"Objects")) {
157 for (
int i = 0; i < object_handles().size(); ++i) {
159 render_obj(object_handles()[i]);
163 if (I::CollapsingHeader(
"Cameras")) {
165 render_camera(default_camera_handle());
168 for (
int i = 0; i < camera_handles().size(); ++i) {
170 render_camera(camera_handles()[i]);
174 if (I::CollapsingHeader(
"Timelines")) {
175 for (
int i = 0; i < timeline_handles().size(); ++i) {
177 render_timeline(timeline_handles()[i]);
181 if (I::CollapsingHeader(
"Animations")) {
182 for (
int i = 0; i < animation_handles().size(); ++i) {
184 render_animation(animation_handles()[i]);
188 I::Text(
"fps: %.3f", 1.f / fps());
#define _CONST_CPTR(mobj)
#define _CONST_PCPTR(mobj)