Skip to content

Commit 3eb6f44

Browse files
committed
feat(plan): spread fixtures in a circle
1 parent 5b6143b commit 3eb6f44

File tree

7 files changed

+440
-549
lines changed

7 files changed

+440
-549
lines changed

crates/api/protos/plans.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ message SpreadFixturesRequest {
4848
enum SpreadGeometry {
4949
SQUARE = 0;
5050
TRIANGLE = 1;
51+
CIRCLE = 2;
5152
}
5253
}
5354

crates/api/src/mappings/plans.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ impl From<spread_fixtures_request::SpreadGeometry> for SpreadFixturesGeometry {
6666
match geometry {
6767
SpreadGeometry::Square => Self::Square,
6868
SpreadGeometry::Triangle => Self::Triangle,
69+
SpreadGeometry::Circle => Self::Circle,
6970
}
7071
}
7172
}

crates/components/plan/src/commands/spread_fixtures.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub struct SpreadFixturesInPlanCommand {
1919
pub enum SpreadFixturesGeometry {
2020
Square,
2121
Triangle,
22+
Circle,
2223
}
2324

2425
impl<'a> Command<'a> for SpreadFixturesInPlanCommand {
@@ -97,6 +98,7 @@ impl SpreadFixturesGeometry {
9798
match self {
9899
SpreadFixturesGeometry::Square => Self::spread_square(origin, fixtures),
99100
SpreadFixturesGeometry::Triangle => Self::spread_triangle(origin, fixtures),
101+
SpreadFixturesGeometry::Circle => Self::spread_circle(origin, fixtures),
100102
}
101103
}
102104

@@ -169,6 +171,24 @@ impl SpreadFixturesGeometry {
169171

170172
hashmap
171173
}
174+
175+
fn spread_circle(
176+
origin: (f64, f64),
177+
fixtures: &[FixturePosition],
178+
) -> HashMap<FixtureId, (f64, f64)> {
179+
let mut hashmap = HashMap::with_capacity(fixtures.len());
180+
let radius = fixtures.len() as f64 / (2.0 * std::f64::consts::PI);
181+
let angle_increment = 2.0 * std::f64::consts::PI / fixtures.len() as f64;
182+
183+
for (i, fixture) in fixtures.iter().enumerate() {
184+
let angle = i as f64 * angle_increment;
185+
let x = origin.0 + radius * angle.cos();
186+
let y = origin.1 + radius * angle.sin();
187+
hashmap.insert(fixture.fixture, (x, y));
188+
}
189+
190+
hashmap
191+
}
172192
}
173193

174194
#[cfg(test)]

crates/ui/lib/protos/plans.pb.dart

Lines changed: 275 additions & 335 deletions
Large diffs are not rendered by default.
Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
1-
//
1+
///
22
// Generated code. Do not modify.
33
// source: plans.proto
44
//
55
// @dart = 2.12
6+
// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name
67

7-
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
8-
// ignore_for_file: constant_identifier_names, library_prefixes
9-
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
10-
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
11-
8+
// ignore_for_file: UNDEFINED_SHOWN_NAME
129
import 'dart:core' as $core;
13-
1410
import 'package:protobuf/protobuf.dart' as $pb;
1511

1612
class AlignFixturesRequest_AlignDirection extends $pb.ProtobufEnum {
17-
static const AlignFixturesRequest_AlignDirection LEFT_TO_RIGHT = AlignFixturesRequest_AlignDirection._(0, _omitEnumNames ? '' : 'LEFT_TO_RIGHT');
18-
static const AlignFixturesRequest_AlignDirection TOP_TO_BOTTOM = AlignFixturesRequest_AlignDirection._(1, _omitEnumNames ? '' : 'TOP_TO_BOTTOM');
13+
static const AlignFixturesRequest_AlignDirection LEFT_TO_RIGHT = AlignFixturesRequest_AlignDirection._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'LEFT_TO_RIGHT');
14+
static const AlignFixturesRequest_AlignDirection TOP_TO_BOTTOM = AlignFixturesRequest_AlignDirection._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'TOP_TO_BOTTOM');
1915

2016
static const $core.List<AlignFixturesRequest_AlignDirection> values = <AlignFixturesRequest_AlignDirection> [
2117
LEFT_TO_RIGHT,
@@ -29,12 +25,14 @@ class AlignFixturesRequest_AlignDirection extends $pb.ProtobufEnum {
2925
}
3026

3127
class SpreadFixturesRequest_SpreadGeometry extends $pb.ProtobufEnum {
32-
static const SpreadFixturesRequest_SpreadGeometry SQUARE = SpreadFixturesRequest_SpreadGeometry._(0, _omitEnumNames ? '' : 'SQUARE');
33-
static const SpreadFixturesRequest_SpreadGeometry TRIANGLE = SpreadFixturesRequest_SpreadGeometry._(1, _omitEnumNames ? '' : 'TRIANGLE');
28+
static const SpreadFixturesRequest_SpreadGeometry SQUARE = SpreadFixturesRequest_SpreadGeometry._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'SQUARE');
29+
static const SpreadFixturesRequest_SpreadGeometry TRIANGLE = SpreadFixturesRequest_SpreadGeometry._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'TRIANGLE');
30+
static const SpreadFixturesRequest_SpreadGeometry CIRCLE = SpreadFixturesRequest_SpreadGeometry._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CIRCLE');
3431

3532
static const $core.List<SpreadFixturesRequest_SpreadGeometry> values = <SpreadFixturesRequest_SpreadGeometry> [
3633
SQUARE,
3734
TRIANGLE,
35+
CIRCLE,
3836
];
3937

4038
static final $core.Map<$core.int, SpreadFixturesRequest_SpreadGeometry> _byValue = $pb.ProtobufEnum.initByValue(values);
@@ -43,5 +41,3 @@ class SpreadFixturesRequest_SpreadGeometry extends $pb.ProtobufEnum {
4341
const SpreadFixturesRequest_SpreadGeometry._($core.int v, $core.String n) : super(v, n);
4442
}
4543

46-
47-
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

0 commit comments

Comments
 (0)