[Bf-blender-cvs] [fb96cbcf218] soc-2019-npr: LANPR: Stroke update button for GP targets and mesh source objects.

YimingWu noreply at git.blender.org
Fri Jul 5 03:15:41 CEST 2019


Commit: fb96cbcf218a2605335380ac752165db61b2db9c
Author: YimingWu
Date:   Fri Jul 5 09:15:00 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBfb96cbcf218a2605335380ac752165db61b2db9c

LANPR: Stroke update button for GP targets and mesh source objects.

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

M	release/scripts/startup/bl_ui/properties_object.py
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/editors/render/render_intern.h
M	source/blender/editors/render/render_ops.c

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

diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index a854f498f9c..a5663460de5 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -416,6 +416,11 @@ class OBJECT_PT_lanpr(ObjectButtonsPanel, Panel):
         layout.label(text='Usage:')
         row = layout.row()
         row.prop(lanpr,'usage',expand=True)
+        if context.object.type == 'MESH':
+            layout.operator("object.lanpr_update_gp_source")
+        elif context.object.type == 'GPENCIL':
+            layout.operator("object.lanpr_update_gp_target")
+        
 
 class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel, Panel):
     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH', 'BLENDER_LANPR'}
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index a91a01c07fd..17d12fef90d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -4699,7 +4699,7 @@ void lanpr_clear_gp_lanpr_flags(Depsgraph *dg, int frame)
   DEG_OBJECT_ITER_END;
 }
 
-void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, int frame)
+void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, int frame, Object* source_only, Object* target_only)
 {
   Object *ob;
   Object *gpobj;
@@ -4710,13 +4710,18 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
   CollectionObject *co;
   CollectionChild *cc;
 
-  for (co = col->gobject.first; co; co = co->next) {
+  for (co = source_only ? source_only : col->gobject.first; co; co = co->next) {
     ob = co->ob;
     for (md = ob->modifiers.first; md; md = md->next) {
       if (md->type == eModifierType_FeatureLine) {
         FeatureLineModifierData *flmd = (FeatureLineModifierData *)md;
         if (flmd->target && flmd->target->type == OB_GPENCIL) {
           gpobj = flmd->target;
+
+          if(target_only && target_only!=gpobj){
+            continue;
+          }
+
           gpd = gpobj->data;
           gpl = BKE_gpencil_layer_get_index(gpd, flmd->layer, 1);
           if (!gpl) {
@@ -4749,12 +4754,15 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
         }
       }
     }
+    if(source_only){
+      return;
+    }
   }
   for (cc = col->children.first; cc; cc = cc->next) {
-    lanpr_update_gp_strokes_recursive(dg, cc->collection, frame);
+    lanpr_update_gp_strokes_recursive(dg, cc->collection, frame, source_only, target_only);
   }
 }
-void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, int frame)
+void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, int frame, int this_only, Object* target_only)
 {
   Object *ob;
   Object *gpobj;
@@ -4766,8 +4774,10 @@ void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, i
   CollectionChild *cc;
 
   /* depth first */
-  for (cc = col->children.first; cc; cc = cc->next) {
-    lanpr_update_gp_strokes_collection(dg, cc->collection, frame);
+  if(!this_only){
+    for (cc = col->children.first; cc; cc = cc->next) {
+      lanpr_update_gp_strokes_collection(dg, cc->collection, frame, this_only, target_only);
+    }
   }
 
   if (col->lanpr.usage != COLLECTION_LANPR_INCLUDE || !col->lanpr.target) {
@@ -4775,6 +4785,11 @@ void lanpr_update_gp_strokes_collection(Depsgraph *dg, struct Collection *col, i
   }
 
   gpobj = col->lanpr.target;
+
+  if(target_only && target_only!=gpobj){
+    return;
+  }
+
   gpd = gpobj->data;
   gpl = BKE_gpencil_layer_get_index(gpd, col->lanpr.layer, 1);
   if (!gpl) {
@@ -4817,9 +4832,9 @@ int lanpr_update_gp_strokes_exec(struct bContext *C, struct wmOperator *op)
 
   lanpr_chain_clear_picked_flag(lanpr_share.render_buffer_shared);
 
-  lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame);
+  lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame, NULL, NULL);
 
-  lanpr_update_gp_strokes_collection(dg, scene->master_collection, frame);
+  lanpr_update_gp_strokes_collection(dg, scene->master_collection, frame, 0, NULL);
 
   lanpr_clear_gp_lanpr_flags(dg, frame);
 
@@ -4844,15 +4859,87 @@ int lanpr_bake_gp_strokes_exec(struct bContext *C, struct wmOperator *op)
 
     lanpr_chain_clear_picked_flag(lanpr_share.render_buffer_shared);
 
-    lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame);
+    lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame, NULL, NULL);
 
-    lanpr_update_gp_strokes_collection(dg, scene->master_collection, frame);
+    lanpr_update_gp_strokes_collection(dg, scene->master_collection, frame, 0, NULL);
   }
 
   WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED | ND_SPACE_PROPERTIES, NULL);
 
   return OPERATOR_FINISHED;
 }
