Skip to content

Commit 3e81db8

Browse files
Merge pull request #2 from InfoMusCP/develop
Develop
2 parents a8999d6 + e34d266 commit 3e81db8

12 files changed

+214
-0
lines changed

Clusterability.tox

2.37 KB
Binary file not shown.

Examples.toe

48 Bytes
Binary file not shown.

Lightness.tox

2.28 KB
Binary file not shown.

Rarity.tox

2.47 KB
Binary file not shown.

Synchronization.tox

-8 Bytes
Binary file not shown.

extensions/clusterabilityext.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
"""
2+
Extension classes enhance TouchDesigner components with python. An
3+
extension is accessed via ext.ExtensionClassName from any operator
4+
within the extended component. If the extension is promoted via its
5+
Promote Extension parameter, all its attributes with capitalized names
6+
can be accessed externally, e.g. op('yourComp').PromotedFunction().
7+
8+
Help: search "Extensions" in wiki
9+
"""
10+
import os
11+
import sys
12+
13+
from TDStoreTools import StorageManager
14+
import TDFunctions as TDF
15+
16+
parent_dir = os.path.dirname(project.folder)
17+
lib_dir = os.path.join(project.folder, "pyeyesweb_env", "Lib", "site-packages")
18+
19+
if lib_dir not in sys.path:
20+
sys.path.insert(0, os.path.normpath(lib_dir))
21+
22+
23+
from pyeyesweb.analysis_primitives.clusterability import Clusterability
24+
from pyeyesweb.data_models.sliding_window import SlidingWindow
25+
26+
27+
class ClusterabilityExt:
28+
"""
29+
InfoMusExt description
30+
"""
31+
32+
def __init__(self, ownerComp):
33+
# The component to which this extension is attached
34+
self.ownerComp = ownerComp
35+
36+
self.params = op("parameter1")
37+
self.sliding_window_max_length = int(self.params["Slidingwindowmaxlength", 1].val)
38+
self.n_neighbors = int(self.params["Nneighbors", 1].val)
39+
40+
self.clusterability = Clusterability(n_neighbors=self.n_neighbors)
41+
self.sliding_window = SlidingWindow(max_length=self.sliding_window_max_length, n_columns=1)
42+
43+
def par_exec_onValueChange(self, par):
44+
param_name = par.name
45+
param_value = par.eval()
46+
47+
# Update parameters based on name (more efficient than multiple if-else)
48+
param_handlers = {
49+
"Slidingwindowmaxlength": lambda v: (
50+
setattr(self, 'sliding_window_max_length', int(v)),
51+
setattr(self.sliding_window, 'max_length', int(v))
52+
),
53+
"Nneighbors": lambda v: (
54+
setattr(self, 'n_neighbors', int(v)),
55+
setattr(self.clusterability, 'n_neighbors', int(v))
56+
)
57+
}
58+
59+
# Call the appropriate handler if it exists
60+
if param_name in param_handlers:
61+
param_handlers[param_name](param_value)

extensions/contractionexpansionext.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,18 @@
77
88
Help: search "Extensions" in wiki
99
"""
10+
import os
11+
import sys
1012

1113
from TDStoreTools import StorageManager
1214
import TDFunctions as TDF
1315

16+
parent_dir = os.path.dirname(project.folder)
17+
lib_dir = os.path.join(project.folder, "pyeyesweb_env", "Lib", "site-packages")
18+
19+
if lib_dir not in sys.path:
20+
sys.path.insert(0, os.path.normpath(lib_dir))
21+
1422
from pyeyesweb.low_level.contraction_expansion import ContractionExpansion
1523

1624

extensions/equilibriumext.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,18 @@
77
88
Help: search "Extensions" in wiki
99
"""
10+
import os
11+
import sys
1012

1113
from TDStoreTools import StorageManager
1214
import TDFunctions as TDF
1315

16+
parent_dir = os.path.dirname(project.folder)
17+
lib_dir = os.path.join(project.folder, "pyeyesweb_env", "Lib", "site-packages")
18+
19+
if lib_dir not in sys.path:
20+
sys.path.insert(0, os.path.normpath(lib_dir))
21+
1422
from pyeyesweb.low_level.equilibrium import Equilibrium
1523

1624

