Demo  |   文档  |   博客  |   支持库  |   论坛  |   关于  |   EN
  • 首页
  • 产品
  • 解决方案
  • 下载
  • 合作
  • TWAVER DOCUMENT CENTER
    • 开发文档 – TWaver Make
      • 产品概述
      • 模型的定义和加载
      • 扩展自定义模型库
      • 模型库目录
        • 3D模型目录
        • 2D模型目录
519 views. Last update: March 8, 2016
  1. TWAVER DOCUMENT CENTER
  2. 开发文档 – TWaver Make
  3. 模型的定义和加载
Print

IN THIS PAGE

  • 1 基本概念
  • 2 定义模型
    • 2.1 直接返回基本类型
  • 3 加载模型
    • 3.1 批量调用多个模型
    • 3.2 异步返回模型

基本概念

Make的模型分为定义和使用两部分:

  • 通过make.Default.register函数来定义模型
  • 通过make.Default.load函数来加载使用模型

每一个模型在定义时,要给一个全局唯一不会重复的id来标识。推荐格式举例:

  • twaver.idc.rack
  • mycompany.product.id001

只要id不重复即可。Make内置模型均以twaver开头,因此不要使用以twaver开头的id。

定义模型

make.Default.register函数定义如下:

make.Default.register(id, createFunction)

其中,id变量是要注册的模型的id,需保证全局唯一。如果id已经存在,则会覆盖旧的模型注册,并用console.log给出警告信息;createFunction是创建模型的函数,它是定义了如何创建模型,make会调用这个函数来生成具体的模型对象。createFunction最后必须return模型结果。

下面代码定义了一个最简单的模型:

JavaScript
1
2
3
4
5
make.Default.register('my_name', function(){
  var node = new twaver.Node();
  node.setSize(200, 100);
  return node;
});

直接返回基本类型

register函数的createFunction参数也可以直接使用基本类型,例如字符串、数字等。此时load模型时将直接返回这个数值。

JavaScript
1
2
3
4
5
6
7
8
//注册资源
make.Default.register('my_name', '赛瓦软件');
//....
//加载并使用资源
var myName = make.Default.load('my_name');
//myName将等于'赛瓦软件'

加载模型

make.Default.load(object, callback)

其中:

  • object:必选。要加载的模型对象,object可以为string,json对象或者数组(数组里包含的又可以是string或json对象),string表示模型的id,比如:’twaver.idc.rack’;json对象是一个包含id的json对象,比如:{id:’twaver.idc.rack’, position: [100,0,100]},;数组就是多个模型对象
  • callback:可选。模型返回时的回调函数,主要用于异步加载时使用

下面的代码直接加载my_node模型并放入DataBox中:

JavaScript
1
2
var node = make.Default.load('my_node');
network.getDataBox().addByDescendant(node);

批量调用多个模型

object参数可以是多个模型id的数组,用来批量加载多个模型。返回的object则是一个模型实例的数组。

下面代码直接返回了’my_node1′, ‘my_node2’, ‘my_node3’ 三个模型,返回值在object数组中。

JavaScript
1
2
3
4
5
6
var json = ['my_node1', 'my_node2', 'my_node3'];
var object = make.Default.load(json);
 
var object1 = object[0];
var object2 = object[1];
var object3 = object[2];

object参数也可以是多个模型的json对象数组,每个json对象带了加载的参数,加载的参数是在注册的方法中提供了。返回值也是一个模型实例的数组。

比如:

JavaScript
1
2
3
4
5
6
var json = [{id:'my_node1', name: 'node1'}, {id: 'my_node2', name: 'node2'} , {id:'my_node3', name: 'node3'}];
var object = make.Default.load(json);
 
var object1 = object[0];
var object2 = object[1];
var object3 = object[2];

object参数还可以是多个模型的数组,数组中包含模型的id或json对象,返回值也是一个模型实例的数组

比如:

