[Bf-blender-cvs] [c6ddb6fdd9b] hair_guides: Struct for hair draw settings.
Lukas Tönne
noreply at git.blender.org
Sun Nov 19 11:27:00 CET 2017
Commit: c6ddb6fdd9bd6cd86312850bbbbdfaf13ee21e5e
Author: Lukas Tönne
Date: Sun Nov 19 10:00:59 2017 +0000
Branches: hair_guides
https://developer.blender.org/rBc6ddb6fdd9bd6cd86312850bbbbdfaf13ee21e5e
Struct for hair draw settings.
This is outside of the hair system itself since it only affects drawing.
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
M source/blender/blenkernel/BKE_hair.h
M source/blender/blenkernel/intern/hair_draw.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/writefile.c
M source/blender/makesdna/DNA_hair_types.h
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/intern/rna_hair.c
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/intern/MOD_fur.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 02e3b8a10c8..81338efc807 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1552,6 +1552,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "follicle_max_count")
col.operator("object.fur_generate_follicles", text="Generate")
+ col = split.column()
+ col.label("Drawing:")
+ ds = md.draw_settings
+ col.prop(ds, "follicle_mode", expand=True)
+
classes = (
DATA_PT_modifiers,
diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index f321a168ef2..b77feb004ee 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -39,6 +39,7 @@ static const unsigned int HAIR_STRAND_INDEX_NONE = 0xFFFFFFFF;
struct HairFollicle;
struct HairPattern;
struct HairSystem;
+struct HairDrawSettings;
struct DerivedMesh;
struct MeshSample;
struct Object;
@@ -76,6 +77,12 @@ void BKE_hair_generate_follicles(
void BKE_hair_bind_follicles(struct HairSystem *hsys, struct DerivedMesh *scalp);
+/* === Draw Settings === */
+
+struct HairDrawSettings* BKE_hair_draw_settings_new();
+struct HairDrawSettings* BKE_hair_draw_settings_copy(struct HairDrawSettings *draw_settings);
+void BKE_hair_draw_settings_free(struct HairDrawSettings *draw_settings);
+
/* === Draw Cache === */
enum {
diff --git a/source/blender/blenkernel/intern/hair_draw.c b/source/blender/blenkernel/intern/hair_draw.c
index 502ada81c49..fbff204b3a7 100644
--- a/source/blender/blenkernel/intern/hair_draw.c
+++ b/source/blender/blenkernel/intern/hair_draw.c
@@ -43,6 +43,30 @@
#include "BKE_mesh_sample.h"
#include "BKE_hair.h"
+/* === Draw Settings === */
+
+HairDrawSettings* BKE_hair_draw_settings_new()
+{
+ HairDrawSettings *draw_settings = MEM_callocN(sizeof(HairDrawSettings), "hair draw settings");
+
+ draw_settings->follicle_mode = HAIR_DRAW_FOLLICLE_NONE;
+
+ return draw_settings;
+}
+
+HairDrawSettings* BKE_hair_draw_settings_copy(HairDrawSettings *draw_settings)
+{
+ HairDrawSettings *ndraw_settings = MEM_dupallocN(draw_settings);
+ return ndraw_settings;
+}
+
+void BKE_hair_draw_settings_free(HairDrawSettings *draw_settings)
+{
+ MEM_freeN(draw_settings);
+}
+
+/* === Draw Cache === */
+
static int hair_get_strand_subdiv_numverts(int numstrands, int numverts, int subdiv)
{
return ((numverts - numstrands) << subdiv) + numstrands;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 22a12bc55af..533463ba7bc 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5476,6 +5476,8 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
fmd->hair_system = newdataadr(fd, fmd->hair_system);
direct_link_hair(fd, fmd->hair_system);
+
+ fmd->draw_settings = newdataadr(fd, fmd->draw_settings);
}
}
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 983ec3b3956..1cc29fbbc0e 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1897,6 +1897,10 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
writestruct(wd, DATA, HairSystem, 1, fmd->hair_system);
write_hair(wd, fmd->hair_system);
}
+ if (fmd->draw_settings)
+ {
+ writestruct(wd, DATA, HairDrawSettings, 1, fmd->draw_settings);
+ }
}
}
}
diff --git a/source/blender/makesdna/DNA_hair_types.h b/source/blender/makesdna/DNA_hair_types.h
index cb117201067..4c8a986dcf0 100644
--- a/source/blender/makesdna/DNA_hair_types.h
+++ b/source/blender/makesdna/DNA_hair_types.h
@@ -98,6 +98,20 @@ typedef enum eHairSystemFlag
HAIR_SYSTEM_VERTS_DIRTY = (1 << 9),
} eHairSystemFlag;
+typedef struct HairDrawSettings
+{
+ short follicle_mode;
+ short pad1;
+ int pad2;
+} HairDrawSettings;
+
+typedef enum eHairDrawFollicleMode
+{
+ HAIR_DRAW_FOLLICLE_NONE = 0,
+ HAIR_DRAW_FOLLICLE_POINTS = 1,
+ HAIR_DRAW_FOLLICLE_AXES = 2,
+} eHairDrawFollicleMode;
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index b7ecf4e9daa..38270f47445 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1635,6 +1635,7 @@ typedef struct FurModifierData {
int pad;
struct HairSystem *hair_system;
+ struct HairDrawSettings *draw_settings;
/* Follicle distribution parameters */
int follicle_seed;
diff --git a/source/blender/makesrna/intern/rna_hair.c b/source/blender/makesrna/intern/rna_hair.c
index 0f9c38c4a6b..67ef4e5b7b4 100644
--- a/source/blender/makesrna/intern/rna_hair.c
+++ b/source/blender/makesrna/intern/rna_hair.c
@@ -134,11 +134,33 @@ static void rna_def_hair_system(BlenderRNA *brna)
parm = RNA_def_int(func, "max_count", 0, 0, INT_MAX, "Max Count", "Maximum number of follicles to generate", 1, 1e5);
}
+static void rna_def_hair_draw_settings(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static const EnumPropertyItem follicle_mode_items[] = {
+ {HAIR_DRAW_FOLLICLE_NONE, "NONE", 0, "None", ""},
+ {HAIR_DRAW_FOLLICLE_POINTS, "POINTS", 0, "Points", "Draw a point for each follicle"},
+ {HAIR_DRAW_FOLLICLE_AXES, "AXES", 0, "Axes", "Draw direction of hair for each follicle"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ srna = RNA_def_struct(brna, "HairDrawSettings", NULL);
+ RNA_def_struct_ui_text(srna, "Hair Draw Settings", "Settings for drawing hair systems");
+ RNA_def_struct_sdna(srna, "HairDrawSettings");
+
+ prop = RNA_def_property(srna, "follicle_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, follicle_mode_items);
+ RNA_def_property_ui_text(prop, "Follicle Mode", "Draw follicles on the scalp surface");
+}
+
void RNA_def_hair(BlenderRNA *brna)
{
rna_def_hair_follicle(brna);
rna_def_hair_pattern(brna);
rna_def_hair_system(brna);
+ rna_def_hair_draw_settings(brna);
}
#endif
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index e9e412d4c83..43480f0d8f6 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -4825,6 +4825,10 @@ static void rna_def_modifier_fur(BlenderRNA *brna)
RNA_def_property_range(prop, 0, INT_MAX);
RNA_def_property_ui_range(prop, 1, 1e5, 1, 1);
RNA_def_property_ui_text(prop, "Max Count", "Maximum follicle number");
+
+ prop = RNA_def_property(srna, "draw_settings", PROP_POINTER, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Draw Settings", "Hair draw settings");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
}
void RNA_def_modifier(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_fur.c b/source/blender/modifiers/intern/MOD_fur.c
index 3546e752177..ca28924aefd 100644
--- a/source/blender/modifiers/intern/MOD_fur.c
+++ b/source/blender/modifiers/intern/MOD_fur.c
@@ -60,6 +60,8 @@ static void initData(ModifierData *md)
fmd->follicle_min_distance = 0.001f;
fmd->follicle_max_count = 1000;
+
+ fmd->draw_settings = BKE_hair_draw_settings_new();
}
static void copyData(ModifierData *md, ModifierData *target)
@@ -70,12 +72,20 @@ static void copyData(ModifierData *md, ModifierData *target)
if (tfmd->hair_system) {
BKE_hair_free(tfmd->hair_system);
}
+ if (tfmd->draw_settings)
+ {
+ BKE_hair_draw_settings_free(tfmd->draw_settings);
+ }
modifier_copyData_generic(md, target);
if (fmd->hair_system) {
tfmd->hair_system = BKE_hair_copy(fmd->hair_system);
}
+ if (fmd->draw_settings)
+ {
+ tfmd->draw_settings = BKE_hair_draw_settings_copy(fmd->draw_settings);
+ }
}
static void freeData(ModifierData *md)
@@ -85,6 +95,10 @@ static void freeData(ModifierData *md)
if (fmd->hair_system) {
BKE_hair_free(fmd->hair_system);
}
+ if (fmd->draw_settings)
+ {
+ BKE_hair_draw_settings_free(fmd->draw_settings);
+ }
}
static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
More information about the Bf-blender-cvs
mailing list