[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