+int lanpr_update_gp_target_exec(struct bContext *C, struct wmOperator *op)
+{
+  Scene *scene = CTX_data_scene(C);
+  Depsgraph *dg = CTX_data_depsgraph(C);
+  SceneLANPR *lanpr = &scene->lanpr;
+  Object* gpo = CTX_data_active_object(C);
+
+  int frame = scene->r.cfra;
+
+  if (!lanpr_share.render_buffer_shared ||
+      lanpr_share.render_buffer_shared->cached_for_frame != frame) {
+    lanpr_compute_feature_lines_internal(dg, 0);
+  }
+
+  lanpr_chain_clear_picked_flag(lanpr_share.render_buffer_shared);
+
+  lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame, NULL, gpo);
+
+  lanpr_update_gp_strokes_collection(dg, scene->master_collection, frame, 0, gpo);
+
+  lanpr_clear_gp_lanpr_flags(dg, frame);
+
+  WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED | ND_SPACE_PROPERTIES, NULL);
+
+  return OPERATOR_FINISHED;
+}
+int lanpr_update_gp_source_exec(struct bContext *C, struct wmOperator *op)
+{
+  Scene *scene = CTX_data_scene(C);
+  Depsgraph *dg = CTX_data_depsgraph(C);
+  SceneLANPR *lanpr = &scene->lanpr;
+  Object* source_obj = CTX_data_active_object(C);
+
+  int frame = scene->r.cfra;
+
+  if (!lanpr_share.render_buffer_shared ||
+      lanpr_share.render_buffer_shared->cached_for_frame != frame) {
+    lanpr_compute_feature_lines_internal(dg, 0);
+  }
+
+  lanpr_chain_clear_picked_flag(lanpr_share.render_buffer_shared);
+
+  lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame, source_obj, NULL);
+
+  lanpr_update_gp_strokes_collection(dg, scene->master_collection, frame, 0, NULL);
+
+  lanpr_clear_gp_lanpr_flags(dg, frame);
+
+  WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED | ND_SPACE_PROPERTIES, NULL);
+
+  return OPERATOR_FINISHED;
+}
+
+static bool lanpr_active_is_gpencil_object(bContext *C){
+  Object* o = CTX_data_active_object(C);
+  return o->type == OB_GPENCIL;
+}
+
+static bool lanpr_active_is_source_object(bContext *C){
+  Object* o = CTX_data_active_object(C);
+  if(o->type!=OB_MESH){
+    return false;
+  }else{
+    ModifierData* md;
+    for(md = o->modifiers.first;md;md=md->next){
+      if(md->type == eModifierType_FeatureLine){
+        return true;
+      }
+    }
+  }
+  return false;
+}
 
 void SCENE_OT_lanpr_add_line_layer(struct wmOperatorType *ot)
 {
@@ -4957,3 +5044,23 @@ void SCENE_OT_lanpr_bake_gp_strokes(struct wmOperatorType *ot)
 
   ot->exec = lanpr_bake_gp_strokes_exec;
 }
+
+void OBJECT_OT_lanpr_update_gp_target(struct wmOperatorType *ot)
+{
+  ot->name = "Update Strokes";
+  ot->description = "Update LANPR strokes for selected GPencil object.";
+  ot->idname = "OBJECT_OT_lanpr_update_gp_target";
+
+  ot->poll = lanpr_active_is_gpencil_object;
+  ot->exec = lanpr_update_gp_target_exec;
+}
+
+void OBJECT_OT_lanpr_update_gp_source(struct wmOperatorType *ot)
+{
+  ot->name = "Update Strokes";
+  ot->description = "Update LANPR strokes for selected Mesh object.";
+  ot->idname = "OBJECT_OT_lanpr_update_gp_source";
+
+  ot->poll = lanpr_active_is_source_object;
+  ot->exec = lanpr_update_gp_source_exec;
+}
diff --git a/source/blender/editors/render/render_intern.h b/source/blender/editors/render/render_intern.h
index 5b9f648e1d3..9cbdf745701 100644
--- a/source/blender/editors/render/render_intern.h
+++ b/source/blender/editors/render/render_intern.h
@@ -38,6 +38,8 @@ void OBJECT_OT_material_slot_deselect(struct wmOperatorType *ot);
 void OBJECT_OT_material_slot_copy(struct wmOperatorType *ot);
 void OBJECT_OT_material_slot_move(struct wmOperatorType *ot);
 
+void OBJECT_OT_lanpr_update_gp_target(struct wmOperatorType *ot);
+
 void MATERIAL_OT_new(struct wmOperatorType *ot);
 void TEXTURE_OT_new(struct wmOperatorType *ot);
 void WORLD_OT_new(struct wmOperatorType *ot);
@@ -86,6 +88,8 @@ void SCENE_OT_lanpr_delete_line_component(struct wmOperatorType *ot);
 void SCENE_OT_lanpr_enable_all_line_types(struct wmOperatorType *ot);
 void SCENE_OT_lanpr_update_gp_strokes(struct wmOperatorType *ot);
 void SCENE_OT_lanpr_bake_gp_strokes(struct wmOperatorType *ot);
+void OBJECT_OT_lanpr_update_gp_target(struct wmOperatorType *ot);
+void OBJECT_OT_lanpr_update_gp_source(struct wmOperatorType *ot);
 
 void TEXTURE_OT_slot_copy(struct wmOperatorType *ot);
 void TEXTURE_OT_slot_paste(struct wmOperatorType *ot);
diff --git a/source/blender/editors/render/render_ops.c b/source/blender/editors/render/render_ops.c
index bfeb2c215ce..8bd1bead1cf 100644
--- a/source/blender/editors/render/render_ops.c
+++ b/source/blender/editors/render/render_ops.c
@@ -43,6 +43,9 @@ void ED_operatortypes_render(void)
   WM_operatortype_append(OBJECT_OT_material_slot_copy);
   WM_operatortype_append(OBJECT_OT_material_slot_move);
 
+  WM_operatortype_append(OBJECT_OT_lanpr_update_gp_target);
+  WM_operatortype_append(OBJECT_OT_lanpr_update_gp_source);
+
   WM_operatortype_append(MATERIAL_OT_new);
   WM_operatortype_append(TEXTURE_OT_new);
   WM_operatortype_append(WORLD_OT_new);



More information about the Bf-blender-cvs mailing list