-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeom_menu.py
130 lines (86 loc) · 3.26 KB
/
geom_menu.py
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
##############################################################################
# Imports Order: 3rd Party Imports, Python Built-ins, Custom Modules
##############################################################################
import bpy
import typing
import re
import os
import json
import colorsys
import bmesh
from . import export
from . import config_controller
##############################################################################
# Constants
##############################################################################
##############################################################################
# Classes
##############################################################################
classes = [] # Initialize the class array to be registered
class GeomProperties(bpy.types.PropertyGroup):
face_name: bpy.props.StringProperty(
name="Face Name",
description="",
default="face1",
maxlen=1024,
)
invisible: bpy.props.BoolProperty(
name="Invisible",
description="Check if you'd like the level info to be included when you export",
default=True,
)
invisible_color: bpy.props.FloatVectorProperty(
name="Color",
subtype="COLOR",
description="",
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0
)
apply_collision: bpy.props.BoolProperty(
name="Level Info",
description="",
default=False,
)
no_edge: bpy.props.BoolProperty(
name="No Edge",
description="",
default=False,
)
classes.append(GeomProperties) # Add the class to the array
class OBJECT_PT_GeomInfoMenu(bpy.types.Panel):
""""""
bl_idname = "OBJECT_PT_LevelInfoMenu"
bl_label = "Geometry Info"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "Level Editor"
bl_context = "objectmode"
def draw(self, context):
layout = self.layout
scene = context.scene
geom_properties = scene.geom_properties
def input_invalid(chars, value):
return not (bool(re.match(chars, value)) and value)
# set these properties manually
layout.prop(geom_properties, "face_name", icon="TEXT")
title = layout.row()
title.prop(geom_properties, "apply_collision", icon="HIDE_OFF", icon_only=True)
title.prop(geom_properties, "invisible")
title.prop(geom_properties, "invisible_color")
classes.append(OBJECT_PT_GeomInfoMenu) # Add the class to the array
##############################################################################
# Functions
##############################################################################
##############################################################################
# Registration
##############################################################################
def register():
for cls in classes: # Register all the classes
bpy.utils.register_class(cls)
bpy.types.Scene.geom_properties = bpy.props.PointerProperty(type=GeomProperties)
def unregister():
for cls in reversed(classes): # Unregister all the classes
bpy.utils.unregister_class(cls)
del bpy.types.Scene.geom_properties
# if __name__ == "__main__": # For internal Blender script testing
# register()