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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs