1.页面代码

<div width="800px">
	<button style="position: absolute;top: 15px;left: 15px;width: 75px;" onclick="flyToCar()">飞到小车</button>
	<button style="position: absolute;top: 45px;left: 15px;width: 75px;"
		onclick="flyToBack()">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</button>
	<iframe id="testMsg" style="width: 600px;height: 400px;"
		src='https://www.thingjs.com/s/aa25e09eae2f73e6ce080d73?params=105b0f77fd24654d4eebc434e9'></iframe>

</div>
<script>
	function flyToCar() {
		var a = document.getElementById("testMsg");
		var msg = {
			funcName: 'test'
		}
		a.contentWindow.postMessage(msg, "*");
	}

	function flyToBack() {
		var a = document.getElementById("testMsg");
		var msg = {
			funcName: 'test2',
			param: "2"
		}
		a.contentWindow.postMessage(msg, "*");
	}
</script>

2.thingjs代码

var app = new THING.App({
    url: 'https://www.thingjs.com/static/models/storehouse'     // 场景地址
});

app.on('load', function (ev) {
    var campus = ev.campus;
    // 开启系统层级
    app.level.change(campus);
});

app.on(THING.EventType.LevelChange, function (ev) {
    var obj = ev.object;
    var name = obj.name;
    var type = obj.type;
    var id = obj.id;
    var info = "进入 " + type + " (" + name + ")";
    // 调用 用户主页面的 upDateInfo 方法
    callFuncInMain('upDataInfo', { info, id });
})

function callFuncInMain(funcName, data) {
    var message = {
        'funcName': funcName // 所要调用父页面里的函数名
        // 'param': data
    }
    // 向父窗体(用户主页面)发送消息
    // 第一个参数是具体的信息内容,
    // 第二个参数是接收消息的窗口的源(origin),即"协议 + 域名 + 端口"。也可以设为*,表示不限制域名,向所有窗口发送
    window.parent.postMessage(message, '*');
}

function changeLevel(id) {
    var obj = app.query('#' + id)[0];
    if (obj) {
        app.level.change(obj);
    }
}
// 监听用户页面传回的数据 并调用 ThingJS 页面方法
window.addEventListener('message', function (e) {
    var data = e.data;
    var funcName = data.funcName;
    var param = data.param;
    // 调用 ThingJS 页面方法
    window[funcName](param);
});

function test() {
    var car = app.query('car01')[0];
    app.camera.flyTo({
        object: car,
        xAngle: 0, // 绕物体自身X轴旋转角度
        yAngle: 0, // 绕物体自身Y轴旋转角度
        radiusFactor: 2, // 物体包围盒半径的倍数
        time: 2 * 1000,
        complete: function () {
            console.log("飞行结束");
        }
    });
}

function test2(obj) {
    app.camera.flyTo({
		position: [50.260000000000005,35.129000000000005,59.32699999999999],
		target: [8.0, -2.0, 4.0],
		time: obj*1000,
		complete: function () {
			console.log('飞行结束')
		}
	});
}
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