termi_graphics/shapes.rs
1use crate::pixel_art::PixelColors;
2
3///this function is meant to create sqares at a requested size
4///#Examples
5///
6///```
7///use termi_graphics::pixel_art::PixelColors;
8///use termi_graphics::shapes::square;
9///let sqr = vec![vec![2,2,2],
10/// vec![2,0,2],
11/// vec![2,2,2]];
12///let sqr2 = square(3,PixelColors::Blue);
13///assert_eq!(sqr,sqr2.unwrap());
14///
15///let sqr3 = vec![vec![1,1,1,1],
16/// vec![1,0,0,1],
17/// vec![1,0,0,1],
18/// vec![1,1,1,1]];
19///let sqr4 = square(4,PixelColors::Red);
20///assert_eq!(sqr3,sqr4.unwrap());
21///```
22pub fn square(x:u8, color:PixelColors)-> Option<Vec<Vec<u8>>>{
23 let mut col1 = 0;
24 match color{
25 PixelColors::Red => col1 = 1,
26 PixelColors::Blue => col1 = 2,
27 PixelColors::Green => col1 = 3,
28 PixelColors::Yellow => col1 = 4,
29 PixelColors::Black => col1 = 5,
30 PixelColors::Cyan => col1 = 6,
31 PixelColors::Magenta => col1 = 7,
32 PixelColors::White => col1 = 8,
33 }
34 let mut vec1 = Vec::new();
35 let mut vec2 = Vec::new();
36 if x ==1{
37 &vec2.push(col1);
38 &vec1.push(vec2);
39 return Some(vec1);
40 }else if x==2{
41 &vec2.push(col1);
42 &vec2.push(col1);
43 &vec1.push(vec2.clone());
44 &vec1.push(vec2);
45 return Some(vec1);
46 }
47 for i in 0..x{
48 &vec2.push(col1);
49 }
50 &vec1.push(vec2);
51 vec2 = Vec::new();
52 for q in 0..(x-2){
53 &vec2.push(col1);
54 for u in 0..(x-2){
55 &vec2.push(0);
56 }
57 &vec2.push(col1);
58 &vec1.push(vec2);
59 vec2 = Vec::new();
60 }
61 vec2 = Vec::new();
62 for i in 0..x{
63 &vec2.push(col1);
64 }
65 &vec1.push(vec2);
66 Some(vec1)
67}
68///this function is meant to create sqares at a requested size
69///#Examples
70///
71///```
72///use termi_graphics::pixel_art::PixelColors;
73///use termi_graphics::shapes::rectangle;
74///let rct = vec![vec![4,4,4,4,4],
75/// vec![4,0,0,0,4],
76/// vec![4,4,4,4,4]];
77///let rct2 = rectangle(5,3,PixelColors::Yellow);
78///assert_eq!(rct,rct2.unwrap());
79///
80///let rct3 = vec![vec![1,1,1,1],
81/// vec![1,0,0,1],
82/// vec![1,0,0,1],
83/// vec![1,0,0,1],
84/// vec![1,0,0,1],
85/// vec![1,0,0,1],
86/// vec![1,0,0,1],
87/// vec![1,1,1,1]];
88///let rct4 = rectangle(4,8,PixelColors::Red);
89///assert_eq!(rct3,rct4.unwrap());
90///```
91pub fn rectangle(x:u8,y:u8, color:PixelColors)-> Option<Vec<Vec<u8>>>{
92 if x==y{
93 return square(x,color);
94 }else if x==1{
95 return line(y,color,true);
96 }else if y==1{
97 return line(x,color,false);
98 }
99 let mut col1=0;
100 match color{
101 PixelColors::Red => col1 = 1,
102 PixelColors::Blue => col1 = 2,
103 PixelColors::Green => col1 = 3,
104 PixelColors::Yellow => col1 = 4,
105 PixelColors::Black => col1 = 5,
106 PixelColors::Cyan => col1 = 6,
107 PixelColors::Magenta => col1 = 7,
108 PixelColors::White => col1 = 8,
109 }
110 let mut vec1 = Vec::new();
111 let mut vec2 = Vec::new();
112 for i in 0..x{
113 &vec2.push(col1);
114 }
115 &vec1.push(vec2);
116 vec2 = Vec::new();
117 for q in 0..(y-2){
118 &vec2.push(col1);
119 for u in 0..(x-2){
120 &vec2.push(0);
121 }
122 &vec2.push(col1);
123 &vec1.push(vec2);
124 vec2 = Vec::new();
125 }
126 vec2 = Vec::new();
127 for i in 0..x{
128 &vec2.push(col1);
129 }
130 &vec1.push(vec2);
131 Some(vec1)
132}
133///this function is meant to create sqares at a requested size
134///#Examples
135///
136///```
137///use termi_graphics::pixel_art::PixelColors;
138///use termi_graphics::shapes::line;
139///let ln = vec![vec![3,3,3,3,3,3,3,3,3,3]];
140///let ln2 = line(10,PixelColors::Green,false);
141///assert_eq!(ln,ln2.unwrap());
142///
143///let ln3 = vec![vec![1],
144/// vec![1],
145/// vec![1],
146/// vec![1],
147/// vec![1],
148/// vec![1],
149/// vec![1],
150/// vec![1]];
151///let ln4 = line(8,PixelColors::Red,true);
152///assert_eq!(ln3,ln4.unwrap());
153///```
154pub fn line(len:u8,color:PixelColors, ver:bool)->Option<Vec<Vec<u8>>>{
155 let mut col1=0;
156 match color{
157 PixelColors::Red => col1 = 1,
158 PixelColors::Blue => col1 = 2,
159 PixelColors::Green => col1 = 3,
160 PixelColors::Yellow => col1 = 4,
161 PixelColors::Black => col1 = 5,
162 PixelColors::Cyan => col1 = 6,
163 PixelColors::Magenta => col1 = 7,
164 PixelColors::White => col1 = 8,
165 }
166 let mut vec1 = Vec::new();
167 let mut vec2 = Vec::new();
168 if !ver{
169 for i in 0..len{
170 &vec2.push(col1);
171 }
172 &vec1.push(vec2);
173 }else{
174 &vec2.push(col1);
175 for i in 0..len{
176 &vec1.push(vec2.clone());
177 }
178 }
179 Some(vec1)
180}
181///this function is meant to create sqares at a requested size
182///#Examples
183///
184///```
185///use termi_graphics::pixel_art::PixelColors;
186///use termi_graphics::shapes::triangle;
187///let trg = vec![vec![0,0,0,0,2,0,0,0,0],
188/// vec![0,0,0,2,0,2,0,0,0],
189/// vec![0,0,2,0,0,0,2,0,0],
190/// vec![0,2,0,0,0,0,0,2,0],
191/// vec![2,2,2,2,2,2,2,2,2]];
192///let trg2 = triangle(9,PixelColors::Blue);
193///assert_eq!(trg,trg2.unwrap());
194///
195///let trg3 = triangle(8,PixelColors::Red);
196///assert_eq!(trg3.is_some(),false);
197///
198///let trg4 = triangle(3,PixelColors::Red);
199///assert_eq!(trg4.is_some(),false);
200///```
201pub fn triangle(base:u8,color:PixelColors)-> Option<Vec<Vec<u8>>>{
202 if base%2==0{
203 return None;
204 }
205 if base<5{
206 return None;
207 }
208 let mut col1=0;
209 match color{
210 PixelColors::Red => col1 = 1,
211 PixelColors::Blue => col1 = 2,
212 PixelColors::Green => col1 = 3,
213 PixelColors::Yellow => col1 = 4,
214 PixelColors::Black => col1 = 5,
215 PixelColors::Cyan => col1 = 6,
216 PixelColors::Magenta => col1 = 7,
217 PixelColors::White => col1 = 8,
218 }
219 let mut vec1 = Vec::new();
220 let mut vec2 = Vec::new();
221 let mut loc = base/2;
222 let mut row = 0;
223 while loc !=1{
224 for x in 0..(base/2 - row){
225 &vec2.push(0);
226 }
227 &vec2.push(col1);
228 loc = base/2-row;
229 for x in (((base/2)-row)..base-(base/2+2)+row){
230 &vec2.push(0);
231 }
232 if row !=0{
233 &vec2.push(col1);
234 }
235 for x in (base-(base/2)+row)..base{
236 &vec2.push(0);
237 }
238 &vec1.push(vec2);
239 vec2 = Vec::new();
240 row+=1;
241 }
242 vec2 = Vec::new();
243 for x in 0..base{
244 vec2.push(col1);
245 }
246 &vec1.push(vec2);
247 Some(vec1)
248}