[Bf-blender-cvs] [e0a4b835ece] hair_object: New object type for hair systems.

Lukas Tönne noreply at git.blender.org
Wed Aug 29 09:53:13 CEST 2018


Commit: e0a4b835eceab28466e91fe709435c407cd6e402
Author: Lukas Tönne
Date:   Wed Aug 29 08:52:50 2018 +0100
Branches: hair_object
https://developer.blender.org/rBe0a4b835eceab28466e91fe709435c407cd6e402

New object type for hair systems.

===================================================================

M	build_files/cmake/macros.cmake
M	intern/cycles/blender/blender_curves.cpp
M	intern/cycles/blender/blender_object.cpp
M	release/scripts/startup/bl_ui/__init__.py
A	release/scripts/startup/bl_ui/properties_data_hair.py
M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/BKE_library.h
M	source/blender/blenkernel/BKE_main.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/hair.c
M	source/blender/blenkernel/intern/idcode.c
M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/library_query.c
M	source/blender/blenkernel/intern/library_remap.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/object_update.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/blentranslation/BLT_translation.h
M	source/blender/bmesh/CMakeLists.txt
M	source/blender/bmesh/intern/bmesh_opdefines.c
M	source/blender/bmesh/intern/bmesh_operators_private.h
M	source/blender/bmesh/intern/bmesh_walkers_impl.c
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h
M	source/blender/depsgraph/intern/depsgraph_tag.cc
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/intern/draw_cache_impl_hair.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/intern/draw_hair.c
M	source/blender/draw/intern/draw_hair_private.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/draw_mode_engines.h
A	source/blender/draw/modes/edit_hair_mode.c
M	source/blender/draw/modes/object_mode.c
A	source/blender/draw/modes/shaders/edit_hair_overlay_frag.glsl
A	source/blender/draw/modes/shaders/edit_hair_overlay_loosevert_vert.glsl
M	source/blender/editors/CMakeLists.txt
A	source/blender/editors/hair/CMakeLists.txt
A	source/blender/editors/hair/edithair.c
A	source/blender/editors/hair/hair_intern.h
A	source/blender/editors/hair/hair_ops.c
A	source/blender/editors/include/ED_hair.h
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/include/UI_icons.h
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_modes.c
M	source/blender/editors/object/object_ops.c
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/space_api/spacetypes.c
M	source/blender/editors/space_buttons/buttons_context.c
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/editors/space_outliner/outliner_intern.h
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/editors/space_outliner/outliner_tree.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_iterators.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/makesdna/DNA_ID.h
M	source/blender/makesdna/DNA_hair_types.h
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_ID.c
M	source/blender/makesrna/intern/rna_hair.c
M	source/blender/makesrna/intern/rna_internal.h
M	source/blender/makesrna/intern/rna_main_api.c
M	source/blender/makesrna/intern/rna_object.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_sculpt_paint.c
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_keymap.c

===================================================================

diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 65f962d2dd9..d825e522409 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -616,6 +616,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
 		bf_editor_datafiles
 		bf_editor_mask
 		bf_editor_io
