[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41770] branches/soc-2008-mxcurioni/source /blender/freestyle/intern/view_map: Fix for the view map construction not taking account of face marks.
Tamito Kajiyama
rd6t-kjym at asahi-net.or.jp
Sat Nov 12 20:08:16 CET 2011
Revision: 41770
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41770
Author: kjym3
Date: 2011-11-12 19:08:16 +0000 (Sat, 12 Nov 2011)
Log Message:
-----------
Fix for the view map construction not taking account of face marks.
Modified Paths:
--------------
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.cpp
branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.h
Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.cpp 2011-11-12 14:32:36 UTC (rev 41769)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.cpp 2011-11-12 19:08:16 UTC (rev 41770)
@@ -311,6 +311,9 @@
// maybe should test whether this face has
// also a vertex_edge configuration
WXFaceLayer * winner = sameNatureLayers[0];
+ // check face mark continuity
+ if(winner->getFace()->GetMark() != iFaceLayer.fl->getFace()->GetMark())
+ return OWXFaceLayer(0,true);
if(woeend == winner->getSmoothEdge()->woea()->twin())
return OWXFaceLayer(winner,true);
else
@@ -333,6 +336,9 @@
return OWXFaceLayer(0,true);
else{
WXFaceLayer * winner = sameNatureLayers[0];
+ // check face mark continuity
+ if(winner->getFace()->GetMark() != iFaceLayer.fl->getFace()->GetMark())
+ return OWXFaceLayer(0,true);
if(woeend == winner->getSmoothEdge()->woea()->twin())
return OWXFaceLayer(winner,true);
else
@@ -375,6 +381,9 @@
// maybe should test whether this face has
// also a vertex_edge configuration
WXFaceLayer * winner = sameNatureLayers[0];
+ // check face mark continuity
+ if(winner->getFace()->GetMark() != iFaceLayer.fl->getFace()->GetMark())
+ return OWXFaceLayer(0,true);
if(woebegin == winner->getSmoothEdge()->woeb()->twin())
return OWXFaceLayer(winner,true);
else
@@ -398,6 +407,9 @@
return OWXFaceLayer(0,true);
else{
WXFaceLayer * winner = sameNatureLayers[0];
+ // check face mark continuity
+ if(winner->getFace()->GetMark() != iFaceLayer.fl->getFace()->GetMark())
+ return OWXFaceLayer(0,true);
if(woebegin == winner->getSmoothEdge()->woeb()->twin())
return OWXFaceLayer(winner,true);
else
@@ -501,6 +513,18 @@
return true;
}
+int ViewEdgeXBuilder::retrieveFaceMarks(WXEdge *iEdge)
+{
+ WFace *aFace = iEdge->GetaFace();
+ WFace *bFace = iEdge->GetbFace();
+ int result = 0;
+ if (aFace && aFace->GetMark())
+ result += 1;
+ if (bFace && bFace->GetMark())
+ result += 2;
+ return result;
+}
+
OWXEdge ViewEdgeXBuilder::FindNextWEdge(const OWXEdge& iEdge){
if(Nature::NO_FEATURE == iEdge.e->nature())
return OWXEdge(0, true);
@@ -515,6 +539,7 @@
return 0;
+ int faceMarks = retrieveFaceMarks(iEdge.e);
vector<WEdge*>& vEdges = (v)->GetEdges();
for(vector<WEdge*>::iterator ve=vEdges.begin(),veend=vEdges.end();
ve!=veend;
@@ -526,6 +551,10 @@
if(wxe->nature() != iEdge.e->nature())
continue;
+ // check face mark continuity
+ if(retrieveFaceMarks(wxe) != faceMarks)
+ continue;
+
if(wxe->GetaVertex() == v){
// That means that the face necesarily lies on the edge left.
// So the vertex order is OK.
@@ -554,6 +583,7 @@
return 0;
+ int faceMarks = retrieveFaceMarks(iEdge.e);
vector<WEdge*>& vEdges = (v)->GetEdges();
for(vector<WEdge*>::iterator ve=vEdges.begin(),veend=vEdges.end();
ve!=veend;
@@ -565,6 +595,10 @@
if(wxe->nature() != iEdge.e->nature())
continue;
+ // check face mark continuity
+ if(retrieveFaceMarks(wxe) != faceMarks)
+ continue;
+
if(wxe->GetbVertex() == v){
return OWXEdge(wxe, true);
}else{
Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.h 2011-11-12 14:32:36 UTC (rev 41769)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/view_map/ViewEdgeXBuilder.h 2011-11-12 19:08:16 UTC (rev 41770)
@@ -193,6 +193,7 @@
// SHARP //
/*! checks whether a WEdge has already been processed or not */
bool stopSharpViewEdge(WXEdge *iFace);
+ int retrieveFaceMarks(WXEdge *iEdge);
OWXEdge FindNextWEdge(const OWXEdge& iEdge);
OWXEdge FindPreviousWEdge(const OWXEdge& iEdge);
FEdge * BuildSharpFEdge(FEdge *feprevious, const OWXEdge& iwe);
More information about the Bf-blender-cvs
mailing list