def test_can_write_skinnedmesh_identical(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_skinned)
        vmesh.save(self.path_object_skinned_clone)

        self.assertTrue(
            filecmp.cmp(self.path_object_skinned,
                        self.path_object_skinned_clone))
Esempio n. 2
0
    def test_can_rename_texture(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_std)
        path_object_clone = os.path.join(*[
            'tests', 'generated', 'edit', 'evil_box_rename_texture', 'meshes',
            'evil_box_rename_texture.staticmesh'
        ])

        geom = 0
        lod = 0
        material = 0
        map = 0

        # ensure we have diffirent texture before test
        self.assertTrue(
            vmesh.geoms[geom].lods[lod].materials[material].maps[map] ==
            b'objects/staticobjects/test/evil_box/textures/evil_box_c.dds')

        modmesh.VisMeshTransform(vmesh).rename_texture(
            geom, lod, material, map,
            'readme/assets/apps/python3/mesher/tests/samples/evil_box/textures/evil_box_c.dds'
        )

        # save results for manual check
        vmesh.save(path_object_clone)
        self.assertTrue(
            vmesh.geoms[geom].lods[lod].materials[material].maps[map] ==
            b'readme/assets/apps/python3/mesher/tests/samples/evil_box/textures/evil_box_c.dds'
        )
Esempio n. 3
0
def main():
    vmesh = modmesh.LoadBF2Mesh('ch_kits.skinnedmesh')

    order = [0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10, 11, 12, 13, 14, 15, 16]
    modmesh.VisMeshTransform(vmesh).order_geoms_by(order)

    vmesh.save('./ch_kits2.skinnedmesh')