+		bf_editor_hair
 
 		bf_render
 		bf_python
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index 840e90670b5..9bbb92098c8 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -299,7 +299,6 @@ static void ObtainCacheVColFromParticleSystem(BL::Mesh *b_mesh,
 static void ObtainCacheDataFromHairSystem(BL::Object *b_ob,
                                           BL::HairSystem *b_hsys,
                                           BL::Mesh *b_scalp,
-                                          int shader,
                                           bool /*background*/,
                                           ParticleCurveData *CData,
                                           int *curvenum,
@@ -324,8 +323,10 @@ static void ObtainCacheDataFromHairSystem(BL::Object *b_ob,
 	CData->psys_curvenum.push_back_slow(totcurves);
 	
 	// Material
-	CData->psys_shader.push_back_slow(shader);
-	
+	// TODO
+//	int shader = clamp(b_part.material()-1, 0, mesh->used_shaders.size()-1);
+//	CData->psys_shader.push_back_slow(shader);
+
 	{
 		// Cycles settings
 //		PointerRNA cpsys = RNA_pointer_get(&b_hsys->ptr, "cycles");
@@ -415,6 +416,21 @@ static bool ObtainCacheDataFromObject(Mesh *mesh,
 	if(!(mesh && b_ob && CData))
 		return false;
 
+	if(b_ob->type() == BL::Object::type_HAIR) {
+		BL::HairSystem b_hsys(b_ob->data());
+		
+		BL::Mesh b_scalp(b_hsys.scalp_object().data());
+		if (b_scalp) {
+			ObtainCacheDataFromHairSystem(b_ob,
+			                              &b_hsys,
+			                              &b_scalp,
+			                              background,
+			                              CData,
+			                              &curvenum,
+			                              &keyno);
+		}
+	}
+
 	BL::Object::modifiers_iterator b_mod;
 	for(b_ob->modifiers.begin(b_mod); b_mod != b_ob->modifiers.end(); ++b_mod) {
 		if (background ? b_mod->show_render() : b_mod->show_viewport())
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index a1f39d0848f..13091e2b9e2 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -81,7 +81,8 @@ bool BlenderSync::object_is_mesh(BL::Object& b_ob)
 	else {
 		return (b_ob_data.is_a(&RNA_Mesh) ||
 		        b_ob_data.is_a(&RNA_Curve) ||
-		        b_ob_data.is_a(&RNA_MetaBall));
+		        b_ob_data.is_a(&RNA_MetaBall) ||
+		        b_ob_data.is_a(&RNA_HairSystem));
 	}
 }
 
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index 3b0cc2527a8..64ecee186da 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -35,6 +35,7 @@ _modules = [
     "properties_data_curve",
     "properties_data_empty",
     "properties_data_gpencil",
+    "properties_data_hair",
     "properties_data_light",
     "properties_data_lattice",
     "properties_data_mesh",
diff --git a/release/scripts/startup/bl_ui/properties_data_hair.py b/release/scripts/startup/bl_ui/properties_data_hair.py
new file mode 100644
index 00000000000..f503c6dd4de
--- /dev/null
+++ b/release/scripts/startup/bl_ui/properties_data_hair.py
@@ -0,0 +1,112 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+from bpy.types import Menu, Panel
+from rna_prop_ui import PropertyPanel
+
+
+class DataButtonsPanel:
+    bl_space_type = 'PROPERTIES'
+    bl_region_type = 'WINDOW'
+    bl_context = "data"
+
+    @classmethod
+    def poll(cls, context):
+        return context.hair_system
+
+
+class DATA_PT_context_hair(DataButtonsPanel, Panel):
+    bl_label = ""
+    bl_options = {'HIDE_HEADER'}
+
+    def draw(self, context):
+        layout = self.layout
+        ob = context.object
+        hsys = context.hair_system
+        space = context.space_data
+
+        split = layout.split(percentage=0.65)
+
+        if ob:
+            split.template_ID(ob, "data")
+        elif hsys:
+            split.template_ID(space, "pin_id")
+
+
+class DATA_PT_hair_system(DataButtonsPanel, Panel):
+    bl_label = "Hair System"
+
+    def draw(self, context):
+        layout = self.layout
+        hsys = context.hair_system
+
+        split = layout.split()
+
+        #col = split.column()
+        #col.alert = (hsys.scalp_object is None)
+        #col.label("Scalp Object:")
+        #col.prop(hsys, "scalp_object", "")
+
+
+class DATA_PT_hair_draw_settings(DataButtonsPanel, Panel):
+    bl_label = "Draw Settings"
+
+    def draw(self, context):
+        layout = self.layout
+        hsys = context.hair_system
+        ds = hsys.draw_settings
+
+        layout.prop(hsys, "material_slot")
+
+        col = layout.column(align=True)
+        col.label("Follicles:")
+        col.prop(ds, "follicle_mode", expand=True)
+
+        col = layout.column(align=True)
+        col.label("Guide Curves:")
+        col.prop(ds, "guide_mode", expand=True)
+
+        layout.prop(ds, "shape")
+
+        col = layout.column(align=True)
+        col.prop(ds, "root_radius")
+        col.prop(ds, "tip_radius")
+
+        col = layout.column()
+        col.prop(ds, "radius_scale")
+        col.prop(ds, "use_close_tip")
+
+
+class DATA_PT_custom_props_hair(DataButtonsPanel, PropertyPanel, Panel):
+    _context_path = "object.data"
+    _property_type = bpy.types.HairSystem
+
+
+classes = (
+    DATA_PT_context_hair,
+    DATA_PT_hair_system,
+    DATA_PT_hair_draw_settings,
+    DATA_PT_custom_props_hair,
+)
+
+if __name__ == "__main__":  # only for live edit.
+    from bpy.utils import register_class
+    for cls in classes:
+        register_class(cls)
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index a26d99e9ae9..2064c9870dc 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -57,7 +57,10 @@ class VIEW3D_HT_header(Header):
             # object_mode = obj.mode
 
             # Particle edit
-            if object_mode == 'PARTICLE_EDIT':
+            if object_mode == 'EDIT' and obj.type == 'HAIR':
+                row = layout.row()
+                row.prop(tool_settings.hair_edit_settings, "mode", text="", expand=True)
+            elif object_mode == 'PARTICLE_EDIT':
                 row = layout.row()
                 row.prop(tool_settings.particle_edit, "select_mode", text="", expand=True)
 
@@ -285,6 +288,8 @@ class VIEW3D_MT_editor_menus(Menu):
             layout.menu("INFO_MT_surface_add", text="Add")
         elif mode_string == 'EDIT_METABALL':
             layout.menu("INFO_MT_metaball_add", text="Add")
+        elif mode_string == 'EDIT_HAIR':
+            layout.menu("INFO_MT_hair_add", text="Add")
         elif mode_string == 'EDIT_ARMATURE':
             layout.menu("INFO_MT_edit_armature_add", text="Add")
 
@@ -1390,6 +1395,17 @@ class INFO_MT_metaball_add(Menu):
         layout.operator_enum("object.metaball_add", "type")
 
 
+class INFO_MT_hair_add(Menu):
+    bl_idname = "INFO_MT_hair_add"
+    bl_label = "Hair"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        layout.operator("object.hair_add")
+
+
 class INFO_MT_edit_curve_add(Menu):
     bl_idname = "INFO_MT_edit_curve_add"
     bl_label = "Add"
@@ -1480,6 +1496,7 @@ class INFO_MT_add(Menu):
         # layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='OUTLINER_OB_SURFACE')
         layout.menu("INFO_MT_surface_add", icon='OUTLINER_OB_SURFACE')
         layout.menu("INFO_MT_metaball_add", text="Metaball", icon='OUTLINER_OB_META')
+        layout.menu("INFO_MT_hair_add", text="Hair", icon='OUTLINER_OB_HAIR')
         layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT')
         layout.operator_menu_enum("object.gpencil_add", "type", text="Grease Pencil", icon='OUTLINER_OB_GREASEPENCIL')
         layout.separator()
@@ -3420,6 +3437,28 @@ class VIEW3D_MT_edit_lattice(Menu):
         layout.operator("object.vertex_parent_set")
 
 
+class VIEW3D_MT_edit_hair(Menu):
+    bl_label = "Hair"
+
+    def draw(self, context):
+        layout = self.layout
+
+        edit_object = context.edit_object
+        hair = edit_object.data
+
+        layout.menu("VIEW3D_MT_undo_redo")
+
+        layout.separator()
+
+        layout.menu("VIEW3D_MT_transform")
+        layout.menu("VIEW3D_MT_mirror")
+        layout.menu("VIEW3D_MT_snap")
+
+        layout.separator()
+
+        layout.operator("hair.region_add")
+
+
 class VIEW3D_MT_edit_armature(Menu):
     bl_label = "Armature"
 
@@ -5025,6 +5064,7 @@ classes = (
     INFO_MT_curve_add,
     INFO_MT_surface_add,
     INFO_MT_metaball_add,
+    INFO_MT_hair_add,
     INFO_MT_edit_curve_add,
     INFO_MT_edit_armature_add,
     INFO_MT_armature_add,
@@ -5111,6 +5151,7 @@ classes = (
     VIEW3D_MT_edit_meta,
     VIEW3D_MT_edit_meta_showhide,
     VIEW3D_MT_edit_lattice,
+    VIEW3D_MT_edit_hair,
     VIEW3D_MT_edit_armature,
     VIEW3D_MT_armature_specials,
     VIEW3D_MT_edit_armature_parent,
diff --git a/s

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list