23 #include <QtOpenGL/QtOpenGL>
24 #include<vcg/space/box2.h>
25 #include<vcg/space/box3.h>
26 #include<vcg/math/random_generator.h>
27 #include<wrap/qt/col_qt_convert.h>
28 #include <vcg/space/rect_packer.h>
29 #include <vcg/space/outline2_packer.h>
30 #include <vcg/space/rasterized_outline2_packer.h>
31 #include <vcg/complex/algorithms/outline_support.h>
32 #include <wrap/qt/Outline2ToQImage.h>
33 #include <wrap/qt/outline2_rasterizer.h>
40 static void buildRandRectSet(
int rectNum, vector<Box2f> &rectVec)
42 math::MarsenneTwisterRNG rnd;
48 rnd.initialize(time(0));
49 for(
int i=0;i<rectNum;++i)
52 float ratio=ratioMin+(ratioMax-ratioMin)*rnd.generate01();
53 float size= sizeMin+(sizeMax-sizeMin)*pow((
float)rnd.generate01(),exp);
54 bb.min=Point2f(-size*ratio,-size);
55 bb.max=Point2f( size*ratio, size);
56 rectVec.push_back(bb);
60 int main(
int ,
char ** )
62 vector<Similarity2f> trVec;
63 vector<Similarity2f> trPolyVec;
64 vector< vector<Point2f> > outline2Vec;
65 vector< vector<Point2f> > multiPolySet;
67 std::vector<Point2f> finalSizeVec;
68 const Point2i containerSize(1024,1024);
69 Outline2Dumper::Param pp;
70 std::vector<int> contInd;
72 vector<Box2f> rectVec;
73 buildRandRectSet(10,rectVec);
75 RectPacker<float>::PackMulti(rectVec,containerSize,3,trVec,contInd,finalSizeVec);
76 RectPacker<float>::Stat s = RectPacker<float>::stat();
77 printf(
"RectPacker attempt %i time %5.3f %5.3f\n",s.pack_attempt_num,s.pack_total_time,s.pack_attempt_time);
103 vcg::tri::OutlineUtil<float>::BuildRandomOutlineVec(25,outline2Vec);
105 PolyPacker<float>::PackAsEqualSquares(outline2Vec,containerSize,trVec,finalSize);
106 Outline2Dumper::dumpOutline2VecPNG(
"testpolyEq.png",outline2Vec,trVec,pp);
108 PolyPacker<float>::PackAsAxisAlignedRect(outline2Vec,containerSize,trVec,finalSize);
109 Outline2Dumper::dumpOutline2VecPNG(
"testpolyAA.png",outline2Vec,trVec,pp);
111 PolyPacker<float>::PackAsObjectOrientedRect(outline2Vec,containerSize,trVec,finalSize);
112 Outline2Dumper::dumpOutline2VecPNG(
"testpolyOO.png",outline2Vec,trVec,pp);
114 RasterizedOutline2Packer<float, QtOutline2Rasterizer>::Parameters packingParam;
116 packingParam.costFunction = RasterizedOutline2Packer<float, QtOutline2Rasterizer>::Parameters::LowestHorizon;
117 packingParam.doubleHorizon =
true;
118 packingParam.rotationNum = 16;
120 RasterizedOutline2Packer<float, QtOutline2Rasterizer>::Pack(outline2Vec,containerSize,trVec,packingParam);
121 Outline2Dumper::dumpOutline2VecPNG(
"testpolyRR.png",outline2Vec,trVec,pp);