#![allow(dead_code)]
use crate::Color;
#[derive(Debug, Clone, PartialEq, Default)]
pub(crate) struct Connection {
pub(crate) indices: (usize, usize),
pub(crate) color: Option<Color>,
}
impl From<(usize, usize)> for Connection {
fn from(indices: (usize, usize)) -> Self {
Self {
indices,
color: None,
}
}
}
impl From<(usize, usize, Color)> for Connection {
fn from((a, b, color): (usize, usize, Color)) -> Self {
Self {
indices: (a, b),
color: Some(color),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct Skeleton {
pub(crate) connections: Vec<Connection>,
}
impl Skeleton {
pub(crate) fn iter(&self) -> std::slice::Iter<'_, Connection> {
self.connections.iter()
}
pub fn with_connections(mut self, connections: &[(usize, usize)]) -> Self {
self.connections = connections.iter().map(|&c| c.into()).collect();
self
}
pub fn with_connections_and_colors(
mut self,
connections: &[(usize, usize)],
colors: &[Color],
) -> Self {
self.connections = connections
.iter()
.enumerate()
.map(|(i, &(a, b))| {
if i < colors.len() {
(a, b, colors[i]).into()
} else {
(a, b).into()
}
})
.collect();
self
}
pub(crate) fn with_connections_internal<C: Into<Connection> + Clone>(
mut self,
connections: &[C],
) -> Self {
self.connections = connections.iter().cloned().map(|c| c.into()).collect();
self
}
pub fn with_colors(mut self, colors: &[Color]) -> Self {
for (i, connection) in self.connections.iter_mut().enumerate() {
if i < colors.len() {
connection.color = Some(colors[i]);
}
}
self
}
}
impl From<&[(usize, usize)]> for Skeleton {
fn from(connections: &[(usize, usize)]) -> Self {
Self {
connections: connections.iter().map(|&c| c.into()).collect(),
}
}
}
impl<const N: usize> From<[(usize, usize); N]> for Skeleton {
fn from(arr: [(usize, usize); N]) -> Self {
Self::from(arr.as_slice())
}
}
impl From<(&[(usize, usize)], &[Color])> for Skeleton {
fn from((connections, colors): (&[(usize, usize)], &[Color])) -> Self {
Self {
connections: connections
.iter()
.zip(colors.iter())
.map(|(&(a, b), &c)| (a, b, c).into())
.collect(),
}
}
}
impl<const N: usize> From<([(usize, usize); N], [Color; N])> for Skeleton {
fn from((connections, colors): ([(usize, usize); N], [Color; N])) -> Self {
Skeleton::from((&connections[..], &colors[..]))
}
}
pub const SKELETON_COCO_19: [(usize, usize); 19] = [
(15, 13),
(13, 11),
(16, 14),
(14, 12),
(11, 12),
(5, 11),
(6, 12),
(5, 6),
(5, 7),
(6, 8),
(7, 9),
(8, 10),
(1, 2),
(0, 1),
(0, 2),
(1, 3),
(2, 4),
(3, 5),
(4, 6),
];
pub const SKELETON_COLOR_COCO_19: [Color; 19] = [
Color(0x3399ffff),
Color(0x3399ffff),
Color(0x3399ffff),
Color(0x3399ffff),
Color(0xff33ffff),
Color(0xff33ffff),
Color(0xff33ffff),
Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff8000ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
];
pub const SKELETON_HALPE_27: [(usize, usize); 27] = [
(15, 13), (13, 11), (11, 19), (16, 14), (14, 12), (12, 19), (17, 18), (18, 19), (18, 5), (5, 7), (7, 9), (18, 6), (6, 8), (8, 10), (1, 2), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (15, 20), (15, 22), (15, 24), (16, 21), (16, 23), (16, 25), ];
pub const SKELETON_COLOR_HALPE_27: [Color; 27] = [
Color(0x00ff00ff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), Color(0x3399ffff), Color(0x3399ffff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), ];
pub const SKELETON_HAND_21: [(usize, usize); 20] = [
(0, 1), (1, 2), (2, 3), (3, 4), (0, 5), (5, 6), (6, 7), (7, 8), (0, 9), (9, 10), (10, 11), (11, 12), (0, 13), (13, 14), (14, 15), (15, 16), (0, 17), (17, 18), (18, 19), (19, 20), ];
pub const SKELETON_COLOR_HAND_21: [Color; 20] = [
Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff99ffff), Color(0xff99ffff), Color(0xff99ffff), Color(0xff99ffff), Color(0x66b2ffff), Color(0x66b2ffff), Color(0x66b2ffff), Color(0x66b2ffff), Color(0xff3333ff), Color(0xff3333ff), Color(0xff3333ff), Color(0xff3333ff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0x00ff00ff), ];
pub const SKELETON_COCO_65: [(usize, usize); 65] = [
(15, 13), (13, 11), (16, 14), (14, 12), (11, 12), (5, 11), (6, 12), (5, 6), (5, 7), (6, 8), (7, 9), (8, 10), (1, 2), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (15, 17), (15, 18), (15, 19), (16, 20), (16, 21), (16, 22), (91, 92), (92, 93), (93, 94), (94, 95), (91, 96), (96, 97), (97, 98), (98, 99), (91, 100), (100, 101), (101, 102), (102, 103), (91, 104), (104, 105), (105, 106), (106, 107), (91, 108), (108, 109), (109, 110), (110, 111), (112, 113), (113, 114), (114, 115), (115, 116), (112, 117), (117, 118), (118, 119), (119, 120), (112, 121), (121, 122), (122, 123), (123, 124), (112, 125), (125, 126), (126, 127), (127, 128), (112, 129), (129, 130), (130, 131), (131, 132), ];
pub const SKELETON_COLOR_COCO_65: [Color; 65] = [
Color(0x00ff00ff), Color(0x00ff00ff), Color(0xff8000ff), Color(0xff8000ff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x00ff00ff), Color(0xff8000ff), Color(0x00ff00ff), Color(0xff8000ff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x3399ffff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0x00ff00ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff), Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff99ffff), Color(0xff99ffff),
Color(0xff99ffff),
Color(0xff99ffff),
Color(0x66b2ffff), Color(0x66b2ffff),
Color(0x66b2ffff),
Color(0x66b2ffff),
Color(0xff3333ff), Color(0xff3333ff),
Color(0xff3333ff),
Color(0xff3333ff),
Color(0x00ff00ff), Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0xff8000ff), Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff8000ff),
Color(0xff99ffff), Color(0xff99ffff),
Color(0xff99ffff),
Color(0xff99ffff),
Color(0x66b2ffff), Color(0x66b2ffff),
Color(0x66b2ffff),
Color(0x66b2ffff),
Color(0xff3333ff), Color(0xff3333ff),
Color(0xff3333ff),
Color(0xff3333ff),
Color(0x00ff00ff), Color(0x00ff00ff),
Color(0x00ff00ff),
Color(0x00ff00ff),
];