|
@@ -98,37 +98,45 @@ EditTools.prototype.active = function() {
|
|
|
console.log(`atPanel ${that.atPanel} name ${name}`)
|
|
|
switch (that.atPanel) {
|
|
|
//退出
|
|
|
- case "panoVisible":
|
|
|
- VisiSet.finishSetPanoVisible()
|
|
|
- break;
|
|
|
- case "screen":
|
|
|
- confirmSnap.addClass("hide").removeClass("unable");
|
|
|
- snapshotGui.hide();
|
|
|
- break;
|
|
|
- case "overlay":
|
|
|
- EditOverlay.leave()
|
|
|
- break;
|
|
|
- case "hotpoint":
|
|
|
- $("#hotpointDetail").hasClass("atRight") || $("#hotpointDetail a.close").click();
|
|
|
- VisiSet.finishSetTagVisible()
|
|
|
- break;
|
|
|
+ case "panoVisible":
|
|
|
+ VisiSet.finishSetPanoVisible()
|
|
|
+ break;
|
|
|
+ case "panoLog":
|
|
|
+ VisiSet.finishSetPanoLog()
|
|
|
+ break;
|
|
|
+ case "screen":
|
|
|
+ confirmSnap.addClass("hide").removeClass("unable");
|
|
|
+ snapshotGui.hide();
|
|
|
+ break;
|
|
|
+ case "overlay":
|
|
|
+ EditOverlay.leave()
|
|
|
+ break;
|
|
|
+ case "hotpoint":
|
|
|
+ $("#hotpointDetail").hasClass("atRight") || $("#hotpointDetail a.close").click();
|
|
|
+ VisiSet.finishSetTagVisible()
|
|
|
+ break;
|
|
|
}
|
|
|
switch (name) {
|
|
|
- case "panoVisible":
|
|
|
- $(".toolLeft").addClass("unable")
|
|
|
- VisiSet.enterSet(VisiSet.beginSetPanoVisible.bind(VisiSet))
|
|
|
+ case "panoVisible":
|
|
|
+ $(".toolLeft").addClass("unable")
|
|
|
+ VisiSet.enterSet(VisiSet.beginSetPanoVisible.bind(VisiSet))
|
|
|
|
|
|
- break;
|
|
|
- case "screen":
|
|
|
- confirmSnap.removeClass("hide");
|
|
|
- $('#camera-start').text("点此设置为初始画面")
|
|
|
- snapshotGui.show();
|
|
|
- if (player.modeTran.split("-")[1] != "panorama")
|
|
|
- $(".confirmSnap").addClass("unable")
|
|
|
- break;
|
|
|
- case "overlay":
|
|
|
- EditOverlay.enter()
|
|
|
- break;
|
|
|
+ break;
|
|
|
+ case "panoLog":
|
|
|
+ $(".toolLeft").addClass("unable")
|
|
|
+ VisiSet.enterSet(VisiSet.beginSetPanoLog.bind(VisiSet))
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "screen":
|
|
|
+ confirmSnap.removeClass("hide");
|
|
|
+ $('#camera-start').text("点此设置为初始画面")
|
|
|
+ snapshotGui.show();
|
|
|
+ if (player.modeTran.split("-")[1] != "panorama")
|
|
|
+ $(".confirmSnap").addClass("unable")
|
|
|
+ break;
|
|
|
+ case "overlay":
|
|
|
+ EditOverlay.enter()
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
that.atPanel = name;
|
|
@@ -203,13 +211,7 @@ EditTools.prototype.initSaveAll = function() {
|
|
|
if(hot.transformAtPanos[i].qua){
|
|
|
hotData.transformAtPanos[i].qua = toPrecision(hot.transformAtPanos[i].qua.toArray(), 5)
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ }
|
|
|
|
|
|
if (hot.infoAttribute) {
|
|
|
delete hot.infoAttribute.position;
|
|
@@ -239,6 +241,8 @@ EditTools.prototype.initSaveAll = function() {
|
|
|
hideFloorMarker: $("#hideFloorMarker").is(':checked'),
|
|
|
// 地面标记
|
|
|
hideMouseMarker: $("#hideMouseMarker").is(':checked'),
|
|
|
+
|
|
|
+ showingLabels: $("#showingLabels").is(':checked'),
|
|
|
// 鼠标标记
|
|
|
floorMarkerColor: $('#floorMarkerColor').val(),
|
|
|
// 地面/导览标志颜色
|
|
@@ -266,8 +270,8 @@ EditTools.prototype.initSaveAll = function() {
|
|
|
var info = EditOverlay.getSavingInfo(overlay)
|
|
|
if (info)
|
|
|
overlayInfo.push(info);
|
|
|
- }
|
|
|
- )
|
|
|
+ })
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -303,14 +307,17 @@ EditTools.prototype.initSaveAll = function() {
|
|
|
overlays: reData(overlayInfo, '[]')
|
|
|
}),
|
|
|
success: function(data) {
|
|
|
- if (data.code === 0) {
|
|
|
+ if (data.code === 0) {//成功
|
|
|
+ //manage.showInfo("保存成功")
|
|
|
location.reload()
|
|
|
- }
|
|
|
- if (data.code === 5001) {
|
|
|
+ }else if (data.code === 5001) {
|
|
|
alert('请重新登录')
|
|
|
localStorage.dcj_token = ''
|
|
|
location.reload()
|
|
|
+ }else{
|
|
|
+ alert(`saveAll (url:${url}) code : ${data.code} \n${data.msg}`)
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
})
|
|
@@ -329,6 +336,7 @@ SceneInformation.prototype.init = function(data, data2) {
|
|
|
var $hotImageScale = $("#hotImgScale");
|
|
|
var $hideFloorMarker = $("#hideFloorMarker");
|
|
|
var $hideMouseMarker = $("#hideMouseMarker");
|
|
|
+ var $showingLabels = $("#showingLabels");
|
|
|
var $g_specialScene = $("#g_specialScene");
|
|
|
var $twoData = $("#twoData");
|
|
|
|
|
@@ -397,7 +405,7 @@ SceneInformation.prototype.init = function(data, data2) {
|
|
|
hotIconScale.val(parseFloat(data.hotIconScale));
|
|
|
}
|
|
|
hotIconScale.on('change',(e)=>{
|
|
|
- var s = THREE.Math.clamp(parseFloat(e.target.value), 0.1, 1.5)
|
|
|
+ var s = THREE.Math.clamp(parseFloat(e.target.value), 0.1, 100)
|
|
|
e.target.value = s
|
|
|
|
|
|
for(let i in player.model.hots){
|
|
@@ -407,7 +415,7 @@ SceneInformation.prototype.init = function(data, data2) {
|
|
|
}
|
|
|
})
|
|
|
$('#hotIconScale_2 input').on('change',(e)=>{
|
|
|
- var s = THREE.Math.clamp(parseFloat(e.target.value), 0.1, 1.5)
|
|
|
+ var s = THREE.Math.clamp(parseFloat(e.target.value), 0.1, 100)
|
|
|
e.target.value = s
|
|
|
editTool.hotpoint.editSpot.mesh.scale.set(s,s,s)
|
|
|
})
|
|
@@ -439,7 +447,10 @@ SceneInformation.prototype.init = function(data, data2) {
|
|
|
if (data.hideMouseMarker) {
|
|
|
$hideMouseMarker[0].checked = true
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ if (data.showingLabels) {
|
|
|
+ $showingLabels[0].checked = true
|
|
|
+ }
|
|
|
//特殊大场景
|
|
|
if (data.special) {
|
|
|
$g_specialScene[0].checked = true
|
|
@@ -471,14 +482,14 @@ function initColorElem(data, elem) {
|
|
|
|
|
|
// 事件监听
|
|
|
$floorMarkerColor.on('change', function(e) {
|
|
|
- $('#floorMarkerColorTex').attr('placeholder', e.target.value)
|
|
|
+ $('#floorMarkerColorTex').val(e.target.value)
|
|
|
})
|
|
|
|
|
|
$floorMarkerColorTex.on('blur keydown', function(e) {
|
|
|
(e.type === 'blur' || e.type === 'keydown' && e.keyCode === 13) && setColor(e, $floorMarkerColor, this);
|
|
|
})
|
|
|
$mouseMarkerColor.on('change', function(e) {
|
|
|
- $('#mouseMarkerColorTex').attr('placeholder', e.target.value)
|
|
|
+ $('#mouseMarkerColorTex').val(e.target.value)
|
|
|
|
|
|
})
|
|
|
$mouseMarkerColorTex.on('blur keydown', function(e) {
|
|
@@ -487,7 +498,7 @@ function initColorElem(data, elem) {
|
|
|
|
|
|
// 事件监听
|
|
|
$cadSignColor.on('change', function(e) {
|
|
|
- $('#cadSignColorTex').attr('placeholder', e.target.value)
|
|
|
+ $('#cadSignColorTex').val( e.target.value)
|
|
|
})
|
|
|
|
|
|
$cadSignColorTex.on('blur keydown', function(e) {
|
|
@@ -496,7 +507,7 @@ function initColorElem(data, elem) {
|
|
|
|
|
|
// 事件监听
|
|
|
$cadBorderColor.on('change', function(e) {
|
|
|
- $('#cadBorderColorTex').attr('placeholder', e.target.value)
|
|
|
+ $('#cadBorderColorTex').val( e.target.value)
|
|
|
})
|
|
|
|
|
|
$cadBorderColorTex.on('blur keydown', function(e) {
|
|
@@ -527,6 +538,19 @@ function initColorElem(data, elem) {
|
|
|
if (data.showCad) {
|
|
|
$('input[name="show-cad"]').trigger('change')
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $('#panoIdColor').on('change', function(e) {
|
|
|
+ $('#panoIdColorTex').val(e.target.value)
|
|
|
+ VisiSet.changePanoIdColor(e.target.value)
|
|
|
+ })
|
|
|
+ $('#panoIdColorTex').on('blur keydown', function(e) {
|
|
|
+ (e.type === 'blur' || e.type === 'keydown' && e.keyCode === 13) && setColor(e, $('#panoIdColor'), this);
|
|
|
+ VisiSet.changePanoIdColor(e.target.value)
|
|
|
+ })
|
|
|
+ $('#panoIdColor').val('#c13e3e')//初始颜色
|
|
|
+ $('#panoIdColorTex').val('#c13e3e')
|
|
|
}
|
|
|
|
|
|
|
|
@@ -866,7 +890,7 @@ Hotpoint.prototype.initTexSelect = function(hots) {//热点样式图列表
|
|
|
|
|
|
var hotIcons = []; // 从所有热点tex中搜集
|
|
|
for(let i in hots){
|
|
|
- let imgs = hots[i].infoAttribute.styleImg;
|
|
|
+ let imgs = hots[i].infoAttribute && hots[i].infoAttribute.styleImg;
|
|
|
if(imgs && imgs.length){
|
|
|
if(!hotIcons.find(e=>e[0] == imgs[0] && e[1] == imgs[1])){
|
|
|
hotIcons.push(imgs)
|
|
@@ -1502,7 +1526,7 @@ Hotpoint.prototype.inputList = function(text, val) {
|
|
|
}
|
|
|
//添加热点模型
|
|
|
Hotpoint.prototype.addModel = function() {
|
|
|
- var text = this.inputList("请填写模型链接");
|
|
|
+ var text = this.inputList("请填写模型链接(https开头)");
|
|
|
this.hotpointDetail.find(".model .add").on('click', function() {
|
|
|
$(this).closest(".model").find(".list").append(text)
|
|
|
});
|
|
@@ -2567,13 +2591,18 @@ function uploadFile(file, type, callback, fileName) {
|
|
|
contentType: false,
|
|
|
//必须
|
|
|
success: function(rs) {
|
|
|
- if (rs.code === 5001) {
|
|
|
+ if(rs.code === 0){
|
|
|
+ callback(rs, file);
|
|
|
+ $(".edit-loading").addClass("hide");
|
|
|
+ }else if (rs.code === 5001) {
|
|
|
alert('请重新登录')
|
|
|
localStorage.dcj_token = ''
|
|
|
- location.reload()
|
|
|
+ location.reload()
|
|
|
+ }else{
|
|
|
+ alert(`uploadFile (url:${url}) code : ${rs.code} \n${rs.msg}`)
|
|
|
+
|
|
|
}
|
|
|
- callback(rs, file);
|
|
|
- $(".edit-loading").addClass("hide");
|
|
|
+
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -2726,16 +2755,16 @@ var eachMaxWeights = {
|
|
|
"photo": 10,
|
|
|
"video": 1000,//50, expand size for overlayVideo
|
|
|
//20,
|
|
|
- "audio": 10 //5
|
|
|
+ "audio": 10, //5
|
|
|
+ "model": 1 //5
|
|
|
}
|
|
|
|
|
|
var supportTypes = {
|
|
|
//支持后缀
|
|
|
"photo": ["jpg", "png", "jpeg", "bmp", "gif"],
|
|
|
- "audio": ["mp3", "aac", "ogg", "wav"/* , "m4a" */
|
|
|
- ],
|
|
|
- "video": ["mp4", "mov"/* ,"webm", "rmvb", "wmv" */
|
|
|
- ]//ios:mov
|
|
|
+ "audio": ["mp3", "aac", "ogg", "wav"/* , "m4a" */],
|
|
|
+ "video": ["mp4", "mov"/* ,"webm", "rmvb", "wmv" */],//ios:mov
|
|
|
+ 'model':["obj"]
|
|
|
}
|
|
|
function getExt(name) {
|
|
|
//后缀
|
|
@@ -2805,7 +2834,8 @@ var inputMedia = function(options, type, e) {
|
|
|
var chType = {
|
|
|
"photo": '图片',
|
|
|
"video": '视频',
|
|
|
- "audio": '音乐'
|
|
|
+ "audio": '音乐',
|
|
|
+ 'model': '模型'
|
|
|
}
|
|
|
|
|
|
var overWeight = detectWeights(file, inputType);
|
|
@@ -2843,16 +2873,34 @@ var inputMedia = function(options, type, e) {
|
|
|
alert(`文件出错, 无法加载此${chType[inputType]}文件。 文件可能损坏,或者浏览器不支持,或者后缀与文件不匹配。建议在IE以外的浏览器上传`)
|
|
|
}
|
|
|
|
|
|
- deal();
|
|
|
+ deal(type);
|
|
|
|
|
|
- function deal(fi) {
|
|
|
+ function deal(type) {
|
|
|
console.log('开始deal文件')
|
|
|
var reader = new FileReader();
|
|
|
//reader.name = file.name;
|
|
|
-
|
|
|
- file = fi || file;
|
|
|
- reader.readAsDataURL(file);
|
|
|
+ if(type == 'model'){
|
|
|
+ reader.readAsText( file );
|
|
|
+ }else{
|
|
|
+ reader.readAsDataURL(file);
|
|
|
+ }
|
|
|
+
|
|
|
reader.onload = function(evt) {
|
|
|
+
|
|
|
+ if (inputType == "model") {
|
|
|
+ var object = new THREE.OBJLoader().parse( evt.target.result );
|
|
|
+ object.name = file.name;
|
|
|
+ player.model.add(object)
|
|
|
+
|
|
|
+
|
|
|
+ //object.children[5].position.set(0,10,0)
|
|
|
+ window.extModel = object
|
|
|
+ $('.waiting').removeClass('showloading');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
var blob = dataURLtoBlob(evt.target.result);
|
|
|
var blobSrc = window.URL.createObjectURL(blob);
|
|
|
|
|
@@ -3383,7 +3431,8 @@ var EditOverlay = {
|
|
|
|
|
|
var uploadInputs = {
|
|
|
video : $('<input type="file" style="display:none" accept="video/*"></input>'),
|
|
|
- photo : $('<input type="file" style="display:none" accept="image/*"></input>')
|
|
|
+ photo : $('<input type="file" style="display:none" accept="image/*"></input>'),
|
|
|
+ model: $('<input type="file" style="display:none" accept=".obj, .OBJ"></input>'),
|
|
|
}
|
|
|
|
|
|
$('#overlayUpload [name="upload"] button').on('click', ()=>{
|
|
@@ -3439,6 +3488,16 @@ var EditOverlay = {
|
|
|
//$('#overlayUpload .preview').css('background-image',"").append($(video));
|
|
|
|
|
|
this.useImgRatio()
|
|
|
+ this.updateGifPanel(this.editPlane)
|
|
|
+
|
|
|
+ if(this.editPlane.animateInfo){
|
|
|
+ GifTexDeal.remove(this.editPlane.animation)
|
|
|
+ this.editPlane.animation = GifTexDeal.addAnimation(this.editPlane.plane.material.map, this.editPlane, this.editPlane.animateInfo, this.editPlane.sid)
|
|
|
+ GifTexDeal.start(this.editPlane.animation)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//自适应比例
|
|
|
this.editPlane.file = photo.file;
|
|
|
plane.material.opacity = 1;
|
|
@@ -3450,7 +3509,21 @@ var EditOverlay = {
|
|
|
}
|
|
|
)
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+ //模型
|
|
|
+ uploadInputs.model.on("change", (e)=>{
|
|
|
+ inputMedia({
|
|
|
+ //enableTypes: [this.editType ],
|
|
|
+ modelDone: (obj)=>{
|
|
|
+ console.log(obj)
|
|
|
+ }
|
|
|
+ }, "model", e);
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
+ $('#overlayModel [name="upload"] button').on('click', ()=>{
|
|
|
+ uploadInputs['model'].click()
|
|
|
+ })
|
|
|
|
|
|
player.overlayGroup.children.forEach((overlay)=>{
|
|
|
if(!overlay.plane.material.map || !overlay.plane.material.map.image){
|
|
@@ -3461,9 +3534,197 @@ var EditOverlay = {
|
|
|
}
|
|
|
|
|
|
this.addToList(overlay)
|
|
|
- }
|
|
|
- )
|
|
|
+ } )
|
|
|
|
|
|
+ $("#gifSwitch input").on("change", (e)=>{
|
|
|
+ var on = $("#gifSwitch input").is(':checked');
|
|
|
+ $("#gifInfoEdit").css({display: on ? 'block' : 'none'})
|
|
|
+ if(on){
|
|
|
+ EditOverlay.editPlane.animateInfo = {
|
|
|
+ cellXcount : parseInt($("#gifXCount").val()),
|
|
|
+ cellYcount : parseInt($("#gifYCount").val()),
|
|
|
+ voidCount : parseInt($("#voidCount").val()),
|
|
|
+ loop : true,
|
|
|
+ duration : parseFloat($("#gifDuration").val()) * 1000
|
|
|
+ }
|
|
|
+ EditOverlay.editPlane.animation = GifTexDeal.addAnimation(EditOverlay.editPlane.plane.material.map, EditOverlay.editPlane, EditOverlay.editPlane.animateInfo, EditOverlay.editPlane.sid)
|
|
|
+ GifTexDeal.start(EditOverlay.editPlane.animation)
|
|
|
+ }else{
|
|
|
+ GifTexDeal.remove(EditOverlay.editPlane.animation)
|
|
|
+ EditOverlay.editPlane.animateInfo = null
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ {//gif动画 input
|
|
|
+
|
|
|
+ let strictInputNum = function(e, precision, min=0,max){//precision:保留小数位数
|
|
|
+ var value = e.target.value.trim();
|
|
|
+ var lastOne = value[value.length-1];
|
|
|
+ var preContent = value.substr(0,value.length-1)
|
|
|
+ var hasPoint = precision > 0 && lastOne == '.' ;
|
|
|
+
|
|
|
+ var a = Math.pow(10, precision)
|
|
|
+ value = parseFloat(value) || 0;
|
|
|
+ if(isNaN(value)){
|
|
|
+ e.target.value = preContent //还原
|
|
|
+ return
|
|
|
+ }
|
|
|
+ e.target.value = Math.max(min, parseInt(value * a) / a )
|
|
|
+
|
|
|
+ hasPoint && (e.target.value += '.')//补小数点
|
|
|
+ }
|
|
|
+ let changeAnimation = function(){
|
|
|
+ GifTexDeal.setRepeart(EditOverlay.editPlane.animation)
|
|
|
+
|
|
|
+ }
|
|
|
+ let restartAnimation = function(){
|
|
|
+ GifTexDeal.stop(EditOverlay.editPlane.animation)
|
|
|
+ GifTexDeal.start(EditOverlay.editPlane.animation)
|
|
|
+ }
|
|
|
+ let changeFrameCount = function(){
|
|
|
+ var a = EditOverlay.editPlane.animateInfo
|
|
|
+ var frameCount = a.cellXcount * a.cellYcount - (a.voidCount||0)
|
|
|
+ $("#gifFrameCount").text(frameCount)
|
|
|
+ var fps = parseFloat($("#gifFps").val())
|
|
|
+ a.duration = frameCount / fps * 1000
|
|
|
+ $("#gifDuration").val(toPrecision(a.duration/1000, 2))
|
|
|
+ }
|
|
|
+
|
|
|
+ let gifXCountFun = function(value){
|
|
|
+ EditOverlay.editPlane.animateInfo.cellXcount = value
|
|
|
+ var gifImgWidth = parseFloat($("#gifImgWidth").text())
|
|
|
+ var gifCellWidth = toPrecision(gifImgWidth / EditOverlay.editPlane.animateInfo.cellXcount,1);
|
|
|
+ $("#gifCellWidth").val(gifCellWidth)
|
|
|
+ changeFrameCount()
|
|
|
+ changeAnimation()
|
|
|
+ }
|
|
|
+
|
|
|
+ $("#gifXCount").on('input',(e)=>{
|
|
|
+ strictInputNum(e, 0)
|
|
|
+ gifXCountFun(parseFloat(e.target.value))
|
|
|
+
|
|
|
+ })
|
|
|
+ $("#gifXCount").on('change',(e)=>{
|
|
|
+ strictInputNum(e, 0, 1)
|
|
|
+ gifXCountFun(parseFloat(e.target.value))
|
|
|
+ restartAnimation()
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ let gifYCountFun = function(value){
|
|
|
+ EditOverlay.editPlane.animateInfo.cellYcount = value
|
|
|
+ var gifImgHeight = parseFloat($("#gifImgHeight").text())
|
|
|
+ var gifCellHeight = toPrecision(gifImgHeight / EditOverlay.editPlane.animateInfo.cellYcount,1);
|
|
|
+ $("#gifCellHeight").val(gifCellHeight)
|
|
|
+ changeFrameCount()
|
|
|
+ changeAnimation()
|
|
|
+ }
|
|
|
+ $("#gifYCount").on('input',(e)=>{
|
|
|
+ strictInputNum(e, 0)
|
|
|
+ gifYCountFun(parseFloat(e.target.value))
|
|
|
+ })
|
|
|
+ $("#gifYCount").on('change',(e)=>{
|
|
|
+ strictInputNum(e, 0, 1)
|
|
|
+ gifYCountFun(parseFloat(e.target.value))
|
|
|
+ changeAnimation()
|
|
|
+ restartAnimation()
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ let gifCellWidthFun = function(value){
|
|
|
+ var gifCellWidth = value;
|
|
|
+ var gifImgWidth = parseFloat($("#gifImgWidth").text())
|
|
|
+ var cellXcount = toPrecision(gifImgWidth / gifCellWidth,2);
|
|
|
+ $("#gifXCount").val(cellXcount)
|
|
|
+ changeAnimation()
|
|
|
+ }
|
|
|
+ $("#gifCellWidth").on('input',(e)=>{
|
|
|
+ strictInputNum(e, 0)
|
|
|
+ gifCellWidthFun(parseFloat(e.target.value))
|
|
|
+
|
|
|
+ })
|
|
|
+ $("#gifCellWidth").on('change',(e)=>{
|
|
|
+ strictInputNum(e, 0, 1)
|
|
|
+ gifCellWidthFun(parseFloat(e.target.value))
|
|
|
+ var cellXcount = $("#gifXCount").val();
|
|
|
+ var cellXcountInt = Math.round(cellXcount)
|
|
|
+ if(cellXcountInt != cellXcount){
|
|
|
+ $("#gifXCount").val(cellXcountInt)
|
|
|
+ gifXCountFun(cellXcountInt)
|
|
|
+ changeAnimation()
|
|
|
+ }
|
|
|
+ restartAnimation()
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ let gifCellHeightFun = function(value){
|
|
|
+ var gifCellHeight = parseFloat(e.target.value);
|
|
|
+ var gifImgHeight = parseFloat($("#gifImgHeight").text())
|
|
|
+ var cellYcount = toPrecision(gifImgHeight / gifCellHeight,2);
|
|
|
+ $("#gifYCount").val(cellYcount)
|
|
|
+
|
|
|
+ }
|
|
|
+ $("#gifCellHeight").on('input',(e)=>{
|
|
|
+ strictInputNum(e, 0)
|
|
|
+ gifCellHeightFun(parseFloat(e.target.value))
|
|
|
+
|
|
|
+ })
|
|
|
+ $("#gifCellHeight").on('change',(e)=>{
|
|
|
+ strictInputNum(e, 0, 1)
|
|
|
+ gifCellHeightFun(parseFloat(e.target.value))
|
|
|
+ var cellYcount = $("#gifYCount").val();
|
|
|
+ var cellYcountInt = Math.round(cellYcount)
|
|
|
+ if(cellYcountInt != cellYcount){
|
|
|
+ $("#gifYCount").val(cellYcountInt)
|
|
|
+ gifYCountFun(cellYcountInt)
|
|
|
+ changeAnimation()
|
|
|
+ }
|
|
|
+ restartAnimation()
|
|
|
+ })
|
|
|
+
|
|
|
+ $("#voidCount").on('change',(e)=>{
|
|
|
+ strictInputNum(e, 0);
|
|
|
+ EditOverlay.editPlane.animateInfo.voidCount = parseInt(e.target.value)
|
|
|
+ changeFrameCount()
|
|
|
+ changeAnimation()
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let gifDurationFun = function(value){
|
|
|
+ var a = EditOverlay.editPlane.animateInfo
|
|
|
+ let frameCount = a.cellXcount * a.cellYcount
|
|
|
+ a.duration = value
|
|
|
+ $("#gifFps").val(toPrecision(frameCount / a.duration * 1000, 1))
|
|
|
+ }
|
|
|
+ $("#gifDuration").on('input',(e)=>{
|
|
|
+ strictInputNum(e, 1);
|
|
|
+ gifDurationFun(parseFloat(e.target.value) * 1000)
|
|
|
+ })
|
|
|
+ $("#gifDuration").on('change',(e)=>{
|
|
|
+ strictInputNum(e, 1, 0.01);
|
|
|
+ gifDurationFun(parseFloat(e.target.value) * 1000)
|
|
|
+ restartAnimation()
|
|
|
+ })
|
|
|
+
|
|
|
+ var gifFpsFun = function(e){
|
|
|
+ strictInputNum(e, 0, 1);
|
|
|
+ var fps = parseFloat(e.target.value)
|
|
|
+ var a = EditOverlay.editPlane.animateInfo
|
|
|
+ let frameCount = a.cellXcount * a.cellYcount - (a.voidCount||0)
|
|
|
+ a.duration = frameCount / fps * 1000
|
|
|
+ $("#gifDuration").val(toPrecision(a.duration / 1000, 2))
|
|
|
+ }
|
|
|
+ $("#gifFps").on('input',(e)=>{
|
|
|
+ gifFpsFun(e)
|
|
|
+
|
|
|
+ })
|
|
|
+ $("#gifFps").on('change',(e)=>{
|
|
|
+ gifFpsFun(e)
|
|
|
+ restartAnimation()
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
|
|
|
},
|
|
@@ -3482,7 +3743,9 @@ var EditOverlay = {
|
|
|
switchEditType : function(type){
|
|
|
this.editType = type;
|
|
|
$('#overlayUpload [name="upload"] button').text(type == 'video' ? "上传视频" : "上传图片")
|
|
|
- $('#overlayUpload .preview span').text(type == 'video' ? "支持MP4、MOV等,<20M" : "支持jpg、png等,<20M");
|
|
|
+ $('#overlayUpload .preview span').eq(0).text(type == 'video' ? "支持MP4、MOV等,<20M" : "支持jpg、png等,<20M");
|
|
|
+ if(type != 'photo' || !this.editPlane) $('#overlayProp #gifEdit').css({display: 'none'})
|
|
|
+
|
|
|
},
|
|
|
beginToAddPlane: function(event) {
|
|
|
this.switchEditType($(event.target).attr("data-type"))
|
|
@@ -3547,26 +3810,18 @@ var EditOverlay = {
|
|
|
});
|
|
|
$('#overlayUpload .preview [attr-type="width"]').text(toPrecision(overlay.width, 2))
|
|
|
$('#overlayUpload .preview [attr-type="height"]').text(toPrecision(overlay.height, 2))
|
|
|
-
|
|
|
- },
|
|
|
- updateOverlayPanel: function(overlay) {
|
|
|
- this.editPlane = overlay;
|
|
|
- overlay.requestDownload()
|
|
|
-
|
|
|
- if(overlay._loadDones){
|
|
|
- $('.waiting').addClass('showloading');
|
|
|
- overlay._loadDones.push(()=>{
|
|
|
- $('.waiting').removeClass('showloading');
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
|
|
|
+ $("#gifSwitch input").prop('checked', !!overlay.animateInfo);
|
|
|
+ $("#gifInfoEdit").css({display: !!overlay.animateInfo ? 'block' : 'none'})
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ updateOverlayPreview : function(overlay){
|
|
|
var plane = overlay.plane
|
|
|
var src = plane.material.map && (plane.material.map.image ? plane.material.map.image.src : overlay.fileSrc );
|
|
|
$('#overlayUpload .preview video').remove();
|
|
|
|
|
|
- overlay.overlayType && this.switchEditType(overlay.overlayType)
|
|
|
|
|
|
|
|
|
if (overlay.overlayType == "video") {
|
|
@@ -3576,7 +3831,7 @@ var EditOverlay = {
|
|
|
} else if(overlay.overlayType == "photo" || overlay.overlayType == "text"){
|
|
|
$('#overlayUpload .preview').css({
|
|
|
'background-image': src ? ("url(" + src + ")") : "",
|
|
|
- 'background-size': "contain"
|
|
|
+ 'background-size': "100% 100%"
|
|
|
})
|
|
|
}else{
|
|
|
$('#overlayUpload .preview').css({
|
|
@@ -3593,9 +3848,15 @@ var EditOverlay = {
|
|
|
$('#overlayUpload [name="useImgRatio"]').addClass("hide")
|
|
|
$('#overlayUpload .preview').removeClass('uploaded')
|
|
|
}
|
|
|
-
|
|
|
- this.updateOverlayScaleDisplay()
|
|
|
-
|
|
|
+ }
|
|
|
+ ,
|
|
|
+ updateOverlayPanel: function(overlay) {//开始编辑时更新
|
|
|
+
|
|
|
+ overlay.overlayType && this.switchEditType(overlay.overlayType)
|
|
|
+ this.updateOverlayPreview(overlay)
|
|
|
+ this.updateOverlayScaleDisplay()
|
|
|
+ this.updateGifPanel(overlay)
|
|
|
+
|
|
|
if (overlay.hasBox) {
|
|
|
this.scroller.videoDepth.setValue(overlay.scale.z * settings.overlay.depth * 100, true)
|
|
|
} else {
|
|
@@ -3609,12 +3870,63 @@ var EditOverlay = {
|
|
|
|
|
|
this.updatePano()
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
//----------------------------
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ updateGifPanel : function(overlay){
|
|
|
+ if(this.editType == 'photo'){
|
|
|
+ if(!overlay.plane.material.map)return;
|
|
|
+ $('#overlayProp #gifEdit').css({display: 'block'})
|
|
|
+
|
|
|
+ let w = overlay.plane.material.map.image.width
|
|
|
+ let h = overlay.plane.material.map.image.height
|
|
|
+ if(overlay.animateInfo){
|
|
|
+ let a = overlay.animateInfo
|
|
|
+ $("#gifXCount").val(a.cellXcount);
|
|
|
+ $("#gifYCount").val(a.cellYcount);
|
|
|
+ $("#gifImgWidth").text(w)
|
|
|
+ $("#gifImgHeight").text(h)
|
|
|
+ $("#gifCellWidth").val(toPrecision(w / a.cellXcount, 2));
|
|
|
+ $("#gifCellHeight").val(toPrecision(h / a.cellYcount, 2));
|
|
|
+ $("#voidCount").val(a.voidCount || 0);
|
|
|
+ let frameCount = a.cellXcount * a.cellYcount - (a.voidCount || 0)
|
|
|
+ $("#gifFrameCount").text(frameCount)
|
|
|
+ $("#gifDuration").val(toPrecision(a.duration / 1000, 2));
|
|
|
+ $("#gifFps").val(toPrecision(frameCount / a.duration * 1000, 1) );
|
|
|
+ }else{
|
|
|
+ $("#gifXCount").val(1);
|
|
|
+ $("#gifYCount").val(1);
|
|
|
+ $("#gifImgWidth").text(w)
|
|
|
+ $("#gifImgHeight").text(h)
|
|
|
+ $("#gifCellWidth").val(w);
|
|
|
+ $("#gifCellHeight").val(h)
|
|
|
+ $("#voidCount").val(0);
|
|
|
+ $("#gifFrameCount").text(1)
|
|
|
+ $("#gifDuration").val(1);
|
|
|
+ $("#gifFps").val(1);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ,
|
|
|
+ beginEdit : function(overlay){
|
|
|
+ $('#overlayProp').removeClass('atRight').removeClass('hide')
|
|
|
+ this.endAddPlane();
|
|
|
+ this.editPlane = overlay;
|
|
|
+
|
|
|
+
|
|
|
+ overlay.requestDownload()
|
|
|
+ if(overlay._loadDones){
|
|
|
+ $('.waiting').addClass('showloading');
|
|
|
+ overlay._loadDones.push(()=>{
|
|
|
+ $('.waiting').removeClass('showloading');
|
|
|
+ })
|
|
|
+ }
|
|
|
+ overlay.visible = true
|
|
|
+ this.updateOverlayPanel(overlay)
|
|
|
+ transformControls.attach(overlay)
|
|
|
+ }
|
|
|
+ ,
|
|
|
panoPosSwitchOnChange : function(){
|
|
|
var on = this.panoPosSwitch.is(':checked')
|
|
|
|
|
@@ -3694,7 +4006,7 @@ var EditOverlay = {
|
|
|
if (type == 'cancel') {
|
|
|
if (!this.editPlane.isNew && !this.editPlane.needDelete)
|
|
|
this.editPlane.setFromInfo(this.editPlane.info)
|
|
|
- //this.setOverlayFromInfo(this.editPlane, this.editPlane.info);//恢复
|
|
|
+
|
|
|
else
|
|
|
this.disposeOverlay(this.editPlane);
|
|
|
//删除
|
|
@@ -3740,7 +4052,8 @@ var EditOverlay = {
|
|
|
|
|
|
this.updateScale()
|
|
|
|
|
|
- this.updateOverlayPanel(this.editPlane)
|
|
|
+ //this.updateOverlayPanel(this.editPlane)
|
|
|
+ this.updateOverlayPreview(this.editPlane)
|
|
|
},
|
|
|
|
|
|
getOverlayInfo: function(overlay) {
|
|
@@ -3768,6 +4081,11 @@ var EditOverlay = {
|
|
|
hasBox: overlay.hasBox,
|
|
|
transformAtPanos: transformAtPanos
|
|
|
}
|
|
|
+
|
|
|
+ if(overlay.animateInfo ){
|
|
|
+ overlay.info.animateInfo = CloneObject(overlay.animateInfo)
|
|
|
+ }
|
|
|
+
|
|
|
},
|
|
|
|
|
|
getSavingInfo: function(overlay) {
|
|
@@ -3794,9 +4112,14 @@ var EditOverlay = {
|
|
|
hasBox: overlay.hasBox ? 1 : 0,
|
|
|
media: [overlay.overlayType],
|
|
|
file: overlay.fileSrc || overlay.plane.material.map.image.src,
|
|
|
- transformAtPanos : transformAtPanos
|
|
|
+ transformAtPanos : transformAtPanos,
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
+ if(overlay.animateInfo && overlay.animateInfo.cellXcount * overlay.animateInfo.cellYcount > 1){
|
|
|
+ info.animateInfo = overlay.animateInfo
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
return info
|
|
|
|
|
|
},
|
|
@@ -3848,7 +4171,9 @@ var EditOverlay = {
|
|
|
plane.material.dispose();
|
|
|
overlay.parent.remove(overlay);
|
|
|
this.removeFromList(overlay)
|
|
|
-
|
|
|
+ if(this.animation){
|
|
|
+ GifTexDeal.remove(this.animation)
|
|
|
+ }
|
|
|
//this.beginToAddPlane()
|
|
|
|
|
|
},
|
|
@@ -3890,7 +4215,8 @@ var VisiSet = {
|
|
|
|
|
|
setPanoVisible: false,
|
|
|
setTagVisible: false,
|
|
|
-
|
|
|
+ setPanoLog:false,
|
|
|
+
|
|
|
panoVLines: {},
|
|
|
//线条
|
|
|
panoVTemp: {},
|
|
@@ -3912,8 +4238,11 @@ var VisiSet = {
|
|
|
green: "#00c8ae"
|
|
|
},
|
|
|
init: function() {
|
|
|
+ this.footIconSizeRatio = Math.max(player.model.size.x, player.model.size.z) / 30;
|
|
|
+
|
|
|
this.meshGroup = new THREE.Object3D;
|
|
|
this.meshGroup.name = "setVisible-group"
|
|
|
+
|
|
|
player.model.add(this.meshGroup)
|
|
|
$("#hotVisible").on("click", ()=>{
|
|
|
VisiSet.enterSet(VisiSet.beginSetTagVisible.bind(VisiSet))
|
|
@@ -3982,7 +4311,7 @@ var VisiSet = {
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
},
|
|
|
enterSet: function(fun) {
|
|
|
var enter = function() {
|
|
@@ -4002,6 +4331,83 @@ var VisiSet = {
|
|
|
enter()
|
|
|
|
|
|
},
|
|
|
+
|
|
|
+ beginSetPanoLog: function() {
|
|
|
+ player.flying || $(".toolLeft").removeClass("unable")
|
|
|
+ if (this.setPanoLog)
|
|
|
+ return;
|
|
|
+ this.setPanoLog = true
|
|
|
+ this.panosSelect = []
|
|
|
+ this.updateFootIconSize()
|
|
|
+ this.showFootIcons(null, true);
|
|
|
+
|
|
|
+ for(let i in player.model.hots){
|
|
|
+ player.model.hots[i].visi_ = player.model.hots[i].mesh.visible;
|
|
|
+ player.model.hots[i].mesh.visible = false
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ player.model.panos.forEach(e=>{
|
|
|
+ e.addTextSprite(e.id, $('#panoIdColorTex').val(), e.footIcon)
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ finishSetPanoLog: function() {
|
|
|
+ //结束 退出这个设置
|
|
|
+ if (!this.setPanoLog)
|
|
|
+ return;
|
|
|
+ //否则会加多个侦听
|
|
|
+ this.setPanoLog = false;
|
|
|
+
|
|
|
+ this.hideFootIcons();
|
|
|
+
|
|
|
+ this.recoverAllState2();
|
|
|
+ this.panosSelect = null
|
|
|
+ player.flyoutType = null
|
|
|
+
|
|
|
+ permitTranMode(true)
|
|
|
+
|
|
|
+
|
|
|
+ for(let i in player.model.hots){
|
|
|
+ player.model.hots[i].mesh.visible = player.model.hots[i].visi_
|
|
|
+ }
|
|
|
+
|
|
|
+ $("#panosIdShow").val('')
|
|
|
+
|
|
|
+ player.model.panos.forEach(e=>{
|
|
|
+ e.removeTextSprite()
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+ dealPanoLogClick: function(object) {
|
|
|
+ var id = object.name == '' ? object.parent.name : object.name
|
|
|
+
|
|
|
+ var panos = player.model.panos;
|
|
|
+
|
|
|
+ var index = this.panosSelect.indexOf(id)
|
|
|
+ if (index==-1) {
|
|
|
+ this.changeFIconState(panos.index[id].footIcon, "linked" )
|
|
|
+ this.panosSelect.push(id)
|
|
|
+ }else{
|
|
|
+ this.changeFIconState(panos.index[id].footIcon, false)
|
|
|
+ this.panosSelect.splice(index,1)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $("#panosIdShow").val('"'+this.panosSelect.join('","')+'"');
|
|
|
+
|
|
|
+ }
|
|
|
+ ,
|
|
|
+ changePanoIdColor:function(color){
|
|
|
+ player.model.panos.forEach(e=>{
|
|
|
+ e.removeTextSprite();
|
|
|
+ e.addTextSprite(e.id,color, e.footIcon)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ ,
|
|
|
+ //--------------
|
|
|
beginSetPanoVisible: function() {
|
|
|
player.flying || $(".toolLeft").removeClass("unable")
|
|
|
if (this.setPanoVisible)
|
|
@@ -4433,7 +4839,7 @@ var VisiSet = {
|
|
|
}
|
|
|
|
|
|
|
|
|
- /* if(window.routeArray){
|
|
|
+ /* if(window.routeArray){//箭头路线
|
|
|
if(this.panoVLines[id].visible)window.routeArray.push(id)
|
|
|
else{
|
|
|
let index = window.routeArray.indexOf(id)
|
|
@@ -4601,8 +5007,8 @@ var VisiSet = {
|
|
|
//根据相机位置 改变footIcon大小,使在范围内看到的热点大小一致,防止太小点击不到
|
|
|
if (!this.footIcons)
|
|
|
return;
|
|
|
- var s = player.cameraControls.controls.floorplan.absoluteScale * 2.8;
|
|
|
- s = THREE.Math.clamp(s, 0.5, 1.4);
|
|
|
+ var s = player.cameraControls.controls.floorplan.absoluteScale * 2.8
|
|
|
+ s = THREE.Math.clamp(s, 0.5 * this.footIconSizeRatio, 1.4 * this.footIconSizeRatio);
|
|
|
this.footIcons.forEach(function(f) {
|
|
|
try {
|
|
|
|
|
@@ -4800,32 +5206,22 @@ var VisiSet = {
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
function permitTranMode(state) {
|
|
|
state ? $(".pinBottom.left").removeClass('hide') : $(".pinBottom.left").addClass('hide');
|
|
|
}
|
|
|
|
|
|
-CloneObject = function(copyObj, result, isSimpleCopy) {
|
|
|
- //isSimpleCopy只复制最外层
|
|
|
- //复制json result的可能:普通数字或字符串、普通数组、复杂对象
|
|
|
- result = result || {};
|
|
|
- if (copyObj instanceof Array) {
|
|
|
- if (copyObj[0]instanceof Object) {
|
|
|
- //不支持含有 [[Object]] 这样二级数组里面还是复杂数据的,普通和复杂的数据混合可能也不支持
|
|
|
- console.error("不支持含有 [[Object]] 这样二级数组里面还是复杂数据的...")
|
|
|
- }
|
|
|
- return copyObj.slice(0);
|
|
|
- //如果是数组,直接复制返回(排除数组内是object
|
|
|
- }
|
|
|
- for (var key in copyObj) {
|
|
|
- if (copyObj[key]instanceof Object && !isSimpleCopy)
|
|
|
- result[key] = CloneObject(copyObj[key]);
|
|
|
- else
|
|
|
- result[key] = copyObj[key];
|
|
|
- //如果是函数类同基本数据,即复制引用
|
|
|
- }
|
|
|
- return result;
|
|
|
-}
|
|
|
-;
|
|
|
+
|
|
|
|
|
|
function randomWord(randomFlag, min, max) {
|
|
|
//随机字符串
|