New command-line option --debug-freestyle to enable verbose debug messages
on the console during Freestyle rendering. The debug prints are turned off by default now. Errors are still printed on the console. A patch set implementing this functionality was provided by Bastien Montagne. Many thanks! :)
This commit is contained in:
parent
699da2fb0d
commit
ec78eb353f
@ -1225,8 +1225,10 @@ def process(layer_name, lineset_name):
|
||||
thickness_position = linestyle.thickness_position
|
||||
else:
|
||||
thickness_position = "CENTER"
|
||||
print("Warning: Thickness poisition options are applied when chaining is disabled")
|
||||
print(" or the Plain chaining is used with the Same Object option enabled.")
|
||||
import bpy
|
||||
if bpy.app.debug_freestyle:
|
||||
print("Warning: Thickness position options are applied when chaining is disabled")
|
||||
print(" or the Plain chaining is used with the Same Object option enabled.")
|
||||
shaders_list.append(BaseColorShader(color.r, color.g, color.b, linestyle.alpha))
|
||||
shaders_list.append(BaseThicknessShader(linestyle.thickness, thickness_position,
|
||||
linestyle.thickness_ratio))
|
||||
|
@ -132,10 +132,12 @@ enum {
|
||||
G_DEBUG_EVENTS = (1 << 3), /* input/window/screen events */
|
||||
G_DEBUG_HANDLERS = (1 << 4), /* events handling */
|
||||
G_DEBUG_WM = (1 << 5), /* operator, undo */
|
||||
G_DEBUG_JOBS = (1 << 6) /* jobs time profiling */
|
||||
G_DEBUG_JOBS = (1 << 6), /* jobs time profiling */
|
||||
G_DEBUG_FREESTYLE = (1 << 7), /* freestyle messages */
|
||||
};
|
||||
|
||||
#define G_DEBUG_ALL (G_DEBUG | G_DEBUG_FFMPEG | G_DEBUG_PYTHON | G_DEBUG_EVENTS | G_DEBUG_WM | G_DEBUG_JOBS)
|
||||
#define G_DEBUG_ALL (G_DEBUG | G_DEBUG_FFMPEG | G_DEBUG_PYTHON | G_DEBUG_EVENTS | G_DEBUG_WM | G_DEBUG_JOBS | \
|
||||
G_DEBUG_FREESTYLE)
|
||||
|
||||
|
||||
/* G.fileflags */
|
||||
|
@ -145,8 +145,12 @@ void AppCanvas::readColorPixels(int x,int y,int w, int h, RGBImage& oImage) cons
|
||||
int recty = _pass_z.height;
|
||||
float xfac = ((float)rectx) / ((float)(xmax - xmin));
|
||||
float yfac = ((float)recty) / ((float)(ymax - ymin));
|
||||
//printf("readColorPixels %d x %d @ (%d, %d) in %d x %d [%d x %d] -- %d x %d @ %d%%\n", w, h, x, y, xsch, ysch,
|
||||
// xmax - xmin, ymax - ymin, rectx, recty, (int)(xfac * 100.0f));
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("readColorPixels %d x %d @ (%d, %d) in %d x %d [%d x %d] -- %d x %d @ %d%%\n", w, h, x, y, xsch, ysch,
|
||||
xmax - xmin, ymax - ymin, rectx, recty, (int)(xfac * 100.0f));
|
||||
}
|
||||
#endif
|
||||
int ii, jj;
|
||||
for (int j = 0; j < h; j++) {
|
||||
jj = (int)((y - ymin + j) * yfac);
|
||||
@ -178,8 +182,12 @@ void AppCanvas::readDepthPixels(int x,int y,int w, int h, GrayImage& oImage) con
|
||||
int recty = _pass_z.height;
|
||||
float xfac = ((float)rectx) / ((float)(xmax - xmin));
|
||||
float yfac = ((float)recty) / ((float)(ymax - ymin));
|
||||
//printf("readDepthPixels %d x %d @ (%d, %d) in %d x %d [%d x %d] -- %d x %d @ %d%%\n", w, h, x, y, xsch, ysch,
|
||||
// xmax - xmin, ymax - ymin, rectx, recty, (int)(xfac * 100.0f));
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("readDepthPixels %d x %d @ (%d, %d) in %d x %d [%d x %d] -- %d x %d @ %d%%\n", w, h, x, y, xsch, ysch,
|
||||
xmax - xmin, ymax - ymin, rectx, recty, (int)(xfac * 100.0f));
|
||||
}
|
||||
#endif
|
||||
int ii, jj;
|
||||
for (int j = 0; j < h; j++) {
|
||||
jj = (int)((y - ymin + j) * yfac);
|
||||
|
@ -68,6 +68,8 @@
|
||||
#include "../blender_interface/BlenderStrokeRenderer.h"
|
||||
#include "../blender_interface/BlenderStyleModule.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
// XXX Not inside an "extern C" block???
|
||||
#include "DNA_freestyle_types.h"
|
||||
|
||||
@ -227,19 +229,26 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer* srl)
|
||||
NodeGroup *blenderScene = loader.Load();
|
||||
|
||||
if (blenderScene == NULL) {
|
||||
cout << "Cannot load scene" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Cannot load scene" << endl;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (blenderScene->numberOfChildren() < 1) {
|
||||
cout << "Empty scene" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Empty scene" << endl;
|
||||
}
|
||||
blenderScene->destroy();
|
||||
delete blenderScene;
|
||||
return 1;
|
||||
}
|
||||
|
||||
cout << "Scene loaded" << endl;
|
||||
printf("Mesh cleaning : %lf\n", _Chrono.stop());
|
||||
real duration = _Chrono.stop();
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Scene loaded" << endl;
|
||||
printf("Mesh cleaning : %lf\n", duration);
|
||||
}
|
||||
_SceneNumFaces += loader.numFacesRead();
|
||||
|
||||
if (loader.minEdgeSize() < _minEdgeSize) {
|
||||
@ -267,7 +276,10 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer* srl)
|
||||
blenderScene->accept(wx_builder);
|
||||
_winged_edge = wx_builder.getWingedEdge();
|
||||
|
||||
printf("WEdge building : %lf\n", _Chrono.stop());
|
||||
duration = _Chrono.stop();
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("WEdge building : %lf\n", duration);
|
||||
}
|
||||
|
||||
#if 0
|
||||
_pView->setDebug(_DebugNode);
|
||||
@ -288,9 +300,11 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer* srl)
|
||||
|
||||
_ListOfModels.push_back("Blender_models");
|
||||
|
||||
cout << "Triangles nb : " << _SceneNumFaces << endl;
|
||||
_bboxDiag = (_RootNode->bbox().getMax()-_RootNode->bbox().getMin()).norm();
|
||||
cout << "Bounding Box : " << _bboxDiag << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Triangles nb : " << _SceneNumFaces << endl;
|
||||
cout << "Bounding Box : " << _bboxDiag << endl;
|
||||
}
|
||||
|
||||
ClearRootNode();
|
||||
|
||||
@ -430,37 +444,66 @@ void Controller::ComputeViewMap()
|
||||
// 3D context is on.
|
||||
Vec3r vp(freestyle_viewpoint[0], freestyle_viewpoint[1], freestyle_viewpoint[2]);
|
||||
|
||||
//cout << "mv" << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "mv" << endl;
|
||||
}
|
||||
#endif
|
||||
real mv[4][4];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
mv[i][j] = freestyle_mv[i][j];
|
||||
//cout << mv[i][j] << " ";
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << mv[i][j] << " ";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
//cout << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//cout << "\nproj" << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\nproj" << endl;
|
||||
}
|
||||
#endif
|
||||
real proj[4][4];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
proj[i][j] = freestyle_proj[i][j];
|
||||
//cout << proj[i][j] << " ";
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << proj[i][j] << " ";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
//cout << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int viewport[4];
|
||||
for (int i = 0; i < 4; i++)
|
||||
viewport[i] = freestyle_viewport[i];
|
||||
|
||||
//cout << "\nfocal:" << _pView->GetFocalLength() << endl << endl;
|
||||
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\nfocal:" << _pView->GetFocalLength() << endl << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Flag the WXEdge structure for silhouette edge detection:
|
||||
//----------------------------------------------------------
|
||||
|
||||
cout << "\n=== Detecting silhouette edges ===" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\n=== Detecting silhouette edges ===" << endl;
|
||||
}
|
||||
_Chrono.start();
|
||||
|
||||
edgeDetector.setViewpoint(Vec3r(vp));
|
||||
@ -476,7 +519,9 @@ void Controller::ComputeViewMap()
|
||||
edgeDetector.processShapes(*_winged_edge);
|
||||
|
||||
real duration = _Chrono.stop();
|
||||
printf("Feature lines : %lf\n", duration);
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("Feature lines : %lf\n", duration);
|
||||
}
|
||||
|
||||
if (_pRenderMonitor->testBreak())
|
||||
return;
|
||||
@ -500,13 +545,17 @@ void Controller::ComputeViewMap()
|
||||
#endif
|
||||
sTesselator3d.setNature(_edgeTesselationNature);
|
||||
|
||||
cout << "\n=== Building the view map ===" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\n=== Building the view map ===" << endl;
|
||||
}
|
||||
_Chrono.start();
|
||||
// Build View Map
|
||||
_ViewMap = vmBuilder.BuildViewMap(*_winged_edge, _VisibilityAlgo, _EPSILON, _RootNode->bbox(), _SceneNumFaces);
|
||||
_ViewMap->setScene3dBBox(_RootNode->bbox());
|
||||
|
||||
printf("ViewMap edge count : %i\n", _ViewMap->viewedges_size());
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("ViewMap edge count : %i\n", _ViewMap->viewedges_size());
|
||||
}
|
||||
|
||||
// Tesselate the 3D edges:
|
||||
_SilhouetteNode = sTesselator3d.Tesselate(_ViewMap);
|
||||
@ -519,7 +568,9 @@ void Controller::ComputeViewMap()
|
||||
#endif
|
||||
|
||||
duration = _Chrono.stop();
|
||||
printf("ViewMap building : %lf\n", duration);
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("ViewMap building : %lf\n", duration);
|
||||
}
|
||||
|
||||
_pView->AddSilhouette(_SilhouetteNode);
|
||||
#if 0
|
||||
@ -595,8 +646,11 @@ void Controller::ComputeSteerableViewMap()
|
||||
#endif
|
||||
pm = offscreenBuffer.renderPixmap(_pView->width(), _pView->height());
|
||||
|
||||
if (pm.isNull())
|
||||
cout << "BuildViewMap Warning: couldn't render the steerable ViewMap" << endl;
|
||||
if (pm.isNull()) {
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "BuildViewMap Warning: couldn't render the steerable ViewMap" << endl;
|
||||
}
|
||||
}
|
||||
//pm.save(QString("steerable") + QString::number(i) + QString(".bmp"), "BMP");
|
||||
// FIXME!! Lost of time !
|
||||
qimg = pm.toImage();
|
||||
@ -770,12 +824,16 @@ void Controller::DrawStrokes()
|
||||
if (_ViewMap == 0)
|
||||
return;
|
||||
|
||||
cout << "\n=== Stroke drawing ===" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\n=== Stroke drawing ===" << endl;
|
||||
}
|
||||
_Chrono.start();
|
||||
_Canvas->Draw();
|
||||
real d = _Chrono.stop();
|
||||
cout << "Strokes generation : " << d << endl;
|
||||
cout << "Stroke count : " << _Canvas->stroke_count << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Strokes generation : " << d << endl;
|
||||
cout << "Stroke count : " << _Canvas->stroke_count << endl;
|
||||
}
|
||||
resetModified();
|
||||
DeleteViewMap();
|
||||
}
|
||||
@ -791,11 +849,15 @@ Render* Controller::RenderStrokes(Render *re)
|
||||
BlenderStrokeRenderer* blenderRenderer = new BlenderStrokeRenderer(re, ++_render_count);
|
||||
_Canvas->Render(blenderRenderer);
|
||||
real d = _Chrono.stop();
|
||||
cout << "Temporary scene generation: " << d << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Temporary scene generation: " << d << endl;
|
||||
}
|
||||
_Chrono.start();
|
||||
Render* freestyle_render = blenderRenderer->RenderScene(re);
|
||||
d = _Chrono.stop();
|
||||
cout << "Stroke rendering : " << d << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Stroke rendering : " << d << endl;
|
||||
}
|
||||
delete blenderRenderer;
|
||||
|
||||
return freestyle_render;
|
||||
|
@ -33,6 +33,8 @@
|
||||
|
||||
#include "BlenderFileLoader.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
BlenderFileLoader::BlenderFileLoader(Render *re, SceneRenderLayer* srl)
|
||||
{
|
||||
_re = re;
|
||||
@ -52,7 +54,9 @@ NodeGroup* BlenderFileLoader::Load()
|
||||
{
|
||||
ObjectInstanceRen *obi;
|
||||
|
||||
cout << "\n=== Importing triangular meshes into Blender ===" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\n=== Importing triangular meshes into Blender ===" << endl;
|
||||
}
|
||||
|
||||
// creation of the scene root node
|
||||
_Scene = new NodeGroup;
|
||||
@ -64,9 +68,11 @@ NodeGroup* BlenderFileLoader::Load()
|
||||
_z_near = -_re->clipsta;
|
||||
_z_far = -_re->clipend;
|
||||
#if 0
|
||||
cout << "Frustum: l " << _viewplane_left << " r " << _viewplane_right
|
||||
<< " b " << _viewplane_bottom << " t " << _viewplane_top
|
||||
<< " n " << _z_near << " f " << _z_far << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Frustum: l " << _viewplane_left << " r " << _viewplane_right
|
||||
<< " b " << _viewplane_bottom << " t " << _viewplane_top
|
||||
<< " n " << _z_near << " f " << _z_far << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
int id = 0;
|
||||
@ -79,10 +85,12 @@ NodeGroup* BlenderFileLoader::Load()
|
||||
//cout << name[0] << name[1] << ":" << (name+2) <<;
|
||||
//print_m4("obi->mat", obi->mat);
|
||||
|
||||
if (obi->obr->totvlak > 0)
|
||||
if (obi->obr->totvlak > 0) {
|
||||
insertShapeNode(obi, ++id);
|
||||
else
|
||||
cout << "Warning: " << (name+2) << " is not a vlak-based object (ignored)" << endl;
|
||||
}
|
||||
else if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Warning: " << (name + 2) << " is not a vlak-based object (ignored)" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
// Return the built scene.
|
||||
@ -116,7 +124,11 @@ int BlenderFileLoader::countClippedFaces(float v1[3], float v2[3], float v3[3],
|
||||
else {
|
||||
clip[i] = NOT_CLIPPED;
|
||||
}
|
||||
//printf("%d %s\n", i, (clip[i] == NOT_CLIPPED) ? "not" : (clip[i] == CLIPPED_BY_NEAR) ? "near" : "far");
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("%d %s\n", i, (clip[i] == NOT_CLIPPED) ? "not" : (clip[i] == CLIPPED_BY_NEAR) ? "near" : "far");
|
||||
}
|
||||
#endif
|
||||
sum += clip[i];
|
||||
}
|
||||
switch (numClipped) {
|
||||
@ -293,8 +305,9 @@ int BlenderFileLoader::testDegenerateTriangle(float v1[3], float v2[3], float v3
|
||||
|
||||
if (equals_v3v3(v1, v2) || equals_v3v3(v2, v3) || equals_v3v3(v1, v3)) {
|
||||
#if 0
|
||||
if (verbose)
|
||||
if (verbose && G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("BlenderFileLoader::testDegenerateTriangle = 1\n");
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
@ -303,14 +316,16 @@ int BlenderFileLoader::testDegenerateTriangle(float v1[3], float v2[3], float v3
|
||||
dist_to_line_segment_v3(v3, v1, v2) < 1.0e-6)
|
||||
{
|
||||
#if 0
|
||||
if (verbose)
|
||||
if (verbose && G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("BlenderFileLoader::testDegenerateTriangle = 2\n");
|
||||
}
|
||||
#endif
|
||||
return 2;
|
||||
}
|
||||
#if 0
|
||||
if (verbose)
|
||||
if (verbose && G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("BlenderFileLoader::testDegenerateTriangle = 0\n");
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@ -321,7 +336,11 @@ bool BlenderFileLoader::testEdgeRotation(float v1[3], float v2[3], float v3[3],
|
||||
{
|
||||
if (testDegenerateTriangle(v1, v2, v3) == 2 || testDegenerateTriangle(v1, v3, v4) == 2) {
|
||||
if (testDegenerateTriangle(v1, v2, v4) == 2 || testDegenerateTriangle(v2, v3, v4) == 2) {
|
||||
//printf("BlenderFileLoader::testEdgeRotation: edge rotation is unsuccessful.\n");
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("BlenderFileLoader::testEdgeRotation: edge rotation is unsuccessful.\n");
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -381,9 +400,16 @@ void BlenderFileLoader::insertShapeNode(ObjectInstanceRen *obi, int id)
|
||||
numFaces += countClippedFaces(v2, v3, v4, clip_2);
|
||||
}
|
||||
}
|
||||
if (wire_material)
|
||||
printf("Warning: Object %s has wire materials (ignored)\n", name);
|
||||
// cout << "numFaces " << numFaces << endl;
|
||||
if (wire_material) {
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Warning: Object " << name << " has wire materials (ignored)" << endl;
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "numFaces " << numFaces << endl;
|
||||
}
|
||||
#endif
|
||||
if (numFaces == 0)
|
||||
return;
|
||||
|
||||
@ -488,7 +514,9 @@ void BlenderFileLoader::insertShapeNode(ObjectInstanceRen *obi, int id)
|
||||
numTris_1 = countClippedFaces(v1, v2, v4, clip_1);
|
||||
numTris_2 = countClippedFaces(v2, v3, v4, clip_2);
|
||||
edge_rotation = true;
|
||||
printf("BlenderFileLoader::insertShapeNode: edge rotation is performed.\n");
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("BlenderFileLoader::insertShapeNode: edge rotation is performed.\n");
|
||||
}
|
||||
}
|
||||
if (numTris_1 == 0 && numTris_2 == 0)
|
||||
continue;
|
||||
@ -709,8 +737,10 @@ void BlenderFileLoader::insertShapeNode(ObjectInstanceRen *obi, int id)
|
||||
cleanVertices[detri.viP+2] += 1.0e-5 * detri.v.z();
|
||||
}
|
||||
}
|
||||
printf("Warning: Object %s contains %lu degenerated triangle%s (strokes may be incorrect)\n",
|
||||
name, detriList.size(), (detriList.size() > 1) ? "s" : "");
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("Warning: Object %s contains %lu degenerated triangle%s (strokes may be incorrect)\n",
|
||||
name, detriList.size(), (detriList.size() > 1) ? "s" : "");
|
||||
}
|
||||
}
|
||||
|
||||
// Create the IndexedFaceSet with the retrieved attributes
|
||||
|
@ -35,6 +35,8 @@
|
||||
#include "../application/AppConfig.h"
|
||||
#include "../stroke/Canvas.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
// XXX Are those "ifdef __cplusplus" useful here?
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -164,7 +166,11 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
|
||||
void *data = ob->data;
|
||||
char name[24];
|
||||
strcpy(name, ob->id.name);
|
||||
//cout << "removing " << name[0] << name[1] << ":" << (name+2) << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "removing " << name[0] << name[1] << ":" << (name+2) << endl;
|
||||
}
|
||||
#endif
|
||||
switch (ob->type) {
|
||||
case OB_MESH:
|
||||
BKE_libblock_free(&G.main->object, ob);
|
||||
@ -484,7 +490,11 @@ Render* BlenderStrokeRenderer::RenderScene(Render *re)
|
||||
Camera *camera = (Camera*)freestyle_scene->camera->data;
|
||||
if (camera->clipend < _z)
|
||||
camera->clipend = _z + _z_delta * 100.0f;
|
||||
//cout << "clipsta " << camera->clipsta << ", clipend " << camera->clipend << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "clipsta " << camera->clipsta << ", clipend " << camera->clipend << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
Render *freestyle_render = RE_NewRender(freestyle_scene->id.name);
|
||||
|
||||
|
@ -31,6 +31,8 @@
|
||||
|
||||
#include "BlenderTextureManager.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
BlenderTextureManager::BlenderTextureManager()
|
||||
: TextureManager()
|
||||
{
|
||||
@ -76,7 +78,9 @@ unsigned int BlenderTextureManager::loadBrush(string sname, Stroke::MediumType m
|
||||
if (!found)
|
||||
return 0;
|
||||
// Brush texture
|
||||
cout << "Loading brush texture..." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Loading brush texture..." << endl;
|
||||
}
|
||||
switch (mediumType) {
|
||||
case Stroke::DRY_MEDIUM:
|
||||
//soc prepareTextureLuminance((const char*)path.toAscii(), texId);
|
||||
@ -89,7 +93,9 @@ unsigned int BlenderTextureManager::loadBrush(string sname, Stroke::MediumType m
|
||||
prepareTextureAlpha(StringUtils::toAscii(path), texId);
|
||||
break;
|
||||
}
|
||||
cout << "Done." << endl << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Done." << endl << endl;
|
||||
}
|
||||
|
||||
return texId;
|
||||
#else
|
||||
|
@ -38,6 +38,8 @@
|
||||
#include "../application/AppView.h"
|
||||
#include "../application/Controller.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// XXX Are those "ifdef __cplusplus" useful here?
|
||||
@ -118,7 +120,9 @@ void FRS_initialize()
|
||||
|
||||
void FRS_set_context(bContext *C)
|
||||
{
|
||||
cout << "FRS_set_context: context 0x" << C << " scene 0x" << CTX_data_scene(C) << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "FRS_set_context: context 0x" << C << " scene 0x" << CTX_data_scene(C) << endl;
|
||||
}
|
||||
controller->setContext(C);
|
||||
}
|
||||
|
||||
@ -166,12 +170,14 @@ static void init_view(Render *re)
|
||||
view->setBorder(xmin, ymin, xmax, ymax);
|
||||
view->setThickness(thickness);
|
||||
|
||||
cout << "\n=== Dimensions of the 2D image coordinate system ===" << endl;
|
||||
cout << "Width : " << width << endl;
|
||||
cout << "Height : " << height << endl;
|
||||
if (re->r.mode & R_BORDER)
|
||||
cout << "Border : (" << xmin << ", " << ymin << ") - (" << xmax << ", " << ymax << ")" << endl;
|
||||
cout << "Unit line thickness : " << thickness << " pixel(s)" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\n=== Dimensions of the 2D image coordinate system ===" << endl;
|
||||
cout << "Width : " << width << endl;
|
||||
cout << "Height : " << height << endl;
|
||||
if (re->r.mode & R_BORDER)
|
||||
cout << "Border : (" << xmin << ", " << ymin << ") - (" << xmax << ", " << ymax << ")" << endl;
|
||||
cout << "Unit line thickness : " << thickness << " pixel(s)" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
static void init_camera(Render *re)
|
||||
@ -309,24 +315,32 @@ static void prepare(Render *re, SceneRenderLayer *srl)
|
||||
// add style modules
|
||||
FreestyleConfig *config = &srl->freestyleConfig;
|
||||
|
||||
cout << "\n=== Rendering options ===" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\n=== Rendering options ===" << endl;
|
||||
}
|
||||
int layer_count = 0;
|
||||
|
||||
switch (config->mode) {
|
||||
case FREESTYLE_CONTROL_SCRIPT_MODE:
|
||||
cout << "Modules :" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Modules :" << endl;
|
||||
}
|
||||
for (FreestyleModuleConfig *module_conf = (FreestyleModuleConfig*)config->modules.first;
|
||||
module_conf;
|
||||
module_conf = module_conf->next)
|
||||
{
|
||||
if(module_conf->is_displayed) {
|
||||
cout << " " << layer_count+1 << ": " << module_conf->module_path << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " " << layer_count+1 << ": " << module_conf->module_path << endl;
|
||||
}
|
||||
controller->InsertStyleModule(layer_count, module_conf->module_path);
|
||||
controller->toggleLayer(layer_count, true);
|
||||
layer_count++;
|
||||
}
|
||||
}
|
||||
cout << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
}
|
||||
controller->setComputeRidgesAndValleysFlag((config->flags & FREESTYLE_RIDGES_AND_VALLEYS_FLAG) ? true : false);
|
||||
controller->setComputeSuggestiveContoursFlag((config->flags & FREESTYLE_SUGGESTIVE_CONTOURS_FLAG) ? true : false);
|
||||
controller->setComputeMaterialBoundariesFlag((config->flags & FREESTYLE_MATERIAL_BOUNDARIES_FLAG) ? true : false);
|
||||
@ -347,14 +361,18 @@ static void prepare(Render *re, SceneRenderLayer *srl)
|
||||
{FREESTYLE_FE_EDGE_MARK, 0}
|
||||
};
|
||||
int num_edge_types = sizeof(conditions) / sizeof(struct edge_type_condition);
|
||||
cout << "Linesets:" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Linesets:" << endl;
|
||||
}
|
||||
for (FreestyleLineSet *lineset = (FreestyleLineSet*)config->linesets.first;
|
||||
lineset;
|
||||
lineset = lineset->next)
|
||||
{
|
||||
if (lineset->flags & FREESTYLE_LINESET_ENABLED) {
|
||||
cout << " " << layer_count+1 << ": " << lineset->name << " - "
|
||||
<< lineset->linestyle->id.name+2 << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " " << layer_count+1 << ": " << lineset->name << " - "
|
||||
<< lineset->linestyle->id.name+2 << endl;
|
||||
}
|
||||
Text *text = create_lineset_handler(srl->name, lineset->name);
|
||||
controller->InsertStyleModule(layer_count, lineset->name, text);
|
||||
controller->toggleLayer(layer_count, true);
|
||||
@ -424,17 +442,20 @@ static void prepare(Render *re, SceneRenderLayer *srl)
|
||||
FREESTYLE_ALGO_CULLED_ADAPTIVE_CUMULATIVE :
|
||||
FREESTYLE_ALGO_ADAPTIVE_CUMULATIVE);
|
||||
|
||||
cout << "Crease angle : " << controller->getCreaseAngle() << endl;
|
||||
cout << "Sphere radius : " << controller->getSphereRadius() << endl;
|
||||
cout << "Face smoothness : " << (controller->getFaceSmoothness() ? "enabled" : "disabled") << endl;
|
||||
cout << "Redges and valleys : " << (controller->getComputeRidgesAndValleysFlag() ? "enabled" : "disabled") << endl;
|
||||
cout << "Suggestive contours : " << (controller->getComputeSuggestiveContoursFlag() ? "enabled" : "disabled")
|
||||
<< endl;
|
||||
cout << "Suggestive contour Kr derivative epsilon : " << controller->getSuggestiveContourKrDerivativeEpsilon()
|
||||
<< endl;
|
||||
cout << "Material boundaries : " << (controller->getComputeMaterialBoundariesFlag() ? "enabled" : "disabled")
|
||||
<< endl;
|
||||
cout << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Crease angle : " << controller->getCreaseAngle() << endl;
|
||||
cout << "Sphere radius : " << controller->getSphereRadius() << endl;
|
||||
cout << "Face smoothness : " << (controller->getFaceSmoothness() ? "enabled" : "disabled") << endl;
|
||||
cout << "Redges and valleys : " << (controller->getComputeRidgesAndValleysFlag() ? "enabled" : "disabled")
|
||||
<< endl;
|
||||
cout << "Suggestive contours : " << (controller->getComputeSuggestiveContoursFlag() ? "enabled" : "disabled")
|
||||
<< endl;
|
||||
cout << "Suggestive contour Kr derivative epsilon : " << controller->getSuggestiveContourKrDerivativeEpsilon()
|
||||
<< endl;
|
||||
cout << "Material boundaries : " << (controller->getComputeMaterialBoundariesFlag() ? "enabled" : "disabled")
|
||||
<< endl;
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
// set diffuse and z depth passes
|
||||
RenderLayer *rl = RE_GetRenderLayer(re->result, srl->name);
|
||||
@ -451,9 +472,11 @@ static void prepare(Render *re, SceneRenderLayer *srl)
|
||||
break;
|
||||
}
|
||||
}
|
||||
cout << "Passes :" << endl;
|
||||
cout << " Diffuse = " << (diffuse ? "enabled" : "disabled") << endl;
|
||||
cout << " Z = " << (z ? "enabled" : "disabled") << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Passes :" << endl;
|
||||
cout << " Diffuse = " << (diffuse ? "enabled" : "disabled") << endl;
|
||||
cout << " Z = " << (z ? "enabled" : "disabled") << endl;
|
||||
}
|
||||
|
||||
// compute view map
|
||||
re->i.infostr = "Freestyle: View map creation";
|
||||
@ -473,19 +496,31 @@ void FRS_composite_result(Render* re, SceneRenderLayer* srl, Render* freestyle_r
|
||||
|
||||
rl = render_get_active_layer( freestyle_render, freestyle_render->result );
|
||||
if (!rl || rl->rectf == NULL) {
|
||||
cout << "Cannot find Freestyle result image" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Cannot find Freestyle result image" << endl;
|
||||
}
|
||||
return;
|
||||
}
|
||||
src = rl->rectf;
|
||||
//cout << "src: " << rl->rectx << " x " << rl->recty << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "src: " << rl->rectx << " x " << rl->recty << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
rl = RE_GetRenderLayer(re->result, srl->name);
|
||||
if (!rl || rl->rectf == NULL) {
|
||||
cout << "No layer to composite to" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "No layer to composite to" << endl;
|
||||
}
|
||||
return;
|
||||
}
|
||||
dest = rl->rectf;
|
||||
//cout << "dest: " << rl->rectx << " x " << rl->recty << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "dest: " << rl->rectx << " x " << rl->recty << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
rectx = re->rectx;
|
||||
recty = re->recty;
|
||||
@ -534,10 +569,12 @@ int FRS_is_freestyle_enabled(SceneRenderLayer *srl)
|
||||
|
||||
void FRS_init_stroke_rendering(Render *re)
|
||||
{
|
||||
cout << endl;
|
||||
cout << "#===============================================================" << endl;
|
||||
cout << "# Freestyle" << endl;
|
||||
cout << "#===============================================================" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
cout << "#===============================================================" << endl;
|
||||
cout << "# Freestyle" << endl;
|
||||
cout << "#===============================================================" << endl;
|
||||
}
|
||||
|
||||
init_view(re);
|
||||
init_camera(re);
|
||||
@ -552,10 +589,12 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl)
|
||||
RenderMonitor monitor(re);
|
||||
controller->setRenderMonitor(&monitor);
|
||||
|
||||
cout << endl;
|
||||
cout << "----------------------------------------------------------" << endl;
|
||||
cout << "| " << (re->scene->id.name + 2) << "|" << srl->name << endl;
|
||||
cout << "----------------------------------------------------------" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
cout << "----------------------------------------------------------" << endl;
|
||||
cout << "| " << (re->scene->id.name + 2) << "|" << srl->name << endl;
|
||||
cout << "----------------------------------------------------------" << endl;
|
||||
}
|
||||
|
||||
// prepare Freestyle:
|
||||
// - load mesh
|
||||
@ -566,7 +605,9 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl)
|
||||
|
||||
if (re->test_break(re->tbh)) {
|
||||
controller->CloseFile();
|
||||
cout << "Break" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Break" << endl;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,8 @@
|
||||
|
||||
#include "FastGrid.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
void FastGrid::clear()
|
||||
{
|
||||
if (!_cells)
|
||||
@ -61,8 +63,10 @@ void FastGrid::configure(const Vec3r& orig, const Vec3r& size, unsigned nb)
|
||||
Cell *FastGrid::getCell(const Vec3u& p)
|
||||
{
|
||||
#if 0
|
||||
cout << _cells << " " << p << " " << _cells_nb[0] << "-" << _cells_nb[1] << "-" << _cells_nb[2]
|
||||
<< " " << _cells_size << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cells << " " << p << " " << _cells_nb[0] << "-" << _cells_nb[1] << "-" << _cells_nb[2]
|
||||
<< " " << _cells_size << endl;
|
||||
}
|
||||
#endif
|
||||
assert(_cells || ("_cells is a null pointer"));
|
||||
assert((_cells_nb[0] * (p[2] * _cells_nb[1] + p[1]) + p[0]) < _cells_size);
|
||||
|
@ -50,6 +50,8 @@
|
||||
|
||||
#include "../system/TimeUtils.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
@ -157,12 +159,17 @@ void GeomCleaner::SortAndCompressIndexedVertexArray(const float *iVertices, unsi
|
||||
// Sort data
|
||||
chrono.start();
|
||||
GeomCleaner::SortIndexedVertexArray(iVertices, iVSize, iIndices, iISize, &tmpVertices, &tmpIndices);
|
||||
printf("Sorting: %lf\n", chrono.stop());
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("Sorting: %lf\n", chrono.stop());
|
||||
}
|
||||
|
||||
// compress data
|
||||
chrono.start();
|
||||
GeomCleaner::CompressIndexedVertexArray(tmpVertices, iVSize, tmpIndices, iISize, oVertices, oVSize, oIndices);
|
||||
printf("Merging: %lf\n", chrono.stop());
|
||||
real duration = chrono.stop();
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("Merging: %lf\n", duration);
|
||||
}
|
||||
|
||||
// deallocates memory:
|
||||
delete [] tmpVertices;
|
||||
|
@ -48,6 +48,8 @@
|
||||
#include "../view_map/Functions0D.h"
|
||||
#include "../view_map/Functions1D.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
//soc #include <qimage.h>
|
||||
//soc #include <QString>
|
||||
|
||||
@ -764,14 +766,16 @@ int BezierCurveShader::shade(Stroke& stroke) const
|
||||
if (equal) {
|
||||
if (data.back() == data.front()) {
|
||||
vector<Vec2d>::iterator d = data.begin(), dend;
|
||||
cout << "ending point = starting point" << endl;
|
||||
cout << "---------------DATA----------" << endl;
|
||||
for (dend = data.end(); d != dend; ++d) {
|
||||
cout << d->x() << "-" << d->y() << endl;
|
||||
}
|
||||
cout << "--------------BEZIER RESULT----------" << endl;
|
||||
for (d = CurveVertices.begin(), dend = CurveVertices.end(); d != dend; ++d) {
|
||||
cout << d->x() << "-" << d->y() << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "ending point = starting point" << endl;
|
||||
cout << "---------------DATA----------" << endl;
|
||||
for (dend = data.end(); d != dend; ++d) {
|
||||
cout << d->x() << "-" << d->y() << endl;
|
||||
}
|
||||
cout << "--------------BEZIER RESULT----------" << endl;
|
||||
for (d = CurveVertices.begin(), dend = CurveVertices.end(); d != dend; ++d) {
|
||||
cout << d->x() << "-" << d->y() << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -790,10 +794,17 @@ int BezierCurveShader::shade(Stroke& stroke) const
|
||||
cerr << "Warning: unsufficient resampling" << endl;
|
||||
}
|
||||
else {
|
||||
//cout << "Oversampling" << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Oversampling" << endl;
|
||||
}
|
||||
#endif
|
||||
nExtraVertex = newsize - originalSize;
|
||||
if (nExtraVertex != 0)
|
||||
cout << "Bezier Shader : Stroke " << stroke.getId() << " have not been resampled" << endl;
|
||||
if (nExtraVertex != 0) {
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Bezier Shader : Stroke " << stroke.getId() << " have not been resampled" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// assigns the new coordinates:
|
||||
@ -813,7 +824,9 @@ int BezierCurveShader::shade(Stroke& stroke) const
|
||||
#if 0
|
||||
double x = p->x();
|
||||
double y = p->y();
|
||||
cout << "x = " << x << "-" << "y = " << y << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "x = " << x << "-" << "y = " << y << endl;
|
||||
}
|
||||
#endif
|
||||
last = p;
|
||||
}
|
||||
@ -830,7 +843,9 @@ int BezierCurveShader::shade(Stroke& stroke) const
|
||||
verticesToRemove.push_back(&(*it));
|
||||
if (it.isEnd()) {
|
||||
// XXX Shocking! :P Shouldn't we break in this case???
|
||||
cout << "fucked up" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "fucked up" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (it = stroke.strokeVerticesBegin(); it != itend; ++it) {
|
||||
@ -1081,13 +1096,21 @@ int TipRemoverShader::shade(Stroke& stroke) const
|
||||
|
||||
// assign old attributes to new stroke vertices:
|
||||
vector<StrokeAttribute>::iterator a = oldAttributes.begin(), aend = oldAttributes.end();
|
||||
//cout << "-----------------------------------------------" << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "-----------------------------------------------" << endl;
|
||||
}
|
||||
#endif
|
||||
for (v = stroke.strokeVerticesBegin(), vend = stroke.strokeVerticesEnd();
|
||||
(v != vend) && (a != aend);
|
||||
++v, ++a)
|
||||
{
|
||||
v->setAttribute(*a);
|
||||
//cout << "thickness = " << (*a).getThickness()[0] << "-" << (*a).getThickness()[1] << endl;
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "thickness = " << (*a).getThickness()[0] << "-" << (*a).getThickness()[1] << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// we're done!
|
||||
return 0;
|
||||
@ -1095,7 +1118,9 @@ int TipRemoverShader::shade(Stroke& stroke) const
|
||||
|
||||
int streamShader::shade(Stroke& stroke) const
|
||||
{
|
||||
cout << stroke << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << stroke << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -877,7 +877,7 @@ public:
|
||||
{
|
||||
_stream .open(iFileName);
|
||||
if (!_stream.is_open()) {
|
||||
cout << "couldn't open file " << iFileName << endl;
|
||||
cerr << "couldn't open file " << iFileName << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,8 @@
|
||||
|
||||
#include "../view_map/SteerableViewMap.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
//soc #include <qimage.h>
|
||||
//soc #include <QString>
|
||||
|
||||
@ -334,7 +336,7 @@ void Canvas::loadMap(const char *iFileName, const char *iMapName, unsigned int i
|
||||
QImage *qimg;
|
||||
QImage newMap(filePath.c_str());
|
||||
if (newMap.isNull()) {
|
||||
cout << "Could not load image file " << filePath << endl;
|
||||
cerr << "Could not load image file " << filePath << endl;
|
||||
return;
|
||||
}
|
||||
qimg = &newMap;
|
||||
@ -342,7 +344,7 @@ void Canvas::loadMap(const char *iFileName, const char *iMapName, unsigned int i
|
||||
/* OCIO_TODO: support different input color space */
|
||||
ImBuf *qimg = IMB_loadiffname(filePath.c_str(), 0, NULL);
|
||||
if (qimg == 0) {
|
||||
cout << "Could not load image file " << filePath << endl;
|
||||
cerr << "Could not load image file " << filePath << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -455,12 +457,16 @@ void Canvas::loadMap(const char *iFileName, const char *iMapName, unsigned int i
|
||||
float Canvas::readMapPixel(const char *iMapName, int level, int x, int y)
|
||||
{
|
||||
if (_maps.empty()) {
|
||||
cout << "readMapPixel warning: no map was loaded "<< endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "readMapPixel warning: no map was loaded "<< endl;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
mapsMap::iterator m = _maps.find(iMapName);
|
||||
if (m == _maps.end()) {
|
||||
cout << "readMapPixel warning: no map was loaded with the name " << iMapName << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "readMapPixel warning: no map was loaded with the name " << iMapName << endl;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
ImagePyramid *pyramid = (*m).second;
|
||||
|
@ -36,6 +36,8 @@
|
||||
#include "CurveAdvancedIterators.h"
|
||||
#include "CurveIterators.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
/**********************************/
|
||||
/* */
|
||||
/* */
|
||||
@ -151,12 +153,14 @@ iA_B_eq_iB_A:
|
||||
}
|
||||
|
||||
if (!__A || !__B) {
|
||||
printf("iA A 0x%p p (%f, %f)\n", iA->A(), iA->A()->getPoint2D().x(), iA->A()->getPoint2D().y());
|
||||
printf("iA B 0x%p p (%f, %f)\n", iA->B(), iA->B()->getPoint2D().x(), iA->B()->getPoint2D().y());
|
||||
printf("iB A 0x%p p (%f, %f)\n", iB->A(), iB->A()->getPoint2D().x(), iB->A()->getPoint2D().y());
|
||||
printf("iB B 0x%p p (%f, %f)\n", iB->B(), iB->B()->getPoint2D().x(), iB->B()->getPoint2D().y());
|
||||
printf("iA t2d %f p (%f, %f)\n", iA->t2d(), iA->getPoint2D().x(), iA->getPoint2D().y());
|
||||
printf("iB t2d %f p (%f, %f)\n", iB->t2d(), iB->getPoint2D().x(), iB->getPoint2D().y());
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("iA A 0x%p p (%f, %f)\n", iA->A(), iA->A()->getPoint2D().x(), iA->A()->getPoint2D().y());
|
||||
printf("iA B 0x%p p (%f, %f)\n", iA->B(), iA->B()->getPoint2D().x(), iA->B()->getPoint2D().y());
|
||||
printf("iB A 0x%p p (%f, %f)\n", iB->A(), iB->A()->getPoint2D().x(), iB->A()->getPoint2D().y());
|
||||
printf("iB B 0x%p p (%f, %f)\n", iB->B(), iB->B()->getPoint2D().x(), iB->B()->getPoint2D().y());
|
||||
printf("iA t2d %f p (%f, %f)\n", iA->t2d(), iA->getPoint2D().x(), iA->getPoint2D().y());
|
||||
printf("iB t2d %f p (%f, %f)\n", iB->t2d(), iB->getPoint2D().x(), iB->getPoint2D().y());
|
||||
}
|
||||
cerr << "Fatal error in CurvePoint::CurvePoint(CurvePoint *iA, CurvePoint *iB, float t3)" << endl;
|
||||
}
|
||||
assert(__A != 0 && __B != 0);
|
||||
@ -249,18 +253,20 @@ FEdge *CurvePoint::getFEdge(Interface0D& inter)
|
||||
return __A->getFEdge(*__B);
|
||||
}
|
||||
#if 0
|
||||
printf("__A 0x%p p (%f, %f)\n", __A, __A->getPoint2D().x(), __A->getPoint2D().y());
|
||||
printf("__B 0x%p p (%f, %f)\n", __B, __B->getPoint2D().x(), __B->getPoint2D().y());
|
||||
printf("iVertexB->A() 0x%p p (%f, %f)\n", iVertexB->A(), iVertexB->A()->getPoint2D().x(),
|
||||
iVertexB->A()->getPoint2D().y());
|
||||
printf("iVertexB->B() 0x%p p (%f, %f)\n", iVertexB->B(), iVertexB->B()->getPoint2D().x(),
|
||||
iVertexB->B()->getPoint2D().y());
|
||||
printf("_t2d %f p (%f, %f)\n", _t2d, getPoint2D().x(), getPoint2D().y());
|
||||
printf("iVertexB->t2d() %f p (%f, %f)\n", iVertexB->t2d(), iVertexB->getPoint2D().x(), iVertexB->getPoint2D().y());
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("__A 0x%p p (%f, %f)\n", __A, __A->getPoint2D().x(), __A->getPoint2D().y());
|
||||
printf("__B 0x%p p (%f, %f)\n", __B, __B->getPoint2D().x(), __B->getPoint2D().y());
|
||||
printf("iVertexB->A() 0x%p p (%f, %f)\n", iVertexB->A(), iVertexB->A()->getPoint2D().x(),
|
||||
iVertexB->A()->getPoint2D().y());
|
||||
printf("iVertexB->B() 0x%p p (%f, %f)\n", iVertexB->B(), iVertexB->B()->getPoint2D().x(),
|
||||
iVertexB->B()->getPoint2D().y());
|
||||
printf("_t2d %f p (%f, %f)\n", _t2d, getPoint2D().x(), getPoint2D().y());
|
||||
printf("iVertexB->t2d() %f p (%f, %f)\n", iVertexB->t2d(), iVertexB->getPoint2D().x(), iVertexB->getPoint2D().y());
|
||||
}
|
||||
#endif
|
||||
cerr << "Warning: CurvePoint::getFEdge() failed." << endl;
|
||||
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,6 +40,8 @@
|
||||
#include "Canvas.h"
|
||||
#include "Stroke.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
LIB_STROKE_EXPORT Operators::I1DContainer Operators::_current_view_edges_set;
|
||||
LIB_STROKE_EXPORT Operators::I1DContainer Operators::_current_chains_set;
|
||||
LIB_STROKE_EXPORT Operators::I1DContainer *Operators::_current_set = NULL;
|
||||
@ -728,7 +730,9 @@ static int __recursiveSplit(Chain *_curve, UnaryFunction0D<double>& func, UnaryP
|
||||
new_curve_a->push_vertex_back(&(*vit));
|
||||
}
|
||||
if ((vit == vitend) || (vnext == vitend)) {
|
||||
cout << "The split takes place in bad location" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "The split takes place in bad location" << endl;
|
||||
}
|
||||
newChains.push_back(_curve);
|
||||
delete new_curve_a;
|
||||
delete new_curve_b;
|
||||
@ -897,7 +901,9 @@ static int __recursiveSplit(Chain *_curve, UnaryFunction0D<double>& func, UnaryP
|
||||
new_curve_a->push_vertex_back(&(*vit));
|
||||
}
|
||||
if ((vit == vitend) || (vnext == vitend)) {
|
||||
cout << "The split takes place in bad location" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "The split takes place in bad location" << endl;
|
||||
}
|
||||
newChains.push_back(_curve);
|
||||
delete new_curve_a;
|
||||
delete new_curve_b;
|
||||
@ -1143,8 +1149,11 @@ static Stroke *createStroke(Interface1D& inter)
|
||||
}
|
||||
dir.normalize();
|
||||
Vec2r offset(dir * len);
|
||||
//cout << "#vert " << nvert << " len " << len << " reverse? " << reverse << endl;
|
||||
|
||||
#if 0
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "#vert " << nvert << " len " << len << " reverse? " << reverse << endl;
|
||||
}
|
||||
#endif
|
||||
// add the offset to the overlapping vertices
|
||||
StrokeVertex *sv;
|
||||
std::vector<Interface0D *>::iterator it = overlapping_vertices.begin(),
|
||||
@ -1190,7 +1199,7 @@ static Stroke *createStroke(Interface1D& inter)
|
||||
++v;
|
||||
++vnext;
|
||||
}
|
||||
if (warning) {
|
||||
if (warning && G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("Warning: stroke contains singular points.\n");
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,8 @@
|
||||
#include "StrokeIterators.h"
|
||||
#include "StrokeRenderer.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
/**********************************/
|
||||
/* */
|
||||
/* */
|
||||
@ -208,12 +210,16 @@ StrokeAttribute& StrokeAttribute::operator=(const StrokeAttribute& iBrother)
|
||||
float StrokeAttribute::getAttributeReal(const char *iName) const
|
||||
{
|
||||
if (!_userAttributesReal) {
|
||||
cout << "StrokeAttribute warning: no real attribute was defined" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "StrokeAttribute warning: no real attribute was defined" << endl;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
realMap::iterator a = _userAttributesReal->find(iName);
|
||||
if (a == _userAttributesReal->end()) {
|
||||
cout << "StrokeAttribute warning: no real attribute was added with the name " << iName << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "StrokeAttribute warning: no real attribute was added with the name " << iName << endl;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
return (*a).second;
|
||||
@ -222,12 +228,16 @@ float StrokeAttribute::getAttributeReal(const char *iName) const
|
||||
Vec2f StrokeAttribute::getAttributeVec2f(const char *iName) const
|
||||
{
|
||||
if (!_userAttributesVec2f) {
|
||||
cout << "StrokeAttribute warning: no Vec2f attribute was defined" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "StrokeAttribute warning: no Vec2f attribute was defined" << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Vec2fMap::iterator a = _userAttributesVec2f->find(iName);
|
||||
if (a == _userAttributesVec2f->end()) {
|
||||
cout << "StrokeAttribute warning: no Vec2f attribute was added with the name " << iName << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "StrokeAttribute warning: no Vec2f attribute was added with the name " << iName << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return (*a).second;
|
||||
@ -236,12 +246,16 @@ Vec2f StrokeAttribute::getAttributeVec2f(const char *iName) const
|
||||
Vec3f StrokeAttribute::getAttributeVec3f(const char *iName) const
|
||||
{
|
||||
if (!_userAttributesVec3f) {
|
||||
cout << "StrokeAttribute warning: no Vec3f attribute was defined" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "StrokeAttribute warning: no Vec3f attribute was defined" << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Vec3fMap::iterator a = _userAttributesVec3f->find(iName);
|
||||
if (a == _userAttributesVec3f->end()) {
|
||||
cout << "StrokeAttribute warning: no Vec3f attribute was added with the name " << iName << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "StrokeAttribute warning: no Vec3f attribute was added with the name " << iName << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return (*a).second;
|
||||
|
@ -109,7 +109,7 @@ unsigned TextureManager::getBrushTextureIndex(string name, Stroke::MediumType lo
|
||||
_brushesMap[bt] = texId;
|
||||
return texId;
|
||||
// XXX!
|
||||
cout << "brush file " << name << " not found" << endl;
|
||||
cerr << "brush file " << name << " not found" << endl;
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
|
@ -103,9 +103,9 @@ public:
|
||||
#endif
|
||||
|
||||
if (status != 1) {
|
||||
cout << "\nError executing Python script from PythonInterpreter::interpretFile" << endl;
|
||||
cout << "File: " << fn << endl;
|
||||
cout << "Errors: " << endl;
|
||||
cerr << "\nError executing Python script from PythonInterpreter::interpretFile" << endl;
|
||||
cerr << "File: " << fn << endl;
|
||||
cerr << "Errors: " << endl;
|
||||
BKE_reports_print(reports, RPT_ERROR);
|
||||
return 1;
|
||||
}
|
||||
@ -124,9 +124,9 @@ public:
|
||||
BKE_reports_clear(reports);
|
||||
|
||||
if (!BPY_text_exec(_context, text, reports, false)) {
|
||||
cout << "\nError executing Python script from PythonInterpreter::interpretText" << endl;
|
||||
cout << "Name: " << name << endl;
|
||||
cout << "Errors: " << endl;
|
||||
cerr << "\nError executing Python script from PythonInterpreter::interpretText" << endl;
|
||||
cerr << "Name: " << name << endl;
|
||||
cerr << "Errors: " << endl;
|
||||
BKE_reports_print(reports, RPT_ERROR);
|
||||
return 1;
|
||||
}
|
||||
@ -173,9 +173,11 @@ private:
|
||||
|
||||
for (vector<string>::const_iterator it = pathnames.begin(); it != pathnames.end(); ++it) {
|
||||
if (!it->empty()) {
|
||||
cout << "Adding Python path: " << *it << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Adding Python path: " << *it << endl;
|
||||
}
|
||||
cmd = "sys.path.append(r\"" + *it + "\")\n";
|
||||
txt_insert_buf(text, const_cast<char*>(cmd.c_str()));
|
||||
txt_insert_buf(text, const_cast<char *>(cmd.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,8 @@
|
||||
|
||||
#include "ArbitraryGridDensityProvider.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
ArbitraryGridDensityProvider::ArbitraryGridDensityProvider(OccluderSource& source, const real proscenium[4],
|
||||
unsigned numCells)
|
||||
: GridDensityProvider(source), numCells(numCells)
|
||||
@ -67,13 +69,17 @@ void ArbitraryGridDensityProvider::initialize(const real proscenium[4])
|
||||
float prosceniumWidth = (proscenium[1] - proscenium[0]);
|
||||
float prosceniumHeight = (proscenium[3] - proscenium[2]);
|
||||
real cellArea = prosceniumWidth * prosceniumHeight / numCells;
|
||||
cout << prosceniumWidth << " x " << prosceniumHeight << " grid with cells of area " << cellArea << "." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << prosceniumWidth << " x " << prosceniumHeight << " grid with cells of area " << cellArea << "." << endl;
|
||||
}
|
||||
|
||||
_cellSize = sqrt(cellArea);
|
||||
// Now we know how many cells make each side of our grid
|
||||
_cellsX = ceil(prosceniumWidth / _cellSize);
|
||||
_cellsY = ceil(prosceniumHeight / _cellSize);
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
}
|
||||
|
||||
// Make sure the grid exceeds the proscenium by a small amount
|
||||
float safetyZone = 0.1f;
|
||||
@ -83,7 +89,9 @@ void ArbitraryGridDensityProvider::initialize(const real proscenium[4])
|
||||
if (_cellsY * _cellSize < prosceniumHeight * (1.0 + safetyZone)) {
|
||||
_cellsY = prosceniumHeight * (1.0 + safetyZone) / _cellSize;
|
||||
}
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
}
|
||||
|
||||
// Find grid origin
|
||||
_cellOrigin[0] = ((proscenium[0] + proscenium[1]) / 2.0) - (_cellsX / 2.0) * _cellSize;
|
||||
|
@ -34,6 +34,8 @@
|
||||
|
||||
#include "AverageAreaGridDensityProvider.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
AverageAreaGridDensityProvider::AverageAreaGridDensityProvider(OccluderSource& source, const real proscenium[4],
|
||||
real sizeFactor)
|
||||
: GridDensityProvider(source)
|
||||
@ -76,16 +78,22 @@ void AverageAreaGridDensityProvider::initialize(const real proscenium[4], real s
|
||||
cellArea += (max[0] - min[0]) * (max[1] - min[1]);
|
||||
++numFaces;
|
||||
}
|
||||
cout << "Total area: " << cellArea << ". Number of faces: " << numFaces << "." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Total area: " << cellArea << ". Number of faces: " << numFaces << "." << endl;
|
||||
}
|
||||
cellArea /= numFaces;
|
||||
cellArea *= sizeFactor;
|
||||
cout << "Building grid with average area " << cellArea << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Building grid with average area " << cellArea << endl;
|
||||
}
|
||||
|
||||
_cellSize = sqrt(cellArea);
|
||||
// Now we know how many cells make each side of our grid
|
||||
_cellsX = ceil(prosceniumWidth / _cellSize);
|
||||
_cellsY = ceil(prosceniumHeight / _cellSize);
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
}
|
||||
|
||||
// Make sure the grid exceeds the proscenium by a small amount
|
||||
float safetyZone = 0.1f;
|
||||
@ -95,7 +103,9 @@ void AverageAreaGridDensityProvider::initialize(const real proscenium[4], real s
|
||||
if (_cellsY * _cellSize < prosceniumHeight * (1.0 + safetyZone)) {
|
||||
_cellsY = prosceniumHeight * (1.0 + safetyZone) / _cellSize;
|
||||
}
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
}
|
||||
|
||||
// Find grid origin
|
||||
_cellOrigin[0] = ((proscenium[0] + proscenium[1]) / 2.0) - (_cellsX / 2.0) * _cellSize;
|
||||
|
@ -37,6 +37,8 @@
|
||||
|
||||
#include "BoxGrid.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Helper Classes
|
||||
@ -80,9 +82,11 @@ BoxGrid::Iterator::Iterator (BoxGrid& grid, Vec3r& center, real epsilon)
|
||||
// Find target cell
|
||||
_cell = grid.findCell(_target);
|
||||
#if BOX_GRID_LOGGING
|
||||
cout << "Searching for occluders of edge centered at " << _target << " in cell ["
|
||||
<< _cell->boundary[0] << ", " << _cell->boundary[1] << ", " << _cell->boundary[2]
|
||||
<< ", " << _cell->boundary[3] << "] (" << _cell->faces.size() << " occluders)" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Searching for occluders of edge centered at " << _target << " in cell ["
|
||||
<< _cell->boundary[0] << ", " << _cell->boundary[1] << ", " << _cell->boundary[2]
|
||||
<< ", " << _cell->boundary[3] << "] (" << _cell->faces.size() << " occluders)" << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set iterator
|
||||
@ -99,18 +103,26 @@ BoxGrid::BoxGrid(OccluderSource& source, GridDensityProvider& density, ViewMap *
|
||||
: _viewpoint(viewpoint), _enableQI(enableQI)
|
||||
{
|
||||
// Generate Cell structure
|
||||
cout << "Generate Cell structure" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Generate Cell structure" << endl;
|
||||
}
|
||||
assignCells(source, density, viewMap);
|
||||
|
||||
// Fill Cells
|
||||
cout << "Distribute occluders" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Distribute occluders" << endl;
|
||||
}
|
||||
distributePolygons(source);
|
||||
|
||||
// Reorganize Cells
|
||||
cout << "Reorganize cells" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Reorganize cells" << endl;
|
||||
}
|
||||
reorganizeCells();
|
||||
|
||||
cout << "Ready to use BoxGrid" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Ready to use BoxGrid" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
BoxGrid::~BoxGrid() {}
|
||||
@ -178,7 +190,9 @@ void BoxGrid::distributePolygons(OccluderSource& source)
|
||||
}
|
||||
++nFaces;
|
||||
}
|
||||
cout << "Distributed " << nFaces << " occluders. Retained " << nKeptFaces << "." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Distributed " << nFaces << " occluders. Retained " << nKeptFaces << "." << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void BoxGrid::reorganizeCells()
|
||||
|
@ -55,6 +55,8 @@
|
||||
|
||||
#include "../winged_edge/WEdge.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
class BoxGrid
|
||||
{
|
||||
public:
|
||||
@ -193,14 +195,19 @@ inline void BoxGrid::Iterator::initAfterTarget()
|
||||
{
|
||||
if (_foundOccludee) {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\tStarting occludee search from occludeeCandidate at depth " << _occludeeDepth << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\tStarting occludee search from occludeeCandidate at depth "
|
||||
<< _occludeeDepth << std::endl;
|
||||
}
|
||||
#endif
|
||||
_current = _occludeeCandidate;
|
||||
return;
|
||||
}
|
||||
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\tStarting occludee search from current position" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\tStarting occludee search from current position" << std::endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (_current != _cell->faces.end() && !testOccluder(true)) {
|
||||
@ -217,17 +224,21 @@ inline bool BoxGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
return true;
|
||||
}
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\tTesting occluder " << (*_current)->poly.getVertices()[0];
|
||||
for (unsigned int i = 1; i < (*_current)->poly.getVertices().size(); ++i) {
|
||||
std::cout << ", " << (*_current)->poly.getVertices()[i];
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\tTesting occluder " << (*_current)->poly.getVertices()[0];
|
||||
for (unsigned int i = 1; i < (*_current)->poly.getVertices().size(); ++i) {
|
||||
std::cout << ", " << (*_current)->poly.getVertices()[i];
|
||||
}
|
||||
std::cout << " from shape " << (*_current)->face->GetVertex(0)->shape()->GetId() << std::endl;
|
||||
}
|
||||
std::cout << " from shape " << (*_current)->face->GetVertex(0)->shape()->GetId() << std::endl;
|
||||
#endif
|
||||
|
||||
// If we have an occluder candidate and we are unambiguously after it, abort
|
||||
if (_foundOccludee && (*_current)->shallowest > _occludeeDepth) {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\t\tAborting: shallowest > occludeeCandidate->deepest" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tAborting: shallowest > occludeeCandidate->deepest" << std::endl;
|
||||
}
|
||||
#endif
|
||||
_current = _cell->faces.end();
|
||||
|
||||
@ -239,7 +250,9 @@ inline bool BoxGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
if (wantOccludee) {
|
||||
if ((*_current)->deepest < _target[2]) {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\t\tSkipping: shallower than target while looking for occludee" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tSkipping: shallower than target while looking for occludee" << std::endl;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
@ -247,7 +260,9 @@ inline bool BoxGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
else {
|
||||
if ((*_current)->shallowest > _target[2]) {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\t\tStopping: deeper than target while looking for occluder" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tStopping: deeper than target while looking for occluder" << std::endl;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@ -260,7 +275,9 @@ inline bool BoxGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
(*_current)->poly.getBBox(bbMin, bbMax);
|
||||
if (_target[0] < bbMin[0] || _target[0] > bbMax[0] || _target[1] < bbMin[1] || _target[1] > bbMax[1]) {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\t\tSkipping: bounding box violation" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tSkipping: bounding box violation" << std::endl;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
@ -276,11 +293,15 @@ inline void BoxGrid::Iterator::reportDepth(Vec3r origin, Vec3r u, real t)
|
||||
// We need to convert it into a Z-value in grid space
|
||||
real depth = -(origin + (u * t))[2];
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\t\tReporting depth of occluder/ee: " << depth;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tReporting depth of occluder/ee: " << depth;
|
||||
}
|
||||
#endif
|
||||
if (depth > _target[2]) {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << " is deeper than target" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << " is deeper than target" << std::endl;
|
||||
}
|
||||
#endif
|
||||
// If the current occluder is the best occludee so far, save it.
|
||||
if (! _foundOccludee || _occludeeDepth > depth) {
|
||||
@ -289,7 +310,9 @@ inline void BoxGrid::Iterator::reportDepth(Vec3r origin, Vec3r u, real t)
|
||||
}
|
||||
else {
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << std::endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -325,7 +348,9 @@ inline bool BoxGrid::Iterator::validAfterTarget()
|
||||
inline void BoxGrid::Iterator::markCurrentOccludeeCandidate(real depth)
|
||||
{
|
||||
#if BOX_GRID_LOGGING
|
||||
std::cout << "\t\tFound occludeeCandidate at depth " << depth << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tFound occludeeCandidate at depth " << depth << std::endl;
|
||||
}
|
||||
#endif
|
||||
_occludeeCandidate = _current;
|
||||
_occludeeDepth = depth;
|
||||
|
@ -38,6 +38,8 @@
|
||||
|
||||
#include "../geometry/GridHelpers.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
CulledOccluderSource::CulledOccluderSource(const GridHelpers::Transform& t, WingedEdge& we, ViewMap& viewMap,
|
||||
bool extensiveFEdgeSearch)
|
||||
: OccluderSource(t, we), rejected(0), gridSpaceOccluderProsceniumInitialized(false)
|
||||
@ -73,7 +75,9 @@ bool CulledOccluderSource::next()
|
||||
return true;
|
||||
}
|
||||
}
|
||||
std::cout << "Finished generating occluders. Rejected " << rejected << " faces." << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "Finished generating occluders. Rejected " << rejected << " faces." << std::endl;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -121,11 +125,13 @@ void CulledOccluderSource::cullViewEdges(ViewMap& viewMap, bool extensiveFEdgeSe
|
||||
real prosceniumOrigin[2];
|
||||
prosceniumOrigin[0] = (viewProscenium[1] - viewProscenium[0]) / 2.0;
|
||||
prosceniumOrigin[1] = (viewProscenium[3] - viewProscenium[2]) / 2.0;
|
||||
cout << "Proscenium culling:" << endl;
|
||||
cout << "Proscenium: [" << viewProscenium[0] << ", " << viewProscenium[1] << ", " << viewProscenium[2]
|
||||
<< ", " << viewProscenium[3] << "]"<< endl;
|
||||
cout << "Origin: [" << prosceniumOrigin[0] << ", " << prosceniumOrigin[1] << "]"<< endl;
|
||||
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Proscenium culling:" << endl;
|
||||
cout << "Proscenium: [" << viewProscenium[0] << ", " << viewProscenium[1] << ", " << viewProscenium[2]
|
||||
<< ", " << viewProscenium[3] << "]"<< endl;
|
||||
cout << "Origin: [" << prosceniumOrigin[0] << ", " << prosceniumOrigin[1] << "]"<< endl;
|
||||
}
|
||||
|
||||
// A separate occluder proscenium will also be maintained, starting out the same as the viewport proscenium, and
|
||||
// expanding as necessary so that it encompasses the center point of at least one feature edge in each
|
||||
// retained view edge.
|
||||
|
@ -36,6 +36,8 @@
|
||||
#include "Functions0D.h"
|
||||
#include "ViewMap.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace Functions0D {
|
||||
@ -325,8 +327,11 @@ int QuantitativeInvisibilityF0D::operator()(Interface0DIterator& iter)
|
||||
qi1 = ve1->qi();
|
||||
if (ve2 != NULL) {
|
||||
qi2 = ve2->qi();
|
||||
if (qi2 != qi1)
|
||||
cout << "QuantitativeInvisibilityF0D: ambiguous evaluation for point " << iter->getId() << endl;
|
||||
if (qi2 != qi1) {
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "QuantitativeInvisibilityF0D: ambiguous evaluation for point " << iter->getId() << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
result = qi1;
|
||||
return 0;
|
||||
|
@ -42,6 +42,8 @@
|
||||
|
||||
#include "../geometry/BBox.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
class GridDensityProvider
|
||||
{
|
||||
// Disallow copying and assignment
|
||||
@ -90,8 +92,10 @@ public:
|
||||
source.next();
|
||||
}
|
||||
}
|
||||
cout << "Proscenium: (" << proscenium[0] << ", " << proscenium[1] << ", " << proscenium[2]
|
||||
<< ", " << proscenium[3] << ")" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Proscenium: (" << proscenium[0] << ", " << proscenium[1] << ", " << proscenium[2]
|
||||
<< ", " << proscenium[3] << ")" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
static void calculateQuickProscenium(const GridHelpers::Transform& transform, const BBox<Vec3r>& bbox,
|
||||
@ -108,13 +112,15 @@ public:
|
||||
// Now calculate the proscenium according to the min and max values of the x and y coordinates
|
||||
Vec3r minPoint = transform(Vec3r(bbox.getMin()[0], bbox.getMin()[1], z));
|
||||
Vec3r maxPoint = transform(Vec3r(bbox.getMax()[0], bbox.getMax()[1], z));
|
||||
cout << "Bounding box: " << minPoint << " to " << maxPoint << endl;
|
||||
proscenium[0] = std::min(minPoint[0], maxPoint[0]);
|
||||
proscenium[1] = std::max(minPoint[0], maxPoint[0]);
|
||||
proscenium[2] = std::min(minPoint[1], maxPoint[1]);
|
||||
proscenium[3] = std::max(minPoint[1], maxPoint[1]);
|
||||
cout << "Proscenium : " << proscenium[0] << ", " << proscenium[1] << ", " << proscenium[2] << ", "
|
||||
<< proscenium[3] << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Bounding box: " << minPoint << " to " << maxPoint << endl;
|
||||
cout << "Proscenium : " << proscenium[0] << ", " << proscenium[1] << ", " << proscenium[2] << ", "
|
||||
<< proscenium[3] << endl;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
|
@ -36,6 +36,8 @@
|
||||
|
||||
#include "OccluderSource.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
OccluderSource::OccluderSource(const GridHelpers::Transform& t, WingedEdge& we)
|
||||
: wingedEdge(we), valid(false), transform(t)
|
||||
{
|
||||
@ -127,8 +129,10 @@ void OccluderSource::getOccluderProscenium(real proscenium[4])
|
||||
GridHelpers::expandProscenium (proscenium, cachedPolygon);
|
||||
next();
|
||||
}
|
||||
cout << "Proscenium: (" << proscenium[0] << ", " << proscenium[1] << ", " << proscenium[2] << ", "
|
||||
<< proscenium[3] << ")" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Proscenium: (" << proscenium[0] << ", " << proscenium[1] << ", " << proscenium[2] << ", "
|
||||
<< proscenium[3] << ")" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
real OccluderSource::averageOccluderArea()
|
||||
|
@ -34,6 +34,8 @@
|
||||
|
||||
#include "Pow23GridDensityProvider.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
Pow23GridDensityProvider::Pow23GridDensityProvider(OccluderSource& source, const real proscenium[4], unsigned numFaces)
|
||||
: GridDensityProvider(source), numFaces(numFaces)
|
||||
{
|
||||
@ -66,13 +68,17 @@ void Pow23GridDensityProvider::initialize(const real proscenium[4])
|
||||
float prosceniumWidth = (proscenium[1] - proscenium[0]);
|
||||
float prosceniumHeight = (proscenium[3] - proscenium[2]);
|
||||
real cellArea = prosceniumWidth * prosceniumHeight / pow(numFaces, 2.0f / 3.0f);
|
||||
cout << prosceniumWidth << " x " << prosceniumHeight << " grid with cells of area " << cellArea << "." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << prosceniumWidth << " x " << prosceniumHeight << " grid with cells of area " << cellArea << "." << endl;
|
||||
}
|
||||
|
||||
_cellSize = sqrt(cellArea);
|
||||
// Now we know how many cells make each side of our grid
|
||||
_cellsX = ceil(prosceniumWidth / _cellSize);
|
||||
_cellsY = ceil(prosceniumHeight / _cellSize);
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
}
|
||||
|
||||
// Make sure the grid exceeds the proscenium by a small amount
|
||||
float safetyZone = 0.1;
|
||||
@ -82,7 +88,9 @@ void Pow23GridDensityProvider::initialize(const real proscenium[4])
|
||||
if (_cellsY * _cellSize < prosceniumHeight * (1.0 + safetyZone)) {
|
||||
_cellsY = prosceniumHeight * (1.0 + safetyZone) / _cellSize;
|
||||
}
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << _cellsX << "x" << _cellsY << " cells of size " << _cellSize << " square." << endl;
|
||||
}
|
||||
|
||||
// Find grid origin
|
||||
_cellOrigin[0] = ((proscenium[0] + proscenium[1]) / 2.0) - (_cellsX / 2.0) * _cellSize;
|
||||
|
@ -38,6 +38,8 @@
|
||||
|
||||
#include "../geometry/GeomUtils.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
Vec3r SilhouetteGeomEngine::_Viewpoint = Vec3r(0, 0, 0);
|
||||
@ -196,9 +198,11 @@ real SilhouetteGeomEngine::ImageToWorldParameter(FEdge *fe, real t)
|
||||
GeomUtils::fromWorldToCamera(Bw, Bc, _modelViewMatrix);
|
||||
Vec3r ABc = Bc - Ac;
|
||||
#if 0
|
||||
cout << "Ac " << Ac << endl;
|
||||
cout << "Bc " << Bc << endl;
|
||||
cout << "ABc " << ABc << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Ac " << Ac << endl;
|
||||
cout << "Bc " << Bc << endl;
|
||||
cout << "ABc " << ABc << endl;
|
||||
}
|
||||
#endif
|
||||
Vec3r Ai = (fe)->vertexA()->point2D();
|
||||
Vec3r Bi = (fe)->vertexB()->point2D();
|
||||
@ -295,10 +299,13 @@ iter:
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
printf("SilhouetteGeomEngine::ImageToWorldParameter(): #iters = %d, dist = %e\n", i, dist);
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("SilhouetteGeomEngine::ImageToWorldParameter(): #iters = %d, dist = %e\n", i, dist);
|
||||
}
|
||||
#endif
|
||||
if (i == max_iters)
|
||||
if (i == max_iters && G.debug & G_DEBUG_FREESTYLE) {
|
||||
printf("SilhouetteGeomEngine::ImageToWorldParameter(): reached to max_iters (dist = %e)\n", dist);
|
||||
}
|
||||
}
|
||||
|
||||
return T;
|
||||
|
@ -37,6 +37,8 @@
|
||||
|
||||
#include "SphericalGrid.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Helper Classes
|
||||
@ -81,9 +83,11 @@ SphericalGrid::Iterator::Iterator(SphericalGrid& grid, Vec3r& center, real epsil
|
||||
// Find target cell
|
||||
_cell = grid.findCell(_target);
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
cout << "Searching for occluders of edge centered at " << _target << " in cell ["
|
||||
<< _cell->boundary[0] << ", " << _cell->boundary[1] << ", " << _cell->boundary[2]
|
||||
<< ", " << _cell->boundary[3] << "] (" << _cell->faces.size() << " occluders)" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Searching for occluders of edge centered at " << _target << " in cell ["
|
||||
<< _cell->boundary[0] << ", " << _cell->boundary[1] << ", " << _cell->boundary[2]
|
||||
<< ", " << _cell->boundary[3] << "] (" << _cell->faces.size() << " occluders)" << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set iterator
|
||||
@ -99,16 +103,24 @@ SphericalGrid::SphericalGrid(OccluderSource& source, GridDensityProvider& densit
|
||||
Vec3r& viewpoint, bool enableQI)
|
||||
: _viewpoint(viewpoint), _enableQI(enableQI)
|
||||
{
|
||||
cout << "Generate Cell structure" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Generate Cell structure" << endl;
|
||||
}
|
||||
// Generate Cell structure
|
||||
assignCells(source, density, viewMap);
|
||||
cout << "Distribute occluders" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Distribute occluders" << endl;
|
||||
}
|
||||
// Fill Cells
|
||||
distributePolygons(source);
|
||||
cout << "Reorganize cells" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Reorganize cells" << endl;
|
||||
}
|
||||
// Reorganize Cells
|
||||
reorganizeCells();
|
||||
cout << "Ready to use SphericalGrid" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Ready to use SphericalGrid" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
SphericalGrid::~SphericalGrid() {}
|
||||
@ -175,7 +187,9 @@ void SphericalGrid::distributePolygons(OccluderSource& source)
|
||||
}
|
||||
++nFaces;
|
||||
}
|
||||
cout << "Distributed " << nFaces << " occluders. Retained " << nKeptFaces << "." << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Distributed " << nFaces << " occluders. Retained " << nKeptFaces << "." << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void SphericalGrid::reorganizeCells()
|
||||
|
@ -54,6 +54,8 @@
|
||||
|
||||
#include "../winged_edge/WEdge.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
class SphericalGrid
|
||||
{
|
||||
public:
|
||||
@ -192,14 +194,19 @@ inline void SphericalGrid::Iterator::initAfterTarget()
|
||||
{
|
||||
if (_foundOccludee) {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\tStarting occludee search from occludeeCandidate at depth " << _occludeeDepth << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\tStarting occludee search from occludeeCandidate at depth "
|
||||
<< _occludeeDepth << std::endl;
|
||||
}
|
||||
#endif
|
||||
_current = _occludeeCandidate;
|
||||
return;
|
||||
}
|
||||
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\tStarting occludee search from current position" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\tStarting occludee search from current position" << std::endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (_current != _cell->faces.end() && !testOccluder(true)) {
|
||||
@ -216,17 +223,21 @@ inline bool SphericalGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
return true;
|
||||
}
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\tTesting occluder " << (*_current)->poly.getVertices()[0];
|
||||
for (unsigned int i = 1; i < (*_current)->poly.getVertices().size(); ++i) {
|
||||
std::cout << ", " << (*_current)->poly.getVertices()[i];
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\tTesting occluder " << (*_current)->poly.getVertices()[0];
|
||||
for (unsigned int i = 1; i < (*_current)->poly.getVertices().size(); ++i) {
|
||||
std::cout << ", " << (*_current)->poly.getVertices()[i];
|
||||
}
|
||||
std::cout << " from shape " << (*_current)->face->GetVertex(0)->shape()->GetId() << std::endl;
|
||||
}
|
||||
std::cout << " from shape " << (*_current)->face->GetVertex(0)->shape()->GetId() << std::endl;
|
||||
#endif
|
||||
|
||||
// If we have an occluder candidate and we are unambiguously after it, abort
|
||||
if (_foundOccludee && (*_current)->shallowest > _occludeeDepth) {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\t\tAborting: shallowest > occludeeCandidate->deepest" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tAborting: shallowest > occludeeCandidate->deepest" << std::endl;
|
||||
}
|
||||
#endif
|
||||
_current = _cell->faces.end();
|
||||
|
||||
@ -238,7 +249,9 @@ inline bool SphericalGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
if (wantOccludee) {
|
||||
if ((*_current)->deepest < _target[2]) {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\t\tSkipping: shallower than target while looking for occludee" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tSkipping: shallower than target while looking for occludee" << std::endl;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
@ -246,7 +259,9 @@ inline bool SphericalGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
else {
|
||||
if ((*_current)->shallowest > _target[2]) {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\t\tStopping: deeper than target while looking for occluder" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tStopping: deeper than target while looking for occluder" << std::endl;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
@ -259,7 +274,9 @@ inline bool SphericalGrid::Iterator::testOccluder(bool wantOccludee)
|
||||
(*_current)->poly.getBBox(bbMin, bbMax);
|
||||
if (_target[0] < bbMin[0] || _target[0] > bbMax[0] || _target[1] < bbMin[1] || _target[1] > bbMax[1]) {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\t\tSkipping: bounding box violation" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tSkipping: bounding box violation" << std::endl;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
@ -275,11 +292,15 @@ inline void SphericalGrid::Iterator::reportDepth(Vec3r origin, Vec3r u, real t)
|
||||
// viewponit or target, at the cost of changing the OptimizedGrid API.
|
||||
real depth = (origin + u * t).norm();
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\t\tReporting depth of occluder/ee: " << depth;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tReporting depth of occluder/ee: " << depth;
|
||||
}
|
||||
#endif
|
||||
if (depth > _target[2]) {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << " is deeper than target" << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << " is deeper than target" << std::endl;
|
||||
}
|
||||
#endif
|
||||
// If the current occluder is the best occludee so far, save it.
|
||||
if (! _foundOccludee || _occludeeDepth > depth) {
|
||||
@ -288,7 +309,9 @@ inline void SphericalGrid::Iterator::reportDepth(Vec3r origin, Vec3r u, real t)
|
||||
}
|
||||
else {
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << std::endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -324,7 +347,9 @@ inline bool SphericalGrid::Iterator::validAfterTarget()
|
||||
inline void SphericalGrid::Iterator::markCurrentOccludeeCandidate(real depth)
|
||||
{
|
||||
#if SPHERICAL_GRID_LOGGING
|
||||
std::cout << "\t\tFound occludeeCandidate at depth " << depth << std::endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
std::cout << "\t\tFound occludeeCandidate at depth " << depth << std::endl;
|
||||
}
|
||||
#endif
|
||||
_occludeeCandidate = _current;
|
||||
_occludeeDepth = depth;
|
||||
|
@ -45,6 +45,8 @@
|
||||
#include "../image/ImagePyramid.h"
|
||||
#include "../image/Image.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
extern "C" {
|
||||
#include "IMB_imbuf.h"
|
||||
#include "IMB_imbuf_types.h"
|
||||
@ -206,9 +208,11 @@ void SteerableViewMap::buildImagesPyramids(GrayImage **steerableBases, bool copy
|
||||
float SteerableViewMap::readSteerableViewMapPixel(unsigned iOrientation, int iLevel, int x, int y)
|
||||
{
|
||||
ImagePyramid *pyramid = _imagesPyramids[iOrientation];
|
||||
if (pyramid == 0) {
|
||||
cout << "Warning: this steerable ViewMap level doesn't exist" << endl;
|
||||
return 0;
|
||||
if (!pyramid) {
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Warning: this steerable ViewMap level doesn't exist" << endl;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
if ((x < 0) || (x >= pyramid->width()) || (y < 0) || (y >= pyramid->height()))
|
||||
return 0;
|
||||
|
@ -50,6 +50,11 @@
|
||||
|
||||
#include "../winged_edge/WFillGrid.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
|
||||
// XXX Grmll... G is used as template's typename parameter :/
|
||||
const Global &_global = G;
|
||||
|
||||
#define LOGGING FALSE
|
||||
|
||||
using namespace std;
|
||||
@ -77,8 +82,10 @@ static void findOccludee(FEdge *fe, G& grid, I& occluders, real epsilon, WFace *
|
||||
|
||||
for (occluders.initAfterTarget(); occluders.validAfterTarget(); occluders.nextOccludee()) {
|
||||
#if LOGGING
|
||||
cout << "\t\tEvaluating intersection for occludee " << occluders.getWFace() << " and ray " << A
|
||||
<< " * " << u << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tEvaluating intersection for occludee " << occluders.getWFace() << " and ray " << A
|
||||
<< " * " << u << endl;
|
||||
}
|
||||
#endif
|
||||
oface = occluders.getWFace();
|
||||
Polygon3r *p = occluders.getCameraSpacePolygon();
|
||||
@ -125,7 +132,9 @@ static void findOccludee(FEdge *fe, G& grid, I& occluders, real epsilon, WFace *
|
||||
if (GeomUtils::COINCIDENT == GeomUtils::intersectRayPlane(origin, edge, p->getNormal(), d, t, epsilon))
|
||||
{
|
||||
#if LOGGING
|
||||
cout << "\t\tRejecting occluder for target coincidence." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tRejecting occluder for target coincidence." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -133,8 +142,10 @@ static void findOccludee(FEdge *fe, G& grid, I& occluders, real epsilon, WFace *
|
||||
|
||||
if (p->rayIntersect(A, v, t, t_u, t_v)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tRay " << A << " * " << v << " intersects at time " << t << endl;
|
||||
cout << "\t\t(v * normal) == " << (v * p->getNormal()) << " for normal " << p->getNormal() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tRay " << A << " * " << v << " intersects at time " << t << endl;
|
||||
cout << "\t\t(v * normal) == " << (v * p->getNormal()) << " for normal " << p->getNormal() << endl;
|
||||
}
|
||||
#endif
|
||||
if (fabs(v * p->getNormal()) > 0.0001) {
|
||||
if ((t > 0.0)) { // && (t<1.0))
|
||||
@ -144,7 +155,9 @@ static void findOccludee(FEdge *fe, G& grid, I& occluders, real epsilon, WFace *
|
||||
noIntersection = false;
|
||||
fe->setOccludeeIntersection(Vec3r(A + t * v));
|
||||
#if LOGGING
|
||||
cout << "\t\tIs occludee" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tIs occludee" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -244,9 +257,11 @@ static int computeVisibility(ViewMap *viewMap, FEdge *fe, G& grid, real epsilon,
|
||||
Polygon3r *p = occluders.getCameraSpacePolygon();
|
||||
real t, t_u, t_v;
|
||||
#if LOGGING
|
||||
cout << "\t\tEvaluating intersection for occluder " << (p->getVertices())[0] << (p->getVertices())[1]
|
||||
<< (p->getVertices())[2] << endl << "\t\t\tand ray " << vp << " * " << u << " (center " << center << ")"
|
||||
<< endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tEvaluating intersection for occluder " << (p->getVertices())[0] << (p->getVertices())[1]
|
||||
<< (p->getVertices())[2] << endl << "\t\t\tand ray " << vp << " * " << u << " (center " << center << ")"
|
||||
<< endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LOGGING
|
||||
@ -264,10 +279,12 @@ static int computeVisibility(ViewMap *viewMap, FEdge *fe, G& grid, real epsilon,
|
||||
Polygon3r p1(points, oface->GetNormal());
|
||||
Vec3r v1((p1.getVertices())[0]);
|
||||
real d = -(v1 * p->getNormal());
|
||||
cout << "\t\tp: " << (p->getVertices())[0] << (p->getVertices())[1] << (p->getVertices())[2] << ", norm: "
|
||||
<< p->getNormal() << endl;
|
||||
cout << "\t\tp1: " << (p1.getVertices())[0] << (p1.getVertices())[1] << (p1.getVertices())[2] << ", norm: "
|
||||
<< p1.getNormal() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tp: " << (p->getVertices())[0] << (p->getVertices())[1] << (p->getVertices())[2] << ", norm: "
|
||||
<< p->getNormal() << endl;
|
||||
cout << "\t\tp1: " << (p1.getVertices())[0] << (p1.getVertices())[1] << (p1.getVertices())[2] << ", norm: "
|
||||
<< p1.getNormal() << endl;
|
||||
}
|
||||
#else
|
||||
real d = -((p->getVertices())[0] * p->getNormal());
|
||||
#endif
|
||||
@ -275,13 +292,17 @@ static int computeVisibility(ViewMap *viewMap, FEdge *fe, G& grid, real epsilon,
|
||||
if (face)
|
||||
{
|
||||
#if LOGGING
|
||||
cout << "\t\tDetermining face adjacency...";
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tDetermining face adjacency...";
|
||||
}
|
||||
#endif
|
||||
skipFace = false;
|
||||
|
||||
if (face == oface) {
|
||||
#if LOGGING
|
||||
cout << " Rejecting occluder for face concurrency." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " Rejecting occluder for face concurrency." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -310,7 +331,9 @@ static int computeVisibility(ViewMap *viewMap, FEdge *fe, G& grid, real epsilon,
|
||||
}
|
||||
if (skipFace) {
|
||||
#if LOGGING
|
||||
cout << " Rejecting occluder for face adjacency." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " Rejecting occluder for face adjacency." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -321,33 +344,41 @@ static int computeVisibility(ViewMap *viewMap, FEdge *fe, G& grid, real epsilon,
|
||||
//first let us compute the plane equation.
|
||||
if (GeomUtils::COINCIDENT == GeomUtils::intersectRayPlane(origin, edge, p->getNormal(), d, t, epsilon)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tRejecting occluder for target coincidence." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tRejecting occluder for target coincidence." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
#if LOGGING
|
||||
real x;
|
||||
if (p1.rayIntersect(center, v, x, t_u, t_v)) {
|
||||
cout << "\t\tRay should intersect at time " << (rl - x) << ". Center: " << center << ", V: " << v
|
||||
<< ", RL: " << rl << ", T:" << x << endl;
|
||||
}
|
||||
else {
|
||||
cout << "\t\tRay should not intersect. Center: " << center << ", V: " << v << ", RL: " << rl << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
real x;
|
||||
if (p1.rayIntersect(center, v, x, t_u, t_v)) {
|
||||
cout << "\t\tRay should intersect at time " << (rl - x) << ". Center: " << center << ", V: " << v
|
||||
<< ", RL: " << rl << ", T:" << x << endl;
|
||||
}
|
||||
else {
|
||||
cout << "\t\tRay should not intersect. Center: " << center << ", V: " << v << ", RL: " << rl << endl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (p->rayIntersect(center, u, t, t_u, t_v)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tRay " << center << " * " << u << " intersects at time " << t << " (raylength is "
|
||||
<< raylength << ")" << endl;
|
||||
cout << "\t\t(u * normal) == " << (u * p->getNormal()) << " for normal " << p->getNormal() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tRay " << center << " * " << u << " intersects at time " << t << " (raylength is "
|
||||
<< raylength << ")" << endl;
|
||||
cout << "\t\t(u * normal) == " << (u * p->getNormal()) << " for normal " << p->getNormal() << endl;
|
||||
}
|
||||
#endif
|
||||
if (fabs(u * p->getNormal()) > 0.0001) {
|
||||
if ((t > 0.0) && (t < raylength)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tIs occluder" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tIs occluder" << endl;
|
||||
}
|
||||
#endif
|
||||
if ( foundOccluders != NULL ) {
|
||||
ViewShape *vshape = viewMap->viewShape(oface->GetVertex(0)->shape()->GetId());
|
||||
@ -395,7 +426,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
if (iRenderMonitor && iRenderMonitor->testBreak())
|
||||
break;
|
||||
#if LOGGING
|
||||
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
|
||||
}
|
||||
#endif
|
||||
// Find an edge to test
|
||||
if (!(*ve)->isInImage()) {
|
||||
@ -403,7 +436,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
(*ve)->setQI(255);
|
||||
(*ve)->setaShape(0);
|
||||
#if LOGGING
|
||||
cout << "\tCulled." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tCulled." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -422,7 +457,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
if (qiMajority == 0) {
|
||||
// There are no occludable FEdges on this ViewEdge
|
||||
// This should be impossible.
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
}
|
||||
// We can recover from this error:
|
||||
// Treat this edge as fully visible with no occludee
|
||||
(*ve)->setQI(0);
|
||||
@ -434,7 +471,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
qiMajority >>= 1;
|
||||
}
|
||||
#if LOGGING
|
||||
cout << "\tqiMajority: " << qiMajority << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tqiMajority: " << qiMajority << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
tmpQI = 0;
|
||||
@ -454,7 +493,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
//ARB: change &wFace to wFace and use reference in called function
|
||||
tmpQI = computeVisibility<G, I>(ioViewMap, fe, grid, epsilon, *ve, &wFace, &foundOccluders);
|
||||
#if LOGGING
|
||||
cout << "\tFEdge: visibility " << tmpQI << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFEdge: visibility " << tmpQI << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
//ARB: This is an error condition, not an alert condition.
|
||||
@ -475,7 +516,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
//ARB: change &wFace to wFace and use reference in called function
|
||||
findOccludee<G, I>(fe, grid, epsilon, *ve, &wFace);
|
||||
#if LOGGING
|
||||
cout << "\tFEdge: occludee only (" << (wFace != NULL ? "found" : "not found") << ")" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFEdge: occludee only (" << (wFace != NULL ? "found" : "not found") << ")" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -491,7 +534,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
wFaces.push_back(wFace);
|
||||
fe->setOccludeeEmpty(false);
|
||||
#if LOGGING
|
||||
cout << "\tFound occludee" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFound occludee" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
@ -503,7 +548,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
} while ((maxCard < qiMajority) && (fe) && (fe != festart));
|
||||
|
||||
#if LOGGING
|
||||
cout << "\tFinished with " << nSamples << " samples, maxCard = " << maxCard << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFinished with " << nSamples << " samples, maxCard = " << maxCard << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
// ViewEdge
|
||||
@ -523,7 +570,9 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
|
||||
(*ve)->AddOccluder((*o));
|
||||
}
|
||||
#if LOGGING
|
||||
cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() << " occluders." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() << " occluders." << endl;
|
||||
}
|
||||
#endif
|
||||
// occludee --
|
||||
if (!wFaces.empty()) {
|
||||
@ -557,7 +606,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
if (iRenderMonitor && iRenderMonitor->testBreak())
|
||||
break;
|
||||
#if LOGGING
|
||||
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
|
||||
}
|
||||
#endif
|
||||
// Find an edge to test
|
||||
if (!(*ve)->isInImage()) {
|
||||
@ -565,7 +616,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
(*ve)->setQI(255);
|
||||
(*ve)->setaShape(0);
|
||||
#if LOGGING
|
||||
cout << "\tCulled." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tCulled." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -584,7 +637,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
if (qiMajority == 0) {
|
||||
// There are no occludable FEdges on this ViewEdge
|
||||
// This should be impossible.
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
}
|
||||
// We can recover from this error:
|
||||
// Treat this edge as fully visible with no occludee
|
||||
(*ve)->setQI(0);
|
||||
@ -596,7 +651,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
qiMajority >>= 1;
|
||||
}
|
||||
#if LOGGING
|
||||
cout << "\tqiMajority: " << qiMajority << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tqiMajority: " << qiMajority << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
tmpQI = 0;
|
||||
@ -616,7 +673,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
//ARB: change &wFace to wFace and use reference in called function
|
||||
tmpQI = computeVisibility<G, I>(ioViewMap, fe, grid, epsilon, *ve, &wFace, &foundOccluders);
|
||||
#if LOGGING
|
||||
cout << "\tFEdge: visibility " << tmpQI << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFEdge: visibility " << tmpQI << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
//ARB: This is an error condition, not an alert condition.
|
||||
@ -637,7 +696,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
//ARB: change &wFace to wFace and use reference in called function
|
||||
findOccludee<G, I>(fe, grid, epsilon, *ve, &wFace);
|
||||
#if LOGGING
|
||||
cout << "\tFEdge: occludee only (" << (wFace != NULL ? "found" : "not found") << ")" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFEdge: occludee only (" << (wFace != NULL ? "found" : "not found") << ")" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -653,7 +714,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
wFaces.push_back(wFace);
|
||||
fe->setOccludeeEmpty(false);
|
||||
#if LOGGING
|
||||
cout << "\tFound occludee" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFound occludee" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
@ -665,7 +728,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
} while ((maxCard < qiMajority) && (fe) && (fe != festart));
|
||||
|
||||
#if LOGGING
|
||||
cout << "\tFinished with " << nSamples << " samples, maxCard = " << maxCard << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFinished with " << nSamples << " samples, maxCard = " << maxCard << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
// ViewEdge
|
||||
@ -678,7 +743,9 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon,
|
||||
(*ve)->AddOccluder((*o));
|
||||
}
|
||||
#if LOGGING
|
||||
cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() << " occluders." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() << " occluders." << endl;
|
||||
}
|
||||
#endif
|
||||
// occludee --
|
||||
if (!wFaces.empty()) {
|
||||
@ -735,7 +802,9 @@ static void computeFastVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
|
||||
if (qiMajority == 0 ) {
|
||||
// There are no occludable FEdges on this ViewEdge
|
||||
// This should be impossible.
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
}
|
||||
// We can recover from this error:
|
||||
// Treat this edge as fully visible with no occludee
|
||||
(*ve)->setQI(0);
|
||||
@ -852,7 +921,9 @@ static void computeVeryFastVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
|
||||
if (!fe || !fe->isInImage()) {
|
||||
// There are no occludable FEdges on this ViewEdge
|
||||
// This should be impossible.
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "View Edge in viewport without occludable FEdges: " << (*ve)->getId() << endl;
|
||||
}
|
||||
// We can recover from this error:
|
||||
// Treat this edge as fully visible with no occludee
|
||||
qi = 0;
|
||||
@ -889,7 +960,9 @@ void ViewMapBuilder::BuildGrid(WingedEdge& we, const BBox<Vec3r>& bbox, unsigned
|
||||
size[i] = fabs(bbox.getMax()[i] - bbox.getMin()[i]);
|
||||
size[i] += size[i]/10.0; // let make the grid 1/10 bigger to avoid numerical errors while computing triangles/cells intersections
|
||||
if (size[i] == 0) {
|
||||
cout << "Warning: the bbox size is 0 in dimension " << i << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Warning: the bbox size is 0 in dimension " << i << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
_Grid->configure(Vec3r(bbox.getMin() - size / 20.0), size, sceneNumFaces);
|
||||
@ -962,10 +1035,12 @@ void ViewMapBuilder::CullViewEdges(ViewMap *ioViewMap, real viewProscenium[4], r
|
||||
real prosceniumOrigin[2];
|
||||
prosceniumOrigin[0] = (viewProscenium[1] - viewProscenium[0]) / 2.0;
|
||||
prosceniumOrigin[1] = (viewProscenium[3] - viewProscenium[2]) / 2.0;
|
||||
cout << "Proscenium culling:" << endl;
|
||||
cout << "Proscenium: [" << viewProscenium[0] << ", " << viewProscenium[1] << ", " << viewProscenium[2]
|
||||
<< ", " << viewProscenium[3] << "]"<< endl;
|
||||
cout << "Origin: [" << prosceniumOrigin[0] << ", " << prosceniumOrigin[1] << "]"<< endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Proscenium culling:" << endl;
|
||||
cout << "Proscenium: [" << viewProscenium[0] << ", " << viewProscenium[1] << ", " << viewProscenium[2]
|
||||
<< ", " << viewProscenium[3] << "]"<< endl;
|
||||
cout << "Origin: [" << prosceniumOrigin[0] << ", " << prosceniumOrigin[1] << "]"<< endl;
|
||||
}
|
||||
|
||||
// A separate occluder proscenium will also be maintained, starting out the same as the viewport proscenium, and
|
||||
// expanding as necessary so that it encompasses the center point of at least one feature edge in each retained view
|
||||
@ -1276,22 +1351,30 @@ void ViewMapBuilder::ComputeEdgesVisibility(ViewMap *ioViewMap, WingedEdge& we,
|
||||
{
|
||||
switch(iAlgo) {
|
||||
case ray_casting:
|
||||
cout << "Using ordinary ray casting" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using ordinary ray casting" << endl;
|
||||
}
|
||||
BuildGrid(we, bbox, sceneNumFaces);
|
||||
ComputeRayCastingVisibility(ioViewMap, epsilon);
|
||||
break;
|
||||
case ray_casting_fast:
|
||||
cout << "Using fast ray casting" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using fast ray casting" << endl;
|
||||
}
|
||||
BuildGrid(we, bbox, sceneNumFaces);
|
||||
ComputeFastRayCastingVisibility(ioViewMap, epsilon);
|
||||
break;
|
||||
case ray_casting_very_fast:
|
||||
cout << "Using very fast ray casting" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using very fast ray casting" << endl;
|
||||
}
|
||||
BuildGrid(we, bbox, sceneNumFaces);
|
||||
ComputeVeryFastRayCastingVisibility(ioViewMap, epsilon);
|
||||
break;
|
||||
case ray_casting_culled_adaptive_traditional:
|
||||
cout << "Using culled adaptive grid with heuristic density and traditional QI calculation" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using culled adaptive grid with heuristic density and traditional QI calculation" << endl;
|
||||
}
|
||||
try {
|
||||
HeuristicGridDensityProviderFactory factory(0.5f, sceneNumFaces);
|
||||
ComputeDetailedVisibility(ioViewMap, we, bbox, epsilon, true, factory);
|
||||
@ -1310,7 +1393,9 @@ void ViewMapBuilder::ComputeEdgesVisibility(ViewMap *ioViewMap, WingedEdge& we,
|
||||
}
|
||||
break;
|
||||
case ray_casting_adaptive_traditional:
|
||||
cout << "Using unculled adaptive grid with heuristic density and traditional QI calculation" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using unculled adaptive grid with heuristic density and traditional QI calculation" << endl;
|
||||
}
|
||||
try {
|
||||
HeuristicGridDensityProviderFactory factory(0.5f, sceneNumFaces);
|
||||
ComputeDetailedVisibility(ioViewMap, we, bbox, epsilon, false, factory);
|
||||
@ -1320,7 +1405,9 @@ void ViewMapBuilder::ComputeEdgesVisibility(ViewMap *ioViewMap, WingedEdge& we,
|
||||
}
|
||||
break;
|
||||
case ray_casting_culled_adaptive_cumulative:
|
||||
cout << "Using culled adaptive grid with heuristic density and cumulative QI calculation" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using culled adaptive grid with heuristic density and cumulative QI calculation" << endl;
|
||||
}
|
||||
try {
|
||||
HeuristicGridDensityProviderFactory factory(0.5f, sceneNumFaces);
|
||||
ComputeCumulativeVisibility(ioViewMap, we, bbox, epsilon, true, factory);
|
||||
@ -1330,7 +1417,9 @@ void ViewMapBuilder::ComputeEdgesVisibility(ViewMap *ioViewMap, WingedEdge& we,
|
||||
}
|
||||
break;
|
||||
case ray_casting_adaptive_cumulative:
|
||||
cout << "Using unculled adaptive grid with heuristic density and cumulative QI calculation" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Using unculled adaptive grid with heuristic density and cumulative QI calculation" << endl;
|
||||
}
|
||||
try {
|
||||
HeuristicGridDensityProviderFactory factory(0.5f, sceneNumFaces);
|
||||
ComputeCumulativeVisibility(ioViewMap, we, bbox, epsilon, false, factory);
|
||||
@ -1379,7 +1468,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
if (_pRenderMonitor && _pRenderMonitor->testBreak())
|
||||
break;
|
||||
#if LOGGING
|
||||
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
|
||||
}
|
||||
#endif
|
||||
festart = (*ve)->fedgeA();
|
||||
fe = (*ve)->fedgeA();
|
||||
@ -1390,7 +1481,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
} while (fe && fe != festart);
|
||||
qiMajority >>= 1;
|
||||
#if LOGGING
|
||||
cout << "\tqiMajority: " << qiMajority << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tqiMajority: " << qiMajority << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
tmpQI = 0;
|
||||
@ -1405,7 +1498,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
tmpQI = ComputeRayCastingVisibility(fe, _Grid, epsilon, occluders, &aFace, timestamp++);
|
||||
|
||||
#if LOGGING
|
||||
cout << "\tFEdge: visibility " << tmpQI << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFEdge: visibility " << tmpQI << endl;
|
||||
}
|
||||
#endif
|
||||
//ARB: This is an error condition, not an alert condition.
|
||||
// Some sort of recovery or abort is necessary.
|
||||
@ -1424,7 +1519,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
//ARB: FindOccludee is redundant if ComputeRayCastingVisibility has been called
|
||||
FindOccludee(fe, _Grid, epsilon, &aFace, timestamp++);
|
||||
#if LOGGING
|
||||
cout << "\tFEdge: occludee only (" << (aFace != NULL ? "found" : "not found") << ")" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFEdge: occludee only (" << (aFace != NULL ? "found" : "not found") << ")" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1433,7 +1530,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
aFaces.push_back(aFace);
|
||||
fe->setOccludeeEmpty(false);
|
||||
#if LOGGING
|
||||
cout << "\tFound occludee" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFound occludee" << endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
@ -1447,7 +1546,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
fe = fe->nextEdge();
|
||||
} while ((maxCard < qiMajority) && (fe) && (fe != festart));
|
||||
#if LOGGING
|
||||
cout << "\tFinished with " << nSamples << " samples, maxCard = " << maxCard << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tFinished with " << nSamples << " samples, maxCard = " << maxCard << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
// ViewEdge
|
||||
@ -1457,7 +1558,9 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
|
||||
for (set<ViewShape*>::iterator o = occluders.begin(), oend = occluders.end(); o != oend; ++o)
|
||||
(*ve)->AddOccluder((*o));
|
||||
#if LOGGING
|
||||
cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() << " occluders." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() << " occluders." << endl;
|
||||
}
|
||||
#endif
|
||||
// occludee --
|
||||
if (!aFaces.empty()) {
|
||||
@ -1837,9 +1940,11 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
real raylength = u.norm();
|
||||
u.normalize();
|
||||
#if 0
|
||||
cout << "grid origin " << iGrid->getOrigin().x() << "," << iGrid->getOrigin().y() << ","
|
||||
<< iGrid->getOrigin().z() << endl;
|
||||
cout << "center " << center.x() << "," << center.y() << "," << center.z() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "grid origin " << iGrid->getOrigin().x() << "," << iGrid->getOrigin().y() << ","
|
||||
<< iGrid->getOrigin().z() << endl;
|
||||
cout << "center " << center.x() << "," << center.y() << "," << center.z() << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
iGrid->castRay(center, vp, occluders, timestamp);
|
||||
@ -1864,9 +1969,11 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
//-----------
|
||||
oface = (WFace*)(*p)->userdata;
|
||||
#if LOGGING
|
||||
cout << "\t\tEvaluating intersection for occluder " << ((*p)->getVertices())[0] << ((*p)->getVertices())[1]
|
||||
<< ((*p)->getVertices())[2] << endl << "\t\t\tand ray " << vp << " * " << u << " (center " << center
|
||||
<< ")" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tEvaluating intersection for occluder " << ((*p)->getVertices())[0] << ((*p)->getVertices())[1]
|
||||
<< ((*p)->getVertices())[2] << endl << "\t\t\tand ray " << vp << " * " << u << " (center " << center
|
||||
<< ")" << endl;
|
||||
}
|
||||
#endif
|
||||
Vec3r v1(((*p)->getVertices())[0]);
|
||||
Vec3r normal((*p)->getNormal());
|
||||
@ -1874,19 +1981,25 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
real t, t_u, t_v;
|
||||
|
||||
#if LOGGING
|
||||
cout << "\t\tp: " << ((*p)->getVertices())[0] << ((*p)->getVertices())[1] << ((*p)->getVertices())[2]
|
||||
<< ", norm: " << (*p)->getNormal() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tp: " << ((*p)->getVertices())[0] << ((*p)->getVertices())[1] << ((*p)->getVertices())[2]
|
||||
<< ", norm: " << (*p)->getNormal() << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (face) {
|
||||
#if LOGGING
|
||||
cout << "\t\tDetermining face adjacency...";
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tDetermining face adjacency...";
|
||||
}
|
||||
#endif
|
||||
skipFace = false;
|
||||
|
||||
if (face == oface) {
|
||||
#if LOGGING
|
||||
cout << " Rejecting occluder for face concurrency." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " Rejecting occluder for face concurrency." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -1917,7 +2030,9 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
}
|
||||
if (skipFace) {
|
||||
#if LOGGING
|
||||
cout << " Rejecting occluder for face adjacency." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " Rejecting occluder for face adjacency." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -1929,7 +2044,9 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
|
||||
if (GeomUtils::COINCIDENT == GeomUtils::intersectRayPlane(origin, edge, normal, d, t, epsilon)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tRejecting occluder for target coincidence." << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tRejecting occluder for target coincidence." << endl;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -1937,14 +2054,18 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
|
||||
if ((*p)->rayIntersect(center, u, t, t_u, t_v)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tRay " << vp << " * " << u << " intersects at time " << t << " (raylength is "
|
||||
<< raylength << ")" << endl;
|
||||
cout << "\t\t(u * normal) == " << (u * normal) << " for normal " << normal << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tRay " << vp << " * " << u << " intersects at time " << t << " (raylength is "
|
||||
<< raylength << ")" << endl;
|
||||
cout << "\t\t(u * normal) == " << (u * normal) << " for normal " << normal << endl;
|
||||
}
|
||||
#endif
|
||||
if (fabs(u * normal) > 0.0001) {
|
||||
if ((t>0.0) && (t<raylength)) {
|
||||
#if LOGGING
|
||||
cout << "\t\tIs occluder" << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "\t\tIs occluder" << endl;
|
||||
}
|
||||
#endif
|
||||
WFace *f = (WFace*)((*p)->userdata);
|
||||
ViewShape *vshape = _ViewMap->viewShape(f->GetVertex(0)->shape()->GetId());
|
||||
@ -1979,11 +2100,13 @@ void ViewMapBuilder::ComputeIntersections(ViewMap *ioViewMap, intersection_algo
|
||||
{
|
||||
if ((*vv)->getNature() == Nature::T_VERTEX) {
|
||||
TVertex *tvertex = (TVertex*)(*vv);
|
||||
cout << "TVertex " << tvertex->getId() << " has :" << endl;
|
||||
cout << "FrontEdgeA: " << tvertex->frontEdgeA().first << endl;
|
||||
cout << "FrontEdgeB: " << tvertex->frontEdgeB().first << endl;
|
||||
cout << "BackEdgeA: " << tvertex->backEdgeA().first << endl;
|
||||
cout << "BackEdgeB: " << tvertex->backEdgeB().first << endl << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "TVertex " << tvertex->getId() << " has :" << endl;
|
||||
cout << "FrontEdgeA: " << tvertex->frontEdgeA().first << endl;
|
||||
cout << "FrontEdgeB: " << tvertex->frontEdgeB().first << endl;
|
||||
cout << "BackEdgeA: " << tvertex->backEdgeA().first << endl;
|
||||
cout << "BackEdgeB: " << tvertex->backEdgeB().first << endl << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2061,9 +2184,11 @@ void ViewMapBuilder::ComputeSweepLineIntersections(ViewMap *ioViewMap, real epsi
|
||||
unsigned sVerticesSize = svertices.size();
|
||||
unsigned fEdgesSize = ioViewMap->FEdges().size();
|
||||
#if 0
|
||||
ViewMap::fedges_container& fedges = ioViewMap->FEdges();
|
||||
for (ViewMap::fedges_container::const_iterator f = fedges.begin(), end = fedges.end(); f != end; ++f) {
|
||||
cout << (*f)->aMaterialIndex() << "-" << (*f)->bMaterialIndex() << endl;
|
||||
if (_global.debug & G_DEBUG_FREESTYLE) {
|
||||
ViewMap::fedges_container& fedges = ioViewMap->FEdges();
|
||||
for (ViewMap::fedges_container::const_iterator f = fedges.begin(), end = fedges.end(); f != end; ++f) {
|
||||
cout << (*f)->aMaterialIndex() << "-" << (*f)->bMaterialIndex() << endl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
unsigned progressBarStep = 0;
|
||||
@ -2184,17 +2309,19 @@ void ViewMapBuilder::ComputeSweepLineIntersections(ViewMap *ioViewMap, real epsi
|
||||
<< fB->vertexB()->getId() << endl;
|
||||
|
||||
#if 0
|
||||
if ((Ta < -epsilon) || (Ta > 1 + epsilon) || (Tb < -epsilon) || (Tb > 1 + epsilon)) {
|
||||
printf("ta %.12e\n", ta);
|
||||
printf("tb %.12e\n", tb);
|
||||
printf("a1 %e, %e -- b1 %e, %e\n", a1[0], a1[1], b1[0], b1[1]);
|
||||
printf("a2 %e, %e -- b2 %e, %e\n", a2[0], a2[1], b2[0], b2[1]);
|
||||
if ((Ta < -epsilon) || (Ta > 1 + epsilon))
|
||||
printf("Ta %.12e\n", Ta);
|
||||
if ((Tb < -epsilon) || (Tb > 1 + epsilon))
|
||||
printf("Tb %.12e\n", Tb);
|
||||
printf("A1 %e, %e, %e -- B1 %e, %e, %e\n", A1[0], A1[1], A1[2], B1[0], B1[1], B1[2]);
|
||||
printf("A2 %e, %e, %e -- B2 %e, %e, %e\n", A2[0], A2[1], A2[2], B2[0], B2[1], B2[2]);
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
if ((Ta < -epsilon) || (Ta > 1 + epsilon) || (Tb < -epsilon) || (Tb > 1 + epsilon)) {
|
||||
printf("ta %.12e\n", ta);
|
||||
printf("tb %.12e\n", tb);
|
||||
printf("a1 %e, %e -- b1 %e, %e\n", a1[0], a1[1], b1[0], b1[1]);
|
||||
printf("a2 %e, %e -- b2 %e, %e\n", a2[0], a2[1], b2[0], b2[1]);
|
||||
if ((Ta < -epsilon) || (Ta > 1 + epsilon))
|
||||
printf("Ta %.12e\n", Ta);
|
||||
if ((Tb < -epsilon) || (Tb > 1 + epsilon))
|
||||
printf("Tb %.12e\n", Tb);
|
||||
printf("A1 %e, %e, %e -- B1 %e, %e, %e\n", A1[0], A1[1], A1[2], B1[0], B1[1], B1[2]);
|
||||
printf("A2 %e, %e, %e -- B2 %e, %e, %e\n", A2[0], A2[1], A2[2], B2[0], B2[1], B2[2]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
*/
|
||||
|
||||
#include "WXEdge.h"
|
||||
#include "BKE_global.h"
|
||||
|
||||
/**********************************
|
||||
* *
|
||||
@ -132,7 +133,9 @@ WXSmoothEdge *WXFaceLayer::BuildSmoothEdge()
|
||||
RetrieveCuspEdgesIndices(cuspEdgesIndices);
|
||||
// We should have only one EdgeCusp:
|
||||
if (cuspEdgesIndices.size() != 1) {
|
||||
cout << "Warning in BuildSmoothEdge: weird WXFace configuration" << endl;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Warning in BuildSmoothEdge: weird WXFace configuration" << endl;
|
||||
}
|
||||
_pSmoothEdge = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
@ -241,12 +241,13 @@ static PyObject *bpy_app_driver_dict_get(PyObject *UNUSED(self), void *UNUSED(cl
|
||||
|
||||
|
||||
static PyGetSetDef bpy_app_getsets[] = {
|
||||
{(char *)"debug", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG},
|
||||
{(char *)"debug_ffmpeg", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_FFMPEG},
|
||||
{(char *)"debug_python", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_PYTHON},
|
||||
{(char *)"debug_events", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_EVENTS},
|
||||
{(char *)"debug_handlers", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_HANDLERS},
|
||||
{(char *)"debug_wm", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_WM},
|
||||
{(char *)"debug", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG},
|
||||
{(char *)"debug_ffmpeg", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_FFMPEG},
|
||||
{(char *)"debug_freestyle", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_FREESTYLE},
|
||||
{(char *)"debug_python", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_PYTHON},
|
||||
{(char *)"debug_events", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_EVENTS},
|
||||
{(char *)"debug_handlers", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_HANDLERS},
|
||||
{(char *)"debug_wm", bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_WM},
|
||||
|
||||
{(char *)"debug_value", bpy_app_debug_value_get, bpy_app_debug_value_set, (char *)bpy_app_debug_value_doc, NULL},
|
||||
{(char *)"tempdir", bpy_app_tempdir_get, NULL, (char *)bpy_app_tempdir_doc, NULL},
|
||||
|
@ -1138,6 +1138,11 @@ static void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
|
||||
#ifdef WITH_FFMPEG
|
||||
BLI_argsAdd(ba, 1, NULL, "--debug-ffmpeg", "\n\tEnable debug messages from FFmpeg library", debug_mode_generic, (void *)G_DEBUG_FFMPEG);
|
||||
#endif
|
||||
|
||||
#ifdef WITH_FREESTYLE
|
||||
BLI_argsAdd(ba, 1, NULL, "--debug-freestyle", "\n\tEnable debug/profiling messages from Freestyle rendering", debug_mode_generic, (void *)G_DEBUG_FREESTYLE);
|
||||
#endif
|
||||
|
||||
BLI_argsAdd(ba, 1, NULL, "--debug-python", "\n\tEnable debug messages for python", debug_mode_generic, (void *)G_DEBUG_PYTHON);
|
||||
BLI_argsAdd(ba, 1, NULL, "--debug-events", "\n\tEnable debug messages for the event system", debug_mode_generic, (void *)G_DEBUG_EVENTS);
|
||||
BLI_argsAdd(ba, 1, NULL, "--debug-handlers", "\n\tEnable debug messages for event handling", debug_mode_generic, (void *)G_DEBUG_HANDLERS);
|
||||
|
Loading…
Reference in New Issue
Block a user