[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