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:
authorJanne Karhu <jhkarh@gmail.com>2009-10-19 01:12:04 +0400
committerJanne Karhu <jhkarh@gmail.com>2009-10-19 01:12:04 +0400
commit816856f953250f7da59c819bde1b77d59c32017c (patch)
tree4f7617ee39bb3fc6bd3d671640a7eecefe6bc2ca /source/blender/editors/physics
parentf750cc7dbd893b0e37feead00bfbbaac2c5b6a09 (diff)
Small particles feature: Multiple group visualization counts per group object are now possible (+/- buttons next to the count list). This allows for example an array of duplicated objects "ob1, ob2, ob1, ob3" without duplicating the actual object (ob1 in the example) in the group.
Diffstat (limited to 'source/blender/editors/physics')
-rw-r--r--source/blender/editors/physics/particle_object.c84
-rw-r--r--source/blender/editors/physics/physics_intern.h2
-rw-r--r--source/blender/editors/physics/physics_ops.c2
3 files changed, 88 insertions, 0 deletions
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index 1dc08a162b7..34e2b062e98 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -386,6 +386,90 @@ void PARTICLE_OT_dupliob_move_up(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+/********************** particle dupliweight operators *********************/
+
+static int copy_particle_dupliob_exec(bContext *C, wmOperator *op)
+{
+ PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
+ ParticleSystem *psys= ptr.data;
+ ParticleSettings *part;
+ ParticleDupliWeight *dw;
+
+ if(!psys)
+ return OPERATOR_CANCELLED;
+ part = psys->part;
+ for(dw=part->dupliweights.first; dw; dw=dw->next) {
+ if(dw->flag & PART_DUPLIW_CURRENT) {
+ dw->flag &= ~PART_DUPLIW_CURRENT;
+ dw = MEM_dupallocN(dw);
+ dw->flag |= PART_DUPLIW_CURRENT;
+ BLI_addhead(&part->dupliweights, dw);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
+ break;
+ }
+ }
+
+ return OPERATOR_FINISHED;
+}
+
+void PARTICLE_OT_dupliob_copy(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Copy Particle Dupliob";
+ ot->idname= "PARTICLE_OT_dupliob_copy";
+ ot->description="Duplicate the current dupliobject.";
+
+ /* api callbacks */
+ ot->exec= copy_particle_dupliob_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+static int remove_particle_dupliob_exec(bContext *C, wmOperator *op)
+{
+ PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
+ ParticleSystem *psys= ptr.data;
+ ParticleSettings *part;
+ ParticleDupliWeight *dw;
+
+ if(!psys)
+ return OPERATOR_CANCELLED;
+
+ part = psys->part;
+ for(dw=part->dupliweights.first; dw; dw=dw->next) {
+ if(dw->flag & PART_DUPLIW_CURRENT) {
+ BLI_remlink(&part->dupliweights, dw);
+ MEM_freeN(dw);
+ break;
+ }
+
+ }
+ dw = part->dupliweights.last;
+
+ if(dw)
+ dw->flag |= PART_DUPLIW_CURRENT;
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void PARTICLE_OT_dupliob_remove(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Remove Particle Dupliobject";
+ ot->idname= "PARTICLE_OT_dupliob_remove";
+ ot->description="Remove the selected dupliobject.";
+
+ /* api callbacks */
+ ot->exec= remove_particle_dupliob_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
/************************ move down particle dupliweight operator *********************/
static int dupliob_move_down_exec(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/physics/physics_intern.h b/source/blender/editors/physics/physics_intern.h
index 3847ec8032a..a930d8663dd 100644
--- a/source/blender/editors/physics/physics_intern.h
+++ b/source/blender/editors/physics/physics_intern.h
@@ -77,6 +77,8 @@ void PARTICLE_OT_target_move_down(struct wmOperatorType *ot);
void PARTICLE_OT_connect_hair(struct wmOperatorType *ot);
void PARTICLE_OT_disconnect_hair(struct wmOperatorType *ot);
+void PARTICLE_OT_dupliob_copy(struct wmOperatorType *ot);
+void PARTICLE_OT_dupliob_remove(struct wmOperatorType *ot);
void PARTICLE_OT_dupliob_move_up(struct wmOperatorType *ot);
void PARTICLE_OT_dupliob_move_down(struct wmOperatorType *ot);
diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c
index 0ebbfa6b701..ee46279d567 100644
--- a/source/blender/editors/physics/physics_ops.c
+++ b/source/blender/editors/physics/physics_ops.c
@@ -79,6 +79,8 @@ static void operatortypes_particle(void)
WM_operatortype_append(PARTICLE_OT_connect_hair);
WM_operatortype_append(PARTICLE_OT_disconnect_hair);
+ WM_operatortype_append(PARTICLE_OT_dupliob_copy);
+ WM_operatortype_append(PARTICLE_OT_dupliob_remove);
WM_operatortype_append(PARTICLE_OT_dupliob_move_up);
WM_operatortype_append(PARTICLE_OT_dupliob_move_down);
}