Skip to content

Commit bdfda16

Browse files
MrClockMrClock8163
authored andcommitted
Flag groups fixes
Selection and export was not handled correctly when a vertex had an invalid group value. It did not properly fall back to the 1st group defined (if any were defined at all).
1 parent 19f5413 commit bdfda16

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

Arma3ObjectBuilder/io/export_p3d.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,32 +105,32 @@ def bake_flags_vertex(obj):
105105
with utils.edit_bmesh(obj) as bm:
106106
bm.verts.ensure_lookup_table()
107107

108-
default_flag = get_prefs().flag_vertex
109-
110108
layer = flagutils.get_layer_flags_vertex(bm)
111109
flags_vertex = {i: item.get_flag() for i, item in enumerate(obj.a3ob_properties_object_flags.vertex)}
112-
if len(flags_vertex) > 0:
110+
if len(flags_vertex) == 0:
111+
default_flag = get_prefs().flag_vertex
113112
for vert in bm.verts:
114-
vert[layer] = flags_vertex.get(vert[layer], default_flag)
113+
vert[layer] = default_flag
115114
else:
115+
flag = flags_vertex[0]
116116
for vert in bm.verts:
117-
vert[layer] = default_flag
117+
vert[layer] = flags_vertex.get(vert[layer], flag)
118118

119119

120120
def bake_flags_face(obj):
121121
with utils.edit_bmesh(obj) as bm:
122122
bm.faces.ensure_lookup_table()
123123

124-
default_flag = get_prefs().flag_face
125-
126124
layer = flagutils.get_layer_flags_face(bm)
127125
flags_face = {i: item.get_flag() for i, item in enumerate(obj.a3ob_properties_object_flags.face)}
128-
if len(flags_face) > 0:
126+
if len(flags_face) == 0:
127+
default_flag = get_prefs().flag_face
129128
for face in bm.faces:
130-
face[layer] = flags_face.get(face[layer], default_flag)
129+
face[layer] = default_flag
131130
else:
131+
flag = flags_face[0]
132132
for face in bm.faces:
133-
face[layer] = default_flag
133+
face[layer] = flags_face.get(face[layer], flag)
134134

135135

136136
def blank_flags_vertex(obj):

Arma3ObjectBuilder/utilities/flags.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,14 @@ def assign_group_vertex(obj, group_id):
138138

139139

140140
def select_group_vertex(obj, group_id, select = True):
141+
group_count = len(obj.a3ob_properties_object_flags.vertex)
141142
with utils.edit_bmesh(obj) as bm:
142143
bm.verts.ensure_lookup_table()
143144

144145
layer = get_layer_flags_vertex(bm)
145-
146146
for vertex in bm.verts:
147-
if vertex[layer] == group_id:
147+
value = vertex[layer]
148+
if value == group_id or (group_id == 0 and not (0 <= value < group_count)):
148149
vertex.select = select
149150

150151

@@ -178,13 +179,14 @@ def assign_group_face(obj, group_id):
178179

179180

180181
def select_group_face(obj, group_id, select = True):
182+
group_count = len(obj.a3ob_properties_object_flags.face)
181183
with utils.edit_bmesh(obj) as bm:
182184
bm.faces.ensure_lookup_table()
183185

184186
layer = get_layer_flags_face(bm)
185-
186187
for face in bm.faces:
187-
if face[layer] == group_id:
188+
value = face[layer]
189+
if value == group_id or (group_id == 0 and not (0 <= value < group_count)):
188190
face.select = select
189191

190192

0 commit comments

Comments
 (0)