[Bf-blender-cvs] [3fffd652f63] soc-2019-npr: LANPR: collection and object usage flags now effective. object flags overrides modifier.

YimingWu noreply at git.blender.org
Wed Jun 26 10:29:30 CEST 2019


Commit: 3fffd652f63db99be9309bc24640233f7c161e3d
Author: YimingWu
Date:   Wed Jun 26 16:28:21 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB3fffd652f63db99be9309bc24640233f7c161e3d

LANPR: collection and object usage flags now effective. object flags overrides modifier.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/makesdna/DNA_collection_types.h
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesrna/intern/rna_object.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index b01ea5f7bb9..251749547e4 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1670,33 +1670,30 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
     def FEATURE_LINE(self, layout, ob, md):
         layout.operator("scene.lanpr_update_gp_strokes", icon='RENDER_STILL', text='Manual Update')
-        if ob.lanpr.usage == 'INCLUDE':
-            layout.label(text='Enable Types:')
-            row = layout.row(align=True)
-            row.prop(md,'enable_contour',toggle=True)
-            row.prop(md,'enable_crease',toggle=True)
-            row.prop(md,'enable_mark',toggle=True)
-            row.prop(md,'enable_material',toggle=True)
-            row.prop(md,'enable_intersection',toggle=True)
-            row.prop(md,'enable_modifier_mark',toggle=True)
+        layout.label(text='Enable Types:')
+        row = layout.row(align=True)
+        row.prop(md,'enable_contour',toggle=True)
+        row.prop(md,'enable_crease',toggle=True)
+        row.prop(md,'enable_mark',toggle=True)
+        row.prop(md,'enable_material',toggle=True)
+        row.prop(md,'enable_intersection',toggle=True)
+        row.prop(md,'enable_modifier_mark',toggle=True)
 
-            row = layout.row(align=True)
-            row.prop(md,'use_multiple_levels', icon='GP_MULTIFRAME_EDITING', icon_only=True)
-            row.prop(md,'level_begin')
-            if md.use_multiple_levels:
-                row.prop(md,'level_end')
-
-            layout.label(text='Result GP:')
-            layout.prop(md,'target')
-            if not md.target:
-                layout.label(text="You have to specify a target GP Object")
-            else:
-                layout.prop(md,'replace', text='Replace existing frames')
-                row = layout.row()
-                row.prop(md,'layer')
-                row.prop(md,'material')
+        row = layout.row(align=True)
+        row.prop(md,'use_multiple_levels', icon='GP_MULTIFRAME_EDITING', icon_only=True)
+        row.prop(md,'level_begin')
+        if md.use_multiple_levels:
+            row.prop(md,'level_end')
+
+        layout.label(text='Result GP:')
+        layout.prop(md,'target')
+        if not md.target:
+            layout.label(text="You have to specify a target GP Object")
         else:
-            layout.label(text="This object is not included in LANPR")
+            layout.prop(md,'replace', text='Replace existing frames')
+            row = layout.row()
+            row.prop(md,'layer')
+            row.prop(md,'material')
 
 class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
     bl_label = "Modifiers"
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 7122ca27e71..cb7be61d6b0 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2118,10 +2118,8 @@ void lanpr_calculate_render_triangle_normal(LANPR_RenderTriangle *rt)
   tmat_vector_cross_3d(rt->gn, l, r);
   tmat_normalize_self_3d(rt->gn);
 }
