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-05 16:42:22 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-04-20 13:23:15 +0300
commit56a09434c533e5ca72d2f8ff6e144bfcdd88886c (patch)
tree9ca26e1fc412da4c3cd21fba2334af8a89103105 /source/blender/bmesh/intern
parent8672304e30a207767888b75ebe9015ad7f3210a3 (diff)
Basic Add tool for creating new strands in hair edit mode.
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r--source/blender/bmesh/intern/bmesh_strands.c28
-rw-r--r--source/blender/bmesh/intern/bmesh_strands.h3
-rw-r--r--source/blender/bmesh/intern/bmesh_strands_conv.c5
-rw-r--r--source/blender/bmesh/intern/bmesh_strands_conv.h2
4 files changed, 33 insertions, 5 deletions
diff --git a/source/blender/bmesh/intern/bmesh_strands.c b/source/blender/bmesh/intern/bmesh_strands.c
index ae8fd7ae4f1..ec1b7781dd6 100644
--- a/source/blender/bmesh/intern/bmesh_strands.c
+++ b/source/blender/bmesh/intern/bmesh_strands.c
@@ -27,6 +27,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_utildefines.h"
+#include "BLI_math.h"
#include "BLI_mempool.h"
#include "bmesh.h"
@@ -115,3 +116,30 @@ int BM_strands_keys_count(BMVert *root)
return count;
}
+/* ------------------------------------------------------------------------- */
+
+/* Create a new strand */
+BMVert *BM_strands_create(BMesh *bm, int len, bool set_defaults)
+{
+ float co[3] = {0.0f, 0.0f, 0.0f};
+
+ BMVert *root, *v, *vprev;
+ int k;
+
+ for (k = 0; k < len; ++k) {
+ vprev = v;
+ v = BM_vert_create(bm, co, NULL, set_defaults ? BM_CREATE_NOP : BM_CREATE_SKIP_CD);
+
+ zero_v3(v->no);
+
+ /* root */
+ if (k == 0) {
+ root = v;
+ }
+ else {
+ /*BMEdge *e =*/ BM_edge_create(bm, vprev, v, NULL, set_defaults ? BM_CREATE_NOP : BM_CREATE_SKIP_CD);
+ }
+ }
+
+ return root;
+}
diff --git a/source/blender/bmesh/intern/bmesh_strands.h b/source/blender/bmesh/intern/bmesh_strands.h
index 8410bfd8443..66284ee62f8 100644
--- a/source/blender/bmesh/intern/bmesh_strands.h
+++ b/source/blender/bmesh/intern/bmesh_strands.h
@@ -72,6 +72,9 @@ BLI_INLINE bool BM_strands_vert_is_tip(BMVert *v)
int BM_strands_count(BMesh *bm);
int BM_strands_keys_count(BMVert *root);
+/* Create a new strand */
+struct BMVert *BM_strands_create(struct BMesh *bm, int len, bool set_defaults);
+
/* ==== Iterators ==== */
typedef enum BMStrandsIterType {
diff --git a/source/blender/bmesh/intern/bmesh_strands_conv.c b/source/blender/bmesh/intern/bmesh_strands_conv.c
index 786b35b486a..b23dbbdf1fe 100644
--- a/source/blender/bmesh/intern/bmesh_strands_conv.c
+++ b/source/blender/bmesh/intern/bmesh_strands_conv.c
@@ -76,13 +76,10 @@ void BM_strands_cd_validate(BMesh *UNUSED(bm))
{
}
-void BM_strands_cd_flag_ensure(BMesh *bm, ParticleSystem *psys, const char cd_flag)
+void BM_strands_cd_flag_ensure(BMesh *bm, const char cd_flag)
{
const char cd_flag_all = BM_strands_cd_flag_from_bmesh(bm) | cd_flag;
BM_strands_cd_flag_apply(bm, cd_flag_all);
- if (psys) {
-// psys->cd_flag = cd_flag_all;
- }
}
void BM_strands_cd_flag_apply(BMesh *bm, const char UNUSED(cd_flag))
diff --git a/source/blender/bmesh/intern/bmesh_strands_conv.h b/source/blender/bmesh/intern/bmesh_strands_conv.h
index 30bf139c4de..683c1e998ad 100644
--- a/source/blender/bmesh/intern/bmesh_strands_conv.h
+++ b/source/blender/bmesh/intern/bmesh_strands_conv.h
@@ -45,7 +45,7 @@ extern const char *CD_HAIR_WEIGHT;
extern const char *CD_HAIR_ROOT_LOCATION;
void BM_strands_cd_validate(struct BMesh *bm);
-void BM_strands_cd_flag_ensure(struct BMesh *bm, struct ParticleSystem *psys, const char cd_flag);
+void BM_strands_cd_flag_ensure(struct BMesh *bm, const char cd_flag);
void BM_strands_cd_flag_apply(struct BMesh *bm, const char cd_flag);
char BM_strands_cd_flag_from_bmesh(struct BMesh *bm);