void Widget::repaint(PaintEvent* event) { Painter* painter = event->painter(); painter->beginOffscreenPaint(); painter->setSource(Color::kWhite); painter->paint(); repaintWidget(event); painter->applyOffscreenPaint(); }
void Grid::paint(Painter& p) const { p.paint(*this); }
void ParticleSystem::paint(Painter& p) const { p.paint(*this); }
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); }
void HEMesh::paint(Painter& p) const { p.paint(*this); }