-void lanpr_make_render_geometry_buffers_object(Object *o,
-                                               real *MvMat,
-                                               real *MvPMat,
-                                               LANPR_RenderBuffer *rb)
+void lanpr_make_render_geometry_buffers_object(
+    Object *o, real *MvMat, real *MvPMat, LANPR_RenderBuffer *rb, int override_usage)
 {
   Object *oc;
   Mesh *mo;
@@ -2147,7 +2145,9 @@ void lanpr_make_render_geometry_buffers_object(Object *o,
   int CanFindFreestyle = 0;
   int i;
 
-  if (o->lanpr.usage == OBJECT_FEATURE_LINE_EXCLUDE) {
+  int usage = override_usage ? override_usage : o->lanpr.usage;
+
+  if (usage == OBJECT_FEATURE_LINE_EXCLUDE) {
     return;
   }
 
@@ -2237,7 +2237,7 @@ void lanpr_make_render_geometry_buffers_object(Object *o,
       LANPR_RenderLineSegment *rls = mem_static_aquire(&rb->render_data_pool,
                                                        sizeof(LANPR_RenderLineSegment));
       BLI_addtail(&rl->segments, rls);
-      if (o->lanpr.usage == OBJECT_FEATURE_LINE_INCLUDE) {
+      if (usage == OBJECT_FEATURE_LINE_INHERENT) {
         BLI_addtail(&rb->all_render_lines, rl);
       }
       rl++;
@@ -2283,17 +2283,64 @@ void lanpr_make_render_geometry_buffers_object(Object *o,
   }
 }
 
-/* reserved for checking collection includes/excludes */
-int lanpr_object_usage(Object *o)
+int lanpr_object_has_feature_line_modifier(Object *o)
 {
   ModifierData *md;
   for (md = o->modifiers.first; md; md = md->next) {
     if (md->type == eModifierType_FeatureLine) {
-      FeatureLineModifierData *flmd = (FeatureLineModifierData *)md;
+      return 1;
     }
   }
   return 0;
 }
+int lanpr_object_collection_usage_check(Collection *c, Object *o)
+{
+  CollectionChild *cc;
+  int object_is_used = (lanpr_object_has_feature_line_modifier(o) &&
+                        o->lanpr.usage == OBJECT_FEATURE_LINE_INHERENT);
+
+  if (object_is_used && c->lanpr.force && c->lanpr.usage != COLLECTION_FEATURE_LINE_INCLUDE) {
+    if (BKE_collection_has_object_recursive(c, o)) {
+      if (c->lanpr.usage == COLLECTION_FEATURE_LINE_EXCLUDE) {
+        return OBJECT_FEATURE_LINE_EXCLUDE;
+      }
+      else if (c->lanpr.usage == COLLECTION_FEATURE_LINE_OCCLUSION_ONLY) {
+        return OBJECT_FEATURE_LINE_OCCLUSION_ONLY;
+      }
+    }
+  }
+
+  if (!c->children.first) {
+    if (BKE_collection_has_object(c, o)) {
+      if (o->lanpr.usage == OBJECT_FEATURE_LINE_INHERENT) {
+        if (c->lanpr.usage == COLLECTION_FEATURE_LINE_OCCLUSION_ONLY) {
+          return OBJECT_FEATURE_LINE_OCCLUSION_ONLY;
+        }
+        else if (c->lanpr.usage == COLLECTION_FEATURE_LINE_EXCLUDE) {
+          return OBJECT_FEATURE_LINE_EXCLUDE;
+        }
+        else {
+          return OBJECT_FEATURE_LINE_INHERENT;
+        }
+      }
+      else {
+        return o->lanpr.usage;
+      }
+    }
+    else {
+      return OBJECT_FEATURE_LINE_INHERENT;
+    }
+  }
+
+  for (cc = c->children.first; cc; cc = cc->next) {
+    int result = lanpr_object_collection_usage_check(cc->collection, o);
+    if (result > OBJECT_FEATURE_LINE_INHERENT) {
+      return result;
+    }
+  }
+
+  return OBJECT_FEATURE_LINE_INHERENT;
+}
 
 void lanpr_make_render_geometry_buffers(Depsgraph *depsgraph,
                                         Scene *s,
@@ -2342,7 +2389,9 @@ void lanpr_make_render_geometry_buffers(Depsgraph *depsgraph,
                          o,
                          DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | DEG_ITER_OBJECT_FLAG_VISIBLE |
                              DEG_ITER_OBJECT_FLAG_DUPLI | DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET) {
-    lanpr_make_render_geometry_buffers_object(o, view, proj, rb);
+    int usage = lanpr_object_collection_usage_check(s->master_collection, o);
+
+    lanpr_make_render_geometry_buffers_object(o, view, proj, rb, usage);
   }
   DEG_OBJECT_ITER_END;
 
diff --git a/source/blender/makesdna/DNA_collection_types.h b/source/blender/makesdna/DNA_collection_types.h
index db255ad9a99..2da8a0dea64 100644
--- a/source/blender/makesdna/DNA_collection_types.h
+++ b/source/blender/makesdna/DNA_collection_types.h
@@ -43,6 +43,12 @@ typedef struct CollectionChild {
   struct Collection *collection;
 } CollectionChild;
 
+enum CollectionFeatureLine_Usage {
+  COLLECTION_FEATURE_LINE_INCLUDE = 0,
+  COLLECTION_FEATURE_LINE_OCCLUSION_ONLY = (1 << 0),
+  COLLECTION_FEATURE_LINE_EXCLUDE = (1 << 1),
+};
+
 typedef struct CollectionLANPR {
   short usage;
   short force; /* force objects with LANPR modifier follow the rule */
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 27407ea47dc..40bfde63155 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -186,7 +186,7 @@ typedef struct ObjectLANPR {
 } ObjectLANPR;
 
 enum ObjectFeatureLine_Usage {
-  OBJECT_FEATURE_LINE_INCLUDE = 0,
+  OBJECT_FEATURE_LINE_INHERENT = 0,
   OBJECT_FEATURE_LINE_OCCLUSION_ONLY = (1 << 0),
   OBJECT_FEATURE_LINE_EXCLUDE = (1 << 1),
 };
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index f232b6a2530..3468e220e1c 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -2313,11 +2313,11 @@ static void rna_def_object_lanpr(BlenderRNA *brna)
   PropertyRNA *prop;
 
   static EnumPropertyItem prop_feature_line_usage_items[] = {
-      {OBJECT_FEATURE_LINE_INCLUDE,
-       "INCLUDE",
+      {OBJECT_FEATURE_LINE_INHERENT,
+       "INHERENT",
        0,
-       "Include",
-       "Include this object into calculation"},
+       "Inherent",
+       "Follow settings from the parent collection"},
       {OBJECT_FEATURE_LINE_OCCLUSION_ONLY,
        "OCCLUSION_ONLY",
        0,



More information about the Bf-blender-cvs mailing list