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
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenloader/intern/readfile.c4
-rwxr-xr-xsource/blender/freestyle/intern/application/AppCanvas.cpp13
-rwxr-xr-xsource/blender/freestyle/intern/application/AppCanvas.h1
-rw-r--r--source/blender/freestyle/intern/application/AppView.h3
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp12
-rwxr-xr-xsource/blender/freestyle/intern/stroke/Stroke.cpp11
-rwxr-xr-xsource/blender/freestyle/intern/stroke/Stroke.h1
-rwxr-xr-xsource/blender/freestyle/intern/stroke/StrokeLayer.cpp9
-rwxr-xr-xsource/blender/freestyle/intern/stroke/StrokeLayer.h1
-rw-r--r--source/blender/makesdna/DNA_scene_types.h8
-rw-r--r--source/blender/makesrna/intern/rna_scene.c16
11 files changed, 78 insertions, 1 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index dbb09022ddb..8d42db74051 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -13558,6 +13558,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
FreestyleLineStyle *linestyle;
for(sce = main->scene.first; sce; sce = sce->id.next) {
+ if (sce->r.line_thickness_mode == 0) {
+ sce->r.line_thickness_mode= R_LINE_THICKNESS_ABSOLUTE;
+ sce->r.unit_line_thickness= 1.f;
+ }
for(srl= sce->r.layers.first; srl; srl= srl->next) {
if (srl->freestyleConfig.mode == 0)
srl->freestyleConfig.mode= FREESTYLE_CONTROL_EDITOR_MODE;
diff --git a/source/blender/freestyle/intern/application/AppCanvas.cpp b/source/blender/freestyle/intern/application/AppCanvas.cpp
index 2895549a79c..ec83d2d9ff8 100755
--- a/source/blender/freestyle/intern/application/AppCanvas.cpp
+++ b/source/blender/freestyle/intern/application/AppCanvas.cpp
@@ -26,6 +26,7 @@
#include "../stroke/StrokeRenderer.h"
#include "AppCanvas.h"
#include "AppConfig.h"
+#include "../stroke/StyleModule.h"
#include "../system/StringUtils.h"
@@ -73,6 +74,11 @@ BBox<Vec2i> AppCanvas::border() const
return _pViewer->border();
}
+float AppCanvas::thickness() const
+{
+ return _pViewer->thickness();
+}
+
BBox<Vec3r> AppCanvas::scene3DBBox() const
{
return _pViewer->scene3DBBox();
@@ -100,7 +106,12 @@ void AppCanvas::init()
void AppCanvas::postDraw()
{
- Canvas::postDraw();
+ for (unsigned i = 0; i < _StyleModules.size(); i++) {
+ if(!_StyleModules[i]->getDisplayed() || !_Layers[i])
+ continue;
+ _Layers[i]->ScaleThickness(thickness());
+ }
+ Canvas::postDraw();
}
void AppCanvas::Erase()
diff --git a/source/blender/freestyle/intern/application/AppCanvas.h b/source/blender/freestyle/intern/application/AppCanvas.h
index 42b3c7fdb50..59ed2af3bdd 100755
--- a/source/blender/freestyle/intern/application/AppCanvas.h
+++ b/source/blender/freestyle/intern/application/AppCanvas.h
@@ -41,6 +41,7 @@ public:
virtual int width() const ;
virtual int height() const ;
virtual BBox<Vec2i> border() const ;
+ virtual float thickness() const ;
AppView *_pViewer;
inline const AppView * viewer() const {return _pViewer;}
diff --git a/source/blender/freestyle/intern/application/AppView.h b/source/blender/freestyle/intern/application/AppView.h
index d23172c9f8d..d9b53019a93 100644
--- a/source/blender/freestyle/intern/application/AppView.h
+++ b/source/blender/freestyle/intern/application/AppView.h
@@ -30,15 +30,18 @@ public:
inline unsigned int width() { return _width; }
inline unsigned int height() { return _height; }
inline BBox<Vec2i> border() { return _border; }
+ inline float thickness() { return _thickness; }
inline void setWidth( unsigned int width ) { _width = width; }
inline void setHeight( unsigned int height ) { _height = height; }
inline void setBorder( int xmin, int ymin, int xmax, int ymax ) {
_border = BBox<Vec2i>(Vec2i(xmin, ymin), Vec2i(xmax, ymax));
}
+ inline void setThickness( float thickness ) { _thickness = thickness; }
protected:
unsigned int _width, _height;
BBox<Vec2i> _border;
+ float _thickness;
public:
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index 31dc8629f92..fbcea9ca164 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -107,6 +107,16 @@ extern "C" {
int xmax = re->disprect.xmax;
int ymax = re->disprect.ymax;
+ float thickness = 1.f;
+ 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;
+ }
+
freestyle_viewport[0] = freestyle_viewport[1] = 0;
freestyle_viewport[2] = width;
freestyle_viewport[3] = height;
@@ -114,12 +124,14 @@ extern "C" {
view->setWidth( width );
view->setHeight( height );
view->setBorder( xmin, ymin, xmax, ymax );
+ view->setThickness( thickness );
cout << "\n=== Dimensions of the 2D image coordinate system ===" << endl;
cout << "Width : " << width << endl;
cout << "Height : " << height << endl;
if (re->r.mode & R_BORDER)
cout << "Border : (" << xmin << ", " << ymin << ") - (" << xmax << ", " << ymax << ")" << endl;
+ cout << "Unit line thickness : " << thickness << " pixel(s)" << endl;
}
static void init_camera(Render* re){
diff --git a/source/blender/freestyle/intern/stroke/Stroke.cpp b/source/blender/freestyle/intern/stroke/Stroke.cpp
index 0c852d0e209..3675a6c0ce2 100755
--- a/source/blender/freestyle/intern/stroke/Stroke.cpp
+++ b/source/blender/freestyle/intern/stroke/Stroke.cpp
@@ -746,6 +746,17 @@ Interface0DIterator Stroke::pointsEnd(float t) {
return verticesEnd();
}
+void Stroke::ScaleThickness(float iFactor)
+{
+ for(vertex_container::iterator it=_Vertices.begin(), itend=_Vertices.end();
+ it!=itend;
+ ++it)
+ {
+ StrokeAttribute& attr = (*it)->attribute();
+ attr.setThickness(iFactor * attr.getThicknessR(), iFactor * attr.getThicknessL());
+ }
+}
+
void Stroke::Render(const StrokeRenderer *iRenderer)
{
if(!_rep)
diff --git a/source/blender/freestyle/intern/stroke/Stroke.h b/source/blender/freestyle/intern/stroke/Stroke.h
index 1b1084b54c2..5b20bcac896 100755
--- a/source/blender/freestyle/intern/stroke/Stroke.h
+++ b/source/blender/freestyle/intern/stroke/Stroke.h
@@ -470,6 +470,7 @@ public:
void UpdateLength();
/* Render method */
+ void ScaleThickness(float iFactor);
void Render(const StrokeRenderer *iRenderer );
void RenderBasic(const StrokeRenderer *iRenderer );
diff --git a/source/blender/freestyle/intern/stroke/StrokeLayer.cpp b/source/blender/freestyle/intern/stroke/StrokeLayer.cpp
index d5fc27d3d73..93d695be406 100755
--- a/source/blender/freestyle/intern/stroke/StrokeLayer.cpp
+++ b/source/blender/freestyle/intern/stroke/StrokeLayer.cpp
@@ -28,6 +28,15 @@ StrokeLayer::~StrokeLayer()
clear();
}
+void StrokeLayer::ScaleThickness(float iFactor)
+{
+ for(StrokeLayer::stroke_container::iterator s=_strokes.begin(), send=_strokes.end();
+ s!=send;
+ ++s){
+ (*s)->ScaleThickness(iFactor);
+ }
+}
+
void StrokeLayer::Render(const StrokeRenderer *iRenderer )
{
for(StrokeLayer::stroke_container::iterator s=_strokes.begin(), send=_strokes.end();
diff --git a/source/blender/freestyle/intern/stroke/StrokeLayer.h b/source/blender/freestyle/intern/stroke/StrokeLayer.h
index dbe9ea5a75c..eb8e7891bdd 100755
--- a/source/blender/freestyle/intern/stroke/StrokeLayer.h
+++ b/source/blender/freestyle/intern/stroke/StrokeLayer.h
@@ -54,6 +54,7 @@ public:
virtual ~StrokeLayer() ;
/*! Render method */
+ void ScaleThickness(float iFactor);
void Render(const StrokeRenderer *iRenderer );
void RenderBasic(const StrokeRenderer *iRenderer );
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 471226ec23d..109608b5326 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -526,6 +526,10 @@ typedef struct RenderData {
float pad2;
struct Text *dometext DNA_DEPRECATED; // XXX deprecated since 2.5
+ /* Freestyle line thickness options */
+ int line_thickness_mode;
+ float unit_line_thickness; /* in pixels */
+
/* render engine */
char engine[32];
} RenderData;
@@ -1278,6 +1282,10 @@ typedef struct Scene {
/* simplify_flag */
#define R_SIMPLE_NO_TRIANGULATE 1
+/* line_thickness_mode */
+#define R_LINE_THICKNESS_ABSOLUTE 1
+#define R_LINE_THICKNESS_RELATIVE 2
+
/* sequencer seq_prev_type seq_rend_type */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index b565c65c071..ac60c11ecde 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -3648,6 +3648,11 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
{0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
{0, NULL, 0, NULL, NULL}};
+ static EnumPropertyItem freestyle_thickness_items[] = {
+ {R_LINE_THICKNESS_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Specify unit line thickness in pixels"},
+ {R_LINE_THICKNESS_RELATIVE, "RELATIVE", 0, "Relative", "Unit line thickness is scaled by the proportion of the present vertical image resolution to 480 pixels"},
+ {0, NULL, 0, NULL, NULL}};
+
rna_def_scene_ffmpeg_settings(brna);
#ifdef WITH_QUICKTIME
rna_def_scene_quicktime_settings(brna);
@@ -4319,6 +4324,17 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", R_SIMPLE_NO_TRIANGULATE);
RNA_def_property_ui_text(prop, "Skip Quad to Triangles", "Disable non-planar quads being triangulated");
+ /* Freestyle line thickness options */
+ prop = RNA_def_property(srna, "line_thickness_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "line_thickness_mode");
+ RNA_def_property_enum_items(prop, freestyle_thickness_items);
+ RNA_def_property_ui_text(prop, "Line Thickness Mode", "Line thickness mode for Freestyle line drawing");
+
+ prop = RNA_def_property(srna, "unit_line_thickness", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "unit_line_thickness");
+ RNA_def_property_range(prop, 0.f, 10000.f);
+ RNA_def_property_ui_text(prop, "Unit Line Thickness", "Unit line thickness in pixels");
+
/* Scene API */
RNA_api_scene_render(srna);
}