kopia lustrzana https://github.com/OpenDroneMap/WebODM
commit
24f3b38dce
|
@ -71454,7 +71454,7 @@ void main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
removeCameraAnimation(animation){
|
removeCameraAnimation(animation){
|
||||||
let index = this.cameraAnimations.indexOf(volume);
|
let index = this.cameraAnimations.indexOf(animation);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
this.cameraAnimations.splice(index, 1);
|
this.cameraAnimations.splice(index, 1);
|
||||||
|
|
||||||
|
@ -75386,6 +75386,7 @@ ENDSEC
|
||||||
<span>Time: </span><span id="lblTime"></span> <div id="sldTime"></div>
|
<span>Time: </span><span id="lblTime"></span> <div id="sldTime"></div>
|
||||||
|
|
||||||
<input name="play" type="button" value="play"/>
|
<input name="play" type="button" value="play"/>
|
||||||
|
<input name="record" type="button" value="record movie"/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
`);
|
`);
|
||||||
|
@ -75395,6 +75396,52 @@ ENDSEC
|
||||||
animation.play();
|
animation.play();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function record(canvas, time) {
|
||||||
|
var recordedChunks = [];
|
||||||
|
return new Promise(function (res, rej) {
|
||||||
|
var stream = canvas.captureStream(29.97 /*fps*/);
|
||||||
|
let mediaRecorder = new MediaRecorder(stream, {
|
||||||
|
mimeType: "video/webm; codecs=vp8"
|
||||||
|
});
|
||||||
|
|
||||||
|
//ondataavailable will fire in interval of `time || 4000 ms`
|
||||||
|
mediaRecorder.start(time || 4000);
|
||||||
|
|
||||||
|
mediaRecorder.ondataavailable = function (event) {
|
||||||
|
recordedChunks.push(event.data);
|
||||||
|
// after stop `dataavilable` event run one more time
|
||||||
|
if (mediaRecorder.state === 'recording') {
|
||||||
|
mediaRecorder.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
mediaRecorder.onstop = function (event) {
|
||||||
|
var blob = new Blob(recordedChunks, {type: "video/webm" });
|
||||||
|
var url = URL.createObjectURL(blob);
|
||||||
|
res(url);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const elRecord = this.elContent.find("input[name=record]");
|
||||||
|
elRecord.click( () => {
|
||||||
|
const t = parseFloat(elDuration.val()) * 1000 + 1000;
|
||||||
|
this.viewer.toggleSidebar();
|
||||||
|
animation.setVisible(false);
|
||||||
|
setTimeout(() => {
|
||||||
|
animation.play();
|
||||||
|
record(this.viewer.renderer.domElement, t).then(url => {
|
||||||
|
let link = document.createElement('a');
|
||||||
|
link.setAttribute('href', url);
|
||||||
|
link.setAttribute('download', 'recording.webm');
|
||||||
|
link.click();
|
||||||
|
this.viewer.toggleSidebar();
|
||||||
|
animation.setVisible(true);
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
|
||||||
const elSlider = this.elContent.find('#sldTime');
|
const elSlider = this.elContent.find('#sldTime');
|
||||||
elSlider.slider({
|
elSlider.slider({
|
||||||
value: 0,
|
value: 0,
|
||||||
|
@ -79722,10 +79769,18 @@ ENDSEC
|
||||||
tree.jstree("delete_node", jsonNode.id);
|
tree.jstree("delete_node", jsonNode.id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let oCameraAnimationRemoved = (e) => {
|
||||||
|
let otherRoot = $("#jstree_scene").jstree().get_json("other");
|
||||||
|
let jsonNode = otherRoot.children.find(child => child.data.uuid === e.animation.uuid);
|
||||||
|
|
||||||
|
tree.jstree("delete_node", jsonNode.id);
|
||||||
|
};
|
||||||
|
|
||||||
this.viewer.scene.addEventListener("measurement_removed", onMeasurementRemoved);
|
this.viewer.scene.addEventListener("measurement_removed", onMeasurementRemoved);
|
||||||
this.viewer.scene.addEventListener("volume_removed", onVolumeRemoved);
|
this.viewer.scene.addEventListener("volume_removed", onVolumeRemoved);
|
||||||
this.viewer.scene.addEventListener("polygon_clip_volume_removed", onPolygonClipVolumeRemoved);
|
this.viewer.scene.addEventListener("polygon_clip_volume_removed", onPolygonClipVolumeRemoved);
|
||||||
this.viewer.scene.addEventListener("profile_removed", onProfileRemoved);
|
this.viewer.scene.addEventListener("profile_removed", onProfileRemoved);
|
||||||
|
this.viewer.scene.addEventListener("camera_animation_removed", oCameraAnimationRemoved);
|
||||||
|
|
||||||
{
|
{
|
||||||
let annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`;
|
let annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`;
|
||||||
|
@ -80447,6 +80502,17 @@ ENDSEC
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
|
||||||
|
elNavigation.append(this.createToolIcon(
|
||||||
|
Potree.resourcePath + '/icons/reset_tools.svg',
|
||||||
|
'[title]tt.remove_last_camera_animation',
|
||||||
|
() => {
|
||||||
|
if (viewer.scene.cameraAnimations.length > 0){
|
||||||
|
let a = viewer.scene.cameraAnimations[viewer.scene.cameraAnimations.length - 1];
|
||||||
|
viewer.scene.removeCameraAnimation(a);
|
||||||
|
a.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
elNavigation.append("<br>");
|
elNavigation.append("<br>");
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,8 @@
|
||||||
"navigation_cube_control": "Navigation cube",
|
"navigation_cube_control": "Navigation cube",
|
||||||
"remove_all_clipping_volumes": "Remove all clipping volumes",
|
"remove_all_clipping_volumes": "Remove all clipping volumes",
|
||||||
"compass": "Compass",
|
"compass": "Compass",
|
||||||
"camera_animation": "Camera Animation"
|
"camera_animation": "Camera Animation",
|
||||||
|
"remove_last_camera_animation": "Remove last camera animation"
|
||||||
},
|
},
|
||||||
"appearance": {
|
"appearance": {
|
||||||
"nb_max_pts": "Point budget",
|
"nb_max_pts": "Point budget",
|
||||||
|
|
Ładowanie…
Reference in New Issue