Beispiel #1
0
void Widget::repaint(PaintEvent* event)
{
	Painter* painter = event->painter();
	painter->beginOffscreenPaint();

	painter->setSource(Color::kWhite);
	painter->paint();

	repaintWidget(event);

	painter->applyOffscreenPaint();
}
Beispiel #2
0
void Grid::paint(Painter& p) const
{
	p.paint(*this);
}
Beispiel #3
0
void ParticleSystem::paint(Painter& p) const
{
	p.paint(*this);
}
Beispiel #4
0
  void pack_genome(Painter& p) {
    vector<Mat> activeKernels;

    //collective active kernels
    for(Chromosome& c : p.genome_) {
      if(c.isActive()) {
        c[0] = 0.001; //FIXME
        activeKernels.push_back(c.makeKernel());
      }
      else
        c[0] = -0.001; //FIXME
    }

    return; //FIXME

    //nothing else to do if there is only one active/dominant chromosome
    if(p.genome_.countActiveChromosomes() <= 1) {
      std::cerr << "#### not enough active chromos ####" << std::endl;
      return;
    }

    //sort by kernel size
    sort(activeKernels.begin(), activeKernels.end(), [](const Mat& one, const Mat& two) {
      return one.cols > two.cols;
    });

    //record current fitness so we can check correctness of the resulting kernel
    double fitnessBefore = p.fitness_;
    size_t i = 1;

    std::cerr << "active before: " << activeKernels.size() << std::endl;

    while(i < activeKernels.size() && activeKernels.size() > 1) {
      CHECK(i > 0);
      Mat& one = activeKernels[i -1];
      Mat& two = activeKernels[i];

      std::cerr << "one:" << one.cols << std::endl;
      std::cerr << "two:" << two.cols << std::endl;
      std::cerr << "pow(one + two -1):" << pow(one.cols + two.cols - 1,2) << std::endl;
      std::cerr << "pfs" << p.genome_.front().size() << std::endl;

      //check if the resulting kernel would fit into a chromosome
      if(pow(one.cols + two.cols - 1,2) < p.genome_.front().size()) {
        Mat combined = combine_kernels(one,two);
        CHECK(combined.cols == one.cols + two.cols - 1);
        activeKernels[i - 1] = combined;
        activeKernels.erase((activeKernels.begin() + i));
        CHECK(activeKernels[i - 1].cols == combined.cols);
        i=1;
      } else {
        ++i;
      }
    }

    std::cerr << "active after: " << activeKernels.size() << std::endl;

    Genome newGenome(p.genome_.size() - activeKernels.size());
    for(Chromosome& c : newGenome) {
      c[0] = -0.1;
    }

    for(const Mat& k : activeKernels) {
      newGenome.push_back(make_chromo(k, 20));
    }
    CHECK(p.genome_.size() == newGenome.size());

    imwrite(("result/before.png"),p.result_);
    p.genome_ = newGenome;
    p.paint();
    imwrite(("result/after.png"),p.result_);

    std::cerr << fitnessBefore << "/"<<  p.fitness_ << " " << p.genome_.getTotalKernelSize() << "/" << p.genome_.countActiveChromosomes() <<  std::endl;
  //  CHECK(fabs(fitnessBefore - p.fitness_) < 0.01);
  }
Beispiel #5
0
void HEMesh::paint(Painter& p) const
{
	p.paint(*this);
}