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:
Diffstat (limited to 'source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp')
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp106
1 files changed, 102 insertions, 4 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index 5af350e3ad0..3aa399f4af3 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -17,6 +17,9 @@ extern "C" {
#include "DNA_camera_types.h"
#include "DNA_freestyle_types.h"
+#include "BKE_global.h"
+#include "BKE_library.h"
+#include "BKE_linestyle.h"
#include "BKE_main.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -310,15 +313,26 @@ extern "C" {
{
FreestyleConfig* config = &srl->freestyleConfig;
+ config->mode = FREESTYLE_CONTROL_SCRIPT_MODE;
+
config->modules.first = config->modules.last = NULL;
config->flags = 0;
config->sphere_radius = 1.0;
config->dkr_epsilon = 0.001;
config->crease_angle = 134.43;
+
+ config->linesets.first = config->linesets.last = NULL;
}
void FRS_free_freestyle_config( SceneRenderLayer* srl )
{
+ FreestyleLineSet *lineset;
+
+ for(lineset=(FreestyleLineSet *)srl->freestyleConfig.linesets.first; lineset; lineset=lineset->next) {
+ lineset->linestyle->id.us--;
+ lineset->linestyle = NULL;
+ }
+ BLI_freelistN( &srl->freestyleConfig.linesets );
BLI_freelistN( &srl->freestyleConfig.modules );
}
@@ -336,16 +350,100 @@ extern "C" {
BLI_freelinkN(&config->modules, module_conf);
}
- void FRS_move_up_module(FreestyleConfig *config, FreestyleModuleConfig *module_conf)
+ void FRS_move_module_up(FreestyleConfig *config, FreestyleModuleConfig *module_conf)
{
BLI_remlink(&config->modules, module_conf);
- BLI_insertlink(&config->modules, module_conf->prev->prev, module_conf);
+ BLI_insertlinkbefore(&config->modules, module_conf->prev, module_conf);
}
- void FRS_move_down_module(FreestyleConfig *config, FreestyleModuleConfig *module_conf)
+ void FRS_move_module_down(FreestyleConfig *config, FreestyleModuleConfig *module_conf)
{
BLI_remlink(&config->modules, module_conf);
- BLI_insertlink(&config->modules, module_conf->next, module_conf);
+ BLI_insertlinkafter(&config->modules, module_conf->next, module_conf);
+ }
+
+ void FRS_add_lineset(FreestyleConfig *config)
+ {
+ int lineset_index = BLI_countlist(&config->linesets);
+
+ FreestyleLineSet *lineset = (FreestyleLineSet *) MEM_callocN( sizeof(FreestyleLineSet), "Freestyle line set");
+ BLI_addtail(&config->linesets, (void *) lineset);
+ FRS_set_active_lineset_index(config, lineset_index);
+
+ lineset->linestyle = FRS_new_linestyle("LineStyle", NULL);
+ lineset->flags |= FREESTYLE_LINESET_ENABLED;
+ if (lineset_index > 0)
+ sprintf(lineset->name, "LineSet %i", lineset_index+1);
+ else
+ strcpy(lineset->name, "LineSet");
+ BLI_uniquename(&config->linesets, lineset, "FreestyleLineSet", '.', offsetof(FreestyleLineSet, name), sizeof(lineset->name));
+ }
+
+ void FRS_delete_active_lineset(FreestyleConfig *config)
+ {
+ FreestyleLineSet *lineset = FRS_get_active_lineset(config);
+
+ if (lineset) {
+ lineset->linestyle->id.us--;
+ lineset->linestyle = NULL;
+ BLI_remlink(&config->linesets, lineset);
+ MEM_freeN(lineset);
+ FRS_set_active_lineset_index(config, 0);
+ }
+ }
+
+ void FRS_move_active_lineset_up(FreestyleConfig *config)
+ {
+ FreestyleLineSet *lineset = FRS_get_active_lineset(config);
+
+ if (lineset) {
+ BLI_remlink(&config->linesets, lineset);
+ BLI_insertlinkbefore(&config->linesets, lineset->prev, lineset);
+ }
+ }
+
+ void FRS_move_active_lineset_down(FreestyleConfig *config)
+ {
+ FreestyleLineSet *lineset = FRS_get_active_lineset(config);
+
+ if (lineset) {
+ BLI_remlink(&config->linesets, lineset);
+ BLI_insertlinkafter(&config->linesets, lineset->next, lineset);
+ }
+ }
+
+ FreestyleLineSet *FRS_get_active_lineset(FreestyleConfig *config)
+ {
+ FreestyleLineSet *lineset;
+
+ for(lineset=(FreestyleLineSet *)config->linesets.first; lineset; lineset=lineset->next)
+ if(lineset->flags & FREESTYLE_LINESET_CURRENT)
+ return lineset;
+ return NULL;
+ }
+
+ short FRS_get_active_lineset_index(FreestyleConfig *config)
+ {
+ FreestyleLineSet *lineset;
+ short i;
+
+ for(lineset=(FreestyleLineSet *)config->linesets.first, i=0; lineset; lineset=lineset->next, i++)
+ if(lineset->flags & FREESTYLE_LINESET_CURRENT)
+ return i;
+ return 0;
+ }
+
+ void FRS_set_active_lineset_index(FreestyleConfig *config, short index)
+ {
+ FreestyleLineSet *lineset;
+ short i;
+
+ for(lineset=(FreestyleLineSet *)config->linesets.first, i=0; lineset; lineset=lineset->next, i++) {
+ if(i == index)
+ lineset->flags |= FREESTYLE_LINESET_CURRENT;
+ else
+ lineset->flags &= ~FREESTYLE_LINESET_CURRENT;
+ }
}
#ifdef __cplusplus