128 const glm::vec3& bounds_min = glm::vec3(-1.0F),
129 const glm::vec3& bounds_max = glm::vec3(1.0F),
133 void reset()
override;
134 void process_batch(
unsigned int num_samples)
override;
135 void set_topology(
Topology topology)
override;
146 const glm::vec3& bounds_min,
147 const glm::vec3& bounds_max,
150 [[nodiscard]]
size_t get_node_count()
const override;
151 [[nodiscard]] std::optional<double> get_node_output(
size_t index)
const override;
152 [[nodiscard]] std::unordered_map<std::string, std::string> get_metadata()
const override;
158 void set_vertices(
const std::vector<LineVertex>& vertices);
171 void apply_color_gradient(
const glm::vec3& start_color,
const glm::vec3& end_color);
179 void apply_radial_gradient(
180 const glm::vec3& center_color,
181 const glm::vec3& edge_color,
182 const glm::vec3& center = glm::vec3(0.0F));
187 [[nodiscard]] std::vector<LineVertex> get_vertices()
const;
194 void update_vertex(
size_t index,
const LineVertex& vertex);
200 void set_line_color(
const glm::vec3& color);
206 void set_connection_radius(
float radius);
212 void set_k_neighbors(
size_t k);
218 void set_line_thickness(
float thickness);
224 void set_samples_per_segment(
size_t samples);
230 void set_tension(
double tension);
239 template <
typename OpType,
typename... Args>
242 auto op = std::make_unique<OpType>(std::forward<Args>(args)...);
243 auto* ptr = op.get();
244 set_operator(std::move(op));
248 void set_operator(std::unique_ptr<NetworkOperator> op);
251 size_t m_num_points {};
260 [[nodiscard]] std::vector<LineVertex> generate_initial_positions();
265 void update_mapped_parameters();