pyjallib 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyjallib/__init__.py +17 -0
- pyjallib/max/__init__.py +46 -0
- pyjallib/max/align.py +112 -0
- pyjallib/max/anim.py +594 -0
- pyjallib/max/bip.py +508 -0
- pyjallib/max/bone.py +910 -0
- pyjallib/max/constraint.py +973 -0
- pyjallib/max/header.py +57 -0
- pyjallib/max/helper.py +433 -0
- pyjallib/max/layer.py +262 -0
- pyjallib/max/link.py +78 -0
- pyjallib/max/macro/jal_macro_align.py +155 -0
- pyjallib/max/macro/jal_macro_bone.py +358 -0
- pyjallib/max/macro/jal_macro_constraint.py +140 -0
- pyjallib/max/macro/jal_macro_helper.py +321 -0
- pyjallib/max/macro/jal_macro_link.py +55 -0
- pyjallib/max/macro/jal_macro_select.py +91 -0
- pyjallib/max/mirror.py +388 -0
- pyjallib/max/name.py +521 -0
- pyjallib/max/select.py +278 -0
- pyjallib/max/skin.py +996 -0
- pyjallib/max/twistBone.py +418 -0
- pyjallib/namePart.py +633 -0
- pyjallib/nameToPath.py +113 -0
- pyjallib/naming.py +1066 -0
- pyjallib/namingConfig.py +844 -0
- pyjallib/perforce.py +735 -0
- pyjallib/reloadModules.py +33 -0
- pyjallib-0.1.0.dist-info/METADATA +28 -0
- pyjallib-0.1.0.dist-info/RECORD +32 -0
- pyjallib-0.1.0.dist-info/WHEEL +5 -0
- pyjallib-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,321 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
from pymxs import runtime as rt
|
5
|
+
from PySide2 import QtWidgets, QtCore, QtGui
|
6
|
+
import gc # Import garbage collector
|
7
|
+
|
8
|
+
from pyjallib.max.header import Header
|
9
|
+
|
10
|
+
jal = Header()
|
11
|
+
|
12
|
+
class HelperTypeSelDialog(QtWidgets.QDialog):
|
13
|
+
def __init__(self, parent=QtWidgets.QWidget.find(rt.windows.getMAXHWND())):
|
14
|
+
super(HelperTypeSelDialog, self).__init__(parent)
|
15
|
+
|
16
|
+
self.selectedHelperType = ""
|
17
|
+
self.changeHelperType = False
|
18
|
+
|
19
|
+
self.setWindowTitle("Helper Type")
|
20
|
+
self.setMinimumWidth(100)
|
21
|
+
|
22
|
+
self.layout = QtWidgets.QVBoxLayout(self)
|
23
|
+
|
24
|
+
self.helper_type_combo = QtWidgets.QComboBox(self)
|
25
|
+
typeNamePart = jal.name.get_name_part("Type")
|
26
|
+
typeNameDescriptions = typeNamePart.get_descriptions()
|
27
|
+
self.helper_type_combo.addItems(typeNameDescriptions)
|
28
|
+
self.layout.addWidget(self.helper_type_combo)
|
29
|
+
|
30
|
+
self.ok_button = QtWidgets.QPushButton("OK", self)
|
31
|
+
self.ok_button.clicked.connect(self.accept)
|
32
|
+
self.layout.addWidget(self.ok_button)
|
33
|
+
|
34
|
+
self.ok_button.clicked.connect(self.ok_pressed)
|
35
|
+
|
36
|
+
def ok_pressed(self):
|
37
|
+
selHelperDescription = self.helper_type_combo.currentText()
|
38
|
+
typeNamePart = jal.name.get_name_part("Type")
|
39
|
+
self.selectedHelperType = typeNamePart.get_value_by_description(selHelperDescription)
|
40
|
+
self.changeHelperType = True
|
41
|
+
self.accept()
|
42
|
+
|
43
|
+
class ModifyHelperShapeDialog(QtWidgets.QDialog):
|
44
|
+
def __init__(self, parent=QtWidgets.QWidget.find(rt.windows.getMAXHWND())):
|
45
|
+
super(ModifyHelperShapeDialog, self).__init__(parent)
|
46
|
+
self.helperArray = []
|
47
|
+
|
48
|
+
self.setWindowTitle("Modify Helper Shape")
|
49
|
+
|
50
|
+
self.layout = QtWidgets.QVBoxLayout(self)
|
51
|
+
|
52
|
+
# Size and Add layout
|
53
|
+
sizeLayout = QtWidgets.QHBoxLayout()
|
54
|
+
addLayout = QtWidgets.QHBoxLayout()
|
55
|
+
|
56
|
+
sizeLabel = QtWidgets.QLabel("Size:")
|
57
|
+
self.size_spinbox = QtWidgets.QDoubleSpinBox()
|
58
|
+
self.size_spinbox.setValue(1.0) # Default value
|
59
|
+
self.size_spinbox.setSingleStep(0.1)
|
60
|
+
sizeLayout.addWidget(sizeLabel)
|
61
|
+
sizeLayout.addWidget(self.size_spinbox)
|
62
|
+
|
63
|
+
addLabel = QtWidgets.QLabel("Add:")
|
64
|
+
self.add_spinbox = QtWidgets.QDoubleSpinBox()
|
65
|
+
self.add_spinbox.setValue(0.0) # Default value
|
66
|
+
self.add_spinbox.setSingleStep(0.1)
|
67
|
+
addLayout.addWidget(addLabel)
|
68
|
+
addLayout.addWidget(self.add_spinbox)
|
69
|
+
|
70
|
+
# Radio button layout
|
71
|
+
shapeGroup = QtWidgets.QGroupBox("Shape:")
|
72
|
+
radioLayout = QtWidgets.QGridLayout()
|
73
|
+
self.radio_box = QtWidgets.QRadioButton("Box")
|
74
|
+
self.radio_cross = QtWidgets.QRadioButton("Cross")
|
75
|
+
self.radio_axis = QtWidgets.QRadioButton("Axis")
|
76
|
+
self.radio_center = QtWidgets.QRadioButton("Center")
|
77
|
+
self.radio_box.setChecked(True) # Default selection
|
78
|
+
radioLayout.addWidget(self.radio_box, 0, 0)
|
79
|
+
radioLayout.addWidget(self.radio_cross, 0, 1)
|
80
|
+
radioLayout.addWidget(self.radio_axis, 1, 0)
|
81
|
+
radioLayout.addWidget(self.radio_center, 1, 1)
|
82
|
+
shapeGroup.setLayout(radioLayout)
|
83
|
+
|
84
|
+
# OK and Cancel buttons (optional but recommended)
|
85
|
+
buttonLayout = QtWidgets.QHBoxLayout()
|
86
|
+
self.ok_button = QtWidgets.QPushButton("OK")
|
87
|
+
self.cancel_button = QtWidgets.QPushButton("Cancel")
|
88
|
+
buttonLayout.addWidget(self.ok_button)
|
89
|
+
buttonLayout.addWidget(self.cancel_button)
|
90
|
+
|
91
|
+
self.layout.addLayout(sizeLayout)
|
92
|
+
self.layout.addLayout(addLayout)
|
93
|
+
self.layout.addWidget(shapeGroup) # Add the group box to the layout instead of the raw radioLayout
|
94
|
+
self.layout.addLayout(buttonLayout)
|
95
|
+
|
96
|
+
self.size_spinbox.valueChanged.connect(self.change_helper_size)
|
97
|
+
self.add_spinbox.valueChanged.connect(self.add_helper_size)
|
98
|
+
self.add_spinbox.editingFinished.connect(self.reset_add_spinbox)
|
99
|
+
|
100
|
+
self.radio_box.toggled.connect(self.change_helper_shape)
|
101
|
+
self.radio_cross.toggled.connect(self.change_helper_shape)
|
102
|
+
self.radio_axis.toggled.connect(self.change_helper_shape)
|
103
|
+
self.radio_center.toggled.connect(self.change_helper_shape)
|
104
|
+
|
105
|
+
self.ok_button.clicked.connect(self.accept)
|
106
|
+
self.cancel_button.clicked.connect(self.reject)
|
107
|
+
|
108
|
+
def change_helper_size(self):
|
109
|
+
if len(self.helperArray) == 0:
|
110
|
+
return
|
111
|
+
for obj in self.helperArray:
|
112
|
+
jal.helper.set_size(obj, self.size_spinbox.value())
|
113
|
+
|
114
|
+
def add_helper_size(self):
|
115
|
+
if len(self.helperArray) == 0:
|
116
|
+
return
|
117
|
+
for obj in self.helperArray:
|
118
|
+
jal.helper.add_size(obj, self.add_spinbox.value())
|
119
|
+
|
120
|
+
def reset_add_spinbox(self):
|
121
|
+
self.add_spinbox.setValue(0.0) # Reset the add spinbox to 0 after editing is finished
|
122
|
+
|
123
|
+
def change_helper_shape(self):
|
124
|
+
if len(self.helperArray) == 0:
|
125
|
+
return
|
126
|
+
for obj in self.helperArray:
|
127
|
+
if self.radio_box.isChecked():
|
128
|
+
jal.helper.set_shape_to_box(obj)
|
129
|
+
elif self.radio_cross.isChecked():
|
130
|
+
jal.helper.set_shape_to_cross(obj)
|
131
|
+
elif self.radio_axis.isChecked():
|
132
|
+
jal.helper.set_shape_to_axis(obj)
|
133
|
+
elif self.radio_center.isChecked():
|
134
|
+
jal.helper.set_shape_to_center(obj)
|
135
|
+
|
136
|
+
def jal_create_parentHelper():
|
137
|
+
jal.helper.create_parent_helper()
|
138
|
+
|
139
|
+
def jal_create_helper():
|
140
|
+
dialog = HelperTypeSelDialog()
|
141
|
+
result = dialog.exec_()
|
142
|
+
changeHelperType = dialog.changeHelperType
|
143
|
+
if changeHelperType:
|
144
|
+
helperType = dialog.selectedHelperType
|
145
|
+
genHelpers = jal.helper.create_helper()
|
146
|
+
for item in genHelpers:
|
147
|
+
item.name = jal.name.replace_name_part("Type", item.name, helperType)
|
148
|
+
|
149
|
+
dialog.deleteLater()
|
150
|
+
dialog = None # Clear the reference to the dialog object
|
151
|
+
gc.collect() # Force garbage collection to free up memory
|
152
|
+
|
153
|
+
def jal_create_average_helper():
|
154
|
+
sel_array = rt.getCurrentSelection()
|
155
|
+
|
156
|
+
if len(sel_array) > 0:
|
157
|
+
temp_transform = rt.matrix3(1)
|
158
|
+
temp_transform.rotation = jal.anim.create_average_rot_transform(sel_array).rotation
|
159
|
+
temp_transform.position = jal.anim.create_average_pos_transform(sel_array).position
|
160
|
+
|
161
|
+
dum_name = jal.helper.gen_helper_name_from_obj(sel_array[0])
|
162
|
+
dum_shape = jal.helper.gen_helper_shape_from_obj(sel_array[0])
|
163
|
+
average_dum = jal.helper.create_point(
|
164
|
+
dum_name[0],
|
165
|
+
size=dum_shape[0],
|
166
|
+
boxToggle=dum_shape[2],
|
167
|
+
crossToggle=dum_shape[1]
|
168
|
+
)
|
169
|
+
average_dum.transform = temp_transform
|
170
|
+
|
171
|
+
def jal_create_pos_average_helper():
|
172
|
+
sel_array = rt.getCurrentSelection()
|
173
|
+
|
174
|
+
if len(sel_array) > 0:
|
175
|
+
temp_transform = rt.matrix3(1)
|
176
|
+
temp_transform.position = jal.anim.create_average_pos_transform(sel_array).position
|
177
|
+
|
178
|
+
dum_name = jal.helper.gen_helper_name_from_obj(sel_array[0])
|
179
|
+
dum_shape = jal.helper.gen_helper_shape_from_obj(sel_array[0])
|
180
|
+
average_dum = jal.helper.create_point(
|
181
|
+
dum_name[0],
|
182
|
+
size=dum_shape[0],
|
183
|
+
boxToggle=dum_shape[2],
|
184
|
+
crossToggle=dum_shape[1]
|
185
|
+
)
|
186
|
+
average_dum.transform = temp_transform
|
187
|
+
average_dum.name = jal.name.replace_name_part("Type", average_dum.name, "Pos")
|
188
|
+
|
189
|
+
def jal_create_rot_average_helper():
|
190
|
+
sel_array = rt.getCurrentSelection()
|
191
|
+
|
192
|
+
if len(sel_array) > 0:
|
193
|
+
temp_transform = rt.matrix3(1)
|
194
|
+
temp_transform.rotation = jal.anim.create_average_rot_transform(sel_array).rotation
|
195
|
+
|
196
|
+
dum_name = jal.helper.gen_helper_name_from_obj(sel_array[0])
|
197
|
+
dum_shape = jal.helper.gen_helper_shape_from_obj(sel_array[0])
|
198
|
+
average_dum = jal.helper.create_point(
|
199
|
+
dum_name[0],
|
200
|
+
size=dum_shape[0],
|
201
|
+
boxToggle=dum_shape[2],
|
202
|
+
crossToggle=dum_shape[1]
|
203
|
+
)
|
204
|
+
average_dum.transform = temp_transform
|
205
|
+
average_dum.name = jal.name.replace_name_part("Type", average_dum.name, "Rot")
|
206
|
+
|
207
|
+
def jal_create_expHelper():
|
208
|
+
jal.helper.create_exp_tm()
|
209
|
+
|
210
|
+
def jal_create_two_helper():
|
211
|
+
dialog = HelperTypeSelDialog()
|
212
|
+
result = dialog.exec_()
|
213
|
+
helperType = dialog.selectedHelperType
|
214
|
+
genHelpers = jal.helper.create_helper(make_two=True)
|
215
|
+
for item in genHelpers:
|
216
|
+
item.name = jal.name.replace_name_part("Type", item.name, helperType)
|
217
|
+
|
218
|
+
dialog.deleteLater()
|
219
|
+
dialog = None # Clear the reference to the dialog object
|
220
|
+
gc.collect() # Force garbage collection to free up memory
|
221
|
+
|
222
|
+
def jal_modify_helperShape():
|
223
|
+
# Get current selection
|
224
|
+
selArray = rt.getCurrentSelection()
|
225
|
+
if not selArray or len(selArray) == 0:
|
226
|
+
rt.messageBox("Please select at least one helper object.")
|
227
|
+
return
|
228
|
+
helperArray = [item for item in selArray if rt.superClassOf(item) == rt.Helper]
|
229
|
+
if len(helperArray) == 0:
|
230
|
+
return
|
231
|
+
|
232
|
+
# Assuming the first selected object is the one to modify
|
233
|
+
helperObj = helperArray[0]
|
234
|
+
|
235
|
+
modDialog = ModifyHelperShapeDialog()
|
236
|
+
|
237
|
+
# Set initial values from the selected helper (if possible)
|
238
|
+
modDialog.size_spinbox.setValue(helperObj.size)
|
239
|
+
|
240
|
+
modDialog.helperArray = helperArray
|
241
|
+
|
242
|
+
result = modDialog.exec_()
|
243
|
+
|
244
|
+
modDialog.deleteLater()
|
245
|
+
modDialog = None
|
246
|
+
gc.collect()
|
247
|
+
|
248
|
+
# Register macroscripts
|
249
|
+
macroScript_Category = "jalTools"
|
250
|
+
|
251
|
+
rt.jal_create_parentHelper = jal_create_parentHelper
|
252
|
+
rt.macros.new(
|
253
|
+
macroScript_Category,
|
254
|
+
"jal_create_parentHelper",
|
255
|
+
"Create Parent Helper",
|
256
|
+
"Create Parent Helper",
|
257
|
+
"jal_create_parentHelper()"
|
258
|
+
)
|
259
|
+
|
260
|
+
rt.jal_create_helper = jal_create_helper
|
261
|
+
rt.macros.new(
|
262
|
+
macroScript_Category,
|
263
|
+
"jal_create_helper",
|
264
|
+
"Create Helper",
|
265
|
+
"Create Helper",
|
266
|
+
"jal_create_helper()"
|
267
|
+
)
|
268
|
+
|
269
|
+
rt.jal_create_average_helper = jal_create_average_helper
|
270
|
+
rt.macros.new(
|
271
|
+
macroScript_Category,
|
272
|
+
"jal_create_average_helper",
|
273
|
+
"Create Average Helper",
|
274
|
+
"Create Average Helper",
|
275
|
+
"jal_create_average_helper()"
|
276
|
+
)
|
277
|
+
|
278
|
+
rt.jal_create_pos_average_helper = jal_create_pos_average_helper
|
279
|
+
rt.macros.new(
|
280
|
+
macroScript_Category,
|
281
|
+
"jal_create_pos_average_helper",
|
282
|
+
"Create Pos avrg. Helper",
|
283
|
+
"Create Pos avrg. Helper",
|
284
|
+
"jal_create_pos_average_helper()"
|
285
|
+
)
|
286
|
+
|
287
|
+
rt.jal_create_rot_average_helper = jal_create_rot_average_helper
|
288
|
+
rt.macros.new(
|
289
|
+
macroScript_Category,
|
290
|
+
"jal_create_rot_average_helper",
|
291
|
+
"Create Rot avrg. Helper",
|
292
|
+
"Create Rot avrg. Helper",
|
293
|
+
"jal_create_rot_average_helper()"
|
294
|
+
)
|
295
|
+
|
296
|
+
rt.jal_create_expHelper = jal_create_expHelper
|
297
|
+
rt.macros.new(
|
298
|
+
macroScript_Category,
|
299
|
+
"jal_create_expHelper",
|
300
|
+
"Create Exp Helper",
|
301
|
+
"Create Exp Helper",
|
302
|
+
"jal_create_expHelper()"
|
303
|
+
)
|
304
|
+
|
305
|
+
rt.jal_create_two_helper = jal_create_two_helper
|
306
|
+
rt.macros.new(
|
307
|
+
macroScript_Category,
|
308
|
+
"jal_create_two_helper",
|
309
|
+
"Create Two Helper",
|
310
|
+
"Create Two Helper",
|
311
|
+
"jal_create_two_helper()"
|
312
|
+
)
|
313
|
+
|
314
|
+
rt.jal_modify_helperShape = jal_modify_helperShape
|
315
|
+
rt.macros.new(
|
316
|
+
macroScript_Category,
|
317
|
+
"jal_modify_helperShape",
|
318
|
+
"Modify Helper shape",
|
319
|
+
"Modify Helper shape",
|
320
|
+
"jal_modify_helperShape()"
|
321
|
+
)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
from pymxs import runtime as rt
|
5
|
+
|
6
|
+
def jal_link_to_last():
|
7
|
+
jal.link.link_to_last_sel()
|
8
|
+
|
9
|
+
def jal_link_to_first():
|
10
|
+
jal.link.link_to_first_sel()
|
11
|
+
|
12
|
+
def jal_unlink():
|
13
|
+
jal.link.unlink_selection()
|
14
|
+
|
15
|
+
def jal_unlink_children():
|
16
|
+
jal.link.unlink_children()
|
17
|
+
|
18
|
+
# Register macroscripts
|
19
|
+
macroScript_Category = "jalTools"
|
20
|
+
|
21
|
+
rt.jal_link_to_last = jal_link_to_last
|
22
|
+
rt.macros.new(
|
23
|
+
macroScript_Category,
|
24
|
+
"jal_link_to_last",
|
25
|
+
"Link to last",
|
26
|
+
"Link to last",
|
27
|
+
"jal_link_to_last()"
|
28
|
+
)
|
29
|
+
|
30
|
+
rt.jal_link_to_first = jal_link_to_first
|
31
|
+
rt.macros.new(
|
32
|
+
macroScript_Category,
|
33
|
+
"jal_link_to_first",
|
34
|
+
"Link to first",
|
35
|
+
"Link to first",
|
36
|
+
"jal_link_to_first()"
|
37
|
+
)
|
38
|
+
|
39
|
+
rt.jal_unlink = jal_unlink
|
40
|
+
rt.macros.new(
|
41
|
+
macroScript_Category,
|
42
|
+
"jal_unLink",
|
43
|
+
"Unlink",
|
44
|
+
"Unlink",
|
45
|
+
"jal_unlink()"
|
46
|
+
)
|
47
|
+
|
48
|
+
rt.jal_unlink_children = jal_unlink_children
|
49
|
+
rt.macros.new(
|
50
|
+
macroScript_Category,
|
51
|
+
"jal_unLink_children",
|
52
|
+
"Unlink children",
|
53
|
+
"Unlink children",
|
54
|
+
"jal_unlink_children()"
|
55
|
+
)
|
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
from pymxs import runtime as rt
|
5
|
+
|
6
|
+
def jal_selFilter_all():
|
7
|
+
jal.sel.set_selectionSet_to_all()
|
8
|
+
if rt.selection.count > 0:
|
9
|
+
rt.getCurrentSelection()
|
10
|
+
|
11
|
+
def jal_selFilter_bone():
|
12
|
+
jal.sel.set_selectionSet_to_bone()
|
13
|
+
if rt.selection.count > 0:
|
14
|
+
jal.sel.filter_bone()
|
15
|
+
|
16
|
+
def jal_selFilter_bip():
|
17
|
+
jal.sel.set_selectionSet_to_bone()
|
18
|
+
if rt.selection.count > 0:
|
19
|
+
jal.sel.filter_bip()
|
20
|
+
|
21
|
+
def jal_selFilter_point():
|
22
|
+
jal.sel.set_selectionSet_to_point()
|
23
|
+
if rt.selection.count > 0:
|
24
|
+
jal.sel.filter_helper()
|
25
|
+
|
26
|
+
def jal_selFilter_expTm():
|
27
|
+
jal.sel.set_selectionSet_to_helper()
|
28
|
+
if rt.selection.count > 0:
|
29
|
+
jal.sel.filter_expTm()
|
30
|
+
|
31
|
+
def jal_selFilter_spline():
|
32
|
+
jal.sel.set_selectionSet_to_spline()
|
33
|
+
if rt.selection.count > 0:
|
34
|
+
jal.sel.filter_spline()
|
35
|
+
|
36
|
+
# Register macroscripts
|
37
|
+
macroScript_Category = "jalTools"
|
38
|
+
|
39
|
+
rt.jal_selFilter_all = jal_selFilter_all
|
40
|
+
rt.macros.new(
|
41
|
+
macroScript_Category,
|
42
|
+
"jal_selFilter_all",
|
43
|
+
"Selection filter All",
|
44
|
+
"Selection filter All",
|
45
|
+
"jal_selFilter_all()"
|
46
|
+
)
|
47
|
+
|
48
|
+
rt.jal_selFilter_bone = jal_selFilter_bone
|
49
|
+
rt.macros.new(
|
50
|
+
macroScript_Category,
|
51
|
+
"jal_selFilter_bone",
|
52
|
+
"Selection filter Bone",
|
53
|
+
"Selection filter Bone",
|
54
|
+
"jal_selFilter_bone()"
|
55
|
+
)
|
56
|
+
|
57
|
+
rt.jal_selFilter_bip = jal_selFilter_bip
|
58
|
+
rt.macros.new(
|
59
|
+
macroScript_Category,
|
60
|
+
"jal_selFilter_bip",
|
61
|
+
"Selection filter Bip",
|
62
|
+
"Selection filter Bip",
|
63
|
+
"jal_selFilter_bip()"
|
64
|
+
)
|
65
|
+
|
66
|
+
rt.jal_selFilter_point = jal_selFilter_point
|
67
|
+
rt.macros.new(
|
68
|
+
macroScript_Category,
|
69
|
+
"jal_selFilter_point",
|
70
|
+
"Selection filter Point",
|
71
|
+
"Selection filter Point",
|
72
|
+
"jal_selFilter_point()"
|
73
|
+
)
|
74
|
+
|
75
|
+
rt.jal_selFilter_expTm = jal_selFilter_expTm
|
76
|
+
rt.macros.new(
|
77
|
+
macroScript_Category,
|
78
|
+
"jal_selFilter_expTm",
|
79
|
+
"Selection filter ExpTm",
|
80
|
+
"Selection filter ExpTm",
|
81
|
+
"jal_selFilter_expTm()"
|
82
|
+
)
|
83
|
+
|
84
|
+
rt.jal_selFilter_spline = jal_selFilter_spline
|
85
|
+
rt.macros.new(
|
86
|
+
macroScript_Category,
|
87
|
+
"jal_selFilter_spline",
|
88
|
+
"Selection filter Spline",
|
89
|
+
"Selection filter Spline",
|
90
|
+
"jal_selFilter_spline()"
|
91
|
+
)
|