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/winged_edge/WEdge.h')
-rwxr-xr-xsource/blender/freestyle/intern/winged_edge/WEdge.h35
1 files changed, 31 insertions, 4 deletions
diff --git a/source/blender/freestyle/intern/winged_edge/WEdge.h b/source/blender/freestyle/intern/winged_edge/WEdge.h
index ebf26cd6d23..abb6263ae69 100755
--- a/source/blender/freestyle/intern/winged_edge/WEdge.h
+++ b/source/blender/freestyle/intern/winged_edge/WEdge.h
@@ -32,6 +32,7 @@
# include <vector>
# include <iterator>
+# include <math.h>
# include "../system/FreestyleConfig.h"
# include "../geometry/Geom.h"
# include "../scene_graph/FrsMaterial.h"
@@ -295,7 +296,11 @@ protected:
WFace *_pbFace; // when following the edge, face on the left
WEdge *_pOwner; // Edge
+ Vec3r _vec;
+ real _angle;
+
public:
+
void *userdata;
inline WOEdge()
{
@@ -326,6 +331,9 @@ public:
inline WFace *GetaFace() {return _paFace;}
inline WFace *GetbFace() {return _pbFace;}
inline WEdge *GetOwner() {return _pOwner;}
+
+ inline const Vec3r& GetVec() { return _vec; }
+ inline const real GetAngle() { return _angle; }
/*! modifiers */
@@ -333,10 +341,11 @@ public:
// inline void SetbCWEdge(WOEdge *pe) {_pbCWEdge = pe;}
// inline void SetaCCWEdge(WOEdge *pe) {_paCCWEdge = pe;}
// inline void SetbCCCWEdge(WOEdge *pe) {_pbCCWEdge = pe;}
- inline void setaVertex(WVertex *pv) {_paVertex = pv;}
- inline void setbVertex(WVertex *pv) {_pbVertex = pv;}
- inline void setaFace(WFace *pf) {_paFace = pf;}
- inline void setbFace(WFace *pf) {_pbFace = pf;}
+ inline void setVecAndAngle();
+ inline void setaVertex(WVertex *pv) {_paVertex = pv; setVecAndAngle(); }
+ inline void setbVertex(WVertex *pv) {_pbVertex = pv; setVecAndAngle(); }
+ inline void setaFace(WFace *pf) {_paFace = pf; setVecAndAngle(); }
+ inline void setbFace(WFace *pf) {_pbFace = pf; setVecAndAngle(); }
inline void setOwner(WEdge *pe) {_pOwner = pe;}
/*! Retrieves the list of edges in CW order */
@@ -955,4 +964,22 @@ void WOEdge::RetrieveCWOrderedEdges(vector<WEdge*>& oEdges)
} while((currentOEdge != NULL) && (currentOEdge->GetOwner() != GetOwner()));
}
+inline void WOEdge::setVecAndAngle() {
+ if ( _paVertex != NULL && _pbVertex != NULL ) {
+ _vec = _pbVertex->GetVertex() - _paVertex->GetVertex();
+ if ( _paFace != NULL && _pbFace != NULL ) {
+ real sine = (_pbFace->GetNormal() ^ _paFace->GetNormal()) * _vec / _vec.norm() ;
+ if(sine >= 1.0) {
+ _angle = M_PI / 2.0 ;
+ return;
+ }
+ if(sine <= -1.0) {
+ _angle = -M_PI / 2.0 ;
+ return;
+ }
+ _angle = ::asin(sine);
+ }
+ }
+}
+
#endif // WEDGE_H