Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 26 additions & 35 deletions src/main/cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ int main(int argc, char** argv)
std::string fn_bary;
std::string fn_dev;
std::string fn_out;
unsigned int nbSample;
unsigned short int seed;

boostPO::variables_map vm;
boostPO::options_description desc("Allowed options");
Expand All @@ -23,14 +25,20 @@ int main(int argc, char** argv)
boostPO::value<std::string>(&fn_rules)->required(),
"REQUIRED | Subdivision rule filename")
("bary,b",
boostPO::value<std::string>(&fn_bary),
"Barycenter offset filename (for each rule id)")
boostPO::value<std::string>(&fn_bary)->required(),
"REQUIRED | Barycenter offset filename (for each rule id)")
("dev,d",
boostPO::value<std::string>(&fn_dev),
"Offset filename (for each structural indices)")
"Offset LUT filename (for each structural indices)")
("out,o",
boostPO::value<std::string>(&fn_out),
"Output filename")
("nbSample,n",
boostPO::value<unsigned int>(&nbSample)->default_value(1024),
"Number of sample de generate")
("seed,s",
boostPO::value<unsigned short int>(&seed)->default_value(0),
"Initial tile to use for sampling ([1-408], 0 = random)")
;

try
Expand All @@ -55,39 +63,22 @@ int main(int argc, char** argv)

/* PROG ***********************************************************/
Sampler sampler(fn_rules, fn_bary, fn_dev);
/*
WriterFilePts write(fn_out);
/*/
WriterEmpty write;
//*/
char ans;
float density = 2;
unsigned short int seed = 0;
float spaceScale = 0.21;
while(true)
{
std::cout << "=================================" << std::endl;
std::cout << "? Generate a distribution (Y/n) ? ";
if( std::cin.peek() == '\n' ) ans='y';
else if( !(std::cin >> ans) ) break;
std::cin.ignore();
if( std::cin.fail() || ans=='n' || ans=='N') break;

std::cout << "? set initial seed [0-" << sampler.tiling().ruleSize()-1 << "] (" << ++seed << "): ";
if( std::cin.peek() == '\n' );
else if( !(std::cin >> seed) ) break;
std::cin.ignore();

std::cout << "? set final density [0-inf] (" << density << "): ";
if( std::cin.peek() == '\n' );
else if( !(std::cin >> density) ) break;
std::cin.ignore();

std::cout << "? set boundary (" << spaceScale << "): ";
if( std::cin.peek() == '\n' );
else if( !(std::cin >> spaceScale) ) break;
std::cin.ignore();
if( seed == 0 )
{
srand48(time(NULL));
seed = std::ceil(drand48()*408);
}
if( vm.count("seed") ) seed = (seed-1)%408;

sampler.generateUniform(density, -1, write, seed, spaceScale);
if( vm.count("out") )
{
WriterFileRaw write(fn_out);
sampler.generateUniform(nbSample, -1, write, seed);
}
else
{
WriterEmpty write;
sampler.generateUniform(nbSample, -1, write, seed);
}
}
6 changes: 3 additions & 3 deletions src/sampler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ class Sampler
public:
const Tiling& tiling() const { return m_tiling; };
template <class WRITER>
unsigned int generateUniform(const float& density, const short int& ilut, WRITER& writer, const unsigned short int& seed=0, const float& spaceSize=0.235, const bool& crop=true);
unsigned int generateUniform(const float& density, const short int& ilut, WRITER& writer, const unsigned short int& seed=0, const float& spaceSize=0.21, const bool& crop=true);
template <class WRITER>
unsigned int generateUniform(const unsigned short int& finalLvl, const unsigned short int& finalRank, const short int& ilut, WRITER& writer, const unsigned short int& seed=0, const float& spaceSize=0.235, const bool& crop=true);
unsigned int generateUniform(const unsigned short int& finalLvl, const unsigned short int& finalRank, const short int& ilut, WRITER& writer, const unsigned short int& seed=0, const float& spaceSize=0.21, const bool& crop=true);
template <class WRITER>
unsigned int generateAdaptive(float (*func)(const Point&), const float& white_density, const float& black_density, const short int& ilut, WRITER& writer, const unsigned short int& seed=0, const float& spaceSize=0.235, const bool& interpolate=true, const bool& dither=true);
unsigned int generateAdaptive(float (*func)(const Point&), const float& white_density, const float& black_density, const short int& ilut, WRITER& writer, const unsigned short int& seed=0, const float& spaceSize=0.21, const bool& interpolate=true, const bool& dither=true);

};

Expand Down
2 changes: 1 addition & 1 deletion src/writerEmpty.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
class WriterEmpty
{
public:
inline void sample(const Point& sample, const TileState& tilestate) const {}
inline void sample(const Point& sample, const TileState& tilestate) {}
inline void clear(const float& a=1.) const {}
};

Expand Down
8 changes: 5 additions & 3 deletions src/writerFilePts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <iostream>
#include <fstream>

#include "tileState.hpp"
#include "vector.hpp"


Expand All @@ -20,15 +21,16 @@ class WriterFilePts
WriterFilePts(const std::string& fn);
~WriterFilePts();

void open(const float& spaceSize=1.);
void header(const float& spaceSize=1.);

public:
inline void sample(const Point& sample)
inline void sample(const Point& sample, const TileState& tilestate)
{
m_file << sample.x() << "\t" << sample.y() << std::endl;
}

void clear(const float& spaceSize=1.);
void open(const float& spaceSize=1.);
void header(const float& spaceSize=1.);
};

#endif
24 changes: 19 additions & 5 deletions src/writerFileRaw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,28 @@ WriterFileRaw::WriterFileRaw(const std::string& fn)
: m_filename(fn)
{
m_file.open(m_filename.c_str());
if(!m_file.is_open())
{
ERR( "Cannot open output file : " << m_filename );
std::exit(EXIT_FAILURE);
}
open();
}

WriterFileRaw::~WriterFileRaw()
{
m_file.close();
}


void WriterFileRaw::clear(const float& spaceSize)
{
m_file.close();
open(spaceSize);
}

void WriterFileRaw::open(const float& spaceSize)
{
m_spaceSize = 2*spaceSize;
m_file.open(m_filename.c_str());
if(!m_file.is_open())
{
ERR( "Cannot open output file : " << m_filename );
std::exit(EXIT_FAILURE);
}
}
19 changes: 7 additions & 12 deletions src/writerFileRaw.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <iostream>
#include <fstream>

#include "tileState.hpp"
#include "vector.hpp"


Expand All @@ -15,27 +16,21 @@ class WriterFileRaw
private:
std::string m_filename;
std::ofstream m_file;
float m_spaceSize;

public:
WriterFileRaw(const std::string& fn);
~WriterFileRaw();

void open(const float& spaceSize=1.);

public:
inline void sample(const Point& sample)
inline void sample(const Point& sample, const TileState& tilestate)
{
m_file << sample.x() << "\t" << sample.y() << std::endl;
m_file << sample.x()/m_spaceSize+0.5 << "\t" << sample.y()/m_spaceSize+0.5 << std::endl;
}

inline void clear()
{
m_file.close();
m_file.open(m_filename.c_str());
if(!m_file.is_open())
{
std::cerr << "<<! Cannot open output file : " << m_filename << std::endl;
exit(EXIT_FAILURE);
}
}
void clear(const float& spaceSize=1.);
};

#endif