You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.6 KiB
86 lines
2.6 KiB
"""
|
|
Script DAT Callbacks
|
|
me - this DAT
|
|
scriptOp - the OP which is cooking
|
|
"""
|
|
|
|
def onCook(scriptOp):
|
|
"""
|
|
Called when the Script DAT needs to cook.
|
|
"""
|
|
scriptOp.clear()
|
|
scriptOp.appendRow(['id', 'P(X)', 'P(Y)', 'P(Z)'])
|
|
|
|
# Find the constant OP relative to this script
|
|
const_op = op('constant1')
|
|
camera_y_offset = 0
|
|
camera_y_far=0
|
|
if const_op:
|
|
target_chan = const_op.chan('camera_distance_y')
|
|
if target_chan is not None:
|
|
camera_y_offset = target_chan.eval()
|
|
camera_y_far = const_op.chan('camera_distance_y_far').eval()
|
|
|
|
|
|
const_select=op('SelectId')
|
|
select_id=-1
|
|
if const_select:
|
|
select_chan = const_select.chan('id')
|
|
if select_chan is not None:
|
|
select_id = int(select_chan.eval())
|
|
|
|
|
|
|
|
# Check if there is an input connected
|
|
if len(scriptOp.inputs) == 0:
|
|
return
|
|
|
|
inputDat = scriptOp.inputs[0]
|
|
|
|
if select_id >= 0:
|
|
# Find the row with the matching ID in the input table
|
|
for i in range(1, inputDat.numRows):
|
|
try:
|
|
row_id = int(inputDat[i, 0])
|
|
if row_id == select_id:
|
|
px_val = float(inputDat[i, 1] or 0)
|
|
py_val = float(inputDat[i, 2] or 0)
|
|
pz_val = float(inputDat[i, 3] or 0)- camera_y_offset
|
|
scriptOp.appendRow([row_id, px_val, py_val, pz_val])
|
|
return
|
|
except (ValueError, TypeError):
|
|
continue
|
|
return
|
|
else:
|
|
# append with average of rows 1 to 4 (index 1 to 4 inclusive if they exist)
|
|
ax = 0.0
|
|
ay = 0.0
|
|
az = 0.0
|
|
rows_processed = 0
|
|
# Process rows 1 to 4 (index 1 to 4 inclusive if they exist)
|
|
for i in range(1, min(5, inputDat.numRows)):
|
|
try:
|
|
# Safely convert cell values to floats
|
|
# Assuming col 1=X, 2=Y, 3=Z based on your previous logic
|
|
px_val = float(inputDat[i, 1] or 0)
|
|
py_val = float(inputDat[i, 2] or 0)
|
|
pz_val = float(inputDat[i, 3] or 0)
|
|
|
|
ax += px_val
|
|
ay += py_val
|
|
az += pz_val
|
|
|
|
rows_processed += 1
|
|
except (ValueError, TypeError):
|
|
# Skip rows that don't contain valid numbers
|
|
continue
|
|
if rows_processed > 0:
|
|
ax /= rows_processed
|
|
ay /= rows_processed
|
|
az /= rows_processed
|
|
scriptOp.appendRow(['average', ax, ay - camera_y_far, az])
|
|
|
|
return
|
|
|
|
def onGetCookLevel(scriptOp):
|
|
return CookLevel.AUTOMATIC |