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:
authorLukas Tönne <lukas.toenne@gmail.com>2014-12-02 19:26:25 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-04-20 13:23:11 +0300
commit2590231315b6d47cc83e6f39e8d922f53c40eb1c (patch)
treedec38705400c911799821a5a2c628ac18a2d5ba6 /source/blender/editors/hair
parent83b20c7ddfe60ca779f53a0d337cc1b7854fb14c (diff)
Constrain hair root vertices to their mesh location after applying tools.
Conflicts: source/blender/bmesh/intern/bmesh_interp.c source/blender/bmesh/intern/bmesh_interp.h
Diffstat (limited to 'source/blender/editors/hair')
-rw-r--r--source/blender/editors/hair/hair_edit.c22
-rw-r--r--source/blender/editors/hair/hair_stroke.c5
2 files changed, 17 insertions, 10 deletions
diff --git a/source/blender/editors/hair/hair_edit.c b/source/blender/editors/hair/hair_edit.c
index 90884f5f17d..6b3bff3815c 100644
--- a/source/blender/editors/hair/hair_edit.c
+++ b/source/blender/editors/hair/hair_edit.c
@@ -43,8 +43,10 @@
#include "DNA_screen_types.h"
#include "BKE_brush.h"
+#include "BKE_cdderivedmesh.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
+#include "BKE_DerivedMesh.h"
#include "BKE_edithair.h"
#include "BKE_paint.h"
#include "BKE_particle.h"
@@ -73,13 +75,22 @@ static bool has_hair_data(Object *ob)
return false;
}
-static bool init_hair_edit(Object *ob)
+static bool init_hair_edit(Scene *scene, Object *ob)
{
ParticleSystem *psys = psys_get_current(ob);
- if (psys->part->type == PART_HAIR) {
+ BMesh *bm;
+ DerivedMesh *dm;
+
+ if (psys && psys->part->type == PART_HAIR) {
if (!psys->hairedit) {
- BMesh *bm = BKE_particles_to_bmesh(ob, psys);
- psys->hairedit = BKE_editstrands_create(bm);
+ bm = BKE_particles_to_bmesh(ob, psys);
+
+ if (ob->type == OB_MESH || ob->derivedFinal)
+ dm = ob->derivedFinal ? ob->derivedFinal : mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ else
+ dm = NULL;
+
+ psys->hairedit = BKE_editstrands_create(bm, dm);
}
return true;
}
@@ -146,6 +157,7 @@ int hair_edit_toggle_poll(bContext *C)
static int hair_edit_toggle_exec(bContext *C, wmOperator *op)
{
+ Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
const int mode_flag = OB_MODE_HAIR_EDIT;
const bool is_mode_set = (ob->mode & mode_flag) != 0;
@@ -157,7 +169,7 @@ static int hair_edit_toggle_exec(bContext *C, wmOperator *op)
}
if (!is_mode_set) {
- init_hair_edit(ob);
+ init_hair_edit(scene, ob);
ob->mode |= mode_flag;
// toggle_particle_cursor(C, 1);
diff --git a/source/blender/editors/hair/hair_stroke.c b/source/blender/editors/hair/hair_stroke.c
index 6933c3b9837..656adb2817a 100644
--- a/source/blender/editors/hair/hair_stroke.c
+++ b/source/blender/editors/hair/hair_stroke.c
@@ -49,11 +49,6 @@ typedef void (*VertexToolCb)(HairToolData *data, BMVert *v, float factor);
BLI_INLINE float hair_tool_filter_vertex(HairToolData *data, BMVert *v)
{
- // XXX for testing only, roots should be constrained instead by
- // re-adjusting their location _after_ applying the tool,
- // during the general process of constraint solving for strands
-// if (BM_strands_vert_is_root(v))
-// return 0.0f;
return 1.0f; // TODO
}