目标50行代码之内完成3d编辑器功能。 第一步,先来到thingjs平台的在线开发环境。 三行代码加载了一个默认场景,就用这个默认场景作为底图基础,然后在上面加3d物体的编辑功能。 - var app = new THING.App({
- url: 'https://www.thingjs.com/static/models/storehouse' // 场景地址
- });
复制代码
ThingJS平台因为封装了底层细节所以能做到快速开发的目的。
第二步,场景加载完成后进入编辑模式 - app.on('load', function (ev) {
- state = app.stateManager.change('EditObject');
- });
复制代码
第三步,做一个编辑面板,简单一点四个元素, 两个模型,一个箭头线和一个管线,像下面这样
UI界面的代码如下: - // 创建工具条
- var toolbar = new THING.widget.Panel({ width: '90px' });
- // 绑定物体
- var buttonObj = { '卡车': false, '房屋': false, '导线': false, '管线': false, };
- var dataObj = {
- '卡车': {
- i: '#momoda_lc-icontubiao10',
- t: "Thing",
- u: "https://model.3dmomoda.com/models/262B016FBFC647968DC6F31E13437184/0/gltf/",
- },
- '房屋': {
- i: '#momoda_lc-icontubiao21',
- t: "Thing",
- u: "https://model.3dmomoda.com/models/378980A961674073BC8C4B935D890B33/0/gltf/",
- },
- '导线': {
- i: '#momoda_lc-icontubiao',
- t: "RouteLine",
- m: "https://www.thingjs.com/static/images/diffuse.jpg",
- },
- '管线': {
- i: '#momoda_lc-icontubiao10',
- t: "PolygonLine",
- m: "https://www.thingjs.com/static/images/poly_line_01.png"
- }
- }
- Loader.sync(['lib/iconfont.js'], function () {
- for (v in dataObj) {
- toolbar.addImageBoolean(buttonObj, v).url(dataObj[v].i);
- }
- })
复制代码
注释:因为面板库用到了图标 lib/iconfont.js 所以需要先用Loader.sync先加载图标。 toorlbar.addimage 为添加一个图标按键。发现实现面板的代码比功能逻辑还多~。 最后一步实现按键的创建模型回调 - toolbar.on('change', function (a) {
- var e = event || window.event;
- var object = state.createObject({ type:dataObj[a].t, url: dataObj[a].u, image: dataObj[a].m});
- state.startDrag(object, e.clientX, e.clientY, 0);
- return false; // 不影响按键状态
- });
复制代码
完整代码如下:总共43行,真的不到50行(拷贝代码到在线开发环境可直接看效果):- var app = new THING.App({
- url: 'https://www.thingjs.com/static/models/storehouse' // 场景地址
- });
- app.on('load', function (ev) {
- state = app.stateManager.change('EditObject');
- });
- // 创建工具条
- var toolbar = new THING.widget.Panel({ width: '90px' });
- // 绑定物体
- var buttonObj = { '卡车': false, '房屋': false, '导线': false, '管线': false, }
- var dataObj = {
- '卡车': {
- i: '#momoda_lc-icontubiao10',
- t: "Thing",
- u: "https://model.3dmomoda.com/models/262B016FBFC647968DC6F31E13437184/0/gltf/",
- },
- '房屋': {
- i: '#momoda_lc-icontubiao21',
- t: "Thing",
- u: "https://model.3dmomoda.com/models/378980A961674073BC8C4B935D890B33/0/gltf/",
- },
- '导线': {
- i: '#momoda_lc-icontubiao',
- t: "RouteLine",
- m: "https://www.thingjs.com/static/images/diffuse.jpg",
- },
- '管线': {
- i: '#momoda_lc-icontubiao10',
- t: "PolygonLine",
- m: "https://www.thingjs.com/static/images/poly_line_01.png"
- }
- }
- Loader.sync(['lib/iconfont.js'], function () {
- for (v in dataObj) {
- toolbar.addImageBoolean(buttonObj, v).url(dataObj[v].i)
- }
- toolbar.on('change', function (a) {
- var e = event || window.event;
- var object = state.createObject({ type:dataObj[a].t, url: dataObj[a].u, image: dataObj[a].m});
- state.startDrag(object, e.clientX, e.clientY, 0);
- return false; // 不影响按键状态
- });
- });
复制代码最终效果图如下: |