[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