Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
Signed-off-by: Luca Della Vedova <lucadv@intrinsic.ai>
  • Loading branch information
luca-della-vedova committed Jun 28, 2023
1 parent aca8f5e commit 92b8219
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 90 deletions.
19 changes: 6 additions & 13 deletions rmf_site_editor/src/shapes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1057,24 +1057,17 @@ pub(crate) fn make_ring(inner_radius: f32, outer_radius: f32, resolution: usize)
MeshBuffer::new(positions, normals, indices)
}

pub(crate) fn make_location_icon(
radius: f32,
height: f32,
segments: usize,
position: usize,
) -> MeshBuffer {
pub(crate) fn make_location_icon(radius: f32, height: f32, segments: usize) -> MeshBuffer {
let height = 2.0 * height;
let angle = (360.0 / (2.0 * segments as f32)).to_radians();
let p0 = radius * Vec3::X;
let p1 = Affine3A::from_rotation_z(angle).transform_vector3(p0);
let width = (p1 - p0).length();
make_flat_square_mesh(width)
.transform_by(Affine3A::from_translation(Vec3::new(
radius + width / 2.0,
0.0,
height / 2.0,
)))
.transform_by(Affine3A::from_rotation_z(position as f32 * 2.0 * angle))
make_flat_square_mesh(width).transform_by(Affine3A::from_translation(Vec3::new(
radius + width / 2.0,
0.0,
height / 2.0,
)))
}

pub(crate) fn make_icon_halo(radius: f32, height: f32, segments: usize) -> MeshBuffer {
Expand Down
48 changes: 9 additions & 39 deletions rmf_site_editor/src/site/assets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,7 @@ pub struct SiteAssets {
pub physical_camera_material: Handle<StandardMaterial>,
pub occupied_material: Handle<StandardMaterial>,
pub default_mesh_grey_material: Handle<StandardMaterial>,
pub charger_mesh: Handle<Mesh>,
pub holding_point_mesh: Handle<Mesh>,
pub parking_mesh: Handle<Mesh>,
pub robot_mesh: Handle<Mesh>,
pub workcell_mesh: Handle<Mesh>,
pub location_tag_mesh: Handle<Mesh>,
pub charger_material: Handle<StandardMaterial>,
pub holding_point_material: Handle<StandardMaterial>,
pub parking_material: Handle<StandardMaterial>,
Expand Down Expand Up @@ -169,26 +165,11 @@ impl FromWorld for SiteAssets {
let occupied_material = materials.add(Color::rgba(0.8, 0.1, 0.1, 0.2).into());
let default_mesh_grey_material = materials.add(Color::rgb(0.7, 0.7, 0.7).into());

let charger_material = materials.add(StandardMaterial {
base_color_texture: Some(charger_texture),
..default()
});
let holding_point_material = materials.add(StandardMaterial {
base_color_texture: Some(holding_point_texture),
..default()
});
let parking_material = materials.add(StandardMaterial {
base_color_texture: Some(parking_texture),
..default()
});
let robot_material = materials.add(StandardMaterial {
base_color_texture: Some(robot_texture),
..default()
});
let workcell_material = materials.add(StandardMaterial {
base_color_texture: Some(workcell_texture),
..default()
});
let charger_material = materials.add(charger_texture.into());
let holding_point_material = materials.add(holding_point_texture.into());
let parking_material = materials.add(parking_texture.into());
let robot_material = materials.add(robot_texture.into());
let workcell_material = materials.add(workcell_texture.into());

let mut meshes = world.get_resource_mut::<Assets<Mesh>>().unwrap();
let level_anchor_mesh = meshes.add(
Expand Down Expand Up @@ -242,15 +223,8 @@ impl FromWorld for SiteAssets {
.with_generated_outline_normals()
.unwrap(),
);
let charger_mesh =
meshes.add(make_location_icon(1.1 * LANE_WIDTH / 2.0, 0.01, 6, 0).into());
let holding_point_mesh =
meshes.add(make_location_icon(1.1 * LANE_WIDTH / 2.0, 0.01, 6, 1).into());
let parking_mesh =
meshes.add(make_location_icon(1.1 * LANE_WIDTH / 2.0, 0.01, 6, 2).into());
let robot_mesh = meshes.add(make_location_icon(1.1 * LANE_WIDTH / 2.0, 0.01, 6, 3).into());
let workcell_mesh =
meshes.add(make_location_icon(1.1 * LANE_WIDTH / 2.0, 0.01, 6, 4).into());
let location_tag_mesh =
meshes.add(make_location_icon(1.1 * LANE_WIDTH / 2.0, 0.01, 6).into());
let physical_camera_mesh = meshes.add(
make_physical_camera_mesh()
.with_generated_outline_normals()
Expand Down Expand Up @@ -288,11 +262,7 @@ impl FromWorld for SiteAssets {
physical_camera_material,
occupied_material,
default_mesh_grey_material,
charger_mesh,
holding_point_mesh,
parking_mesh,
robot_mesh,
workcell_mesh,
location_tag_mesh,
charger_material,
holding_point_material,
parking_material,
Expand Down
69 changes: 31 additions & 38 deletions rmf_site_editor/src/site/location.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,21 @@ pub struct LocationTagMeshes {
workcell: Option<Entity>,
}

fn location_halo_tf(tag: &LocationTag) -> Transform {
let position = match tag {
LocationTag::Charger => 0,
LocationTag::ParkingSpot => 1,
LocationTag::HoldingPoint => 2,
LocationTag::SpawnRobot(_) => 3,
LocationTag::Workcell(_) => 4,
};
Transform {
translation: Vec3::new(0., 0., 0.01),
rotation: Quat::from_rotation_z((position as f32 / 6.0 * 360.0).to_radians()),
..default()
}
}

// TODO(MXG): Refactor this implementation with should_display_lane using traits and generics
fn should_display_point(
point: &Point<Entity>,
Expand Down Expand Up @@ -91,38 +106,32 @@ pub fn add_location_visuals(
let mut tag_meshes = LocationTagMeshes::default();
for tag in tags.iter() {
let id = commands.spawn_empty().id();
let (mesh, material) = match tag {
let material = match tag {
LocationTag::Charger => {
tag_meshes.charger = Some(id);
(assets.charger_mesh.clone(), assets.charger_material.clone())
assets.charger_material.clone()
}
LocationTag::ParkingSpot => {
tag_meshes.parking_spot = Some(id);
(assets.parking_mesh.clone(), assets.parking_material.clone())
assets.parking_material.clone()
}
LocationTag::HoldingPoint => {
tag_meshes.holding_point = Some(id);
(
assets.holding_point_mesh.clone(),
assets.holding_point_material.clone(),
)
assets.holding_point_material.clone()
}
LocationTag::SpawnRobot(_) => {
tag_meshes.spawn_robot = Some(id);
(assets.robot_mesh.clone(), assets.robot_material.clone())
assets.robot_material.clone()
}
LocationTag::Workcell(_) => {
tag_meshes.workcell = Some(id);
(
assets.workcell_mesh.clone(),
assets.workcell_material.clone(),
)
assets.workcell_material.clone()
}
};
commands.entity(id).insert(PbrBundle {
mesh,
mesh: assets.location_tag_mesh.clone(),
material,
transform: Transform::from_xyz(0., 0., 0.01),
transform: location_halo_tf(tag),
..default()
});
commands.entity(e).add_child(id);
Expand Down Expand Up @@ -246,16 +255,12 @@ pub fn update_location_for_changed_location_tags(
}
// Spawn the new tags
for tag in tags.iter() {
let (id, mesh, material) = match tag {
let (id, material) = match tag {
LocationTag::Charger => {
if tag_meshes.charger.is_none() {
let id = commands.spawn_empty().id();
tag_meshes.charger = Some(id);
(
id,
assets.charger_mesh.clone(),
assets.charger_material.clone(),
)
(id, assets.charger_material.clone())
} else {
continue;
}
Expand All @@ -264,11 +269,7 @@ pub fn update_location_for_changed_location_tags(
if tag_meshes.parking_spot.is_none() {
let id = commands.spawn_empty().id();
tag_meshes.parking_spot = Some(id);
(
id,
assets.parking_mesh.clone(),
assets.parking_material.clone(),
)
(id, assets.parking_material.clone())
} else {
continue;
}
Expand All @@ -277,11 +278,7 @@ pub fn update_location_for_changed_location_tags(
if tag_meshes.holding_point.is_none() {
let id = commands.spawn_empty().id();
tag_meshes.holding_point = Some(id);
(
id,
assets.holding_point_mesh.clone(),
assets.holding_point_material.clone(),
)
(id, assets.holding_point_material.clone())
} else {
continue;
}
Expand All @@ -290,7 +287,7 @@ pub fn update_location_for_changed_location_tags(
if tag_meshes.spawn_robot.is_none() {
let id = commands.spawn_empty().id();
tag_meshes.spawn_robot = Some(id);
(id, assets.robot_mesh.clone(), assets.robot_material.clone())
(id, assets.robot_material.clone())
} else {
continue;
}
Expand All @@ -299,20 +296,16 @@ pub fn update_location_for_changed_location_tags(
if tag_meshes.workcell.is_none() {
let id = commands.spawn_empty().id();
tag_meshes.workcell = Some(id);
(
id,
assets.workcell_mesh.clone(),
assets.workcell_material.clone(),
)
(id, assets.workcell_material.clone())
} else {
continue;
}
}
};
commands.entity(id).insert(PbrBundle {
mesh,
mesh: assets.location_tag_mesh.clone(),
material,
transform: Transform::from_xyz(0., 0., 0.01),
transform: location_halo_tf(tag),
..default()
});
commands.entity(e).add_child(id);
Expand Down

0 comments on commit 92b8219

Please sign in to comment.