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:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/physics/physics_intern.h1
-rw-r--r--source/blender/editors/physics/physics_ops.c1
-rw-r--r--source/blender/editors/physics/rigidbody_constraint.c64
-rw-r--r--source/blender/editors/physics/rigidbody_object.c34
4 files changed, 38 insertions, 62 deletions
diff --git a/source/blender/editors/physics/physics_intern.h b/source/blender/editors/physics/physics_intern.h
index 4b4855c9922..77ce5a334e6 100644
--- a/source/blender/editors/physics/physics_intern.h
+++ b/source/blender/editors/physics/physics_intern.h
@@ -117,7 +117,6 @@ void RIGIDBODY_OT_mass_calculate(struct wmOperatorType *ot);
/* rigidbody_constraint.c */
void RIGIDBODY_OT_constraint_add(struct wmOperatorType *ot);
-void RIGIDBODY_OT_constraint_group_add(struct wmOperatorType *ot);
void RIGIDBODY_OT_constraint_remove(struct wmOperatorType *ot);
/*rigidbody_world.c */
diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c
index fc6a0e58752..51a66886c6e 100644
--- a/source/blender/editors/physics/physics_ops.c
+++ b/source/blender/editors/physics/physics_ops.c
@@ -97,7 +97,6 @@ static void operatortypes_particle(void)
WM_operatortype_append(RIGIDBODY_OT_mass_calculate);
WM_operatortype_append(RIGIDBODY_OT_constraint_add);
- WM_operatortype_append(RIGIDBODY_OT_constraint_group_add);
WM_operatortype_append(RIGIDBODY_OT_constraint_remove);
WM_operatortype_append(RIGIDBODY_OT_world_add);
diff --git a/source/blender/editors/physics/rigidbody_constraint.c b/source/blender/editors/physics/rigidbody_constraint.c
index e4db1c91c2b..fac835a414a 100644
--- a/source/blender/editors/physics/rigidbody_constraint.c
+++ b/source/blender/editors/physics/rigidbody_constraint.c
@@ -78,20 +78,33 @@ static int ED_operator_rigidbody_con_active_poll(bContext *C)
void ED_rigidbody_con_add(wmOperator *op, Scene *scene, Object *ob, int type)
{
+ RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
+
/* check that object doesn't already have a constraint */
if (ob->rigidbody_constraint) {
BKE_reportf(op->reports, RPT_INFO, "Object '%s' already has a Rigid Body Constraint", ob->id.name + 2);
return;
}
-
+ /* create constraint group if it doesn't already exits */
+ if (rbw->constraints == NULL) {
+ rbw->constraints = add_group("RigidBodyConstraints");
+ }
/* make rigidbody constraint settings */
ob->rigidbody_constraint = BKE_rigidbody_create_constraint(scene, ob, type);
ob->rigidbody_constraint->flag |= RBC_FLAG_NEEDS_VALIDATE;
+
+ /* add constraint to rigid body constraint group */
+ add_to_group(rbw->constraints, ob, scene, NULL);
}
void ED_rigidbody_con_remove(Scene *scene, Object *ob)
{
+ RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
+
BKE_rigidbody_remove_constraint(scene, ob);
+ if (rbw)
+ rem_from_group(rbw->constraints, ob, scene, NULL);
+
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
}
@@ -103,43 +116,6 @@ void ED_rigidbody_con_remove(Scene *scene, Object *ob)
static int rigidbody_con_add_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- Object *ob = (scene) ? OBACT : NULL;
- int type = RNA_enum_get(op->ptr, "type");
-
- /* apply to active object */
- ED_rigidbody_con_add(op, scene, ob, type);
-
- /* send updates */
- DAG_ids_flush_update(CTX_data_main(C), 0);
-
- WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
- WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
-
- /* done */
- return OPERATOR_FINISHED;
-}
-
-void RIGIDBODY_OT_constraint_add(wmOperatorType *ot)
-{
- /* identifiers */
- ot->idname = "RIGIDBODY_OT_constraint_add";
- ot->name = "Add Rigid Body Constraint";
- ot->description = "Add Rigid Body Constraint to active object";
-
- /* callbacks */
- ot->exec = rigidbody_con_add_exec;
- ot->poll = ED_operator_object_active_editable;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- ot->prop = RNA_def_enum(ot->srna, "type", rigidbody_con_type_items, RBC_TYPE_FIXED, "Rigid Body Constraint Type", "");
-}
-
-static int rigidbody_con_group_add_exec(bContext *C, wmOperator *op)
-{
- Scene *scene = CTX_data_scene(C);
RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
Object *ob = (scene) ? OBACT : NULL;
int type = RNA_enum_get(op->ptr, "type");
@@ -149,12 +125,8 @@ static int rigidbody_con_group_add_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "No Rigid Body World to add Rigid Body Constraint to");
return OPERATOR_CANCELLED;
}
- if (rbw->constraints == NULL) {
- rbw->constraints = add_group("RigidBodyConstraints");
- }
/* apply to active object */
ED_rigidbody_con_add(op, scene, ob, type);
- add_to_group(rbw->constraints, ob, scene, NULL);
/* send updates */
DAG_ids_flush_update(CTX_data_main(C), 0);
@@ -166,15 +138,15 @@ static int rigidbody_con_group_add_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void RIGIDBODY_OT_constraint_group_add(wmOperatorType *ot)
+void RIGIDBODY_OT_constraint_add(wmOperatorType *ot)
{
/* identifiers */
- ot->idname = "RIGIDBODY_OT_constraint_group_add";
+ ot->idname = "RIGIDBODY_OT_constraint_add";
ot->name = "Add Rigid Body Constraint";
- ot->description = "Add Rigid Body Constraint to active object and world's group";
+ ot->description = "Add Rigid Body Constraint to active object";
/* callbacks */
- ot->exec = rigidbody_con_group_add_exec;
+ ot->exec = rigidbody_con_add_exec;
ot->poll = ED_operator_object_active_editable;
/* flags */
diff --git a/source/blender/editors/physics/rigidbody_object.c b/source/blender/editors/physics/rigidbody_object.c
index c61d4c33866..fc1e24840a4 100644
--- a/source/blender/editors/physics/rigidbody_object.c
+++ b/source/blender/editors/physics/rigidbody_object.c
@@ -90,6 +90,8 @@ static int ED_operator_rigidbody_add_poll(bContext *C)
void ED_rigidbody_ob_add(wmOperator *op, Scene *scene, Object *ob, int type)
{
+ RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
+
/* check that object doesn't already belong to the current simulation */
if (ob->rigidbody_object) {
BKE_reportf(op->reports, RPT_INFO, "Object '%s' already has a Rigid Body", ob->id.name + 2);
@@ -104,14 +106,32 @@ void ED_rigidbody_ob_add(wmOperator *op, Scene *scene, Object *ob, int type)
return;
}
+ /* Add rigid body world and group if they don't exist for convenience */
+ if (rbw == NULL) {
+ rbw = BKE_rigidbody_create_world(scene);
+ BKE_rigidbody_validate_sim_world(scene, rbw, false);
+ scene->rigidbody_world = rbw;
+ }
+ if (rbw->group == NULL) {
+ rbw->group = add_group("RigidBodyWorld");
+ }
+
/* make rigidbody object settings */
ob->rigidbody_object = BKE_rigidbody_create_object(scene, ob, type);
ob->rigidbody_object->flag |= RBO_FLAG_NEEDS_VALIDATE;
+
+ /* add object to rigid body group */
+ add_to_group(rbw->group, ob, scene, NULL);
}
void ED_rigidbody_ob_remove(Scene *scene, Object *ob)
{
+ RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
+
BKE_rigidbody_remove_object(scene, ob);
+ if (rbw)
+ rem_from_group(rbw->group, ob, scene, NULL);
+
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
}
@@ -209,7 +229,6 @@ void RIGIDBODY_OT_object_remove(wmOperatorType *ot)
static int rigidbody_obs_add_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
int type = RNA_enum_get(op->ptr, "type");
/* sanity check */
@@ -217,19 +236,9 @@ static int rigidbody_obs_add_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "No Scene to add Rigid Bodies to");
return OPERATOR_CANCELLED;
}
- /* Add rigid body world and group if they don't exist for convenience */
- if (rbw == NULL) {
- rbw = BKE_rigidbody_create_world(scene);
- BKE_rigidbody_validate_sim_world(scene, rbw, false);
- scene->rigidbody_world = rbw;
- }
- if (rbw->group == NULL) {
- rbw->group = add_group("RigidBodyWorld");
- }
/* create rigid body objects and add them to the world's group */
CTX_DATA_BEGIN(C, Object *, ob, selected_objects) {
ED_rigidbody_ob_add(op, scene, ob, type);
- add_to_group(rbw->group, ob, scene, NULL);
}
CTX_DATA_END;
@@ -266,7 +275,6 @@ void RIGIDBODY_OT_objects_add(wmOperatorType *ot)
static int rigidbody_obs_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
/* sanity checks */
if (scene == NULL)
@@ -277,8 +285,6 @@ static int rigidbody_obs_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
if (ob->rigidbody_object) {
ED_rigidbody_ob_remove(scene, ob);
- if (rbw)
- rem_from_group(rbw->group, ob, scene, NULL);
}
}
CTX_DATA_END;