[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