1use dear_imguizmo_sys as sys;
2
3bitflags::bitflags! {
4 #[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
5 pub struct Operation: u32 {
6 const TRANSLATE_X = sys::TRANSLATE_X as u32;
7 const TRANSLATE_Y = sys::TRANSLATE_Y as u32;
8 const TRANSLATE_Z = sys::TRANSLATE_Z as u32;
9 const ROTATE_X = sys::ROTATE_X as u32;
10 const ROTATE_Y = sys::ROTATE_Y as u32;
11 const ROTATE_Z = sys::ROTATE_Z as u32;
12 const ROTATE_SCREEN = sys::ROTATE_SCREEN as u32;
13 const SCALE_X = sys::SCALE_X as u32;
14 const SCALE_Y = sys::SCALE_Y as u32;
15 const SCALE_Z = sys::SCALE_Z as u32;
16 const BOUNDS = sys::BOUNDS as u32;
17 const SCALE_UNIFORM_X = sys::SCALE_XU as u32;
18 const SCALE_UNIFORM_Y = sys::SCALE_YU as u32;
19 const SCALE_UNIFORM_Z = sys::SCALE_ZU as u32;
20
21 const TRANSLATE = sys::TRANSLATE as u32;
22 const ROTATE = sys::ROTATE as u32;
23 const SCALE = sys::SCALE as u32;
24 const SCALE_UNIFORM= sys::SCALEU as u32;
25 const UNIVERSAL = sys::UNIVERSAL as u32;
26 }
27}
28
29impl From<Operation> for sys::OPERATION {
30 fn from(value: Operation) -> Self {
31 value.bits() as sys::OPERATION
32 }
33}
34
35bitflags::bitflags! {
36 #[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
37 pub struct AxisMask: u8 {
38 const X = 1 << 0;
39 const Y = 1 << 1;
40 const Z = 1 << 2;
41 }
42}
43
44#[derive(Copy, Clone, Debug, PartialEq, Eq)]
45#[repr(u32)]
46pub enum Mode {
47 Local = sys::LOCAL as u32,
48 World = sys::WORLD as u32,
49}
50
51impl From<Mode> for sys::MODE {
52 fn from(value: Mode) -> Self {
53 value as sys::MODE
54 }
55}
56
57#[derive(Copy, Clone, Debug, PartialEq, Eq)]
59#[repr(u32)]
60pub enum Color {
61 DirectionX = sys::DIRECTION_X as u32,
62 DirectionY = sys::DIRECTION_Y as u32,
63 DirectionZ = sys::DIRECTION_Z as u32,
64 PlaneX = sys::PLANE_X as u32,
65 PlaneY = sys::PLANE_Y as u32,
66 PlaneZ = sys::PLANE_Z as u32,
67 Selection = sys::SELECTION as u32,
68 Inactive = sys::INACTIVE as u32,
69 TranslationLine = sys::TRANSLATION_LINE as u32,
70 ScaleLine = sys::SCALE_LINE as u32,
71 RotationUsingBorder = sys::ROTATION_USING_BORDER as u32,
72 RotationUsingFill = sys::ROTATION_USING_FILL as u32,
73 HatchedAxisLines = sys::HATCHED_AXIS_LINES as u32,
74 Text = sys::TEXT as u32,
75 TextShadow = sys::TEXT_SHADOW as u32,
76 Count = sys::COUNT as u32,
77}
78
79#[derive(Copy, Clone, Debug, PartialEq, Eq)]
81pub enum DrawListTarget {
82 Window,
83 Background,
84 Foreground,
85}
86
87#[derive(Copy, Clone, Debug)]
89pub enum GuizmoId<'a> {
90 Int(i32),
91 Str(&'a str),
92 Bytes(&'a [u8]),
96 Ptr(*const std::ffi::c_void),
97}
98impl From<i32> for GuizmoId<'_> {
99 fn from(v: i32) -> Self {
100 GuizmoId::Int(v)
101 }
102}
103impl<'a> From<&'a str> for GuizmoId<'a> {
104 fn from(s: &'a str) -> Self {
105 GuizmoId::Str(s)
106 }
107}
108impl<'a> From<&'a [u8]> for GuizmoId<'a> {
109 fn from(bytes: &'a [u8]) -> Self {
110 GuizmoId::Bytes(bytes)
111 }
112}
113impl<T> From<*const T> for GuizmoId<'_> {
114 fn from(p: *const T) -> Self {
115 GuizmoId::Ptr(p as _)
116 }
117}
118impl<T> From<*mut T> for GuizmoId<'_> {
119 fn from(p: *mut T) -> Self {
120 GuizmoId::Ptr(p as _)
121 }
122}
123
124#[derive(Copy, Clone, Debug, PartialEq)]
126pub struct Bounds {
127 pub min: [f32; 3],
128 pub max: [f32; 3],
129}
130
131pub trait Vec3Like {
133 fn to_array(self) -> [f32; 3];
134}
135impl Vec3Like for [f32; 3] {
136 fn to_array(self) -> [f32; 3] {
137 self
138 }
139}
140impl Vec3Like for (f32, f32, f32) {
141 fn to_array(self) -> [f32; 3] {
142 [self.0, self.1, self.2]
143 }
144}
145#[cfg(feature = "glam")]
146impl Vec3Like for glam::Vec3 {
147 fn to_array(self) -> [f32; 3] {
148 [self.x, self.y, self.z]
149 }
150}
151#[cfg(feature = "mint")]
152impl Vec3Like for mint::Vector3<f32> {
153 fn to_array(self) -> [f32; 3] {
154 [self.x, self.y, self.z]
155 }
156}