def get_json(cls):
     """現在のファイルと同名のjsonデータを取得する"""
     dirname, name, ext = fjw.splitpath(bpy.data.filepath)
     jsonpath = dirname + os.sep + name + ".json"
     if not os.path.exists(jsonpath):
         return None
     json = JsonTools(filepath=jsonpath)
     return json
    def get_exist_filepath(cls, obj, exportname):
        fjw_id = fjw.id(obj)
        basefilepath = bpy.data.filepath
        dirname, name, ext = fjw.splitpath(basefilepath)
        fjw_dir = dirname + os.sep + "fjw" + os.sep + name + os.sep + fjw_id
        if ".blend" not in exportname:
            exportname = exportname + ".blend"
        expname, expext = os.path.splitext(exportname)
        fjw_path = fjw_dir + os.sep + exportname

        if os.path.exists(fjw_path):
            return fjw_path
        return None
Beispiel #3
0
    def assign_image(self, image_path):
        """ベイクの代わりに既にベイクしたイメージを割り当てる。"""
        fjw.deselect()
        fjw.activate(self.obj)
        bpy.ops.object.shade_smooth()

        # イメージ取得。既にロードされてたらそれを使うべき。
        image = None
        for img in bpy.data.images:
            if img.is_library_indirect:
                continue
            if bpy.path.abspath(img.filepath) == bpy.path.abspath(image_path):
                return img
        if not image:
            # 相対パス化。
            image = bpy.data.images.load(filepath=bpy.path.relpath(image_path))

        dirname, name, ext = fjw.splitpath(image_path)
        textype = self.get_identifier(name)
        tex = self.get_baketex(textype)
        tex.image = image
    def get_exported_image_paths(cls):
        """生成されたテクスチャの絶対パスのリストを返す"""
        dirname, name, ext = fjw.splitpath(bpy.data.filepath)

        image_paths = []
        # nameと同じ名前のオブジェクト
        if name in bpy.context.scene.objects:
            obj = bpy.context.scene.objects[name]
            fjw_id = fjw.id(obj)

            tex_dir = dirname + os.sep + "textures" + os.sep + fjw_id
            if not os.path.exists(tex_dir):
                print("!no tex dir.")
                return None

            files = os.listdir(tex_dir)
            for file in files:
                image_paths.append(tex_dir + os.sep + file)

            return image_paths
        return None
    def make_texture_workingfile(cls, obj, exportname):
        """
            テクスチャ作業用の作業ファイルを作る。
            
        arguments:
            オブジェクト
            
        outputs:
            最終的にどうなるのか
                fjw_work/元blendファイル名/ユニークID/作業タイプ.blend
                metadata.json
                    textures/元blendファイル/ID/作業タイプ
                    テクスチャ出力先
            この後
                選択オブジェクトとターゲット以外削除なりなんなりする
            
        """

        # 前準備
        #     別ファイルに移動するから現状を保存する
        bpy.ops.wm.save_as_mainfile()
        # 必要な情報
        #     元ファイルパス
        basefilepath = bpy.data.filepath
        dirname, name, ext = fjw.splitpath(basefilepath)

        fjw_id = fjw.id(obj)

        fjw_dir = dirname + os.sep + "fjw" + os.sep + name + os.sep + fjw_id
        if ".blend" not in exportname:
            exportname = exportname + ".blend"
        expname, expext = os.path.splitext(exportname)
        fjw_path = fjw_dir + os.sep + exportname
        jsonpath = fjw_dir + os.sep + expname + ".json"

        bpy.context.scene["texture_working_obj"] = fjw_id

        #まずはそのまま保存
        bpy.ops.wm.save_as_mainfile()

        # if os.path.exists(fjw_path):
        #     # 既に存在する場合は破棄すべき!作り直し。
        #     shutil.rmtree(fjw_dir)
        # なんもしなければそのまま新規になるのでは??

        if not os.path.exists(fjw_dir):
            os.makedirs(fjw_dir)
        texture_export_dir = dirname + os.sep + "textures" + os.sep + name + os.sep + fjw_id
        if not os.path.exists(texture_export_dir):
            os.makedirs(texture_export_dir)

        #作業ファイル保存
        bpy.ops.wm.save_as_mainfile(filepath=fjw_path)

        #json保存
        #相対パス化
        json = JsonTools()
        json.val("fjw_id", fjw_id)
        json.val("basepath", bpy.path.relpath(basefilepath))
        json.val("texture_export_dir", bpy.path.relpath(texture_export_dir))
        json.save(jsonpath)
        return json