Skip to content

Commit 096c7bc

Browse files
author
Léna Voinchet
committed
Add duplicate camera button
1 parent 5fb4f5d commit 096c7bc

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

js/UI/NodeUI.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class NodeUI {
2828
<p class="main-text">Camera ${node.id + 1}</p>
2929
</div>
3030
<div class="row center-y">
31+
<div id="node-${node.id}-duplicate" title="Dupliquer Caméra"><span class="iconify" data-icon="bx:plus-circle"></span></div>
3132
<div id="node-${node.id}-hide-UI" title="Réduire/Agrandir"><span class="iconify" data-icon="bx:minus"></span></div>
3233
<div id="node-${node.id}-visible" title="Afficher/Cacher Frustum"><span class="iconify" data-icon="akar-icons:eye-open"></span></div>
3334
<div id="node-${node.id}-delete" title="Supprimer Caméra"><span class="iconify" data-icon="fluent:delete-16-filled"></span></div>
@@ -74,7 +75,8 @@ class NodeUI {
7475
makeElementDraggable(document.getElementById(`node-x-rot-${node.id}`));
7576
makeElementDraggable(document.getElementById(`node-y-rot-${node.id}`));
7677
makeElementDraggable(document.getElementById(`node-z-rot-${node.id}`));
77-
78+
79+
document.getElementById(`node-${node.id}-duplicate`).addEventListener('click', () => sceneManager.objects.duplicateNode(node));
7880
document.getElementById(`node-${node.id}-hide-UI`).addEventListener('click', () => hideUICam());
7981
document.getElementById(`node-${node.id}-visible`).addEventListener('click', () => node.changeFrustumVisibility());
8082
document.getElementById(`node-${node.id}-delete`).addEventListener('click', () => sceneManager.objects.removeNode(node));

js/scene/objects/SceneObjects.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { Dummy, loadModel } from './props/Dummy.js';
99
import { Node } from './sensors/Node.js';
1010
import { Lidar } from './sensors/Lidar.js';
1111

12+
import { getCamerasTypes } from '/js/data.js';
13+
1214
class SceneObjects{
1315
static loadFont(isBuilder, callback)
1416
{
@@ -185,6 +187,8 @@ class SceneObjects{
185187
document.getElementById("display-frustums-button").classList.remove("hidden");
186188

187189
this.populateStorage();
190+
191+
return newCamera;
188192
}
189193

190194
this.displayFrustums = function()
@@ -220,6 +224,33 @@ class SceneObjects{
220224
this.populateStorage();
221225
}
222226

227+
this.duplicateNode = function(node)
228+
{
229+
const newCameraTypeData = getCamerasTypes().find(type => type.name === node.cameraType.name);
230+
const newCamera = this.addNode(false, sceneManager.trackingMode, Node.DEFAULT_CAMERA_TYPE_ID, 0, 0, node.zPos, node.xRot, node.yRot, node.zRot);
231+
232+
newCamera.setType(newCameraTypeData, sceneManager);
233+
234+
// Update UI
235+
const selectElement = document.getElementById(`cam-type-${newCamera.id}`);
236+
237+
if (selectElement) {
238+
selectElement.value = newCamera.cameraType.name;
239+
240+
// Here we send a fake "change" message on the selectElement to activate chageCameraType function in nodeUI.js
241+
const changeEvent = new Event('change', {
242+
bubbles: true,
243+
cancelable: true
244+
});
245+
selectElement.dispatchEvent(changeEvent);
246+
247+
} else {
248+
console.error(`L'élément select 'cam-type-${newCamera.id}' n'a pas été trouvé pour la duplication.`);
249+
}
250+
251+
this.populateStorage();
252+
}
253+
223254
this.addLidar = function(autoConstruct = false, typeID = Lidar.DEFAULT_LIDAR_TYPE_ID, x = 0, z = Lidar.DEFAULT_LIDAR_HEIGHT, r = 0)
224255
{
225256
if(!SceneObjects.font)

0 commit comments

Comments
 (0)