diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2010-05-23 03:56:42 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2010-05-23 03:56:42 +0400 |
commit | 7d377478c394931f1226fbbacf96e095daf18c5d (patch) | |
tree | d5fae412ade82e42bee7415d33279afc3d0b0c7e /source/blender/freestyle/intern/view_map | |
parent | b85985535dd420e50cc906bd6e7dd352cc2b8b97 (diff) |
New option to specify the angular threshold for detecting crease edges.
An entry "Crease Angle" has been added to the Layers tab of the Render
buttons, to allow users to specify an angle (between 0 and 180) used for
crease edge detection. An edge is considered a crease edge if the angle
between two faces sharing the edge is smaller than the threshold. The
default value is 134.43 degrees (for backward compatibility). Be aware
that a larger threshold leads to a larger number of feature edges and
thus a larger memory consumption.
Diffstat (limited to 'source/blender/freestyle/intern/view_map')
-rwxr-xr-x | source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp | 2 | ||||
-rwxr-xr-x | source/blender/freestyle/intern/view_map/FEdgeXDetector.h | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp b/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp index ecab4fc413c..aca7334d045 100755 --- a/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp +++ b/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp @@ -370,7 +370,7 @@ void FEdgeXDetector::ProcessCreaseEdge(WXEdge *iEdge) WXFace * fB = (WXFace *)iEdge->GetaOEdge()->GetbFace(); WVertex * aVertex = iEdge->GetaVertex(); - if((fA->GetVertexNormal(aVertex) * fB->GetVertexNormal(aVertex)) <= 0.7) // angle of 140 degrees + if((fA->GetVertexNormal(aVertex) * fB->GetVertexNormal(aVertex)) <= _creaseAngle) iEdge->AddNature(Nature::CREASE); } diff --git a/source/blender/freestyle/intern/view_map/FEdgeXDetector.h b/source/blender/freestyle/intern/view_map/FEdgeXDetector.h index e0d76b5b0f9..14a835d9cd3 100755 --- a/source/blender/freestyle/intern/view_map/FEdgeXDetector.h +++ b/source/blender/freestyle/intern/view_map/FEdgeXDetector.h @@ -60,6 +60,7 @@ public: _orthographicProjection = false; _changes = false; _kr_derivative_epsilon = 0.0; + _creaseAngle = 0.7; // angle of 134.43 degrees } virtual ~FEdgeXDetector() {} @@ -79,6 +80,23 @@ public: // CREASE virtual void processCreaseShape(WXShape* iShape); virtual void ProcessCreaseEdge(WXEdge *iEdge); + /*! Sets the minimum angle for detecting crease edges + * \param angle + * The angular threshold in degrees (between 0 and 180) for detecting crease + * edges. An edge is considered a crease edge if the angle between two faces + * sharing the edge is smaller than the given threshold. + */ + inline void setCreaseAngle(real angle) { + if (angle < 0.0) + angle = 0.0; + else if (angle > 180.0) + angle = 180.0; + angle = cos(M_PI * (180.0 - angle) / 180.0); + if (angle != _creaseAngle){ + _creaseAngle = angle; + _changes = true; + } + } // BORDER virtual void processBorderShape(WXShape* iShape); @@ -150,6 +168,7 @@ protected: bool _computeSuggestiveContours; bool _computeMaterialBoundaries; real _sphereRadius; // expressed as a ratio of the mean edge size + real _creaseAngle; // [-1, 1] compared with the inner product of face normals bool _changes; real _kr_derivative_epsilon; |