Hex work!
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Joshua Coles 2023-03-18 19:52:33 +00:00
parent 596b2a509f
commit 9fe0337c9d
3 changed files with 15 additions and 13 deletions

View File

@ -15,7 +15,6 @@ impl VectorStorage {
impl<P: GriddedPosition> Storage<P> for VectorStorage {
fn is_occupied(&self, position: &P) -> bool {
let i = position.linear_index(self.grid_size);
println!("{i}");
return self.backing[i];
}

View File

@ -15,7 +15,7 @@ use num_traits::Signed;
use serde::de::DeserializeOwned;
use serde::Deserialize;
use svg::Node;
use svg::node::element::{Circle, Rectangle};
use svg::node::element::{Circle, Polygon, Rectangle};
use crate::{RenderCli, Space};
use crate::system::{GriddedPosition, Position};
use crate::system::spaces::continuous_2d::P2;
@ -60,22 +60,24 @@ impl ToSvg for HexPosition {
[25.045, 128.0], [256.0, 0.0], [486.955, 128.0], [486.955, 384.0], [256.0, 512.0], [25.045, 384.0]
];
let a = 256.0;
// let a = 400.0;
let b = points.map(|x| [
(x[0] / 512.0),
(x[1] / 512.0)]
(x[0] / a),
(x[1] / a)]
);
let c = b.map(|p| format!("{},{}", p[0], p[1])).join(" ");
let cartesian = self.to_cartesian();
Box::new(Rectangle::new()
Box::new(Polygon::new()
.set("fill", format!("rgb({}, {}, {})", colour.r, colour.g, colour.b))
.set("x", cartesian[0])
.set("y", cartesian[1]))
.set("points", c)
.set("transform", format!("translate({}, {})", cartesian[0], cartesian[1])))
}
}
pub fn compute_max_size<P: GriddedPosition>(positions: &[P]) -> f32 {
pub fn compute_max_size<P: Position>(positions: &[P]) -> f32 {
let mut positions = positions.iter().map(P::to_cartesian);
let mut maximums: Vec<f32> = positions.next().unwrap();
@ -90,8 +92,8 @@ pub fn compute_max_size<P: GriddedPosition>(positions: &[P]) -> f32 {
}
fn render<P: Position>(args: &RenderCli) where P: DeserializeOwned + ToSvg {
let positions = read::<Grid2D>(&args.path, args.format);
let max_size = compute_max_size(&positions);
let positions = read::<P>(&args.path, args.format);
let max_size = compute_max_size(&positions) + 10.0;
let mut svg = svg::Document::new()
.set("width", max_size)
@ -118,5 +120,6 @@ pub(crate) fn main(args: &RenderCli) {
match args.space {
Space::Grid2D => render::<Grid2D>(args),
Space::Continuous2D => render::<P2>(args),
Space::Hex => render::<HexPosition>(args),
}
}

View File

@ -34,7 +34,8 @@ enum ToolsCli {
#[derive(clap::ValueEnum, Clone, Debug, Copy)]
enum Space {
Grid2D,
Continuous2D
Continuous2D,
Hex,
}
#[derive(Debug, Args)]
@ -75,8 +76,7 @@ fn main() -> anyhow::Result<()> {
match args {
ToolsCli::Render(cli) => tools::render::main(&cli),
ToolsCli::BoxCount(cli) => tools::boxcount::main(&cli),
ToolsCli::DataAnalysis(cli) => {
}
ToolsCli::DataAnalysis(cli) => tools::analysis::main(&cli),
}
Ok(())