forked from Nivedha-Ramesh/Container-Loading-Problem
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvisualize.py
More file actions
73 lines (65 loc) · 3.49 KB
/
Copy pathvisualize.py
File metadata and controls
73 lines (65 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import numpy as np
import matplotlib.pyplot as plt
pallete = ['darkgreen', 'tomato', 'yellow', 'darkblue', 'darkviolet', 'indianred', 'yellowgreen', 'mediumblue', 'cyan',
'black', 'indigo', 'pink', 'lime', 'sienna', 'plum', 'deepskyblue', 'forestgreen', 'fuchsia', 'brown',
'turquoise', 'aliceblue', 'blueviolet', 'rosybrown', 'powderblue', 'lightblue', 'skyblue', 'lightskyblue',
'steelblue', 'dodgerblue', 'lightslategray', 'lightslategrey', 'slategray', 'slategrey', 'lightsteelblue',
'cornflowerblue', 'royalblue', 'ghostwhite', 'lavender', 'midnightblue', 'navy', 'darkblue', 'blue',
'slateblue', 'darkslateblue', 'mediumslateblue', 'mediumpurple', 'rebeccapurple', 'darkorchid',
'darkviolet', 'mediumorchid']
color_pallete = ['lightsalmon', 'lightseagreen', 'lavenderblush', 'aquamarine', 'palegreen', 'yellow', 'firebrick', 'maroon', 'darkred', 'red', 'salmon', 'darksalmon', 'coral', 'orangered',
'lightcoral', 'chocolate', 'saddlebrown', 'sandybrown', 'olive', 'olivedrab', 'darkolivegreen',
'greenyellow', 'chartreuse', 'lawngreen', 'darkseagreen', 'lightgreen', 'limegreen',
'green', 'seagreen', 'mediumseagreen', 'springgreen', 'mediumspringgreen', 'mediumaquamarine',
'mediumturquoise', 'lightcyan', 'paleturquoise', 'darkslategray',
'darkslategrey', 'teal', 'darkcyan', 'aqua', 'cyan', 'darkturquoise', 'cadetblue', 'thistle',
'violet', 'purple', 'darkmagenta', 'magenta', 'orchid', 'mediumvioletred', 'deeppink', 'hotpink',
'palevioletred', 'crimson', 'lightpink']
def cuboid_data(o, size=(1, 1, 1)):
# suppose axis direction: x: to left; y: to inside; z: to upper
# get the length, width, and height
l, w, h = size
x = [[o[0], o[0] + l, o[0] + l, o[0], o[0]],
[o[0], o[0] + l, o[0] + l, o[0], o[0]],
[o[0], o[0] + l, o[0] + l, o[0], o[0]],
[o[0], o[0] + l, o[0] + l, o[0], o[0]]]
y = [[o[1], o[1], o[1] + w, o[1] + w, o[1]],
[o[1], o[1], o[1] + w, o[1] + w, o[1]],
[o[1], o[1], o[1], o[1], o[1]],
[o[1] + w, o[1] + w, o[1] + w, o[1] + w, o[1] + w]]
z = [[o[2], o[2], o[2], o[2], o[2]],
[o[2] + h, o[2] + h, o[2] + h, o[2] + h, o[2] + h],
[o[2], o[2], o[2] + h, o[2] + h, o[2]],
[o[2], o[2], o[2] + h, o[2] + h, o[2]]]
return np.array(x), np.array(y), np.array(z)
def plotcuboid(pos=(0, 0, 0), size=(1, 1, 1), ax=None, **kwargs):
# Plotting a cube element at position pos
if ax is not None:
X, Y, Z = cuboid_data(pos, size)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, **kwargs)
def draw(pieces, color_index=[], title=""):
positions = []
sizes = []
colors = []
sorted_size = []
for each in pieces:
positions.append(each[0:3])
sizes.append(each[3:])
sorted_size.append(set(each[3:]))
if len(color_index) == 0:
colors = pallete[:len(positions)]
color_index = [sorted_size, colors]
else:
dim = color_index[0]
clr = color_index[1]
for each in sorted_size:
index = dim.index(each)
colors.append(clr[index])
plt.interactive(True)
fig = plt.figure()
ax = fig.gca(projection='3d')
for p, s, c in zip(positions, sizes, colors):
plotcuboid(pos=p, size=s, ax=ax, color=c)
plt.title(title)
plt.show()
return color_index