[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