[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19119] branches/blender2.5/blender/source /blender: 2.5: Particle edit mode more functional now.

Brecht Van Lommel brecht at blender.org
Wed Feb 25 20:30:01 CET 2009


Revision: 19119
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19119
Author:   blendix
Date:     2009-02-25 20:29:58 +0100 (Wed, 25 Feb 2009)

Log Message:
-----------
2.5: Particle edit mode more functional now. Transform, brush
editing, paint cursor, radial control, mouse/border/circle/lasso
select, mirroring, bad level calls fixed, etc.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_particle.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/particle_system.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
    branches/blender2.5/blender/source/blender/editors/include/ED_particle.h
    branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
    branches/blender2.5/blender/source/blender/editors/physics/editparticle.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_manipulator.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_particle_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_particle.h	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_particle.h	2009-02-25 19:29:58 UTC (rev 19119)
@@ -139,15 +139,20 @@
 	char name[64];
 } ParticleUndo;
 
-typedef struct ParticleEdit{
+typedef struct ParticleEdit {
 	ListBase undo;
 	struct ParticleUndo *curundo;
-	struct KDTree *emitter_field;
+
 	ParticleEditKey **keys;
+	int totkeys;
+
 	int *mirror_cache;
+
+	struct KDTree *emitter_field;
 	float *emitter_cosnos;
 
-	int totkeys;
+	char sel_col[3];
+	char nosel_col[3];
 } ParticleEdit;
 
 typedef struct ParticleThreadContext {
@@ -244,6 +249,7 @@
 
 void psys_cache_paths(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, float cfra, int editupdate);
 void psys_cache_child_paths(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, float cfra, int editupdate);
+void psys_update_world_cos(struct Object *ob, struct ParticleSystem *psys);
 int do_guide(struct Scene *scene, struct ParticleKey *state, int pa_num, float time, struct ListBase *lb);
 float psys_get_size(struct Object *ob, struct Material *ma, struct ParticleSystemModifierData *psmd, struct IpoCurve *icu_size, struct ParticleSystem *psys, struct ParticleSettings *part, struct ParticleData *pa, float *vg_size);
 float psys_get_timestep(struct ParticleSettings *part);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c	2009-02-25 19:29:58 UTC (rev 19119)
@@ -391,7 +391,8 @@
 
 		free_keyed_keys(psys);
 
-		//XXX PE_free_particle_edit(psys);
+		if(psys->edit && psys->free_edit)
+			psys->free_edit(psys);
 
 		if(psys->particles){
 			MEM_freeN(psys->particles);
@@ -2338,7 +2339,6 @@
 	int k,i;
 	int steps = (int)pow(2.0, (double)psys->part->draw_step);
 	int totpart = psys->totpart;
-	char nosel[4], sel[4];
 	float sel_col[3];
 	float nosel_col[3];
 	float length, vec[3];
@@ -2350,25 +2350,25 @@
 	if((psys->flag & PSYS_HAIR_DONE)==0 && (psys->flag & PSYS_KEYED)==0)
 		return;
 
-	if(psys->renderdata)
+	if(psys->renderdata) {
 		steps = (int)pow(2.0, (double)psys->part->ren_step);
-	else if(psys_in_edit_mode(scene, psys)){
+	}
+	else if(psys_in_edit_mode(scene, psys)) {
 		edit=psys->edit;
 		
 		//timed = edit->draw_timed;
 
-		//XXX PE_get_colors(sel,nosel);
-		if(pset->brushtype == PE_BRUSH_WEIGHT){
+		if(pset->brushtype == PE_BRUSH_WEIGHT) {
 			sel_col[0] = sel_col[1] = sel_col[2] = 1.0f;
 			nosel_col[0] = nosel_col[1] = nosel_col[2] = 0.0f;
 		}
 		else{
-			sel_col[0] = (float)sel[0] / 255.0f;
-			sel_col[1] = (float)sel[1] / 255.0f;
-			sel_col[2] = (float)sel[2] / 255.0f;
-			nosel_col[0] = (float)nosel[0] / 255.0f;
-			nosel_col[1] = (float)nosel[1] / 255.0f;
-			nosel_col[2] = (float)nosel[2] / 255.0f;
+			sel_col[0] = (float)edit->sel_col[0] / 255.0f;
+			sel_col[1] = (float)edit->sel_col[1] / 255.0f;
+			sel_col[2] = (float)edit->sel_col[2] / 255.0f;
+			nosel_col[0] = (float)edit->nosel_col[0] / 255.0f;
+			nosel_col[1] = (float)edit->nosel_col[1] / 255.0f;
+			nosel_col[2] = (float)edit->nosel_col[2] / 255.0f;
 		}
 	}
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/particle_system.c	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/particle_system.c	2009-02-25 19:29:58 UTC (rev 19119)
@@ -4174,6 +4174,30 @@
 		psys_free_path_cache(psys);
 }
 
+/* calculate and store key locations in world coordinates */
+void psys_update_world_cos(Object *ob, ParticleSystem *psys)
+{
+	ParticleSystemModifierData *psmd= psys_get_modifier(ob, psys);
+	ParticleData *pa;
+	ParticleEditKey *key;
+	int i, k, totpart;
+	float hairmat[4][4];
+
+	if(psys==0 || psys->edit==0)
+		return;
+
+	totpart= psys->totpart;
+
+	for(i=0, pa=psys->particles; i<totpart; i++, pa++) {
+		psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, pa, hairmat);
+
+		for(k=0, key=psys->edit->keys[i]; k<pa->totkey; k++, key++) {
+			VECCOPY(key->world_co,key->co);
+			Mat4MulVecfl(hairmat, key->world_co);
+		}
+	}
+}
+
 static void hair_step(Scene *scene, Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
 {
 	ParticleSettings *part = psys->part;
@@ -4200,7 +4224,7 @@
 		precalc_effectors(scene, ob,psys,psmd,cfra);
 		
 	if(psys_in_edit_mode(scene, psys))
-		; //XXX PE_recalc_world_cos(ob, psys);
+		psys_update_world_cos(ob, psys);
 
 	psys_update_path_cache(scene, ob,psmd,psys,cfra);
 }

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-02-25 19:29:58 UTC (rev 19119)
@@ -2941,6 +2941,7 @@
 		}
 
 		psys->edit = 0;
+		psys->free_edit = NULL;
 		psys->pathcache = 0;
 		psys->childcache = 0;
 		psys->pathcachebufs.first = psys->pathcachebufs.last = 0;
@@ -3852,6 +3853,9 @@
 		sce->toolsettings->vpaint= newdataadr(fd, sce->toolsettings->vpaint);
 		sce->toolsettings->wpaint= newdataadr(fd, sce->toolsettings->wpaint);
 		sce->toolsettings->sculpt= newdataadr(fd, sce->toolsettings->sculpt);
+		sce->toolsettings->imapaint.paintcursor= NULL;
+		sce->toolsettings->particle.paintcursor= NULL;
+
 		if(sce->toolsettings->sculpt)
 			sce->toolsettings->sculpt->session= MEM_callocN(sizeof(SculptSession), "reload sculpt session");
 	}

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h	2009-02-25 19:29:58 UTC (rev 19119)
@@ -71,9 +71,10 @@
 
 /* meshtools.c */
 
-intptr_t	mesh_octree_table(Object *ob, struct EditMesh *em, float *co, char mode);
-struct EditVert   *editmesh_get_x_mirror_vert(Object *ob, struct EditMesh *em, float *co);
-int			mesh_get_x_mirror_vert(Object *ob, int index);
+intptr_t	mesh_octree_table(struct Object *ob, struct EditMesh *em, float *co, char mode);
+struct EditVert   *editmesh_get_x_mirror_vert(struct Object *ob, struct EditMesh *em, float *co);
+int			mesh_get_x_mirror_vert(struct Object *ob, int index);
+int			*mesh_get_x_mirror_faces(struct Object *ob, struct EditMesh *em);
 
 /* mesh_ops.c */
 void		ED_operatortypes_mesh(void);

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_particle.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_particle.h	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_particle.h	2009-02-25 19:29:58 UTC (rev 19119)
@@ -30,19 +30,15 @@
 #ifndef ED_PARTICLE_H
 #define ED_PARTICLE_H
 
+struct bContext;
 struct Object;
-struct ParticleSystem;
 struct ParticleEditSettings;
+struct ParticleSystem;
 struct RadialControl;
-struct ViewContext;
 struct rcti;
 struct wmWindowManager;
 
 /* particle edit mode */
-void PE_set_particle_edit(struct Scene *scene);
-void PE_create_particle_edit(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
-void PE_free_particle_edit(struct ParticleSystem *psys);
-
 void PE_change_act(void *ob_v, void *act_v);
 void PE_change_act_psys(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
 int PE_can_edit(struct ParticleSystem *psys);
@@ -51,39 +47,18 @@
 struct ParticleSystem *PE_get_current(struct Scene *scene, struct Object *ob);
 short PE_get_current_num(struct Object *ob);
 int PE_minmax(struct Scene *scene, float *min, float *max);
-void PE_get_colors(char sel[4], char nosel[4]);
 struct ParticleEditSettings *PE_settings(Scene *scene);
-struct RadialControl **PE_radialcontrol(void);
 
 /* update calls */
 void PE_hide_keys_time(struct Scene *scene, struct ParticleSystem *psys, float cfra);
 void PE_update_object(struct Scene *scene, struct Object *ob, int useflag);
-void PE_update_selection(struct Scene *scene, struct Object *ob, int useflag);
-void PE_recalc_world_cos(struct Object *ob, struct ParticleSystem *psys);
 
 /* selection tools */
-void PE_select_root(void);
-void PE_select_tip(void);
-void PE_deselectall(void);
-void PE_select_linked(void);
-void PE_select_less(void);
-void PE_select_more(void);
+int PE_mouse_particles(struct bContext *C, short *mval, int extend);
+int PE_border_select(struct bContext *C, struct rcti *rect, int select);
+int PE_circle_select(struct bContext *C, int selecting, short *mval, float rad);
+int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short select);
 
-void PE_mouse_particles(void);
-void PE_border_select(struct ViewContext *vc, struct rcti *rect, int select);
-void PE_circle_select(struct ViewContext *vc, int selecting, short *mval, float rad);
-void PE_lasso_select(struct ViewContext *vc, short mcords[][2], short moves, short select);
-
-/* tools */
-void PE_hide(int mode);
-void PE_rekey(void);
-void PE_subdivide(Object *ob);
-int PE_brush_particles(void);
-void PE_remove_doubles(void);
-void PE_selectbrush_menu(Scene *scene);
-void PE_remove_doubles(void);
-void PE_radialcontrol_start(const int mode);
-
 /* undo */
 void PE_undo_push(Scene *scene, char *str);
 void PE_undo_step(Scene *scene, int step);

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-02-25 17:20:41 UTC (rev 19118)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-02-25 19:29:58 UTC (rev 19119)
@@ -127,6 +127,8 @@
 
 /* XXX should move to arithb.c */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list