from __future__ import annotations
[docs]
def get_voxel_color_map(color_scheme='default'):
"""
Returns a color map for voxel visualization based on the specified color scheme.
This function provides multiple predefined color schemes for visualizing voxel data.
Each scheme maps voxel class IDs to RGB color values [0-255]. The class IDs follow
a specific convention where negative values represent built environment elements
and positive values represent natural/ground surface elements.
"""
if color_scheme == 'default':
return {
-99: [0, 0, 0],
-30: [255, 0, 102],
-17: [238, 242, 234],
-16: [56, 78, 84],
-15: [147, 140, 114],
-14: [139, 149, 159],
-13: [186, 187, 181],
-12: [248, 166, 2],
-11: [81, 59, 56],
-3: [180, 187, 216],
-2: [78, 99, 63],
-1: [188, 143, 143],
1: [239, 228, 176],
2: [123, 130, 59],
3: [97, 140, 86],
4: [112, 120, 56],
5: [116, 150, 66],
6: [187, 204, 40],
7: [77, 118, 99],
8: [22, 61, 51],
9: [44, 66, 133],
10: [205, 215, 224],
11: [108, 119, 129],
12: [59, 62, 87],
13: [108, 119, 129],
14: [239, 228, 176],
}
elif color_scheme == 'high_contrast':
return {
-99: [0, 0, 0],
-30: [255, 0, 255],
-17: [255, 255, 255],
-16: [0, 0, 255],
-15: [153, 76, 0],
-14: [192, 192, 192],
-13: [128, 128, 128],
-12: [255, 128, 0],
-11: [153, 0, 0],
-3: [0, 255, 255],
-2: [0, 153, 0],
-1: [204, 0, 102],
1: [255, 255, 153],
2: [102, 153, 0],
3: [0, 204, 0],
4: [153, 204, 0],
5: [0, 102, 0],
6: [204, 255, 51],
7: [0, 153, 153],
8: [0, 51, 0],
9: [0, 102, 204],
10: [255, 255, 255],
11: [76, 76, 76],
12: [0, 0, 0],
13: [76, 76, 76],
14: [255, 204, 153],
}
elif color_scheme == 'monochrome':
return {
-99: [0, 0, 0],
-30: [28, 28, 99],
-17: [242, 242, 242],
-16: [51, 51, 153],
-15: [102, 102, 204],
-14: [153, 153, 204],
-13: [204, 204, 230],
-12: [76, 76, 178],
-11: [25, 25, 127],
-3: [179, 179, 230],
-2: [51, 51, 153],
-1: [102, 102, 178],
1: [230, 230, 255],
2: [128, 128, 204],
3: [102, 102, 204],
4: [153, 153, 230],
5: [76, 76, 178],
6: [204, 204, 255],
7: [76, 76, 178],
8: [25, 25, 127],
9: [51, 51, 204],
10: [242, 242, 255],
11: [128, 128, 178],
12: [51, 51, 127],
13: [128, 128, 178],
14: [230, 230, 255],
}
elif color_scheme == 'pastel':
return {
-99: [0, 0, 0],
-30: [255, 179, 217],
-17: [245, 245, 245],
-16: [173, 196, 230],
-15: [222, 213, 196],
-14: [211, 219, 226],
-13: [226, 226, 226],
-12: [255, 223, 179],
-11: [204, 168, 166],
-3: [214, 217, 235],
-2: [190, 207, 180],
-1: [235, 204, 204],
1: [250, 244, 227],
2: [213, 217, 182],
3: [200, 226, 195],
4: [209, 214, 188],
5: [195, 220, 168],
6: [237, 241, 196],
7: [180, 210, 205],
8: [176, 196, 190],
9: [188, 206, 235],
10: [242, 245, 250],
11: [209, 213, 219],
12: [189, 190, 204],
13: [209, 213, 219],
14: [250, 244, 227],
}
elif color_scheme == 'dark_mode':
return {
-99: [0, 0, 0],
-30: [153, 51, 102],
-17: [76, 76, 76],
-16: [33, 46, 51],
-15: [89, 84, 66],
-14: [83, 89, 94],
-13: [61, 61, 61],
-12: [153, 102, 0],
-11: [51, 35, 33],
-3: [78, 82, 99],
-2: [46, 58, 37],
-1: [99, 68, 68],
1: [102, 97, 75],
2: [61, 66, 31],
3: [46, 77, 46],
4: [56, 61, 28],
5: [54, 77, 31],
6: [89, 97, 20],
7: [38, 59, 49],
8: [16, 31, 26],
9: [22, 33, 66],
10: [82, 87, 92],
11: [46, 51, 56],
12: [25, 31, 43],
13: [46, 51, 56],
14: [102, 97, 75],
}
elif color_scheme == 'grayscale':
return {
-99: [0, 0, 0],
-30: [253, 231, 37],
-17: [240, 240, 240],
-16: [60, 60, 60],
-15: [130, 130, 130],
-14: [150, 150, 150],
-13: [180, 180, 180],
-12: [170, 170, 170],
-11: [70, 70, 70],
-3: [190, 190, 190],
-2: [90, 90, 90],
-1: [160, 160, 160],
1: [230, 230, 230],
2: [120, 120, 120],
3: [110, 110, 110],
4: [115, 115, 115],
5: [100, 100, 100],
6: [210, 210, 210],
7: [95, 95, 95],
8: [40, 40, 40],
9: [50, 50, 50],
10: [220, 220, 220],
11: [140, 140, 140],
12: [30, 30, 30],
13: [140, 140, 140],
14: [230, 230, 230],
}
elif color_scheme == 'white_mode':
return {
-99: [0, 0, 0],
-30: [220, 80, 80],
-17: [250, 250, 250],
-16: [210, 225, 235],
-15: [230, 225, 215],
-14: [225, 230, 235],
-13: [236, 236, 236],
-12: [245, 232, 210],
-11: [235, 210, 205],
-3: [225, 230, 240],
-2: [190, 210, 190],
-1: [230, 215, 215],
1: [248, 245, 235],
2: [225, 235, 215],
3: [220, 235, 220],
4: [240, 235, 215],
5: [210, 230, 210],
6: [245, 250, 235],
7: [220, 235, 230],
8: [205, 215, 210],
9: [200, 220, 245],
10: [252, 252, 252],
11: [230, 230, 230],
12: [210, 210, 215],
13: [230, 230, 230],
14: [248, 245, 235],
}
else:
# Fallback to default palette for unknown schemes
return get_voxel_color_map('default')