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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to