286 -
286 +
287 +
288
289
290
● Update(threejs/index.html)
⎿ Added 22 lines, removed 5 lines
406 maxDepth: 100,
407 thickness: 120,
408 extensionShrinkFactor: 0.01,
409 - defaultAngleX: 0,
410 - defaultAngleY: 0,
409 + defaultFov: 'Fov1',
410 + Fov1: {
411 + AngleX: -11.46,
412 + AngleY: -1.44,
413 + AngleZ: 0,
414 + zoomFactor: 1.61,
415 + displayManualOffsetX: 11.93,
416 + displayManualOffsetY: 112.12
417 + },
418 + Fov2: {
419 + AngleX: -0.29,
420 + AngleY: -29.51,
421 + AngleZ: 0,
422 + zoomFactor: 2.17,
423 + displayManualOffsetX: -200.92,
424 + displayManualOffsetY: 25.59
425 + },
426 + defaultAngleX: -11.46,
427 + defaultAngleY: -1.44,
428 defaultAngleZ: 0,
412 - zoomFactor: 1,
413 - displayManualOffsetX: 0,
414 - displayManualOffsetY: 0,
429 + zoomFactor: 1.61,
430 + displayManualOffsetX: 11.93,
431 + displayManualOffsetY: 112.12,
432 select_color_ratio: 0.7
433 };
434 let CONFIG = { ...DEFAULT_CONFIG };
● Update(threejs/index.html)
⎿ Added 1 line
473 let showGridLines = false;
474 let showSelectionHighlight = false;
475 let enableMotionEffect = true;
476 + let currentPlayFov = 'Fov1';
477 let lastTime = 0;
478 let frameCount = 0;
479 let lastTimelineSignature = '';
● Update(threejs/index.html)
⎿ Added 15 lines, removed 2 lines
550 }
551
552 function degToRad(degrees) { return degrees * Math.PI
/ 180; }
553 - function getDefaultCameraDistance() {
554 - const zoomFactor = Math.max(0.1, Number(CONFIG.zoo
-mFactor) || 1);
553 + function getFovConfig(name) {
554 + const fallback = CONFIG.Fov1 || DEFAULT_CONFIG.Fov
+1;
555 + const fov = CONFIG[name] || fallback;
556 + return {
557 + AngleX: Number(fov.AngleX ?? fov.defaultAngleX
+ ?? CONFIG.defaultAngleX) || 0,
558 + AngleY: Number(fov.AngleY ?? fov.defaultAngleY
+ ?? CONFIG.defaultAngleY) || 0,
559 + AngleZ: Number(fov.AngleZ ?? fov.defaultAngleZ
+ ?? CONFIG.defaultAngleZ) || 0,
560 + zoomFactor: Math.max(0.1, Number(fov.zoomFacto
+r ?? CONFIG.zoomFactor) || 1),
561 + displayManualOffsetX: Number(fov.displayManual
+OffsetX ?? CONFIG.displayManualOffsetX) || 0,
562 + displayManualOffsetY: Number(fov.displayManual
+OffsetY ?? CONFIG.displayManualOffsetY) || 0
563 + };
564 + }
565 + function getDefaultFovName() { return CONFIG.defaultFo
+v === 'Fov2' ? 'Fov2' : 'Fov1'; }
566 + function getDefaultCameraDistance(fovName = currentPla
+yFov) {
567 + const zoomFactor = getFovConfig(fovName).zoomFacto
+r;
568 return Math.max(500, Math.min(8000, 2500 / zoomFac
tor));
569 }
570 function formatTime(seconds) { return Number.isFinite(
seconds) ? seconds.toFixed(2) : '0.00'; }
● Update(threejs/index.html)
⎿ Added 2 lines, removed 1 line
503 scene.background = new THREE.Color(0x1a1a26);
504
505 camera = new THREE.PerspectiveCamera(45, window.in
nerWidth / window.innerHeight, 1, 10000);
506 - cameraDistance = getDefaultCameraDistance();
506 + currentPlayFov = getDefaultFovName();
507 + cameraDistance = getDefaultCameraDistance(currentP
+layFov);
508 camera.position.set(0, 0, cameraDistance);
509 camera.lookAt(0, 0, 0);
510 cameraAngle = {
● Update(threejs/index.html)
⎿ Added 4 lines, removed 3 lines
525 directionalLight.position.set(0, 0, 1000);
526 scene.add(directionalLight);
527
528 - displayManualOffsetX = Number(CONFIG.displayManual
-OffsetX) || 0;
529 - displayManualOffsetY = Number(CONFIG.displayManual
-OffsetY) || 0;
528 + const defaultFov = getFovConfig(currentPlayFov);
529 + displayManualOffsetX = defaultFov.displayManualOff
+setX;
530 + displayManualOffsetY = defaultFov.displayManualOff
+setY;
531
532 displayGroup = new THREE.Group();
532 - displayGroup.rotation.set(degToRad(CONFIG.defaultA
-ngleX), degToRad(CONFIG.defaultAngleY), degToRad(CONFIG.defaul
-tAngleZ));
533 + displayGroup.rotation.set(degToRad(defaultFov.Angl
+eX), degToRad(defaultFov.AngleY), degToRad(defaultFov.AngleZ))
+;
534 scene.add(displayGroup);
535
536 createDisplayUnits();
● Update(threejs/index.html)
⎿ Added 10 lines, removed 6 lines
1188 updateLayoutPositions();
1189 }
1190
1191 - function resetCamera() {
1191 + function applyPlayFov(fovName) {
1192 + currentPlayFov = fovName === 'Fov2' ? 'Fov2' : 'F
+ov1';
1193 + const fov = getFovConfig(currentPlayFov);
1194 mode = 'play';
1195 showGridLines = false;
1196 showSelectionHighlight = false;
1197 updateGridLines();
1198 updateSelectionCheckbox();
1197 - cameraDistance = getDefaultCameraDistance();
1199 + cameraDistance = getDefaultCameraDistance(current
+PlayFov);
1200 camera.position.set(0, 0, cameraDistance);
1201 camera.lookAt(0, 0, 0);
1202 cameraAngle.theta = Math.atan2(camera.position.z,
camera.position.x);
1203 cameraAngle.phi = Math.acos(camera.position.y / c
ameraDistance);
1202 - displayManualOffsetX = Number(CONFIG.displayManua
-lOffsetX) || 0;
1203 - displayManualOffsetY = Number(CONFIG.displayManua
-lOffsetY) || 0;
1204 - if (displayGroup) displayGroup.rotation.set(degTo
-Rad(CONFIG.defaultAngleX), degToRad(CONFIG.defaultAngleY), de
-gToRad(CONFIG.defaultAngleZ));
1204 + displayManualOffsetX = fov.displayManualOffsetX;
1205 + displayManualOffsetY = fov.displayManualOffsetY;
1206 + if (displayGroup) displayGroup.rotation.set(degTo
+Rad(fov.AngleX), degToRad(fov.AngleY), degToRad(fov.AngleZ));
1207 updateZoomDisplay();
1208 updateLayoutPositions();
1209 updateSelectionHighlight();
1210 updateModeButton();
1209 - document.getElementById('modeInfo').textContent =
- '状态:播放视角';
1211 + document.getElementById('modeInfo').textContent =
+ `状态:播放视角${currentPlayFov === 'Fov2' ? '2' : '1'}`;
1212 }
1213
1214 + function resetCamera() { applyPlayFov(currentPlayFov
+|| getDefaultFovName()); }
1215 +
1216 function updateZoomDisplay() {}
1217
1218 function updateGridLines() {
● Update(threejs/index.html)
⎿ Added 4 lines, removed 2 lines
1307 }
1308
1309 function updateModeButton() {
1310 - const playBtn = document.getElementById('infoRese
-tBtn');
1310 + const fov1Btn = document.getElementById('infoPlay
+Fov1Btn');
1311 + const fov2Btn = document.getElementById('infoPlay
+Fov2Btn');
1312 const editBtn = document.getElementById('infoSele
ctModeBtn');
1312 - if (playBtn) playBtn.classList.toggle('active', m
-ode !== 'select');
1313 + if (fov1Btn) fov1Btn.classList.toggle('active', m
+ode !== 'select' && currentPlayFov === 'Fov1');
1314 + if (fov2Btn) fov2Btn.classList.toggle('active', m
+ode !== 'select' && currentPlayFov === 'Fov2');
1315 if (editBtn) {
1316 editBtn.textContent = '编辑视角';
1317 editBtn.classList.toggle('active', mode === '
select');
● Update(threejs/index.html)
⎿ Added 2 lines, removed 2 lines
1208 updateLayoutPositions();
1209 updateSelectionHighlight();
1210 updateModeButton();
1211 - document.getElementById('modeInfo').textContent =
- `状态:播放视角${currentPlayFov === 'Fov2' ? '2' : '1'}`;
1211 + document.getElementById('modeInfo').textContent =
+ `状态:播放视角1${currentPlayFov === 'Fov2' ? '2' : '1'}`;
1212 }
1213
1214 function resetCamera() { applyPlayFov(currentPlayFov
|| getDefaultFovName()); }
...
1326 updateSelectionCheckbox();
1327 updateSelectionHighlight();
1328 updateDynamicLines();
1329 - document.getElementById('modeInfo').textContent =
- '状态:播放视角';
1329 + document.getElementById('modeInfo').textContent =
+ '状态:播放视角1';
1330 updateModeButton();
1331 }
1332
Thought for 27s, read 2 files (ctrl+o to expand)
● Update(threejs/index.html)
⎿ Added 1 line, removed 1 line
1208 updateLayoutPositions();
1209 updateSelectionHighlight();
1210 updateModeButton();
1211 - document.getElementById('modeInfo').textContent =
- `状态:播放视角1${currentPlayFov === 'Fov2' ? '2' : '1'}`;
1211 + document.getElementById('modeInfo').textContent =
+ `状态:播放视角${currentPlayFov === 'Fov2' ? '2' : '1'}`;
1212 }
1213
1214 function resetCamera() { applyPlayFov(currentPlayFov
|| getDefaultFovName()); }
● Update(threejs/index.html)
⎿ Added 1 line, removed 1 line
1326 updateSelectionCheckbox();
1327 updateSelectionHighlight();
1328 updateDynamicLines();
1329 - document.getElementById('modeInfo').textContent =
- '状态:播放视角1';
1329 + document.getElementById('modeInfo').textContent =
+ '状态:播放视角';
1330 updateModeButton();
1331 }
1332
● Update(threejs/releasenote.txt)
⎿ Added 1 line
188 - 界面右上角新增版本号显示 V1.86。
189 - 调整右上角版本号位置,避免右侧滚动条出现时遮挡导致显示不完整
。
190 - 将右侧面板标题“运动编辑器”改为“动作编辑器”。
191 +- 顶部播放视角拆分为“播放视角1”和“播放视角2”,分别读取 config.
+json 中 Fov1/Fov2 的角度、缩放和偏移配置,并默认加载 Fov1。
Thought for 19s, searched for 1 pattern, read 1 file (ctrl+o to expand)
● Update(threejs/index.html)
⎿ Added 1 line, removed 1 line
1326 updateSelectionCheckbox();
1327 updateSelectionHighlight();
1328 updateDynamicLines();
1329 - document.getElementById('modeInfo').textContent =
- '状态:播放视角';
1329 + document.getElementById('modeInfo').textContent =
+ `状态:播放视角${currentPlayFov === 'Fov2' ? '2' : '1'}`;
1330 updateModeButton();
1331 }
1332
● Bash(node --check /var/www/html/share/machan-display/threejs/index.html)
⎿ Error: Exit code 1
node:internal/modules/esm/get_format:219
throw new ERR_UNKNOWN_FILE_EXTENSION(ext, filepath);
^
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".html" for
/var/www/html/share/machan-display/threejs/index.html
at Object.getFileProtocolModuleFormat [as file:]
(node:internal/modules/esm/get_format:219:9)
at defaultGetFormat (node:internal/modules/esm/get_format:245:36)
at checkSyntax (node:internal/main/check_syntax:69:20) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
… +3 lines (ctrl+o to expand)
Thought for 7s (ctrl+o to expand)
● Bash(python3 - <<'PY'
from pathlib import Path…)
⎿ (No output)
● Bash(cd /var/www/html/share && zip -qr machan-display.zip machan-display)
⎿ Shell cwd was reset to /var/www/html/share/machan-display
Thought for 8s (ctrl+o to expand)
● Bash(python3 -m json.tool
/var/www/html/share/machan-display/threejs/config.json >/dev/null && test
-f /var/www/html/share/machan-display.zip)
⎿ (No output)
● 已完成修改。
更新内容:
- 顶部原“播放视角”已拆分为:
- 播放视角1
- 播放视角2
- 默认加载 Fov1。
- config.json 已改为 Fov1 / Fov2 两组配置:
- Fov1:使用你给的 AngleX / AngleY / AngleZ / zoomFactor /
displayManualOffsetX / displayManualOffsetY
- Fov2:使用原来的播放视角配置
- 点击“播放视角1 / 播放视角2”会分别切换对应角度、缩放和偏移。
- 点击播放视角时仍会关闭“显示网格”和“显示选中”,保持原逻辑。
- 已更新 releasenote.txt。
- 已重新打包:
- /var/www/html/share/machan-display.zip
验证:
- config.json 格式校验通过。
- 页面脚本 JS 语法检查通过。
✻ Cooked for 7m 13s
❯ 在播放过程中,点击播放视角1,2不起作用
Thought for 11s (ctrl+o to expand)
Thought for 33s, searched for 1 pattern, read 2 files (ctrl+o to expand)
● Bash(ts=$(date +%Y%m%d-%H%M%S)
cp /var/www/html/share/machan-display/threejs/index.html
/var/www/html/data/back/index-bak-$ts.html…) ⎿ 20260628-134151
Thought for 38s, searched for 1 pattern (ctrl+o to expand)
● Update(threejs/index.html)
⎿ Added 1 line
474 let showSelectionHighlight = false;
475 let enableMotionEffect = true;
476 let currentPlayFov = 'Fov1';
477 + let forcePlayFovFrames = 0;
478 let lastTime = 0;
479 let frameCount = 0;
480 let lastTimelineSignature = '';
● Update(threejs/index.html)
⎿ Added 11 lines, removed 6 lines
1189 updateLayoutPositions();
1190 }
1191
1192 - function applyPlayFov(fovName) {
1192 + function setPlayFovTransform(fovName) {
1193 currentPlayFov = fovName === 'Fov2' ? 'Fov2' : 'F
ov1';
1194 const fov = getFovConfig(currentPlayFov);
1195 - mode = 'play';
1196 - showGridLines = false;
1197 - showSelectionHighlight = false;
1198 - updateGridLines();
1199 - updateSelectionCheckbox();
1195 cameraDistance = getDefaultCameraDistance(current
PlayFov);
1196 camera.position.set(0, 0, cameraDistance);
1197 camera.lookAt(0, 0, 0);
...
1202 if (displayGroup) displayGroup.rotation.set(degTo
Rad(fov.AngleX), degToRad(fov.AngleY), degToRad(fov.AngleZ));
1203 updateZoomDisplay();
1204 updateLayoutPositions();
1205 + }
1206 +
1207 + function applyPlayFov(fovName) {
1208 + mode = 'play';
1209 + showGridLines = false;
1210 + showSelectionHighlight = false;
1211 + updateGridLines();
1212 + updateSelectionCheckbox();
1213 + setPlayFovTransform(fovName);
1214 + forcePlayFovFrames = 6;
1215 updateSelectionHighlight();
1216 updateModeButton();
1217 document.getElementById('modeInfo').textContent =
`状态:播放视角${currentPlayFov === 'Fov2' ? '2' : '1'}`;
Thought for 7s (ctrl+o to expand)
● Update(threejs/index.html)
⎿ Added 5 lines
2093 updateTimelinePointerOnly(video.currentTime);
2094 }
2095
2096 + if (forcePlayFovFrames > 0) {
2097 + setPlayFovTransform(currentPlayFov);
2098 + forcePlayFovFrames--;
2099 + }
2100 +
2101 renderer.render(scene, camera);
2102
2103 if (frameCount % 10 === 0) {
● Update(threejs/releasenote.txt)
⎿ Added 1 line
189 - 调整右上角版本号位置,避免右侧滚动条出现时遮挡导致显示不完整
。
190 - 将右侧面板标题“运动编辑器”改为“动作编辑器”。
191 - 顶部播放视角拆分为“播放视角1”和“播放视角2”,分别读取 config.
json 中 Fov1/Fov2 的角度、缩放和偏移配置,并默认加载 Fov1。
192 +- 修复播放过程中点击“播放视角1/播放视角2”偶发不生效的问题,切
+换后会连续数帧锁定对应视角配置,确保动作播放刷新不会覆盖视角切
+换。
● Bash(python3 - <<'PY'
from pathlib import Path…)
⎿ Shell cwd was reset to /var/www/html/share/machan-display
● 已修复。
问题原因:播放过程中动作时间轴每帧都在刷新状态,刚点击“播放视角1/2”时,视角切
换可能被随后的播放刷新覆盖,看起来像没生效。
已调整为:
- 点击 播放视角1 / 播放视角2 后,会立即应用对应 Fov 配置。
- 播放过程中也会连续数帧锁定该视角配置,避免被动作播放刷新覆盖。
- 原有逻辑保持:
- 切换播放视角会关闭“显示网格”
- 切换播放视角会关闭“显示选中”
- 不影响动作/视频继续播放
已完成:
- 已备份修改前文件
- 已更新 index.html
- 已更新 releasenote.txt
- JS 语法检查通过
- config.json 校验通过
- 已重新打包:
- /var/www/html/share/machan-display.zip
✻ Baked for 3m 52s
❯ 点击选中有时不起作用
Thought for 6s (ctrl+o to expand)
❯ 播放的时候
Thought for 12s, read 1 file (ctrl+o to expand)
⎿ Interrupted · What should Claude do instead?
❯ 播放的时候,点击选中有时不起作用,版本号改为1.89
Thought for 40s (ctrl+o to expand)
● Bash(ts=$(date +%Y%m%d-%H%M%S)
cp /var/www/html/share/machan-display/threejs/index.html
/var/www/html/data/back/index-bak-$ts.html…)
⎿ 20260628-134641
Thought for 25s (ctrl+o to expand)
● Update(threejs/index.html)
⎿ Added 1 line, removed 1 line
279
280
281
282 -
V1.87
282 +
V1.89
283
284
Angle
X:0.00° Y:0.00° Z:0.00°
span> Offset X:0.00 Y:0.00 Zoom R
atio:1.00
285
● Update(threejs/index.html)
⎿ Added 1 line, removed 1 line
1088 return;
1089 }
1090 if (e.button !== 0) return;
1091 - if (mode === 'select') {
1091 + if (mode === 'select' || showSelectionHighlig
+ht) {
1092 isBoxSelecting = true;
1093 selectionStart = { x: e.clientX, y: e.cli
entY };
1094 showSelectionBox(e.clientX, e.clientY, e.
clientX, e.clientY);
Thought for 43s (ctrl+o to expand)
● Update(threejs/index.html)
⎿ Added 1 line, removed 1 line
1088 return;
1089 }
1090 if (e.button !== 0) return;
1091 - if (mode === 'select' || showSelectionHighlig
-ht) {
1091 + if (mode === 'select') {
1092 isBoxSelecting = true;
1093 selectionStart = { x: e.clientX, y: e.cli
entY };
1094 showSelectionBox(e.clientX, e.clientY, e.
clientX, e.clientY);
Thought for 1m 9s, read 1 file (ctrl+o to expand)
● Update(threejs/index.html) ⎿ Added 3 lines, removed 1 line
1240 function getTimelineSelectionTargets() {
1241 const found = findActionAtTime(currentTimelineTim
e);
1242 if (found) return normalizeTargets(found.action.t
argets);
1243 + const previous = findActionAtTime(Math.max(0, cur
+rentTimelineTime - 0.001));
1244 + if (previous) return normalizeTargets(previous.ac
+tion.targets);
1245 if (selectedActionIndex !== null && actions[selec
tedActionIndex]) return normalizeTargets(actions[selectedActi
onIndex].targets);
1246 return selectedUnits;
1247 }
...
1249 function toggleSelectionHighlight(checked) {
1250 showSelectionHighlight = checked;
1251 updateSelectionCheckbox();
1250 - if (checked && (isTimelinePlaying || isTimelinePa
-used)) selectedUnits = getTimelineSelectionTargets();
1252 + if (checked && (isTimelinePlaying || isTimelinePa
+used || isPlaying)) selectedUnits = getTimelineSelectionTarge
+ts();
1253 updateSelectionHighlight();
1254 }
1255
● Update(threejs/index.html)
⎿ Error editing file
Read 1 file (ctrl+o to expand)
● Update(threejs/releasenote.txt)
⎿ Added 2 lines
190 - 将右侧面板标题“运动编辑器”改为“动作编辑器”。
191 - 顶部播放视角拆分为“播放视角1”和“播放视角2”,分别读取 config.
json 中 Fov1/Fov2 的角度、缩放和偏移配置,并默认加载 Fov1。
192 - 修复播放过程中点击“播放视角1/播放视角2”偶发不生效的问题,切
换后会连续数帧锁定对应视角配置,确保动作播放刷新不会覆盖视角切
换。
193 +- 修复播放过程中点击“显示选中”有时不显示的问题:播放中开启选中
+显示时会按当前时间点或临近动作同步 targets,避免处在动作边界时
+选区为空。
194 +- 版本号更新为 V1.89。
Thought for 10s (ctrl+o to expand)
● Bash(python3 - <<'PY'
from pathlib import Path…)
⎿ Shell cwd was reset to /var/www/html/share/machan-display
● 已修复“播放的时候点击显示选中有时不起作用”的问题,并把版本号改为 V1.89。
本次处理:
- 播放中点击 显示选中 时,现在会按当前播放时间点同步动作 targets。
- 如果刚好处在动作边界时间点,会向前取一个极小时间点匹配临近动作,避免边界瞬间
找不到动作导致选区为空。
- 版本号已更新为:
- V1.89
- 已更新 releasenote.txt。
- JS 语法检查通过。
- config.json 校验通过。
- 已重新打包:
- /var/www/html/share/machan-display.zip
✻ Worked for 4m 46s
❯ 播放过程中点击编辑视角后,再播放视角1,播放视角2,编辑视角时,动作效果没有。
Thought for 9s (ctrl+o to expand)
Thought for 33s, searched for 1 pattern, read 2 files (ctrl+o to expand)
● Bash(ts=$(date +%Y%m%d-%H%M%S)
cp /var/www/html/share/machan-display/threejs/index.html
/var/www/html/data/back/index-bak-$ts.html…)
⎿ 20260628-135509
● Update(threejs/index.html)
⎿ Added 3 lines, removed 2 lines
1339 }
1340
1341 function enterSelectMode() {
1342 - stopPreview();
1342 + previewAction = null;
1343 mode = 'select';
1344 showGridLines = true;
1345 showSelectionHighlight = true;
...
1347 updateSelectionCheckbox();
1348 if (displayGroup) displayGroup.rotation.set(0, 0,
0);
1349 fitDisplayForSelection();
1350 + if (isTimelinePlaying || isTimelinePaused) select
+edUnits = getTimelineSelectionTargets();
1351 updateSelectionHighlight();
1351 - resetUnitMotions();
1352 + if (!isTimelinePlaying && !isTimelinePaused) rese
+tUnitMotions();
1353 document.getElementById('modeInfo').textContent =
'状态:编辑视角';
1354 updateModeButton();
1355 }
● Update(threejs/index.html)
⎿ Added 4 lines, removed 1 line
1347 updateSelectionCheckbox();
1348 if (displayGroup) displayGroup.rotation.set(0, 0,
0);
1349 fitDisplayForSelection();
1350 - if (isTimelinePlaying || isTimelinePaused) select
-edUnits = getTimelineSelectionTargets();
1350 + if (isTimelinePlaying || isTimelinePaused) {
1351 + updateTimelineState(currentTimelineTime, fals
+e);
1352 + selectedUnits = getTimelineSelectionTargets()
+;
1353 + }
1354 updateSelectionHighlight();
1355 if (!isTimelinePlaying && !isTimelinePaused) rese
tUnitMotions();
1356 document.getElementById('modeInfo').textContent =
'状态:编辑视角';
● Update(threejs/releasenote.txt)
⎿ Added 1 line
192 - 修复播放过程中点击“播放视角1/播放视角2”偶发不生效的问题,切
换后会连续数帧锁定对应视角配置,确保动作播放刷新不会覆盖视角切
换。
193 - 修复播放过程中点击“显示选中”有时不显示的问题:播放中开启选中
显示时会按当前时间点或临近动作同步 targets,避免处在动作边界时
选区为空。
194 - 版本号更新为 V1.89。
195 +- 修复播放过程中点击“编辑视角”后动作效果消失的问题:编辑视角只
+切换视角和选中显示,不再停止动作时间轴或清空当前动作深度;之后
+再切换播放视角1/2或编辑视角,动作效果会继续保持。
● Bash(python3 - <<'PY'
from pathlib import Path…)
⎿ Shell cwd was reset to /var/www/html/share/machan-display
● 已修复。
问题原因:播放过程中点击 编辑视角 时,原逻辑会调用 stopPreview(),它会把
isTimelinePlaying 置为 false,并执行 resetUnitMotions(),所以动作时间轴被停掉
、单元深度被清空。之后再点播放视角1/2或编辑视角,看起来就是“动作效果没有了”。
现在已调整:
- 播放过程中点击 编辑视角:
- 只切换到编辑视角
- 显示网格
- 显示当前动作选中区域
- 不停止动作时间轴
- 不清空动作深度
- 之后再点击:
- 播放视角1
- 播放视角2
- 编辑视角
动作效果都会继续保持。
已完成:
- 已备份修改前文件
- 已更新 index.html
- 已更新 releasenote.txt
- JS 语法检查通过
- config.json 校验通过
- 已重新打包:
- /var/www/html/share/machan-display.zip
✻ Baked for 2m 37s
※ recap: 目标是完善 Three.js 机械屏动作编辑器的播放/视角/选中联动。刚修复了播放中切换编辑视角后动作效果消失的问题;下一步可继续实测播放视角1/2、编辑视角和显示选中的联动效果。 (disable recaps in /config)