Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-08-29 18:36:52 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-08-29 18:38:16 +0300
commit0efecba957eea45621c004217a76448f11f0376d (patch)
tree26a11c55c969a8c4389f9797f5e46b3d7ed186fc /source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
parent21105e1b1f1266a3846462588bdbe840d09758ea (diff)
parent39eb05161690510ecec4c30129a9f8d5532d39c9 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp')
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp183
1 files changed, 113 insertions, 70 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index 858f6771a45..21b4411fe79 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -147,12 +147,12 @@ static void init_view(Render *re)
float thickness = 1.0f;
switch (re->r.line_thickness_mode) {
- case R_LINE_THICKNESS_ABSOLUTE:
- thickness = re->r.unit_line_thickness * (re->r.size / 100.f);
- break;
- case R_LINE_THICKNESS_RELATIVE:
- thickness = height / 480.f;
- break;
+ case R_LINE_THICKNESS_ABSOLUTE:
+ thickness = re->r.unit_line_thickness * (re->r.size / 100.f);
+ break;
+ case R_LINE_THICKNESS_RELATIVE:
+ thickness = height / 480.f;
+ break;
}
g_freestyle.viewport[0] = g_freestyle.viewport[1] = 0;
@@ -303,25 +303,9 @@ static void prepare(Render *re, ViewLayer *view_layer)
int layer_count = 0;
switch (config->mode) {
- case FREESTYLE_CONTROL_SCRIPT_MODE:
- if (G.debug & G_DEBUG_FREESTYLE) {
- cout << "Modules :" << endl;
- }
- for (FreestyleModuleConfig *module_conf = (FreestyleModuleConfig *)config->modules.first;
- module_conf;
- module_conf = module_conf->next)
- {
- if (module_conf->script && module_conf->is_displayed) {
- const char *id_name = module_conf->script->id.name + 2;
- if (G.debug & G_DEBUG_FREESTYLE) {
- cout << " " << layer_count + 1 << ": " << id_name;
- if (module_conf->script->name)
- cout << " (" << module_conf->script->name << ")";
- cout << endl;
- }
- controller->InsertStyleModule(layer_count, id_name, module_conf->script);
- controller->toggleLayer(layer_count, true);
- layer_count++;
+ case FREESTYLE_CONTROL_SCRIPT_MODE:
+ if (G.debug & G_DEBUG_FREESTYLE) {
+ cout << "Modules :" << endl;
}
}
if (G.debug & G_DEBUG_FREESTYLE) {
@@ -378,40 +362,99 @@ static void prepare(Render *re, ViewLayer *view_layer)
else
conditions[i].value = -1; // condition: NOT X
}
- // logical operator for the selection conditions
- bool logical_and = ((lineset->flags & FREESTYLE_LINESET_FE_AND) != 0);
- // negation operator
- if (lineset->flags & FREESTYLE_LINESET_FE_NOT) {
- // convert an Exclusive condition into an Inclusive equivalent using De Morgan's laws:
- // NOT (X OR Y) --> (NOT X) AND (NOT Y)
- // NOT (X AND Y) --> (NOT X) OR (NOT Y)
- for (int i = 0; i < num_edge_types; i++)
- conditions[i].value *= -1;
- logical_and = !logical_and;
+ controller->InsertStyleModule(layer_count, id_name, module_conf->script);
+ controller->toggleLayer(layer_count, true);
+ layer_count++;
+ }
+ }
+ if (G.debug & G_DEBUG_FREESTYLE) {
+ cout << endl;
+ }
+ controller->setComputeRidgesAndValleysFlag((config->flags & FREESTYLE_RIDGES_AND_VALLEYS_FLAG) ? true : false);
+ controller->setComputeSuggestiveContoursFlag((config->flags & FREESTYLE_SUGGESTIVE_CONTOURS_FLAG) ? true : false);
+ controller->setComputeMaterialBoundariesFlag((config->flags & FREESTYLE_MATERIAL_BOUNDARIES_FLAG) ? true : false);
+ break;
+ case FREESTYLE_CONTROL_EDITOR_MODE:
+ int use_ridges_and_valleys = 0;
+ int use_suggestive_contours = 0;
+ int use_material_boundaries = 0;
+ struct edge_type_condition conditions[] = {
+ {FREESTYLE_FE_SILHOUETTE, 0},
+ {FREESTYLE_FE_BORDER, 0},
+ {FREESTYLE_FE_CREASE, 0},
+ {FREESTYLE_FE_RIDGE_VALLEY, 0},
+ {FREESTYLE_FE_SUGGESTIVE_CONTOUR, 0},
+ {FREESTYLE_FE_MATERIAL_BOUNDARY, 0},
+ {FREESTYLE_FE_CONTOUR, 0},
+ {FREESTYLE_FE_EXTERNAL_CONTOUR, 0},
+ {FREESTYLE_FE_EDGE_MARK, 0}
+ };
+ int num_edge_types = sizeof(conditions) / sizeof(struct edge_type_condition);
+ if (G.debug & G_DEBUG_FREESTYLE) {
+ cout << "Linesets:" << endl;
+ }
+ for (FreestyleLineSet *lineset = (FreestyleLineSet *)config->linesets.first;
+ lineset;
+ lineset = lineset->next)
+ {
+ if (lineset->flags & FREESTYLE_LINESET_ENABLED) {
+ if (G.debug & G_DEBUG_FREESTYLE) {
+ cout << " " << layer_count+1 << ": " << lineset->name << " - " <<
+ (lineset->linestyle ? (lineset->linestyle->id.name + 2) : "<NULL>") << endl;
}
- if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
- FREESTYLE_FE_RIDGE_VALLEY, true))
- {
+ char *buffer = create_lineset_handler(srl->name, lineset->name);
+ controller->InsertStyleModule(layer_count, lineset->name, buffer);
+ controller->toggleLayer(layer_count, true);
+ MEM_freeN(buffer);
+ if (!(lineset->selection & FREESTYLE_SEL_EDGE_TYPES) || !lineset->edge_types) {
++use_ridges_and_valleys;
- }
- if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
- FREESTYLE_FE_SUGGESTIVE_CONTOUR, true))
- {
++use_suggestive_contours;
- }
- if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
- FREESTYLE_FE_MATERIAL_BOUNDARY, true))
- {
++use_material_boundaries;
}
+ else {
+ // conditions for feature edge selection by edge types
+ for (int i = 0; i < num_edge_types; i++) {
+ if (!(lineset->edge_types & conditions[i].edge_type))
+ conditions[i].value = 0; // no condition specified
+ else if (!(lineset->exclude_edge_types & conditions[i].edge_type))
+ conditions[i].value = 1; // condition: X
+ else
+ conditions[i].value = -1; // condition: NOT X
+ }
+ // logical operator for the selection conditions
+ bool logical_and = ((lineset->flags & FREESTYLE_LINESET_FE_AND) != 0);
+ // negation operator
+ if (lineset->flags & FREESTYLE_LINESET_FE_NOT) {
+ // convert an Exclusive condition into an Inclusive equivalent using De Morgan's laws:
+ // NOT (X OR Y) --> (NOT X) AND (NOT Y)
+ // NOT (X AND Y) --> (NOT X) OR (NOT Y)
+ for (int i = 0; i < num_edge_types; i++)
+ conditions[i].value *= -1;
+ logical_and = !logical_and;
+ }
+ if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
+ FREESTYLE_FE_RIDGE_VALLEY, true))
+ {
+ ++use_ridges_and_valleys;
+ }
+ if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
+ FREESTYLE_FE_SUGGESTIVE_CONTOUR, true))
+ {
+ ++use_suggestive_contours;
+ }
+ if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
+ FREESTYLE_FE_MATERIAL_BOUNDARY, true))
+ {
+ ++use_material_boundaries;
+ }
+ }
+ layer_count++;
}
- layer_count++;
}
- }
- controller->setComputeRidgesAndValleysFlag(use_ridges_and_valleys > 0);
- controller->setComputeSuggestiveContoursFlag(use_suggestive_contours > 0);
- controller->setComputeMaterialBoundariesFlag(use_material_boundaries > 0);
- break;
+ controller->setComputeRidgesAndValleysFlag(use_ridges_and_valleys > 0);
+ controller->setComputeSuggestiveContoursFlag(use_suggestive_contours > 0);
+ controller->setComputeMaterialBoundariesFlag(use_material_boundaries > 0);
+ break;
}
// set parameters
@@ -541,24 +584,24 @@ static int displayed_layer_count(ViewLayer *view_layer)
int count = 0;
switch (view_layer->freestyle_config.mode) {
- case FREESTYLE_CONTROL_SCRIPT_MODE:
- for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)view_layer->freestyle_config.modules.first;
- module;
- module = module->next)
- {
- if (module->script && module->is_displayed)
- count++;
- }
- break;
- case FREESTYLE_CONTROL_EDITOR_MODE:
- for (FreestyleLineSet *lineset = (FreestyleLineSet *)view_layer->freestyle_config.linesets.first;
- lineset;
- lineset = lineset->next)
- {
- if (lineset->flags & FREESTYLE_LINESET_ENABLED)
- count++;
- }
- break;
+ case FREESTYLE_CONTROL_SCRIPT_MODE:
+ for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)view_layer->freestyle_config.modules.first;
+ module;
+ module = module->next)
+ {
+ if (module->script && module->is_displayed)
+ count++;
+ }
+ break;
+ case FREESTYLE_CONTROL_EDITOR_MODE:
+ for (FreestyleLineSet *lineset = (FreestyleLineSet *)view_layer->freestyle_config.linesets.first;
+ lineset;
+ lineset = lineset->next)
+ {
+ if (lineset->flags & FREESTYLE_LINESET_ENABLED)
+ count++;
+ }
+ break;
}
return count;
}