From caeeb376013a43da76d7927f415e78ca2ac6586b Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Sun, 13 Nov 2011 21:55:13 +0000 Subject: Added a new operator in the Parameter Editor mode to make a copy of the active line set. --- release/scripts/startup/bl_ui/properties_render.py | 9 ++++++++ source/blender/editors/render/render_intern.h | 1 + source/blender/editors/render/render_ops.c | 1 + source/blender/editors/render/render_shading.c | 26 ++++++++++++++++++++++ source/blender/freestyle/FRS_freestyle.h | 3 ++- .../intern/blender_interface/FRS_freestyle.cpp | 26 +++++++++++++++++++++- 6 files changed, 64 insertions(+), 2 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 868287b5fa0..2f1e5b9a529 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -175,6 +175,14 @@ class RENDER_PT_layers(RenderButtonsPanel, Panel): row.prop(rl, "exclude_refraction", text="") +class RENDER_MT_lineset_specials(Menu): + bl_label = "Lineset Specials" + + def draw(self, context): + layout = self.layout + layout.operator("scene.freestyle_lineset_copy", icon='ZOOMIN') + + class RENDER_PT_freestyle(RenderButtonsPanel, Panel): bl_label = "Freestyle" COMPAT_ENGINES = {'BLENDER_RENDER'} @@ -218,6 +226,7 @@ class RENDER_PT_freestyle(RenderButtonsPanel, Panel): subsub = sub.column(align=True) subsub.operator("scene.freestyle_lineset_add", icon='ZOOMIN', text="") subsub.operator("scene.freestyle_lineset_remove", icon='ZOOMOUT', text="") + subsub.menu("RENDER_MT_lineset_specials", icon='DOWNARROW_HLT', text="") if lineset: sub.separator() subsub = sub.column(align=True) diff --git a/source/blender/editors/render/render_intern.h b/source/blender/editors/render/render_intern.h index c01f695ccea..dfb30238d0c 100644 --- a/source/blender/editors/render/render_intern.h +++ b/source/blender/editors/render/render_intern.h @@ -57,6 +57,7 @@ void SCENE_OT_freestyle_module_add(struct wmOperatorType *ot); void SCENE_OT_freestyle_module_remove(struct wmOperatorType *ot); void SCENE_OT_freestyle_module_move(struct wmOperatorType *ot); void SCENE_OT_freestyle_lineset_add(struct wmOperatorType *ot); +void SCENE_OT_freestyle_lineset_copy(struct wmOperatorType *ot); void SCENE_OT_freestyle_lineset_remove(struct wmOperatorType *ot); void SCENE_OT_freestyle_lineset_move(struct wmOperatorType *ot); void SCENE_OT_freestyle_linestyle_new(struct wmOperatorType *ot); diff --git a/source/blender/editors/render/render_ops.c b/source/blender/editors/render/render_ops.c index f2aa5a1488e..8acb92b1193 100644 --- a/source/blender/editors/render/render_ops.c +++ b/source/blender/editors/render/render_ops.c @@ -66,6 +66,7 @@ void ED_operatortypes_render(void) WM_operatortype_append(SCENE_OT_freestyle_module_remove); WM_operatortype_append(SCENE_OT_freestyle_module_move); WM_operatortype_append(SCENE_OT_freestyle_lineset_add); + WM_operatortype_append(SCENE_OT_freestyle_lineset_copy); WM_operatortype_append(SCENE_OT_freestyle_lineset_remove); WM_operatortype_append(SCENE_OT_freestyle_lineset_move); WM_operatortype_append(SCENE_OT_freestyle_linestyle_new); diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 08a5eddb521..32ad198c1d7 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -722,6 +722,32 @@ static int freestyle_active_lineset_poll(bContext *C) return FRS_get_active_lineset(&srl->freestyleConfig) != NULL; } +static int freestyle_lineset_copy_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + SceneRenderLayer *srl = (SceneRenderLayer*) BLI_findlink(&scene->r.layers, scene->r.actlay); + + FRS_copy_active_lineset(&srl->freestyleConfig); + + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS, scene); + + return OPERATOR_FINISHED; +} + +void SCENE_OT_freestyle_lineset_copy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy Line Set"; + ot->idname= "SCENE_OT_freestyle_lineset_copy"; + ot->description="Create a copy of the active line set"; + + /* api callbacks */ + ot->exec= freestyle_lineset_copy_exec; + ot->poll= freestyle_active_lineset_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} static int freestyle_lineset_remove_exec(bContext *C, wmOperator *UNUSED(op)) { Scene *scene= CTX_data_scene(C); diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h index 9a40fc3e019..376663e0a21 100644 --- a/source/blender/freestyle/FRS_freestyle.h +++ b/source/blender/freestyle/FRS_freestyle.h @@ -65,7 +65,8 @@ extern "C" { void FRS_move_module_up(FreestyleConfig *config, FreestyleModuleConfig *module_conf); void FRS_move_module_down(FreestyleConfig *config, FreestyleModuleConfig *module_conf); - void FRS_add_lineset(FreestyleConfig *config); + FreestyleLineSet *FRS_add_lineset(FreestyleConfig *config); + void FRS_copy_active_lineset(FreestyleConfig *config); void FRS_delete_active_lineset(FreestyleConfig *config); void FRS_move_active_lineset_up(FreestyleConfig *config); void FRS_move_active_lineset_down(FreestyleConfig *config); diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp index d88331b7a04..d85ab0b6e82 100644 --- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp +++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp @@ -542,7 +542,7 @@ extern "C" { BLI_insertlinkafter(&config->modules, module_conf->next, module_conf); } - void FRS_add_lineset(FreestyleConfig *config) + FreestyleLineSet *FRS_add_lineset(FreestyleConfig *config) { int lineset_index = BLI_countlist(&config->linesets); @@ -563,6 +563,30 @@ extern "C" { else strcpy(lineset->name, "LineSet"); BLI_uniquename(&config->linesets, lineset, "FreestyleLineSet", '.', offsetof(FreestyleLineSet, name), sizeof(lineset->name)); + + return lineset; + } + + void FRS_copy_active_lineset(FreestyleConfig *config) + { + FreestyleLineSet *lineset = FRS_get_active_lineset(config); + + if (lineset) { + FreestyleLineSet *new_lineset = FRS_add_lineset(config); + new_lineset->linestyle = lineset->linestyle; + new_lineset->linestyle->id.us++; + new_lineset->flags = lineset->flags; + new_lineset->selection = lineset->selection; + new_lineset->qi = lineset->qi; + new_lineset->qi_start = lineset->qi_start; + new_lineset->qi_end = lineset->qi_end; + new_lineset->edge_types = lineset->edge_types; + if (lineset->group) { + new_lineset->group = lineset->group; + new_lineset->group->id.us++; + } + new_lineset->flags |= FREESTYLE_LINESET_CURRENT; + } } void FRS_delete_active_lineset(FreestyleConfig *config) -- cgit v1.2.3