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/view_map')
-rwxr-xr-xsource/blender/freestyle/intern/view_map/FEdgeXDetector.cpp2
-rwxr-xr-xsource/blender/freestyle/intern/view_map/FEdgeXDetector.h5
-rwxr-xr-xsource/blender/freestyle/intern/view_map/ViewMapBuilder.cpp45
-rwxr-xr-xsource/blender/freestyle/intern/view_map/ViewMapBuilder.h4
4 files changed, 50 insertions, 6 deletions
diff --git a/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp b/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
index 1cbed8a87c6..1d52f37236e 100755
--- a/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
+++ b/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
@@ -42,6 +42,8 @@ void FEdgeXDetector::processShapes(WingedEdge& we) {
for(vector<WShape*>::const_iterator it = wshapes.begin();
it != wshapes.end();
it++){
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
wxs = dynamic_cast<WXShape*>(*it);
wxs->bbox(Min, Max);
_bbox_diagonal = (Max-Min).norm();
diff --git a/source/blender/freestyle/intern/view_map/FEdgeXDetector.h b/source/blender/freestyle/intern/view_map/FEdgeXDetector.h
index d73a086f81d..2fd6a4a1e8f 100755
--- a/source/blender/freestyle/intern/view_map/FEdgeXDetector.h
+++ b/source/blender/freestyle/intern/view_map/FEdgeXDetector.h
@@ -38,6 +38,7 @@
# include "../winged_edge/WXEdge.h"
# include "../winged_edge/Curvature.h"
# include "../system/ProgressBar.h"
+# include "../system/RenderMonitor.h"
using namespace Geometry;
@@ -50,6 +51,7 @@ public:
FEdgeXDetector() {
_pProgressBar = 0;
+ _pRenderMonitor = 0;
_computeViewIndependant = true;
_bbox_diagonal = 1.0;
_meanEdgeSize = 0;
@@ -165,6 +167,8 @@ public:
inline void setProgressBar(ProgressBar *iProgressBar) {_pProgressBar = iProgressBar;}
+ inline void setRenderMonitor(RenderMonitor *iRenderMonitor) {_pRenderMonitor = iRenderMonitor;}
+
protected:
Vec3r _Viewpoint;
@@ -193,6 +197,7 @@ protected:
real _kr_derivative_epsilon;
ProgressBar *_pProgressBar;
+ RenderMonitor *_pRenderMonitor;
};
#endif // FEDGEDXETECTOR_H
diff --git a/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp b/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp
index 242b769e8b5..d503daa3696 100755
--- a/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp
+++ b/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp
@@ -378,7 +378,7 @@ cout << "\t\tIs occluder" << endl;
// a QI of 22 because 3 out of 6 occluders have QI <= 22.
template <typename G, typename I>
-static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
+static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilon, RenderMonitor *iRenderMonitor)
{
vector<ViewEdge*>& vedges = ioViewMap->ViewEdges();
@@ -391,6 +391,8 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
unsigned maxIndex, maxCard;
unsigned qiMajority;
for(vector<ViewEdge*>::iterator ve=vedges.begin(), veend=vedges.end(); ve!=veend; ve++) {
+ if (iRenderMonitor && iRenderMonitor->testBreak())
+ break;
#if logging > 0
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
#endif
@@ -538,7 +540,7 @@ cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() <<
}
template <typename G, typename I>
-static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
+static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon, RenderMonitor *iRenderMonitor)
{
vector<ViewEdge*>& vedges = ioViewMap->ViewEdges();
@@ -551,6 +553,8 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
unsigned maxIndex, maxCard;
unsigned qiMajority;
for(vector<ViewEdge*>::iterator ve=vedges.begin(), veend=vedges.end(); ve!=veend; ve++) {
+ if (iRenderMonitor && iRenderMonitor->testBreak())
+ break;
#if logging > 0
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
#endif
@@ -1115,6 +1119,9 @@ void ViewMapBuilder::computeInitialViewEdges(WingedEdge& we)
for (vector<WShape*>::const_iterator it = wshapes.begin();
it != wshapes.end();
it++) {
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
// create the embedding
psShape = new SShape;
psShape->setId((*it)->GetId());
@@ -1151,6 +1158,8 @@ void ViewMapBuilder::computeCusps(ViewMap *ioViewMap){
for(;
ve!=veend;
++ve){
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
if((!((*ve)->getNature() & Nature::SILHOUETTE)) || (!((*ve)->fedgeA()->isSmooth())))
continue;
FEdge *fe = (*ve)->fedgeA();
@@ -1236,10 +1245,10 @@ void ViewMapBuilder::ComputeCumulativeVisibility(ViewMap *ioViewMap,
if ( _orthographicProjection ) {
BoxGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeCumulativeVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeCumulativeVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
} else {
SphericalGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeCumulativeVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeCumulativeVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
}
}
@@ -1265,10 +1274,10 @@ void ViewMapBuilder::ComputeDetailedVisibility(ViewMap *ioViewMap,
if ( _orthographicProjection ) {
BoxGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeDetailedVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeDetailedVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
} else {
SphericalGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeDetailedVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeDetailedVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
}
}
@@ -1378,6 +1387,8 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
ve!=veend;
ve++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
#if logging > 0
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
#endif
@@ -1525,6 +1536,9 @@ void ViewMapBuilder::ComputeFastRayCastingVisibility(ViewMap *ioViewMap, real ep
ve!=veend;
ve++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
festart = (*ve)->fedgeA();
fe = (*ve)->fedgeA();
qiMajority = 1;
@@ -1653,6 +1667,9 @@ void ViewMapBuilder::ComputeVeryFastRayCastingVisibility(ViewMap *ioViewMap, rea
ve!=veend;
ve++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
set<ViewShape*> occluders;
fe = (*ve)->fedgeA();
@@ -2136,6 +2153,9 @@ void ViewMapBuilder::ComputeSweepLineIntersections(ViewMap *ioViewMap, real epsi
sv!=svend;
sv++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
const vector<FEdge*>& vedges = (*sv)->fedges();
for(vector<FEdge*>::const_iterator sve=vedges.begin(), sveend=vedges.end();
@@ -2159,6 +2179,19 @@ void ViewMapBuilder::ComputeSweepLineIntersections(ViewMap *ioViewMap, real epsi
vsegments.clear();
}
+ if (_pRenderMonitor && _pRenderMonitor->testBreak()) {
+ // delete segments
+ if(!segments.empty()){
+ vector<segment* >::iterator s, send;
+ for(s=segments.begin(),send=segments.end();
+ s!=send;
+ s++){
+ delete *s;
+ }
+ }
+ return;
+ }
+
// reset userdata:
for(fe=ioEdges.begin(), fend=ioEdges.end();
fe!=fend;
diff --git a/source/blender/freestyle/intern/view_map/ViewMapBuilder.h b/source/blender/freestyle/intern/view_map/ViewMapBuilder.h
index 2e37a41df3c..a41df92062e 100755
--- a/source/blender/freestyle/intern/view_map/ViewMapBuilder.h
+++ b/source/blender/freestyle/intern/view_map/ViewMapBuilder.h
@@ -40,6 +40,7 @@
# include "../geometry/GeomUtils.h"
# include "../geometry/Grid.h"
# include "../system/ProgressBar.h"
+# include "../system/RenderMonitor.h"
# include "../geometry/SweepLine.h"
# include "ViewMap.h"
# include "SilhouetteGeomEngine.h"
@@ -58,6 +59,7 @@ private:
ViewMap * _ViewMap; // result
//SilhouetteGeomEngine _GeomEngine;
ProgressBar *_pProgressBar;
+ RenderMonitor *_pRenderMonitor;
Vec3r _viewpoint;
bool _orthographicProjection;
Grid* _Grid;
@@ -91,6 +93,7 @@ public:
inline ViewMapBuilder()
{
_pProgressBar = 0;
+ _pRenderMonitor = 0;
_Grid = 0;
_currentId = 1;
_currentFId = 0;
@@ -185,6 +188,7 @@ public:
/*! Modifiers */
inline void setProgressBar(ProgressBar *iProgressBar) {_pProgressBar = iProgressBar;}
+ inline void setRenderMonitor(RenderMonitor *iRenderMonitor) {_pRenderMonitor = iRenderMonitor;}
inline void setEnableQI(bool iBool) {_EnableQI = iBool;}
protected: