debugging messages. update diffpng

Conflicts:
	src/Camera.cc
	tests/CMakeLists.txt
master
Don Bright 2014-06-23 21:23:09 -05:00 committed by Marius Kintel
parent 3c71753332
commit 02f91a7413
4 changed files with 80 additions and 30 deletions

View File

@ -1,5 +1,6 @@
#include "Camera.h"
#include "rendersettings.h"
#include "printutils.h"
Camera::Camera(enum CameraType camtype) :
type(camtype), projection(Camera::PERSPECTIVE), fov(45), height(60), viewall(false)

View File

@ -15,12 +15,14 @@
static void setupCamera(Camera &cam, const BoundingBox &bbox, float scalefactor)
{
PRINTDB("setupCamera() %i",cam.type);
if (cam.type == Camera::NONE) cam.viewall = true;
if (cam.viewall) cam.viewAll(bbox, scalefactor);
}
void export_png(const Geometry *root_geom, Camera &cam, std::ostream &output)
{
PRINTD("export_png geom");
OffscreenView *glview;
try {
glview = new OffscreenView(cam.pixel_width, cam.pixel_height);
@ -50,6 +52,7 @@ enum Previewer { OPENCSG, THROWNTOGETHER } previewer;
void export_png_preview_common(Tree &tree, Camera &cam, std::ostream &output, Previewer previewer = OPENCSG)
{
PRINTD("export_png_preview_common");
CsgInfo csgInfo = CsgInfo();
if (!csgInfo.compile_chains(tree)) {
fprintf(stderr,"Couldn't initialize CSG chains\n");
@ -88,6 +91,7 @@ void export_png_preview_common(Tree &tree, Camera &cam, std::ostream &output, Pr
void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
{
PRINTD("export_png_w_opencsg");
#ifdef ENABLE_OPENCSG
export_png_preview_common(tree, cam, output, OPENCSG);
#else
@ -97,6 +101,7 @@ void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
void export_png_with_throwntogether(Tree &tree, Camera &cam, std::ostream &output)
{
PRINTD("export_png_w_thrown");
export_png_preview_common(tree, cam, output, THROWNTOGETHER);
}

View File

@ -1201,8 +1201,8 @@ add_cmdline_test(throwntogethertest EXE ${OPENSCAD_BINPATH} ARGS --preview=throw
add_cmdline_test(cgalstlsanitytest EXE ${CMAKE_SOURCE_DIR}/cgalstlsanitytest SUFFIX txt ARGS ${OPENSCAD_BINPATH} FILES ${CGALSTLSANITYTEST_FILES})
# Export/Import 3d png tests.
add_cmdline_test(stlpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/test_3d_export.py ARGS ${OPENSCAD_BINPATH} STL SUFFIX png FILES ${EXPORT3D_TEST_FILES})
add_cmdline_test(offpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/test_3d_export.py ARGS ${OPENSCAD_BINPATH} OFF SUFFIX png FILES ${EXPORT3D_TEST_FILES})
add_cmdline_test(stlpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=STL SUFFIX png FILES ${EXPORT3D_TEST_FILES})
add_cmdline_test(offpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=OFF SUFFIX png FILES ${EXPORT3D_TEST_FILES})
# Add experimental tests

View File

@ -98,12 +98,16 @@ using namespace std;
class RGBAImage
{
public:
RGBAImage(const RGBAImage &);
RGBAImage &operator=(const RGBAImage &);
RGBAImage(const RGBAImage &img) {
Width = img.Width;
Height = img.Height;
Name = img.Name;
Data = img.Data;
};
unsigned int Width;
unsigned int Height;
const string Name;
string Name;
vector<unsigned int> Data;
RGBAImage(unsigned int w, unsigned int h, const string &name="")
@ -1076,6 +1080,30 @@ bool Yee_Compare_Engine(CompareArgs &args)
return false;
}
void copy( diffpng::RGBAImage &dest, diffpng::RGBAImage &src) {
dest.Data.clear();
dest.Data.resize( src.Data.size() );
for (unsigned i=0;i<src.Data.size();i++) {
dest.Data[i] = src.Data[i];
}
dest.Width = src.Width;
dest.Height = src.Height;
dest.Name = src.Name;
}
bool ShiftAndTest( CompareArgs &args, RGBAImage &originalB, int xshift, int yshift ) {
args.ImgB->Shift(xshift,yshift);
args.ImgB->DownSample();
args.ImgB->SimpleBlur();
args.ImgB->SimpleBlur();
bool test = Yee_Compare_Engine( args );
if (args.ImgDiff) args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diffshift1.png");
cout << "result: " << test << "\n";
copy(*args.ImgB, originalB);
return test;
}
/*
Multi-stage comparison.
@ -1120,8 +1148,8 @@ bool LevelClimberCompare(CompareArgs &args) {
while (test==false && args.MaxPyramidLevels<args.FinalMaxPyramidLevels) {
cout << "Testing with Max Pyramid Levels=" << args.MaxPyramidLevels << "\n";
test |= Yee_Compare_Engine( args );
cout << "Result:" << test << " : " << args.ErrorStr << "\n";
test = Yee_Compare_Engine( args );
cout << "Result: " << test << " ErrorStr:" << args.ErrorStr << "\n";
if (args.ImgDiff) {
std::stringstream s; s<<args.MaxPyramidLevels;
args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diff.maxlevel"+s.str()+".png");
@ -1135,6 +1163,8 @@ bool LevelClimberCompare(CompareArgs &args) {
}
}
diffpng::RGBAImage originalA(*args.ImgA);
diffpng::RGBAImage originalB(*args.ImgB);
// the purpose of downsampling is not necessarily to throw away pixels.
// it is to enable the higher pyramid levels to run at a
@ -1142,7 +1172,6 @@ bool LevelClimberCompare(CompareArgs &args) {
if (test==false) {
cout << "\nTests detected differences at final max pyramid level. \n";
cout << "Retesting with downsampling and simple blur\n\n";
args.ImgA->DownSample();
args.ImgB->DownSample();
args.ImgA->SimpleBlur();
@ -1160,36 +1189,51 @@ bool LevelClimberCompare(CompareArgs &args) {
}
args.ColorFactor = 0.05;
cout << "Testing with Max Pyramid Levels=" << args.MaxPyramidLevels << "\n";
test |= Yee_Compare_Engine( args );
cout << "Result:" << test << " : " << args.ErrorStr << "\n";
test = Yee_Compare_Engine( args );
cout << "Result: " << test << " ErrorStr:" << args.ErrorStr << "\n";
if (args.ImgDiff)
args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diff.sampleddown.png");
if (test) return true;
};
copy(*args.ImgA, originalA);
copy(*args.ImgB, originalB);
args.ImgA->DownSample();
args.ImgA->SimpleBlur();
args.ImgA->SimpleBlur();
if (args.ImgDiff) args.ImgDiff->DownSample();
if (test==false) {
args.ColorFactor = 0.01;
cout << "\nTests detected differences after downsample. \n";
cout << "Retesting with small pixel shifts\n";
args.ImgB->Shift(-1,0);
args.ImgB->WriteToFile( "shift1.png" );
test |= Yee_Compare_Engine( args );
if (args.ImgDiff) args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diffshift1.png");
cout << "result:" << test << " : " << args.ErrorStr << "\n";
args.ImgB->Shift(2,0);
args.ImgB->WriteToFile( "shift2.png" );
test |= Yee_Compare_Engine( args );
if (args.ImgDiff) args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diffshift2.png");
cout << "result:" << test << " : " << args.ErrorStr << "\n";
args.ImgB->Shift(-1,-1);
args.ImgB->WriteToFile( "shift3.png" );
test |= Yee_Compare_Engine( args );
if (args.ImgDiff) args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diffshift3.png");
cout << "result:" << test << " : " << args.ErrorStr << "\n";
args.ImgB->Shift(0,2);
args.ImgB->WriteToFile( "shift4.png" );
test |= Yee_Compare_Engine( args );
if (args.ImgDiff) args.ImgDiff->WriteToFile(args.ImgDiff->Get_Name()+".diffshift4.png");
cout << "result:" << test << " : " << args.ErrorStr << "\n";
if (ShiftAndTest(args, originalB, -2, 0)) return true;
if (ShiftAndTest(args, originalB, 2, 0)) return true;
if (ShiftAndTest(args, originalB, 0,-2)) return true;
if (ShiftAndTest(args, originalB, 0, 2)) return true;
if (ShiftAndTest(args, originalB, -1, 0)) return true;
if (ShiftAndTest(args, originalB, 1, 0)) return true;
if (ShiftAndTest(args, originalB, 0,-1)) return true;
if (ShiftAndTest(args, originalB, 0, 1)) return true;
/*
if (ShiftAndTest(args, originalB, -2, 2)) return true;
if (ShiftAndTest(args, originalB, 2, 2)) return true;
if (ShiftAndTest(args, originalB, 2,-2)) return true;
if (ShiftAndTest(args, originalB, 2, 2)) return true;
*/
/*
if (ShiftAndTest(args, originalB, -1,-1)) return true;
if (ShiftAndTest(args, originalB, 1,-1)) return true;
if (ShiftAndTest(args, originalB, -1, 1)) return true;
if (ShiftAndTest(args, originalB, 1, 1)) return true;
*/
}
return test;
}