extensions/lightnessext.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
"""
2+
Extension classes enhance TouchDesigner components with python. An
3+
extension is accessed via ext.ExtensionClassName from any operator
4+
within the extended component. If the extension is promoted via its
5+
Promote Extension parameter, all its attributes with capitalized names
6+
can be accessed externally, e.g. op('yourComp').PromotedFunction().
7+
8+
Help: search "Extensions" in wiki
9+
"""
10+
import os
11+
import sys
12+
13+
from TDStoreTools import StorageManager
14+
import TDFunctions as TDF
15+
16+
parent_dir = os.path.dirname(project.folder)
17+
lib_dir = os.path.join(project.folder, "pyeyesweb_env", "Lib", "site-packages")
18+
19+
if lib_dir not in sys.path:
20+
sys.path.insert(0, os.path.normpath(lib_dir))
21+
22+
from pyeyesweb.mid_level.lightness import Lightness
23+
from pyeyesweb.data_models.sliding_window import SlidingWindow
24+
25+
26+
class LightnessExt:
27+
"""
28+
InfoMusExt description
29+
"""
30+
31+
def __init__(self, ownerComp):
32+
# The component to which this extension is attached
33+
self.ownerComp = ownerComp
34+
35+
self.params = op("parameter1")
36+
self.rate = int(self.params["Rate", 1].val)
37+
self.sliding_window_max_length = int(self.params["Slidingwindowmaxlength", 1].val)
38+
39+
self.lightness = Lightness(
40+
sliding_window_max_length=self.sliding_window_max_length,
41+
rate_hz=self.rate
42+
)
43+
44+
def par_exec_onValueChange(self, par):
45+
param_name = par.name
46+
param_value = par.eval()
47+
48+
# Update parameters based on name (more efficient than multiple if-else)
49+
param_handlers = {
50+
"Slidingwindowmaxlength": lambda v: (
51+
setattr(self, 'sliding_window_max_length', int(v)),
52+
setattr(self.lightness, 'sliding_window_max_length', int(v)),
53+
setattr(self.lightness.sliding_window, 'max_length', int(v))
54+
),
55+
"Rate": lambda v: (
56+
setattr(self, 'rate', int(v)),
57+
setattr(self.lightness, 'rate', int(v))
58+
),
59+
}
60+
61+
# Call the appropriate handler if it exists
62+
if param_name in param_handlers:
63+
param_handlers[param_name](param_value)

extensions/rarityext.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
"""
2+
Extension classes enhance TouchDesigner components with python. An
3+
extension is accessed via ext.ExtensionClassName from any operator
4+
within the extended component. If the extension is promoted via its
5+
Promote Extension parameter, all its attributes with capitalized names
6+
can be accessed externally, e.g. op('yourComp').PromotedFunction().
7+
8+
Help: search "Extensions" in wiki
9+
"""
10+
import os
11+
import sys
12+
13+
from TDStoreTools import StorageManager
14+
import TDFunctions as TDF
15+
16+
parent_dir = os.path.dirname(project.folder)
17+
lib_dir = os.path.join(project.folder, "pyeyesweb_env", "Lib", "site-packages")
18+
19+
if lib_dir not in sys.path:
20+
sys.path.insert(0, os.path.normpath(lib_dir))
21+
22+
23+
from pyeyesweb.analysis_primitives.rarity import Rarity
24+
from pyeyesweb.data_models.sliding_window import SlidingWindow
25+
26+
27+
class RarityExt:
28+
"""
29+
InfoMusExt description
30+
"""
31+
32+
def __init__(self, ownerComp):
33+
# The component to which this extension is attached
34+
self.ownerComp = ownerComp
35+
36+
self.params = op("parameter1")
37+
self.sliding_window_max_length = int(self.params["Slidingwindowmaxlength", 1].val)
38+
39+
self.rarity = Rarity()
40+
self.sliding_window = SlidingWindow(max_length=self.sliding_window_max_length, n_columns=1)
41+
42+
def par_exec_onValueChange(self, par):
43+
param_name = par.name
44+
param_value = par.eval()
45+
46+
# Update parameters based on name (more efficient than multiple if-else)
47+
param_handlers = {
48+
"Slidingwindowmaxlength": lambda v: (
49+
setattr(self, 'sliding_window_max_length', int(v)),
50+
setattr(self.sliding_window, 'max_length', int(v))
51+
),
52+
}
53+
54+
# Call the appropriate handler if it exists
55+
if param_name in param_handlers:
56+
param_handlers[param_name](param_value)

0 commit comments

Comments
 (0)