Use UUID to calculate colors
Ensures that a transfer will always be represented by the same color.
This commit is contained in:
parent
43391850e0
commit
cf7860c5c5
|
@ -6,6 +6,7 @@ use yewdux::prelude::*;
|
|||
|
||||
use crate::components::states::{CurrentTransfer, MainState};
|
||||
use crate::data::plate_instances::PlateInstance;
|
||||
use crate::data::transfer::Transfer;
|
||||
use crate::data::transfer_region::Region;
|
||||
|
||||
// Color Palette for the Source Plates, can be changed here
|
||||
|
@ -58,36 +59,19 @@ pub fn DestinationPlate(props: &DestinationPlateProps) -> Html {
|
|||
})
|
||||
};
|
||||
|
||||
let mut color_counter: u8 = 0;
|
||||
let color_map = {
|
||||
let transfer_map = {
|
||||
let ts = main_state
|
||||
.transfers
|
||||
.iter()
|
||||
.filter(|t| t.dest_id == props.destination_plate.get_uuid());
|
||||
let mut color_map: HashMap<(u8, u8), u8> = HashMap::new();
|
||||
for t in ts {
|
||||
color_counter += 1;
|
||||
let dws = t.transfer_region.get_destination_wells();
|
||||
for dw in dws {
|
||||
color_map.insert(dw, color_counter);
|
||||
}
|
||||
}
|
||||
color_map
|
||||
};
|
||||
|
||||
let tooltip_map = {
|
||||
let ts = main_state
|
||||
.transfers
|
||||
.iter()
|
||||
.filter(|t| t.dest_id == props.destination_plate.get_uuid());
|
||||
let mut tooltip_map: HashMap<(u8,u8), Vec<String>> = HashMap::new();
|
||||
let mut tooltip_map: HashMap<(u8,u8), Vec<&Transfer>> = HashMap::new();
|
||||
for t in ts {
|
||||
let dws = t.transfer_region.get_destination_wells();
|
||||
for dw in dws {
|
||||
if let Some(val) = tooltip_map.get_mut(&dw) {
|
||||
val.push(t.name.clone());
|
||||
val.push(t);
|
||||
} else {
|
||||
tooltip_map.insert(dw, vec![t.name.clone()]);
|
||||
tooltip_map.insert(dw, vec![t]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -131,10 +115,14 @@ pub fn DestinationPlate(props: &DestinationPlateProps) -> Html {
|
|||
selected={super::source_plate::in_rect(*m_start_handle.clone(), *m_end_handle.clone(), (i,j))}
|
||||
mouse={mouse_callback.clone()}
|
||||
in_transfer={destination_wells.contains(&(i,j))}
|
||||
color={color_map.get(&(i,j)).copied()}
|
||||
color={transfer_map.get(&(i,j))
|
||||
.and_then(|t| t.last())
|
||||
.map(|t| PALETTE.get_uuid(t.get_uuid()))
|
||||
}
|
||||
cell_height={props.cell_height}
|
||||
title={if let Some(names) = tooltip_map.get(&(i,j)) {
|
||||
Some(format!("Used by: {}", names.join(", ")))
|
||||
title={if let Some(transfers) = transfer_map.get(&(i,j)) {
|
||||
Some(format!("Used by: {}", transfers.iter().map(|t| t.name.clone())
|
||||
.collect::<Vec<_>>().join(", ")))
|
||||
} else { None }}
|
||||
/>
|
||||
}
|
||||
|
@ -176,7 +164,7 @@ pub struct DestPlateCellProps {
|
|||
pub selected: bool,
|
||||
pub mouse: Callback<(u8, u8, MouseEventType)>,
|
||||
pub in_transfer: Option<bool>,
|
||||
color: Option<u8>,
|
||||
color: Option<[f64; 3]>,
|
||||
cell_height: f64,
|
||||
title: Option<String>,
|
||||
}
|
||||
|
@ -192,7 +180,7 @@ fn DestPlateCell(props: &DestPlateCellProps) -> Html {
|
|||
_ => None,
|
||||
};
|
||||
let color = match props.color {
|
||||
Some(num) => PALETTE.get_u8(num),
|
||||
Some(num) => num,
|
||||
None => [255.0, 255.0, 255.0],
|
||||
};
|
||||
let mouse = Callback::clone(&props.mouse);
|
||||
|
|
|
@ -6,6 +6,7 @@ use yewdux::prelude::*;
|
|||
|
||||
use crate::components::states::{CurrentTransfer, MainState};
|
||||
use crate::data::plate_instances::PlateInstance;
|
||||
use crate::data::transfer::Transfer;
|
||||
use crate::data::transfer_region::Region;
|
||||
|
||||
// Color Palette for the Source Plates, can be changed here
|
||||
|
@ -38,36 +39,19 @@ pub fn SourcePlate(props: &SourcePlateProps) -> Html {
|
|||
m_end_handle.set(Some(pt2));
|
||||
}
|
||||
|
||||
let mut color_counter: u8 = 0;
|
||||
let color_map = {
|
||||
let transfer_map = {
|
||||
let ts = main_state
|
||||
.transfers
|
||||
.iter()
|
||||
.filter(|t| t.source_id == props.source_plate.get_uuid());
|
||||
let mut color_map: HashMap<(u8, u8), u8> = HashMap::new();
|
||||
for t in ts {
|
||||
color_counter += 1;
|
||||
let sws = t.transfer_region.get_source_wells();
|
||||
for sw in sws {
|
||||
color_map.insert(sw, color_counter);
|
||||
}
|
||||
}
|
||||
color_map
|
||||
};
|
||||
|
||||
let tooltip_map = {
|
||||
let ts = main_state
|
||||
.transfers
|
||||
.iter()
|
||||
.filter(|t| t.source_id == props.source_plate.get_uuid());
|
||||
let mut tooltip_map: HashMap<(u8,u8), Vec<String>> = HashMap::new();
|
||||
let mut tooltip_map: HashMap<(u8,u8), Vec<&Transfer>> = HashMap::new();
|
||||
for t in ts {
|
||||
let sws = t.transfer_region.get_source_wells();
|
||||
for sw in sws {
|
||||
if let Some(val) = tooltip_map.get_mut(&sw) {
|
||||
val.push(t.name.clone());
|
||||
val.push(t);
|
||||
} else {
|
||||
tooltip_map.insert(sw, vec![t.name.clone()]);
|
||||
tooltip_map.insert(sw, vec![t]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -135,10 +119,14 @@ pub fn SourcePlate(props: &SourcePlateProps) -> Html {
|
|||
selected={in_rect(*m_start_handle.clone(), *m_end_handle.clone(), (i,j))}
|
||||
mouse={mouse_callback.clone()}
|
||||
in_transfer={source_wells.contains(&(i,j))}
|
||||
color={color_map.get(&(i,j)).copied()}
|
||||
color={transfer_map.get(&(i,j))
|
||||
.and_then(|t| t.last())
|
||||
.map(|t| PALETTE.get_uuid(t.get_uuid()))
|
||||
}
|
||||
cell_height={props.cell_height}
|
||||
title={if let Some(names) = tooltip_map.get(&(i,j)) {
|
||||
Some(format!("Used by: {}", names.join(", ")))
|
||||
title={if let Some(transfers) = transfer_map.get(&(i,j)) {
|
||||
Some(format!("Used by: {}", transfers.iter().map(|t| t.name.clone())
|
||||
.collect::<Vec<_>>().join(", ")))
|
||||
} else { None }}
|
||||
/>
|
||||
}
|
||||
|
@ -176,7 +164,7 @@ pub struct SourcePlateCellProps {
|
|||
selected: bool,
|
||||
mouse: Callback<(u8, u8, MouseEventType)>,
|
||||
in_transfer: Option<bool>,
|
||||
color: Option<u8>,
|
||||
color: Option<[f64; 3]>,
|
||||
cell_height: f64,
|
||||
title: Option<String>,
|
||||
}
|
||||
|
@ -197,7 +185,7 @@ fn SourcePlateCell(props: &SourcePlateCellProps) -> Html {
|
|||
_ => None,
|
||||
};
|
||||
let color = match props.color {
|
||||
Some(num) => PALETTE.get_u8(num),
|
||||
Some(num) => num,
|
||||
None => [255.0, 255.0, 255.0],
|
||||
};
|
||||
let mouse = Callback::clone(&props.mouse);
|
||||
|
|
|
@ -30,6 +30,11 @@ impl ColorPalette {
|
|||
assert!(t > 0, "t must be greater than zero!");
|
||||
self.get((2f64.powi(-1*t.ilog2() as i32)) as f64 * (t as f64 + 0.5f64)-1.0f64)
|
||||
}
|
||||
|
||||
pub fn get_uuid(&self, t: uuid::Uuid) -> [f64; 3] {
|
||||
log::debug!("{}", t.as_u128() as f64 / (u128::MAX) as f64);
|
||||
self.get(t.as_u128() as f64 / (u128::MAX) as f64)
|
||||
}
|
||||
}
|
||||
|
||||
#[non_exhaustive]
|
||||
|
|
Loading…
Reference in New Issue