-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
scene_operation_tk-blender.py
126 lines (103 loc) · 4.14 KB
/
scene_operation_tk-blender.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
import bpy
import sgtk
from sgtk.platform.qt import QtGui
__author__ = "Diego Garcia Huerta"
__contact__ = "https://www.linkedin.com/in/diegogh/"
HookClass = sgtk.get_hook_baseclass()
class SceneOperation(HookClass):
"""
Hook called to perform an operation with the
current scene
"""
def execute(
self,
operation,
file_path,
context,
parent_action,
file_version,
read_only,
**kwargs
):
"""
Main hook entry point
:param operation: String
Scene operation to perform
:param file_path: String
File path to use if the operation
requires it (e.g. open)
:param context: Context
The context the file operation is being
performed in.
:param parent_action: This is the action that this scene operation is
being executed for. This can be one of:
- open_file
- new_file
- save_file_as
- version_up
:param file_version: The version/revision of the file to be opened. If this is 'None'
then the latest version should be opened.
:param read_only: Specifies if the file should be opened read-only or not
:returns: Depends on operation:
'current_path' - Return the current scene
file path as a String
'reset' - True if scene was reset to an empty
state, otherwise False
all others - None
"""
print(
operation,
file_path,
context,
parent_action,
file_version,
read_only,
**kwargs
)
if operation == "current_path":
return bpy.data.filepath
elif operation == "open":
bpy.ops.wm.open_mainfile(filepath=file_path)
elif operation == "save":
bpy.ops.wm.save_mainfile("EXEC_AREA")
elif operation == "save_as":
bpy.ops.wm.save_mainfile(filepath=file_path)
elif operation == "reset":
if bpy.data.is_dirty:
# changes have been made to the scene
res = QtGui.QMessageBox.question(
None,
"Save your scene?",
"Your scene has unsaved changes. Save before proceeding?",
QtGui.QMessageBox.Yes
| QtGui.QMessageBox.No
| QtGui.QMessageBox.Cancel,
)
if res == QtGui.QMessageBox.Cancel:
return False
elif res == QtGui.QMessageBox.Yes:
scene_name = bpy.data.filepath
if not scene_name:
bpy.ops.wm.save_mainfile("INVOKE_AREA")
else:
bpy.ops.wm.save_mainfile(filepath=scene_name)
# do new file:
bpy.ops.wm.read_homefile()
return True