Пример #1
0
def display_mesh_data(vmesh):
    for attrib in vmesh.vertattrib:
        usage = modmesh.D3DDECLUSAGE(attrib.usage).name
        offset = int(attrib.offset / vmesh.vertformat)
        vartype = modmesh.D3DDECLTYPE(attrib.vartype).name
        vlen = len(modmesh.D3DDECLTYPE(attrib.vartype))

        print('\n### {} {} ###'.format(usage, vartype))
        for i in range(vmesh.vertnum):
            vstart = offset + i * int(vmesh.vertstride / vmesh.vertformat)
            data = vmesh.vertices[vstart:vstart + vlen]

            print('[{}] [{}] {},'.format(i, vstart, tuple(data)))

    print('\n### INDICES ###\n')
    face_vid = 0
    for id_vertex in vmesh.index:
        face_vid += 1

        vstart = id_vertex * int(vmesh.vertstride / vmesh.vertformat)
        vdata = vmesh.vertices[vstart:vstart + 3]
        print('[{}] {},'.format(id_vertex, tuple(vdata)))
        if face_vid == 3:
            face_vid = 0
            print('')
Пример #2
0
def print_vertex_data(vmesh, vid, vattribute):
    for attrib_id, attrib in enumerate(vmesh.vertattrib):
        usage = modmesh.D3DDECLUSAGE(attrib.usage).name
        offset = int(attrib.offset / vmesh.vertformat)
        vartype = modmesh.D3DDECLTYPE(attrib.vartype).name
        vlen = len(modmesh.D3DDECLTYPE(attrib.vartype))

        if usage == vattribute:
            vstart = offset + vid * int(vmesh.vertstride / vmesh.vertformat)
            vdata = vmesh.vertices[vstart:vstart + vlen]
            print('[{}]{} = {}'.format(vid, vattribute, vdata))
Пример #3
0
def remove_attribute(vmesh, attrib_to_remove):
    print('start size vmesh.vertices = {}'.format(len(vmesh.vertices)))
    vsize = int(vmesh.vertstride / vmesh.vertformat)

    offset_attrib = 0
    attrib_id_to_remove = 0
    total_data_removed = 0

    for attrib_id, attrib in enumerate(vmesh.vertattrib):
        usage = modmesh.D3DDECLUSAGE(attrib.usage).name
        offset = int(attrib.offset / vmesh.vertformat)
        vartype = modmesh.D3DDECLTYPE(attrib.vartype).name
        vlen = len(modmesh.D3DDECLTYPE(attrib.vartype))

        if usage == attrib_to_remove:
            print('REMOVING DATA for {}'.format(usage))
            offset_attrib = vlen * vmesh.vertformat
            attrib_id_to_remove = attrib_id

            for vertid in range(vmesh.vertnum - 1, -1, -1):
                vstart = offset + vertid * vsize
                total_data_removed += vlen
                print(
                    'removing [{}]{}:{} from vertices, {} removed total, current len = {}'
                    .format(vertid, vstart, vstart + vlen, total_data_removed,
                            len(vmesh.vertices)))
                del vmesh.vertices[vstart:vstart + vlen]

        if offset_attrib != 0 and offset != 0:
            new_attrib_offset = attrib.offset - offset_attrib
            print('MOVING {} offset from {} to {} by {} bytes'.format(
                usage, attrib.offset, new_attrib_offset, offset_attrib))
            attrib.offset = new_attrib_offset

    # remove attribute from table
    if attrib_id_to_remove != 0:
        # fix vertstride
        reduce_stride_by = len(
            modmesh.D3DDECLTYPE(vmesh.vertattrib[attrib_id_to_remove].vartype)
        ) * vmesh.vertformat
        print('REDUCING STRIDE from {} to {} by {} bytes'.format(
            vmesh.vertstride, vmesh.vertstride - reduce_stride_by,
            reduce_stride_by))
        vmesh.vertstride = vmesh.vertstride - reduce_stride_by

        del vmesh.vertattrib[attrib_id_to_remove]

        # fix attrib table len
        vmesh.vertattribnum = len(vmesh.vertattrib)
        print('vmesh.vertattribnum = {}'.format(vmesh.vertattribnum))
        print('new vertices array len = {} after {} removed'.format(
            len(vmesh.vertices), total_data_removed))
Пример #4
0
def edit_vertex(vmesh, vid, vattribute, vdata):
    for attrib_id, attrib in enumerate(vmesh.vertattrib):
        usage = modmesh.D3DDECLUSAGE(attrib.usage).name
        offset = int(attrib.offset / vmesh.vertformat)
        vartype = modmesh.D3DDECLTYPE(attrib.vartype).name
        vlen = len(modmesh.D3DDECLTYPE(attrib.vartype))

        if usage == vattribute:
            print('SETTING DATA for v[{}] {}'.format(vid, vattribute))
            for vertid in range(vmesh.vertnum - 1, -1, -1):
                vstart = offset + vertid * \
                    int(vmesh.vertstride / vmesh.vertformat)
                if vertid == vid:
                    for i, data in enumerate(vdata):
                        vmesh.vertices[vstart + i] = data
Пример #5
0
 def _create_vertstride(self):
     self.vertstride = sum([
         len(modmesh.D3DDECLTYPE(attrib.vartype)) * self.vertformat
         for attrib in self.vertattrib
     ])