Esempio n. 4
0
 def test_can_deserialize_materials_vertices_pavement(self):
     path_pavement = os.path.join(*['tests', 'samples', 'pavement', '24m_1', 'meshes', '24m_1.staticmesh'])
     path_pavement_clone = os.path.join(*['tests', 'generated', 'edit', 'pavement', '24m_1_clone', 'meshes', '24m_1_clone.staticmesh'])
     vmesh = modmesh.LoadBF2Mesh(path_pavement)
     vmesh_clone = modmesh.LoadBF2Mesh(path_pavement)
     
     vertex_objects = [vertex for vertex in vmesh.get_vertices()]
     vertices = []
     for id_geom, geom in enumerate(vmesh.geoms):
         for id_lod, lod in enumerate(geom.lods):
             for id_mat, material in enumerate(lod.materials):
                 for vertex in vertex_objects[material.vstart:material.vstart + material.vnum]:
                     vertices.append(vertex)
     
     vmesh.update_vertices(vertices)
     vmesh.save(path_pavement_clone)
     self.assertEqual(vmesh.vertices, vmesh_clone.vertices)
    def test_can_write_u1_bfp4f_version(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_u1_bfp4f_version(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_u1_bfp4f_version(meshfile)

        self.assertTrue(vmesh2.u1 == vmesh.u1)
    def test_can_write_geomnum_mesh_dest(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_dest)
        vmesh._write_geomnum(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_geomnum(meshfile)

        self.assertTrue(vmesh2.geomnum == vmesh.geomnum)
    def test_can_write_vertstride(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_vertstride(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_vertstride(meshfile)

        self.assertTrue(vmesh2.vertstride == vmesh.vertstride)
    def test_can_write_index_block(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_index_block(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_index_block(meshfile)

        self.assertTrue(len(vmesh2.index) == len(vmesh2.index))
    def test_can_write_vertex_attribute_table(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_vertattrib_table(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_vertattrib_table(meshfile)

        for attrib_id, attrib in enumerate(vmesh.vertattrib):
            self.assertTrue(attrib == vmesh2.vertattrib[attrib_id])
Esempio n. 10
0
    def test_can_write_geom_table_mesh_std(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_geom_table(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_geom_table(meshfile)

        self.assertTrue(len(vmesh2.geoms) == len(vmesh.geoms))
        self.assertTrue(vmesh2.geoms[0].lodnum == vmesh.geoms[0].lodnum)
Esempio n. 11
0
    def test_can_merge_statics_from_GPO(self):
        path_pavement = os.path.join(*[
            'tests', 'samples', 'pavement', '24m_1', 'meshes',
            '24m_1.staticmesh'
        ])
        path_pavement_clone = os.path.join(*[
            'tests', 'generated', 'edit', 'pavement', '24m_1_merge', 'meshes',
            '24m_1_merge.staticmesh'
        ])

        # from fallujah
        position1 = Vec3(491.567, 24.653, 495.454)
        rotation1 = (0.2, 0.0, 0.0)

        position2 = Vec3(491.416, 24.653, 443.974)
        rotation2 = (0.2, 0.0, 0.0)

        diff = position2 - position1

        vmesh1 = modmesh.LoadBF2Mesh(path_pavement)
        vmesh2 = modmesh.LoadBF2Mesh(path_pavement)

        vmesh1.rotate(rotation1)
        vmesh2.rotate(rotation2)
        vmesh2.translate(diff)
        vmesh1.merge(vmesh2)

        # translating to center
        min = Vec3(*vmesh1.geoms[0].lods[0].min)
        max = Vec3(*vmesh1.geoms[0].lods[0].max)
        center_offset = (min + max) / 2
        #print(min)
        #print(max)
        #print(center_offset)
        #print(position1 + center_offset)
        vmesh1.translate(-center_offset)

        #vmesh1.geoms[0].lods[0].materials.

        vmesh1.save(path_pavement_clone)
Esempio n. 12
0
    def test_can_copy_geom_by_ref(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_skinned)
        vmesh_old = copy.deepcopy(vmesh)
        if not vmesh.isSkinnedMesh:
            raise
        path_object_skinned_clone = os.path.join(*[
            'tests', 'generated', 'edit', 'kits', 'mec_geom_copy', 'Meshes',
            'mec_kits_geom_copy.skinnedMesh'
        ])

        # example geom
        geomToCopy = 0
        geomCopyTo = 1

        # debugging
        #geom = 0
        #lod = 0
        #mat = 0
        #print('vnum = {}'.format(vmesh.geoms[geom].lods[lod].materials[mat].vnum))
        #print('vstart = {}'.format(vmesh.geoms[geom].lods[lod].materials[mat].vstart))
        #print('inum = {}'.format(vmesh.geoms[geom].lods[lod].materials[mat].inum))
        #print('istart = {}'.format(vmesh.geoms[geom].lods[lod].materials[mat].istart))

        modmesh.VisMeshTransform(vmesh).copy_geom_id(geomToCopy, geomCopyTo)
        vmesh.save(path_object_skinned_clone)

        self.assertTrue(vmesh.geomnum == vmesh_old.geomnum + 1)
        self.assertTrue(len(vmesh.geoms) == len(vmesh_old.geoms) + 1)
        self.assertTrue(vmesh.geoms[geomCopyTo].lodnum ==
                        vmesh_old.geoms[geomToCopy].lodnum)
        for id_lod, lod in enumerate(vmesh.geoms[geomCopyTo].lods):
            self.assertTrue(
                lod.rignum == vmesh_old.geoms[geomToCopy].lods[id_lod].rignum)
            for id_rig, rig in enumerate(lod.rigs):
                self.assertTrue(rig.bonenum == vmesh_old.geoms[geomToCopy].
                                lods[id_lod].rigs[id_rig].bonenum)
                for id_bone, bone in enumerate(rig.bones):
                    self.assertTrue(
                        bone.id == vmesh_old.geoms[geomToCopy].lods[id_lod].
                        rigs[id_rig].bones[id_bone].id)
                    self.assertTrue(
                        bone.matrix == vmesh_old.geoms[geomToCopy].
                        lods[id_lod].rigs[id_rig].bones[id_bone].matrix)
            for id_mat, material in enumerate(lod.materials):
                self.assertTrue(material.vnum == vmesh_old.geoms[geomToCopy].
                                lods[id_lod].materials[id_mat].vnum)
                self.assertTrue(material.vstart == vmesh_old.geoms[geomToCopy].
                                lods[id_lod].materials[id_mat].vstart)
                self.assertTrue(material.inum == vmesh_old.geoms[geomToCopy].
                                lods[id_lod].materials[id_mat].inum)
                self.assertTrue(material.istart == vmesh_old.geoms[geomToCopy].
                                lods[id_lod].materials[id_mat].istart)
Esempio n. 13
0
    def test_can_write_header(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_header(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_head(meshfile)

        self.assertTrue(vmesh2.head.u1 == vmesh.head.u1)
        self.assertTrue(vmesh2.head.version == vmesh.head.version)
        self.assertTrue(vmesh2.head.u3 is vmesh.head.u3)
        self.assertTrue(vmesh2.head.u4 is vmesh.head.u4)
        self.assertTrue(vmesh2.head.u5 is vmesh.head.u5)
Esempio n. 14
0
    def test_can_rotate_mesh_pavement(self):
        path_pavement = os.path.join(*[
            'tests', 'samples', 'pavement', '24m_1', 'meshes',
            '24m_1.staticmesh'
        ])
        path_pavement_clone = os.path.join(*[
            'tests', 'generated', 'edit', 'pavement', '24m_1_rotate', 'meshes',
            '24m_1_rotate.staticmesh'
        ])
        vmesh = modmesh.LoadBF2Mesh(path_pavement)

        rotation = (45.0, 0.0, 0.0)
        vmesh.rotate(rotation)
        vmesh.save(path_pavement_clone)
Esempio n. 15
0
 def test_can_read_PR_modmesh_REPO(self):
     counter = 0
     for dir, dirnames, filenames in os.walk(
             os.path.join(bf2.Mod().root, 'objects')):
         for filename in filenames:
             ext = filename.split('.')[-1].lower()
             if ext[-4:] == 'mesh' and ext not in ['collisionmesh'
                                                   ] and 'test' not in dir:
                 counter += 1
                 try:
                     vmesh = modmesh.LoadBF2Mesh(
                         os.path.join(bf2.Mod().root, dir, filename))
                 except struct.error:
                     print('Failed to load {}'.format(
                         os.path.join(bf2.Mod().root, dir, filename)))
                     raise
         print(counter)
Esempio n. 16
0
    def test_can_write_nodes(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_nodes(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_nodes(meshfile)

        self.assertTrue(
            vmesh2.geoms[0].lods[0].min == vmesh.geoms[0].lods[0].min)
        self.assertTrue(
            vmesh2.geoms[0].lods[0].max == vmesh.geoms[0].lods[0].max)
        #self.assertTrue(vmesh.geoms[0].lods[0].pivot == (0.5, 1.0, 0.5)) # some old bundleds?
        self.assertTrue(
            vmesh2.geoms[0].lods[0].nodenum == vmesh.geoms[0].lods[0].nodenum)
        self.assertTrue(
            vmesh2.geoms[0].lods[0].nodes == vmesh.geoms[0].lods[0].nodes)
Esempio n. 17
0
def main():
    # ############################################################################ #
    # box exported from 3dsmax9 have weird additional vertex
    # for comparison with blender export data i need to remove it, aswell as
    # remove addional UV maps that isn't used
    vmesh = modmesh.LoadBF2Mesh(
        os.getcwd() +
        '\\tests\\samples\\evil_box\\Meshes\\evil_box.staticmesh')
    print_vertex_data(vmesh, 24, 'UV1')

    remove_vertice_id(vmesh, 24)
    replace_index_id(vmesh, 24, 14)
    remove_attribute(vmesh, 'UV2')
    remove_attribute(vmesh, 'UV3')
    remove_attribute(vmesh, 'UV4')
    #rename_texture(vmesh, geom=0, lod=0, material=0, map=0, path='readme/assets/apps/python3/mesher/tests/samples/evil_box/textures/evil_box_c.dds')
    edit_vertex(vmesh, 14, 'UV1', (0.5, 1.0))

    vmesh.save('generated/generated_box/meshes/generated_box_edit.staticmesh')
Esempio n. 18
0
    def test_can_write_materials(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
        vmesh._write_materials(self.path_object_static_clone)

        with open(self.path_object_static_clone, 'rb') as meshfile:
            vmesh2 = modmesh.VisMesh()
            vmesh2._read_materials(meshfile)

        for geom_id, geom in enumerate(vmesh.geoms):
            for lod_id, lod in enumerate(geom.lods):
                self.assertTrue(
                    lod.matnum == vmesh2.geoms[geom_id].lods[lod_id].matnum)
                #for material_id, material in enumerate(lod.materials):
                #for key, value in material.__dict__.items():
                #    print('"{:.10}" : {}'.format(key, value))
                #for key, value in vmesh2.geoms[geom_id].lods[lod_id].materials[material_id].__dict__.items():
                #    print('"{:.10}" : {}'.format(key, value))
                #self.assertTrue(material == vmesh2.geoms[geom_id].lods[lod_id].materials[material_id])
                self.assertTrue(lod.polycount ==
                                vmesh2.geoms[geom_id].lods[lod_id].polycount)
Esempio n. 19
0
 def test_can_load_bf2_mesh_with_samples(self):
     meshpath = self.path_object_samples.replace('.samples', '.staticmesh')
     vmesh = modmesh.LoadBF2Mesh(meshpath, loadSamples=True)
     self.assertTrue(
         isinstance(vmesh.geoms[0].lods[0].sample, modmesh.StdSample))
Esempio n. 20
0
    print('alphamode = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].alphamode))
    print('fxfile = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].fxfile))
    print('technique = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].technique))
    print('mapnum = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].mapnum))
    for id, map in enumerate(
            vmesh.geoms[geom].lods[lod].materials[material].maps):
        print('map[{}] = {}'.format(id, map))
    print('vnum = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].vnum))
    print('vstart = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].vstart))
    print('inum = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].inum))
    print('istart = {}'.format(
        vmesh.geoms[geom].lods[lod].materials[material].istart))


vmesh = modmesh.LoadBF2Mesh(
    'tests\\samples\\kits\\Mec\\Meshes\\mec_kits.skinnedMesh')
#vmesh = modmesh.LoadBF2Mesh(os.getcwd() + '/generated/generated_box/meshes/generated_box_edit.staticmesh')
#vmesh = modmesh.LoadBF2Mesh('C:\Program Files\Blender Foundation\Blender\generated\generated_box\meshes\generated_box.staticmesh')
#vmesh = modmesh.LoadBF2Mesh(os.getcwd() + '\\..\\..\\..\\..\\..\\objects\\vehicles\\land\\us_tnk_m1a2\\Meshes\\us_tnk_m1a2.bundledmesh')

#display_mesh_data(vmesh)
display_material_data(vmesh, 17, 0, 0)
display_material_data(vmesh, 18, 0, 0)
Esempio n. 21
0
    def test_can_edit_geoms_order(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_skinned)
        vmesh_old = modmesh.LoadBF2Mesh(
            self.path_object_skinned)  # faster than deepcopy
        if not vmesh.isSkinnedMesh:
            self.fail("Source mesh not skinned")
        path_object_skinned_clone = os.path.join(*[
            'tests', 'generated', 'edit', 'kits', 'mec_geoms_ordered',
            'Meshes', 'mec_kits_geoms_ordered.skinnedMesh'
        ])

        # for simplicity we'll just reverse geoms list
        order_old = [i for i in range(vmesh.geomnum)]
        order_new = list(reversed(order_old))

        geoms_old = vmesh_old.geoms
        vertices_old = vmesh_old.vertices
        indices_old = vmesh_old.index

        modmesh.VisMeshTransform(vmesh).order_geoms_by(order_new)
        vmesh.save(path_object_skinned_clone)

        # verify geomtable reversed properly
        for id_geom, geom in enumerate(vmesh.geoms):
            id_geom_old = len(
                vmesh.geoms) - id_geom - 1  # idk, numering start from 0?
            geom_old = geoms_old[id_geom_old]
            self.assertTrue(geom.lodnum == geom_old.lodnum)
            self.assertTrue(len(geom.lods) == len(geom_old.lods))
            for id_lod, lod in enumerate(geom.lods):
                lod_old = geom_old.lods[id_lod]
                self.assertTrue(lod.rignum == lod_old.rignum)
                self.assertTrue(len(lod.rigs) == len(lod_old.rigs))
                for id_rig, rig in enumerate(lod.rigs):
                    rig_old = lod_old.rigs[id_rig]
                    self.assertTrue(rig.bonenum == rig_old.bonenum)
                    self.assertTrue(rig.bonenum == rig_old.bonenum)
                    for id_bone, bone in enumerate(rig.bones):
                        bone_old = rig_old.bones[id_bone]
                        self.assertTrue(bone.id == bone_old.id)
                        self.assertTrue(bone.matrix == bone_old.matrix)
                for id_mat, material in enumerate(lod.materials):
                    material_old = lod_old.materials[id_mat]
                    self.assertTrue(material.vnum == material_old.vnum)
                    self.assertTrue(material.inum == material_old.inum)
                    self.assertTrue(material.vstart == material_old.vstart)
                    self.assertTrue(material.istart == material_old.istart)

                    # verify that we have same geom data packed properly
                    vstart = int(vmesh.vertstride / vmesh.vertformat *
                                 material.vstart)
                    vstart_old = int(vmesh.vertstride / vmesh.vertformat *
                                     geoms_old[id_geom_old].lods[id_lod].
                                     materials[id_mat].vstart)
                    vnum = int(vmesh.vertstride / vmesh.vertformat *
                               material.vnum)
                    for id_vdata, vdata in enumerate(
                            vmesh.vertices[vstart:vstart + vnum]):
                        # Apparently pr skinnedmeshes containing nan data in vertices array
                        #  test fails as nan != nan even through rest of data are same
                        if math.isnan(vdata) and math.isnan(
                                vertices_old[vstart_old + id_vdata]):
                            continue
                        self.assertEqual(vdata,
                                         vertices_old[vstart_old + id_vdata])

                    # and proper indices
                    inum = material.inum
                    istart = material.istart
                    istart_old = geoms_old[id_geom_old].lods[id_lod].materials[
                        id_mat].istart
                    for id_index, index in enumerate(
                            vmesh.index[istart:istart + inum]):
                        self.assertEqual(index,
                                         indices_old[istart_old + id_index])
Esempio n. 22
0
 def test_can_load_bf2_skinned_mesh(self):
     vmesh = modmesh.LoadBF2Mesh(self.path_object_skinned)
     self.assertTrue(isinstance(vmesh, modmesh.VisMesh))
     self.assertTrue(vmesh.isSkinnedMesh)
Esempio n. 23
0
    def test_can_delete_geom(self):
        vmesh = modmesh.LoadBF2Mesh(self.path_object_skinned)
        vmesh_old = modmesh.LoadBF2Mesh(
            self.path_object_skinned)  # faster than deepcopy
        if not vmesh.isSkinnedMesh:
            self.fail("Source mesh not skinned")
        path_object_skinned_clone = os.path.join(*[
            'tests', 'generated', 'edit', 'kits', 'mec_geom_delete', 'Meshes',
            'mec_kits_geom_delete.skinnedMesh'
        ])

        # delete from "middle"
        id_geom_delete = 1
        vstart_at = vmesh.geoms[id_geom_delete].lods[0].materials[0].vstart
        istart_at = vmesh.geoms[id_geom_delete].lods[0].materials[0].istart
        vnum_to_delete = sum([
            sum([material.vnum for material in lod.materials])
            for lod in vmesh.geoms[id_geom_delete].lods
        ])
        inum_to_delete = sum([
            sum([material.inum for material in lod.materials])
            for lod in vmesh.geoms[id_geom_delete].lods
        ])
        geomnum_before = vmesh.geomnum
        geoms_old = vmesh_old.geoms
        vertices_old = vmesh_old.vertices
        indices_old = vmesh_old.index
        vnum_before = vmesh.vertnum
        inum_before = vmesh.indexnum

        # transforming
        modmesh.VisMeshTransform(vmesh).delete_geom_id(id_geom_delete)
        vmesh.save(path_object_skinned_clone)

        # checking geoms arr
        self.assertTrue(vmesh.geomnum == geomnum_before - 1)
        self.assertTrue(len(vmesh.geoms) == geomnum_before - 1)
        # verify that we cleaned up unnecessary vertex data
        self.assertTrue(vmesh.vertnum == vnum_before - vnum_to_delete)
        self.assertTrue(
            len(vmesh.vertices) == len(vertices_old) - sum([
                len(D3DDECLTYPE(attrib.vartype)) for attrib in vmesh.vertattrib
            ]) * vnum_to_delete)
        # and corrected vertex indices
        self.assertTrue(vmesh.indexnum == inum_before - inum_to_delete)
        self.assertTrue(len(vmesh.index) == inum_before - inum_to_delete)
        # verify that geoms adjusted vstart and istart offsets properly
        id_geom = id_geom_delete
        while id_geom < vmesh.geomnum:
            id_geom_old = id_geom + 1
            for id_lod, lod in enumerate(vmesh.geoms[id_geom].lods):
                rignum_old = geoms_old[id_geom_old].lods[id_lod].rignum
                self.assertTrue(lod.rignum == rignum_old)
                for id_rig, rig in enumerate(lod.rigs):
                    bonenum_old = geoms_old[id_geom_old].lods[id_lod].rigs[
                        id_rig].bonenum
                    self.assertTrue(rig.bonenum == bonenum_old)
                    for id_bone, bone in enumerate(rig.bones):
                        self.assertTrue(
                            bone.id == geoms_old[id_geom_old].lods[id_lod].
                            rigs[id_rig].bones[id_bone].id)
                        self.assertTrue(
                            bone.matrix == geoms_old[id_geom_old].lods[id_lod].
                            rigs[id_rig].bones[id_bone].matrix)
                for id_mat, material in enumerate(lod.materials):
                    self.assertTrue(material.vnum == geoms_old[id_geom_old].
                                    lods[id_lod].materials[id_mat].vnum)
                    self.assertTrue(material.vstart == geoms_old[id_geom_old].
                                    lods[id_lod].materials[id_mat].vstart -
                                    vnum_to_delete)
                    self.assertTrue(material.inum == geoms_old[id_geom_old].
                                    lods[id_lod].materials[id_mat].inum)
                    self.assertTrue(material.istart == geoms_old[id_geom_old].
                                    lods[id_lod].materials[id_mat].istart -
                                    inum_to_delete)
                    # and verify that we deleted vertex and index with correct offset
                    vstart = int(vmesh.vertstride / vmesh.vertformat *
                                 material.vstart)
                    vstart_old = int(vmesh.vertstride / vmesh.vertformat *
                                     geoms_old[id_geom_old].lods[id_lod].
                                     materials[id_mat].vstart)
                    vnum = int(vmesh.vertstride / vmesh.vertformat *
                               material.vnum)
                    for id_data, vdata in enumerate(
                            vmesh.vertices[vstart:vstart + vnum]):
                        # Apparently pr skinnedmeshes containing nan data in vertices array
                        #  test fails as nan != nan even through rest of data are same
                        if math.isnan(vdata) and math.isnan(
                                vertices_old[vstart_old + id_data]):
                            continue
                        self.assertEqual(
                            vdata,
                            vertices_old[vstart_old + id_data],
                            msg=
                            'id {}:{} after {},\nvnum_to_delete = {},\nat geom{} lod{} material{}'
                            .format(vstart + id_data, vstart_old + id_data,
                                    id_data, vnum_to_delete, id_geom, id_lod,
                                    id_mat))
                    #'''
                    inum = material.inum
                    istart = material.istart
                    istart_old = geoms_old[id_geom_old].lods[id_lod].materials[
                        id_mat].istart
                    for id_index, index in enumerate(
                            vmesh.index[istart:istart + inum]):
                        self.assertEqual(index,
                                         indices_old[istart_old + id_index])
            id_geom += 1
Esempio n. 24
0
 def test_can_load_bf2_staticmesh(self):
     vmesh = modmesh.LoadBF2Mesh(self.path_object_static)
     self.assertTrue(isinstance(vmesh, modmesh.VisMesh))
     self.assertTrue(vmesh.isStaticMesh)