[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45525] branches/soc-2008-mxcurioni: New options for specifying unit line thickness.

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Wed Apr 11 01:53:46 CEST 2012


Revision: 45525
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45525
Author:   kjym3
Date:     2012-04-10 23:53:46 +0000 (Tue, 10 Apr 2012)
Log Message:
-----------
New options for specifying unit line thickness.

The Post Processing tab in the Render buttons has new Line Thickness options for
defining unit line thickness in two different modes as follows:

1. Absolute mode: The unit line thickness is given by a user-specified number
in units of pixels.  The default value is 1.

2. Relative mode: The unit line thickness is scaled by the proportion of the
present vertical image resolution to 480 pixels.  For instance, the unit line
thickness is 1 with the image height set to 480, 1.5 with 720, and 2 with 960.

Modified Paths:
--------------
    branches/soc-2008-mxcurioni/release/scripts/startup/bl_ui/properties_render.py
    branches/soc-2008-mxcurioni/source/blender/blenloader/intern/readfile.c
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.h
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppView.h
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.h
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.h
    branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_scene_types.h
    branches/soc-2008-mxcurioni/source/blender/makesrna/intern/rna_scene.c

Modified: branches/soc-2008-mxcurioni/release/scripts/startup/bl_ui/properties_render.py
===================================================================
--- branches/soc-2008-mxcurioni/release/scripts/startup/bl_ui/properties_render.py	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/release/scripts/startup/bl_ui/properties_render.py	2012-04-10 23:53:46 UTC (rev 45525)
@@ -946,9 +946,18 @@
         layout.separator()
 
         split = layout.split()
+
         col = split.column()
         col.prop(rd, "use_freestyle", text="Freestyle")
+        sub = col.column()
+        sub.label(text="Line Thickness:")
+        sub.active = rd.use_freestyle
+        sub.row().prop(rd, "line_thickness_mode", expand=True)
+        subrow = sub.row()
+        subrow.active = (rd.line_thickness_mode == "ABSOLUTE")
+        subrow.prop(rd, "unit_line_thickness")
 
+
 class RENDER_PT_stamp(RenderButtonsPanel, Panel):
     bl_label = "Stamp"
     bl_options = {'DEFAULT_CLOSED'}

Modified: branches/soc-2008-mxcurioni/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/blenloader/intern/readfile.c	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/blenloader/intern/readfile.c	2012-04-10 23:53:46 UTC (rev 45525)
@@ -13558,6 +13558,10 @@
 		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;

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.cpp	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.cpp	2012-04-10 23:53:46 UTC (rev 45525)
@@ -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 @@
   return _pViewer->border();
 }
 
+float AppCanvas::thickness() const
+{
+  return _pViewer->thickness();
+}
+
 BBox<Vec3r> AppCanvas::scene3DBBox() const 
 {
   return _pViewer->scene3DBBox();
@@ -100,7 +106,12 @@
 
 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()

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.h	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppCanvas.h	2012-04-10 23:53:46 UTC (rev 45525)
@@ -41,6 +41,7 @@
   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;}

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppView.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppView.h	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/application/AppView.h	2012-04-10 23:53:46 UTC (rev 45525)
@@ -30,15 +30,18 @@
 		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:
 

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp	2012-04-10 23:53:46 UTC (rev 45525)
@@ -107,6 +107,16 @@
 		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 @@
 		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){

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.cpp	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.cpp	2012-04-10 23:53:46 UTC (rev 45525)
@@ -746,6 +746,17 @@
   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)

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.h	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/Stroke.h	2012-04-10 23:53:46 UTC (rev 45525)
@@ -470,6 +470,7 @@
   void UpdateLength();
 
   /* Render method */
+  void ScaleThickness(float iFactor);
   void Render(const StrokeRenderer *iRenderer );
   void RenderBasic(const StrokeRenderer *iRenderer );
 

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.cpp	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.cpp	2012-04-10 23:53:46 UTC (rev 45525)
@@ -28,6 +28,15 @@
   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();

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.h	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/stroke/StrokeLayer.h	2012-04-10 23:53:46 UTC (rev 45525)
@@ -54,6 +54,7 @@
   virtual ~StrokeLayer() ;
 
   /*! Render method */
+  void ScaleThickness(float iFactor);
   void Render(const StrokeRenderer *iRenderer );
   void RenderBasic(const StrokeRenderer *iRenderer );
 

Modified: branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_scene_types.h	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/makesdna/DNA_scene_types.h	2012-04-10 23:53:46 UTC (rev 45525)
@@ -526,6 +526,10 @@
 	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 @@
 /* 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 */
 
 

Modified: branches/soc-2008-mxcurioni/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/makesrna/intern/rna_scene.c	2012-04-10 21:33:43 UTC (rev 45524)
+++ branches/soc-2008-mxcurioni/source/blender/makesrna/intern/rna_scene.c	2012-04-10 23:53:46 UTC (rev 45525)
@@ -3648,6 +3648,11 @@
 		{0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
 		{0, NULL, 0, NULL, NULL}};
 
+	static EnumPropertyItem freestyle_thickness_items[] = {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list