Blender: пакет / скрипт Python для преобразования формата x3d в ​​формат obj - PullRequest
0 голосов
/ 11 февраля 2019

В контексте Blender я пытаюсь преобразовать файл x3d в ​​формат файла obj.Для запуска скрипта я использую command blender -b -P.Вот файл x3d:

<?xml version="1.0" encoding ="UTF-8"?>

    <X3D profile="Immersive" version="3.0">
      <head>
        <meta name="filename" content="/home/sim/Desktop/WebApp/pdeOnline/vEnv/pdeWeb/myStatic/Simu/field.x3d"/>
        <meta name="generator" content="Visualization ToolKit X3D exporter v0.9.1"/>
        <meta name="numberofelements" content="9"/>
      </head>
      <Scene>
        <Background skyColor="0.32 0.34 0.43"/>
        <Viewpoint fieldOfView="0.523599" position="1 1 6.29555" description="Default View" orientation="0 0 1 -0" centerOfRotation="1 1 0.5"/>
        <NavigationInfo type='"EXAMINE" "FLY" "ANY"' speed="4" headlight="true"/>
        <DirectionalLight ambientIntensity="1" intensity="0" color="1 1 1"/>
        <Transform DEF="ROOT" translation="0 0 0">
          <DirectionalLight direction="-0.111619 -0.766044 -0.633022" color="1 0.97232 0.90222" intensity="0.75" on="true"/>
          <DirectionalLight direction="0.0449435 0.965926 -0.254887" color="0.90824 0.93314 1" intensity="0.25" on="true"/>
          <DirectionalLight direction="-0.939693 0 0.34202" color="0.9998 0.9998 0.9998" intensity="0.214286" on="true"/>
          <DirectionalLight direction="0.939693 0 0.34202" color="0.9998 0.9998 0.9998" intensity="0.214286" on="true"/>
          <Transform translation="0 0 0" rotation="0 0 1 -0" scale="1 1 1">
            <Shape>
              <Appearance>
                <Material ambientIntensity="0" emissiveColor="0 0 0" diffuseColor="1 1 1" specularColor="0 0 0" shininess="0.78125" transparency="0"/>
              </Appearance>
              <IndexedFaceSet solid="false" colorPerVertex="true" normalPerVertex="false" coordIndex="
                0 1 2 3 -1 
                0 4 5 1 -1 
                0 3 6 4 -1 
                1 5 7 8 -1 
                1 8 9 2 -1 
                8 7 10 9 -1 
                4 11 12 5 -1 
                4 6 13 11 -1 
                5 12 14 7 -1 
                7 14 15 10 -1 
                11 13 16 12 -1 
                12 16 15 14 -1 
                3 2 17 6 -1 
                2 9 10 17 -1 
                6 17 16 13 -1 
                17 10 15 16 -1 
                18 19 20 21 -1 
                19 22 23 20 -1 
                24 25 26 27 -1 
                25 28 29 26 -1 
                30 31 32 33 -1 
                33 32 34 35 -1 
                36 37 38 39 -1 
                39 38 40 41 -1 
                " normalIndex="
                0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ">
                <Coordinate DEF="VTKcoordinates0000" point="
                  0 0 0,
                  1 0 0,
                  1 0 1,
                  0 0 1,
                  0 1 0,
                  1 1 0,
                  0 1 1,
                  2 1 0,
                  2 0 0,
                  2 0 1,
                  2 1 1,
                  0 2 0,
                  1 2 0,
                  0 2 1,
                  2 2 0,
                  2 2 1,
                  1 2 1,
                  1 1 1,
                  0 0 0,
                  1 0 0,
                  1 0 1,
                  0 0 1,
                  2 0 0,
                  2 0 1,
                  2 0 0,
                  2 1 0,
                  2 1 1,
                  2 0 1,
                  2 2 0,
                  2 2 1,
                  0 2 0,
                  0 2 1,
                  1 2 1,
                  1 2 0,
                  2 2 1,
                  2 2 0,
                  0 0 0,
                  0 0 1,
                  0 1 1,
                  0 1 0,
                  0 2 1,
                  0 2 0,
                  "/>
                <Normal DEF="VTKnormals0000" vector="
                  0 -1 0,
                  0 0 -1,
                  -1 0 0,
                  0 0 -1,
                  0 -1 0,
                  1 0 0,
                  0 0 -1,
                  -1 0 0,
                  0 0 -1,
                  1 0 0,
                  0 1 0,
                  0 1 0,
                  0 0 1,
                  0 0 1,
                  0 0 1,
                  0 0 1,
                  0 -1 0,
                  0 -1 0,
                  1 0 0,
                  1 0 0,
                  0 1 0,
                  0 1 0,
                  -1 0 0,
                  -1 0 0,
                  "/>
              </IndexedFaceSet>
            </Shape>
          </Transform>
          <Transform translation="0 0 0" rotation="0 0 1 -0" scale="1 1 1"/>
        </Transform>
      </Scene>
    </X3D>

Вот скрипт python для преобразования.Я использую bpy и addon_utils из трех библиотек js:

import os
            import bpy
            import addon_utils

            #https://www.jonathan-petitcolas.com/2015/07/27/importing-blender-modelized-mesh-in-threejs.html
            # https://github.com/repsac/io_three

            def clear_scene():
                bpy.ops.object.select_all(action='SELECT')
                bpy.ops.object.delete(use_global=False)

            def main(filePath, fileName):
                clear_scene()

                fullPath = os.path.join(filePath, fileName)
                bpy.ops.import_scene.x3d(filepath=fullPath)
                obj = bpy.data.objects[0]

                # find dimensions and scale accordingly
                #dims = obj.dimensions
                #scale = min( dims[0],  dims[1],  dims[2])

                # set cursor to world origin, and set object-origin the same
                #bpy.context.scene.cursor_location = (0, 0, 0)
                bpy.context.scene.objects.active = obj
                #bpy.ops.object.origin_set(type='GEOMETRY_ORIGIN')
                #obj.scale = (scale, scale, scale)

                json_fileName =  fileName[:-3] + 'obj'
                finalPath = os.path.join(filePath, json_fileName)
                bpy.ops.export.three(filepath=finalPath)

            def ensure_addon():
                try:
                    addon_utils.enable(module_name="io_three")
                    return True
                except:
                    print('failed to enable io_three')
                    return False

            def path_iterator(path_name, ftype):
                for fp in os.listdir(path_name):
                    if fp.endswith(ftype):
                        yield fp

            if ensure_addon():
                filePath = "/"

                print("filePath" + filePath)

                for fileName in path_iterator(filePath, '.x3d'):
                    print(fileName)
                    main(filePath, fileName)

Я получаю ошибку:

RNA_def_property_ui_text: 'Non-skinning vertex groups to export (comma-separated, w/ star wildcard, BufferGeometry only).' description from 'option_extra_vgroups' '' ends with a '.' !
        RNA_def_property_ui_text: 'Index buffer type that will be used for BufferGeometry objects.' description from 'option_index_type' '' ends with a '.' !
        filePath/

        Blender quit

Может кто-нибудь указать мне, где я делаю неправильно?

Спасибо большое!

...