JavaScript
1
2
3
4
5
6
var json = ['my_node1', {id: 'my_node2', name: 'node2'}, 'my_node3'];
var object = make.Default.load(json);
 
var object1 = object[0];
var object2 = object[1];
var object3 = object[2];

 

在批量加载模型的情况下,callback参数的意义依旧不变。批量返回的结果object对象将会被传递给callback回调。

异步返回模型

有时,模型需要从文件、网络等处进行异步加载并创建,需要异步方式完成,无法直接return结果对象。此时,load函数无法直接获得模型结果,只能通过callback来获得。

假设id为’twaver.idc.building_001’这个模型是异步加载,则可以通过下面的代码进行加载:

JavaScript
1
2
3
make.Default.load('twaver.idc.building_001', null, function(building){
  network3d.getDataBox().addByDescendant(building);
});

下面是一个场景的json格式数据,通过load方法可以将快速加载模型到场景中

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
var jsonObject= [
    {
        "id": "twaver.idc.wall",
        "data": [
            [
                -380,
                400
            ],
            [
                380,
                400
            ],
            [
                380,
                -2.6743
            ],
            [
                26.7928,
                -2.6743
            ],
            [
                26.7928,
                -400
            ],
            [
                -380,
                -400
            ],
            [
                -380,
                400
            ]
        ],
        "children": [
            {
                "id": "twaver.idc.door",
                "width": 100,
                "position": [
                    302.344,
                    10,
                    400
                ]
            }
        ]
    },
    {
        "id": "twaver.idc.innerWall",
        "position": [
            -762.921,
            0,
            12.257
        ],
        "data": [
            [
                0,
                -520
            ],
            [
                0,
                520
            ]
        ]
    },
    {
        "id": "twaver.idc.innerWall",
        "position": [
            736.7721,
            0,
            12.257
        ],
        "data": [
            [
                0,
                -520.0224
            ],
            [
                0,
                520.0224
            ]
        ]
    },
    {
        "id": "twaver.idc.floor",
        "position": [
            -13.074,
            0,
            12.257
        ],
        "data": [
            [
                -749.84655,
                -520.0224
            ],
            [
                749.84655,
                -520.0224
            ],
            [
                749.84655,
                520.0224
            ],
            [
                -749.84655,
                520.0224
            ],
            [
                -749.84655,
                -520.0224
            ]
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "42U",
        "depth": 80,
        "position": [
            -317.2831,
            "floor-top",
            105.6503
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "42U",
        "depth": 80,
        "position": [
            -253.2077,
            "floor-top",
            107.176
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "42U",
        "depth": 80,
        "position": [
            -189.1323,
            "floor-top",
            107.176
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "42U",
        "depth": 80,
        "position": [
            -123.531,
            "floor-top",
            110.227
        ]
    },
    {
        "id": "twaver.idc.headerRack",
        "width": 60,
        "height": "42U",
        "depth": 80,
        "position": [
            -59.455,
            "floor-top",
            111.7528
        ]
    },
    {
        "id": "twaver.idc.airCondition",
        "position": [
            323.471,
            "floor-top",
            43.1006
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "47U",
        "depth": 80,
        "position": [
            -253.2076,
            "floor-top",
            -182.686
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "47U",
        "depth": 80,
        "position": [
            -190.658,
            "floor-top",
            -182.689
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "47U",
        "depth": 80,
        "position": [
            -128.109,
            "floor-top",
            -181.163
        ]
    },
    {
        "id": "twaver.idc.airCondition",
        "position": [
            -321.856,
            "floor-top",
            -353.557
        ]
    },
    {
        "id": "twaver.idc.rack",
        "width": 60,
        "height": "47U",
        "depth": 80,
        "position": [
            -62.5072,
            "floor-top",
            -179.6378
        ]
    }
];
 
var object3d = make.Default.load(jsonObject);
for(var i = 0; i < object3d.length; i++){
  var obj = object3d[i];
  network.getDataBox().addByDescendant(obj);
}

运行效果如下:

room

519 views. Last update: March 8, 2016
Print