tools/hhtracer/tracer.h
author unC0Rr
Mon, 27 Jan 2025 13:08:58 +0100
changeset 16063 ec4fc7eb6acd
parent 16056 9ad74696ddec
permissions -rw-r--r--
Add some further work on hhtracer
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     1
#pragma once
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     2
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
     3
#include <QJsonArray>
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     4
#include <QObject>
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     5
#include <QPainter>
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     6
#include <QQmlEngine>
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     7
#include <QTemporaryDir>
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     8
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
     9
enum PrimitiveType { Polygon, Circle };
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    10
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    11
struct Primitive {
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    12
  PrimitiveType type;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    13
  QPen pen;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    14
  QBrush brush;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    15
  QPointF origin;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    16
  QList<QPointF> points;                    // polygon
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    17
  double radius1{}, radius2{}, rotation{};  // ellipse
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    18
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    19
  explicit Primitive(QSizeF size, const QJsonObject& atom);
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    20
  double cost() const;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    21
};
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    22
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    23
struct Solution {
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    24
  QList<Primitive> primitives;
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    25
  double fitness{1e64};
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    26
  QSizeF size;
16056
9ad74696ddec Add some progress on hhtracer
unC0Rr
parents: 16055
diff changeset
    27
  QString fileName;
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    28
  quint32 gen;
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    29
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    30
  explicit Solution(QSizeF size, const QJsonArray& atoms);
16056
9ad74696ddec Add some progress on hhtracer
unC0Rr
parents: 16055
diff changeset
    31
  void calculateFitness(const QImage& target);
9ad74696ddec Add some progress on hhtracer
unC0Rr
parents: 16055
diff changeset
    32
  void render(const QString& fileName);
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    33
  double cost() const;
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    34
  void mutate();
16056
9ad74696ddec Add some progress on hhtracer
unC0Rr
parents: 16055
diff changeset
    35
  void crossover(Solution &other);
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    36
};
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    37
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    38
class Tracer : public QObject {
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    39
  Q_OBJECT
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    40
  QML_ELEMENT
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    41
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    42
  Q_PROPERTY(
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    43
      QJsonArray atoms READ atoms WRITE setAtoms NOTIFY atomsChanged FINAL)
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    44
  Q_PROPERTY(
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    45
      double bestSolution READ bestSolution NOTIFY bestSolutionChanged FINAL)
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    46
  Q_PROPERTY(QStringList solutions READ solutions NOTIFY solutionsChanged FINAL)
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    47
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    48
 public:
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    49
  explicit Tracer(QObject *parent = nullptr);
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    50
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    51
  double bestSolution() const;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    52
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    53
  Q_INVOKABLE void start(const QString& fileName);
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    54
  Q_INVOKABLE void step();
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    55
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    56
  QStringList solutions() const;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    57
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    58
  QJsonArray atoms() const;
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    59
  void setAtoms(const QJsonArray& newAtoms);
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    60
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    61
 Q_SIGNALS:
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    62
  void bestSolutionChanged();
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    63
  void solutionsChanged();
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    64
  void atomsChanged();
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    65
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    66
 private:
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    67
  double bestSolution_;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    68
  QStringList solutions_;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    69
  QList<Solution> generation_;
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    70
  QTemporaryDir tempDir_;
16056
9ad74696ddec Add some progress on hhtracer
unC0Rr
parents: 16055
diff changeset
    71
  QImage referenceImage_;
16063
ec4fc7eb6acd Add some further work on hhtracer
unC0Rr
parents: 16056
diff changeset
    72
  QJsonArray atoms_;
16055
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    73
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    74
  QString newFileName();
2d65bd46c92f Start work on hedgehog tracer
unC0Rr
parents:
diff changeset
    75
};