blender-xray
                                
                                 blender-xray copied to clipboard
                                
                                    blender-xray copied to clipboard
                            
                            
                            
                        Возможность "импорта" ошибок геометрии из ActorEditor
Пример ошибок из SDK:
Invalid smooth group found (Maya type). Object: 'levels\l03_zavodrostok\l03_zavodrostok_part0752'. Vertex: [206.65, -0.64, 117.51] Invalid smooth group found (Maya type). Object: 'levels\l03_zavodrostok\l03_zavodrostok_part0752'. Vertex: [206.65, -0.64, 117.51]
Для лога выше, аддон должен создать (например) объект-пустышку в координатах [206.65, -0.64, 117.51], чтобы можно было выделить эту пустышку и приблизить этот участок геометрии для анализа проблемы в Blender.
@s30-zip как думаешь, тебе бы это помогло решать проблема, как в #195?
Да, было бы проще.А нельзя в виде создания групп вершин с соответствующим префиксом реализовать? На манеру, как "xr.bad", только там "smooth.bad" и "face.bad" к примеру?
аддон должен создать (например) объект-пустышку в координатах
а если много ошибок, то создастся много пустышек? Потом их как-то нужно удалить. Искать в сцене десятки объектов. Лучше сделать один меш объект, который будет содержать вершины и иметь опцию X-Ray, чтобы его было видно насквозь другие объекты.
А нельзя в виде создания групп вершин с соответствующим префиксом реализовать?
а там, в логе от СДК, координаты сильно округлены. Не получиться выяснить, какая именно вершина вызвала проблему.
Сделал набросок алгоритма, который находит (или не находит) вертексы, ближайшие, к точкам указанным в логе СДК:
import bpy
import mathutils
import re
def import_log(text, obj):
    verteg_group = obj.vertex_groups.new('sdk-smooth.bad')
    ns = '(-?\\d+\\.\\d+)'
    rg = re.compile('Invalid smooth group found .* Vertex: \[%s, %s, %s\]' % (ns, ns, ns))
    for line in text.split('\n'):
        match = rg.match(line)
        if match:
            point = mathutils.Vector((
              float(match[1]),
              float(match[3]),
              float(match[2])
            ))
            min_distance = 0.01
            min_index = -1
            for index, vertex in enumerate(obj.data.vertices):
                distance = (vertex.co - point).length
                if distance < min_distance:
                    min_distance = distance
                    min_index = index
            if min_index != -1:
                verteg_group.add([min_index], 1, 'REPLACE')
            else:
                print('Vertex is not found:', line)
data = '''
Invalid smooth group found (Maya type). Object: 'e:\l03_zavodrostok_part0752.object'. Vertex: [206.65, -0.64, 117.51]
Optimize: Invalid face found. Removed.
Invalid smooth group found (Maya type). Object: 'e:\l03_zavodrostok_part0752.object'. Vertex: [206.65, 2.29, 117.51]
'''
import_log(data, bpy.context.active_object)
Что странно, оно работает не так уж и медленно. Только вот те вершины, которые оно находит, - они правильные, но всё-равно мне ничего не понятно в этой каше.