Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergej Reich <sergej.reich@googlemail.com>2013-12-25 22:05:55 +0400
committerSergej Reich <sergej.reich@googlemail.com>2013-12-25 22:17:00 +0400
commit1fef90695ef0bc6f78196e48d72680ae89b525f3 (patch)
tree5887a47044797e3873f01134c0f4af75ad2a63f8 /source/blender/editors/space_view3d/drawobject.c
parentc15062015c283f4edcce327da50ce8962600189d (diff)
3D View: Draw rigid body collision shapes.
Diffstat (limited to 'source/blender/editors/space_view3d/drawobject.c')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 4d44b98bba1..1cb97979ea1 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -6593,6 +6593,48 @@ static void draw_object_matcap_check(Scene *scene, View3D *v3d, Object *ob)
}
+static void draw_rigidbody_shape(Object *ob)
+{
+ BoundBox *bb = NULL;
+ float size[3], vec[8][3];
+
+ if (ob->type == OB_MESH) {
+ bb = BKE_mesh_boundbox_get(ob);
+ }
+
+ if (bb == NULL)
+ return;
+
+ switch (ob->rigidbody_object->shape) {
+ case RB_SHAPE_BOX:
+ size[0] = 0.5f * fabsf(bb->vec[0][0] - bb->vec[4][0]);
+ size[1] = 0.5f * fabsf(bb->vec[0][1] - bb->vec[2][1]);
+ size[2] = 0.5f * fabsf(bb->vec[0][2] - bb->vec[1][2]);
+
+ vec[0][0] = vec[1][0] = vec[2][0] = vec[3][0] = -size[0];
+ vec[4][0] = vec[5][0] = vec[6][0] = vec[7][0] = +size[0];
+ vec[0][1] = vec[1][1] = vec[4][1] = vec[5][1] = -size[1];
+ vec[2][1] = vec[3][1] = vec[6][1] = vec[7][1] = +size[1];
+ vec[0][2] = vec[3][2] = vec[4][2] = vec[7][2] = -size[2];
+ vec[1][2] = vec[2][2] = vec[5][2] = vec[6][2] = +size[2];
+
+ draw_box(vec);
+ break;
+ case RB_SHAPE_SPHERE:
+ draw_bb_quadric(bb, OB_BOUND_SPHERE, true);
+ break;
+ case RB_SHAPE_CONE:
+ draw_bb_quadric(bb, OB_BOUND_CONE, true);
+ break;
+ case RB_SHAPE_CYLINDER:
+ draw_bb_quadric(bb, OB_BOUND_CYLINDER, true);
+ break;
+ case RB_SHAPE_CAPSULE:
+ draw_bb_quadric(bb, OB_BOUND_CAPSULE, true);
+ break;
+ }
+}
+
/**
* main object drawing function, draws in selection
* \param dflag (draw flag) can be DRAW_PICKING and/or DRAW_CONSTCOLOR, DRAW_SCENESET
@@ -7157,6 +7199,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
setlinestyle(0);
}
}
+ if (ob->rigidbody_object) {
+ draw_rigidbody_shape(ob);
+ }
/* draw extra: after normal draw because of makeDispList */
if (dtx && (G.f & G_RENDER_OGL) == 0) {