janusweb 1.7.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/deploy.yml +71 -0
- package/Dockerfile +14 -0
- package/README.md +210 -7
- package/janusxr.com/.args +2 -0
- package/janusxr.com/.init.lua +30 -0
- package/media/assets/webui/apps/comms/voip.js +27 -25
- package/media/assets/webui/apps/editor/editor.js +3 -0
- package/media/assets/webui/apps/navigation/navigation.js +1 -1
- package/media/assets/webui/apps/xrfragment/level0-sidecarfile.js +308 -0
- package/media/assets/webui/apps/xrfragment/level2-hyperlink.js +265 -0
- package/media/assets/webui/apps/xrfragment/level7-engine-prefixes.export.js +93 -0
- package/media/assets/webui/apps/xrfragment/level7-engine-prefixes.import.js +229 -0
- package/media/assets/webui/apps/xrfragment/patch/metaquest-fix-flickering.js +15 -0
- package/media/assets/webui/apps/xrfragment/xrfragment.json +14 -0
- package/media/assets/webui/default.json +1 -0
- package/media/images/portal.svg +130 -0
- package/media/index.html +48 -1
- package/package.json +1 -1
- package/scripts/client.js +24 -0
- package/scripts/config.js +12 -1
- package/scripts/janusbase.js +1 -0
- package/scripts/janusparagraph.js +169 -22
- package/scripts/janusxrplayer.js +4 -6
- package/scripts/room.js +59 -36
- package/scripts/translators/paragraph/html-xml-rss.js +47 -0
- package/scripts/translators/peertube.js +89 -0
- package/scripts/translators/xrfragments.js +5 -5
- package/tests/room/paragraph.xml +47 -0
- package/utils/build.sh +1 -0
- package/utils/dev-link.sh +75 -0
- package/utils/release.binary.sh +36 -0
- package/utils/release.docker.sh +11 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
// https://xrfragment.org/#%F0%9F%93%9Clevel7%3A%20engine%20prefixes
|
|
2
|
+
// There are cases where the 3D scene file might want to hint the
|
|
3
|
+
// specific features to the viewer-engine (JANUSWEB, THREE.js, AFRAME, Godot e.g.).
|
|
4
|
+
|
|
5
|
+
xrf_engines = function(){
|
|
6
|
+
|
|
7
|
+
const {toJanusObject,applyPrefixes,applyCleanup} = xrf_engines
|
|
8
|
+
let cleanup = []
|
|
9
|
+
|
|
10
|
+
const map = (obj,key,realKey) => {
|
|
11
|
+
let match = true
|
|
12
|
+
|
|
13
|
+
// compatibility workaround: some 3D editors omit false booleans in export :/
|
|
14
|
+
// therefore we support boolean strings
|
|
15
|
+
if( obj.userData[key] == 'false' ) obj.userData[key] = false
|
|
16
|
+
if( obj.userData[key] == 'true' ) obj.userData[key] = true
|
|
17
|
+
|
|
18
|
+
// increment/decrement
|
|
19
|
+
let scroller = key.match(/[+]$/)
|
|
20
|
+
if( scroller && !scene.scrollers ){
|
|
21
|
+
if( typeof obj.userData[key] != 'number' ) obj.userData[key] = parseFloat(obj.userData[key])
|
|
22
|
+
scene.scrollers = []
|
|
23
|
+
elation.events.add(null, 'janusweb_script_frame', function(e){
|
|
24
|
+
scene.scrollers.map( (f) => f(e.data) ) // e.data == delta
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// special cases
|
|
29
|
+
switch( key ){
|
|
30
|
+
case "-three-material.blending": if( obj.material ){
|
|
31
|
+
const modes = {
|
|
32
|
+
'THREE.NoBlending': THREE.NoBlending,
|
|
33
|
+
'THREE.NormalBlending': THREE.NormalBlending,
|
|
34
|
+
'THREE.AdditiveBlending': THREE.AdditiveBlending,
|
|
35
|
+
'THREE.SubtractiveBlending': THREE.SubtractiveBlending,
|
|
36
|
+
'THREE.MultiplyBlending': THREE.MultiplyBlending
|
|
37
|
+
}
|
|
38
|
+
setTimeout( () => { // not sure why this only works in setTimeout
|
|
39
|
+
if( modes[ obj.userData[key] ] ) obj.material.blending = modes[ obj.userData[key] ]
|
|
40
|
+
},10)
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
|
|
44
|
+
case "-three-material.sides": if( obj.material ){
|
|
45
|
+
const modes = {
|
|
46
|
+
'THREE.FrontSide': THREE.NoBlending,
|
|
47
|
+
'THREE.BackSide': THREE.NormalBlending,
|
|
48
|
+
'THREE.DoubleSide': THREE.DoubleSide
|
|
49
|
+
}
|
|
50
|
+
setTimeout( () => { // not sure why this only works in setTimeout
|
|
51
|
+
if( modes[ obj.userData[key] ] ) obj.material.sides = modes[ obj.userData[key] ]
|
|
52
|
+
},10)
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
|
|
56
|
+
case "-janus-use_local_asset": room.use_local_asset = obj.userData[key]
|
|
57
|
+
room.localasset = room.createObject('object', {
|
|
58
|
+
id: room.use_local_asset,
|
|
59
|
+
collision_id: room.use_local_asset + '_collision',
|
|
60
|
+
collision_scale: V(1,1,1),
|
|
61
|
+
collision_pos: V(0,0,0),
|
|
62
|
+
col: room.col,
|
|
63
|
+
//fwd: room.fwd,
|
|
64
|
+
xdir: room.xdir,
|
|
65
|
+
ydir: room.ydir,
|
|
66
|
+
zdir: room.zdir,
|
|
67
|
+
shadows: true
|
|
68
|
+
});
|
|
69
|
+
break;
|
|
70
|
+
|
|
71
|
+
// DECLARATIVE entities
|
|
72
|
+
case "-janus-tag": let opts = {}// rotation: '0 -180 0' }
|
|
73
|
+
for( let i in obj.userData ){
|
|
74
|
+
if( !i.match(/^-janus-/) ) continue
|
|
75
|
+
opts[ i.replace(/-janus-/,'') ] = obj.userData[i]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// create asset
|
|
79
|
+
if( obj.userData['-janus-tag'].match(/^asset/) ){
|
|
80
|
+
if( opts.src && !opts.src.match(/(^\.|:\/)/) ) opts.src = room.baseurl + opts.src
|
|
81
|
+
room.loadNewAsset( opts['tag'].replace(/^asset/,''), opts )
|
|
82
|
+
}else{
|
|
83
|
+
opts.js_id = opts.name = String(`-janus-${obj.name}_${obj.userData['-janus-tag']}`).replace(/.*janus-/,'-janus-')
|
|
84
|
+
// create room object
|
|
85
|
+
const jo = room.createObject( opts.tag, opts )
|
|
86
|
+
jo.objects['3d'].name = opts.js_id
|
|
87
|
+
jo.visible = false
|
|
88
|
+
|
|
89
|
+
// replace janusobject with nested THREE obj
|
|
90
|
+
obj.parent.add( jo.objects['3d'] )
|
|
91
|
+
|
|
92
|
+
// fix unclickable objects (since obj might be nested in the scene-tree)
|
|
93
|
+
if( jo.colliders ){
|
|
94
|
+
jo.removeCollider()
|
|
95
|
+
jo.colliders.parent.children.push( jo.objects['3d'] )
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// we need setTimeout otherwise quaternion is not updated
|
|
99
|
+
// https://github.com/jbaicoianu/janusweb/issues/306
|
|
100
|
+
setTimeout( () => {
|
|
101
|
+
jo.orientation.copy( obj.quaternion)
|
|
102
|
+
jo.position.copy( obj.position )
|
|
103
|
+
//jo.scale.copy( obj.scale )
|
|
104
|
+
jo.visible = true
|
|
105
|
+
},200)
|
|
106
|
+
// mark previously generated geo/materials by janusweb export for deletion
|
|
107
|
+
obj.traverse ( (o) => cleanup.push(o) )
|
|
108
|
+
cleanup.push(obj)
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
// OBJECTS
|
|
112
|
+
case "-janus-collision_id": const collision_id = obj.userData[key]
|
|
113
|
+
if( collision_id != obj.name ){
|
|
114
|
+
console.warn(`xrfragment: ${obj.name}.collision_id can be '${obj.name}' only (for now)..skipping '${collision_id}'`)
|
|
115
|
+
}else{
|
|
116
|
+
const jo = toJanusObject(obj,{noreparent:true})
|
|
117
|
+
jo.collidable = true
|
|
118
|
+
jo.collision_id = collision_id
|
|
119
|
+
jo.removeCollider();
|
|
120
|
+
const collider = obj.clone()
|
|
121
|
+
collider.position.set(0,0,0)
|
|
122
|
+
collider.rotation.set(0,0,0)
|
|
123
|
+
collider.scale.set(1,1,1)
|
|
124
|
+
jo.collision_trigger = true
|
|
125
|
+
jo.setCollider('mesh',{mesh: collider})
|
|
126
|
+
jo.colliders.parent = obj
|
|
127
|
+
//jo.objects.dynamics.mass = 1
|
|
128
|
+
//jo.objects.dynamics.addForce('static', new THREE.Vector3(0, room.gravity, 0));
|
|
129
|
+
//elation.events.add(jo.objects.dynamics, 'physics_collide', elation.bind(jo, jo.handleCollision));
|
|
130
|
+
console.log(`xrfragment: setting collision_id = ${collision_id}`)
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
|
|
134
|
+
default: match = false
|
|
135
|
+
|
|
136
|
+
// JANUS property fallthrough
|
|
137
|
+
if( key.match(/^-janus-/) && !key.match("-janus-tag") ){
|
|
138
|
+
// *TODO* more heuristics to determine scene
|
|
139
|
+
if( obj.name == 'Scene' || obj?.parent?.name == '' || obj.userData['-janus-source']){
|
|
140
|
+
room[realKey] = obj.userData[key];
|
|
141
|
+
}else{
|
|
142
|
+
toJanusObject(obj)[realKey] = obj.userData[key]
|
|
143
|
+
}
|
|
144
|
+
match = true
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// THREE fallthrough
|
|
148
|
+
if( key.match(/^-three-/) ){
|
|
149
|
+
|
|
150
|
+
if( realKey.match('material.') && obj.material ){ // clone shared materials
|
|
151
|
+
obj.material = obj.material.clone()
|
|
152
|
+
if( realKey.match('material.map') ) obj.material.map = obj.material.map.clone()
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const setKeyVal = (o, path, val ) => new Function('o', 'v', `o.${path} = v `)(o, val);
|
|
156
|
+
if( scroller ){
|
|
157
|
+
const setKeyValIncr = (o, path, val, delta) => new Function('o', 'speed', `o.${path} += ${delta} * speed`)(o, val);
|
|
158
|
+
try{
|
|
159
|
+
const myscroller = function(path,val,delta){
|
|
160
|
+
setKeyValIncr( this, path, val, delta)
|
|
161
|
+
}.bind(obj, realKey.replace(/[+]$/,''), obj.userData[key])
|
|
162
|
+
myscroller(0.000001) // see if it triggers error
|
|
163
|
+
scene.scrollers.push(myscroller) // otherwise add frame-function
|
|
164
|
+
}catch(e){
|
|
165
|
+
console.error(`could not apply engine prefix: ${obj.name} => ${key} (tip: dont use them on <paragraph> objects)`)
|
|
166
|
+
}
|
|
167
|
+
}else{
|
|
168
|
+
try{
|
|
169
|
+
setKeyVal( obj, realKey, obj.userData[key] )
|
|
170
|
+
}catch(e){ console.error(e) }
|
|
171
|
+
}
|
|
172
|
+
match = true
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if( match ){
|
|
178
|
+
//console.log(`xrfragment: engine prefix '${key}:${realKey}' = '${obj.userData[key]}'`)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
room.gravity = 0 // new default unless specified otherwise
|
|
183
|
+
let scene = elation.engine.instances.default.systems.world.scene['world-3d']
|
|
184
|
+
const isAsset = (obj) => String(obj.userData['-janus-tag']).match(/^asset/)
|
|
185
|
+
const isJanusTag = (obj) => String(obj.userData['-janus-tag']) && !isAsset(obj)
|
|
186
|
+
applyPrefixes(scene,map, (o) => isAsset(o) ) // janus requires first initialzing of assets
|
|
187
|
+
applyPrefixes(scene,map, (o) => isJanusTag(o) ) // then regular janus tags
|
|
188
|
+
applyPrefixes(scene,map, (o) => !isJanusTag(o) && !isAsset(o) ) // then set properties on the rest
|
|
189
|
+
applyCleanup(cleanup)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
xrf_engines.toJanusObject = function(obj,opts){
|
|
194
|
+
if( room.objects[ obj.name ] ) return room.objects[ obj.name ]
|
|
195
|
+
opts = opts || {}
|
|
196
|
+
opts.tag = opts.tag || 'object'
|
|
197
|
+
const create = () => room.createObject( opts.tag,{ js_id: obj.name, ...opts })
|
|
198
|
+
let jo = create()
|
|
199
|
+
jo.objects['3d'] = obj
|
|
200
|
+
return jo
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
xrf_engines.applyPrefixes = function(scene,map,criteria){
|
|
204
|
+
criteria = criteria ? criteria : (obj) => true
|
|
205
|
+
scene.traverse( (obj) => {
|
|
206
|
+
if( criteria(obj) ){
|
|
207
|
+
for( let field in obj.userData ){
|
|
208
|
+
if( obj.userData[field] ){
|
|
209
|
+
try{
|
|
210
|
+
map(obj,field, field.replace(/^-(janus|three)-/,'') )
|
|
211
|
+
}catch(e){ console.error(e) }
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
})
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
xrf_engines.applyCleanup = function(cleanup){
|
|
219
|
+
const clean = (o) => {
|
|
220
|
+
if( o.geometry ) o.geometry.dispose()
|
|
221
|
+
if( o.material ) o.material.dispose()
|
|
222
|
+
o.removeFromParent()
|
|
223
|
+
}
|
|
224
|
+
cleanup.map(clean)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
elation.events.add(null, 'room_load_complete', xrf_engines ) // future scenes
|
|
229
|
+
if( room.loaded ) xrf_engines() // current scene
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Meta Quest 2 results in rapid flickering when loading a new room
|
|
2
|
+
// therefore we show the shroud while loading
|
|
3
|
+
setActiveRoom = room.janus.setActiveRoom.bind(room.janus)
|
|
4
|
+
room.janus.setActiveRoom = function(url,referer,skipURL){
|
|
5
|
+
if( url.replace(/#.*/,'') != room.url ){
|
|
6
|
+
room.fadeAudioOut()
|
|
7
|
+
setTimeout( function(){
|
|
8
|
+
setActiveRoom.apply(room.janus, [url, referer, skipURL])
|
|
9
|
+
}, 500)
|
|
10
|
+
}else{
|
|
11
|
+
room.urlhash = url.match('#') ? url.replace(/.*#/,'') : 'spawn'
|
|
12
|
+
room.setPlayerPosition()
|
|
13
|
+
// ignore same-room setActiveRoom-calls (it restarts audio when clicking internal hyperlinks)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="79.375008mm"
|
|
6
|
+
height="158.75mm"
|
|
7
|
+
viewBox="0 0 79.375007 158.75"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg1"
|
|
10
|
+
xml:space="preserve"
|
|
11
|
+
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
|
12
|
+
sodipodi:docname="portal.svg"
|
|
13
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
14
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
15
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
16
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
17
|
+
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
|
18
|
+
id="namedview1"
|
|
19
|
+
pagecolor="#ffffff"
|
|
20
|
+
bordercolor="#000000"
|
|
21
|
+
borderopacity="0.25"
|
|
22
|
+
inkscape:showpageshadow="2"
|
|
23
|
+
inkscape:pageopacity="0.0"
|
|
24
|
+
inkscape:pagecheckerboard="0"
|
|
25
|
+
inkscape:deskcolor="#d1d1d1"
|
|
26
|
+
inkscape:document-units="mm"
|
|
27
|
+
inkscape:zoom="0.73673541"
|
|
28
|
+
inkscape:cx="48.185549"
|
|
29
|
+
inkscape:cy="464.88875"
|
|
30
|
+
inkscape:window-width="1920"
|
|
31
|
+
inkscape:window-height="1030"
|
|
32
|
+
inkscape:window-x="0"
|
|
33
|
+
inkscape:window-y="26"
|
|
34
|
+
inkscape:window-maximized="1"
|
|
35
|
+
inkscape:current-layer="layer1" /><defs
|
|
36
|
+
id="defs1"><inkscape:path-effect
|
|
37
|
+
effect="fillet_chamfer"
|
|
38
|
+
id="path-effect6"
|
|
39
|
+
is_visible="true"
|
|
40
|
+
lpeversion="1"
|
|
41
|
+
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,7.2009148,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,6.7344665,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,5.7643969,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,7.2192412,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
|
42
|
+
radius="0"
|
|
43
|
+
unit="px"
|
|
44
|
+
method="auto"
|
|
45
|
+
mode="F"
|
|
46
|
+
chamfer_steps="1"
|
|
47
|
+
flexible="false"
|
|
48
|
+
use_knot_distance="true"
|
|
49
|
+
apply_no_radius="true"
|
|
50
|
+
apply_with_radius="true"
|
|
51
|
+
only_selected="false"
|
|
52
|
+
hide_knots="false" /><inkscape:path-effect
|
|
53
|
+
effect="fillet_chamfer"
|
|
54
|
+
id="path-effect5"
|
|
55
|
+
is_visible="true"
|
|
56
|
+
lpeversion="1"
|
|
57
|
+
nodesatellites_param="F,0,0,1,0,6.191627,0,1 @ F,0,0,1,0,7.505764,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
|
58
|
+
radius="0"
|
|
59
|
+
unit="px"
|
|
60
|
+
method="auto"
|
|
61
|
+
mode="F"
|
|
62
|
+
chamfer_steps="1"
|
|
63
|
+
flexible="false"
|
|
64
|
+
use_knot_distance="true"
|
|
65
|
+
apply_no_radius="true"
|
|
66
|
+
apply_with_radius="true"
|
|
67
|
+
only_selected="false"
|
|
68
|
+
hide_knots="false" /><inkscape:path-effect
|
|
69
|
+
effect="fillet_chamfer"
|
|
70
|
+
id="path-effect4"
|
|
71
|
+
is_visible="true"
|
|
72
|
+
lpeversion="1"
|
|
73
|
+
nodesatellites_param="F,0,0,1,0,5.2792018,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
|
74
|
+
radius="0"
|
|
75
|
+
unit="px"
|
|
76
|
+
method="auto"
|
|
77
|
+
mode="F"
|
|
78
|
+
chamfer_steps="1"
|
|
79
|
+
flexible="false"
|
|
80
|
+
use_knot_distance="true"
|
|
81
|
+
apply_no_radius="true"
|
|
82
|
+
apply_with_radius="true"
|
|
83
|
+
only_selected="false"
|
|
84
|
+
hide_knots="false" /><inkscape:path-effect
|
|
85
|
+
effect="fillet_chamfer"
|
|
86
|
+
id="path-effect3"
|
|
87
|
+
is_visible="true"
|
|
88
|
+
lpeversion="1"
|
|
89
|
+
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,5.7643974,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,6.1418531,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
|
|
90
|
+
radius="0"
|
|
91
|
+
unit="px"
|
|
92
|
+
method="auto"
|
|
93
|
+
mode="F"
|
|
94
|
+
chamfer_steps="1"
|
|
95
|
+
flexible="false"
|
|
96
|
+
use_knot_distance="true"
|
|
97
|
+
apply_no_radius="true"
|
|
98
|
+
apply_with_radius="true"
|
|
99
|
+
only_selected="false"
|
|
100
|
+
hide_knots="false" /><linearGradient
|
|
101
|
+
id="linearGradient2"
|
|
102
|
+
inkscape:collect="always"><stop
|
|
103
|
+
style="stop-color:#364051;stop-opacity:0.26459038;"
|
|
104
|
+
offset="0"
|
|
105
|
+
id="stop2" /><stop
|
|
106
|
+
style="stop-color:#4a6483;stop-opacity:0.49411765;"
|
|
107
|
+
offset="0.38955703"
|
|
108
|
+
id="stop5" /><stop
|
|
109
|
+
style="stop-color:#947ac4;stop-opacity:1;"
|
|
110
|
+
offset="1"
|
|
111
|
+
id="stop3" /></linearGradient><linearGradient
|
|
112
|
+
inkscape:collect="always"
|
|
113
|
+
xlink:href="#linearGradient2"
|
|
114
|
+
id="linearGradient3"
|
|
115
|
+
x1="127.20676"
|
|
116
|
+
y1="190.95575"
|
|
117
|
+
x2="125.82147"
|
|
118
|
+
y2="111.5928"
|
|
119
|
+
gradientUnits="userSpaceOnUse"
|
|
120
|
+
gradientTransform="translate(-22.266022,-50.996373)" /></defs><g
|
|
121
|
+
inkscape:label="Layer 1"
|
|
122
|
+
inkscape:groupmode="layer"
|
|
123
|
+
id="layer1"
|
|
124
|
+
transform="translate(-64.560526,-20.90281)"><path
|
|
125
|
+
style="fill:url(#linearGradient3);stroke:none"
|
|
126
|
+
d="M 64.560526,100.27781 V 28.103725 a 7.2009148,7.2009148 135 0 1 7.200915,-7.200915 h 32.486589 32.95303 a 6.7344665,6.7344665 45 0 1 6.73447,6.734466 v 72.640534 l 0,73.6106 a 5.7643969,5.7643969 135 0 1 -5.7644,5.7644 h -33.9231 -32.468263 a 7.2192412,7.2192412 45 0 1 -7.219241,-7.21924 z m 47.103984,29.96041 c 3.30617,-0.89658 6.16277,-2.11655 8.7251,-3.72622 6.98934,-4.39076 11.53086,-10.56792 13.83499,-18.8177 0.48271,-1.72835 0.5565,-2.71166 0.5565,-7.41649 0,-4.704823 -0.0738,-5.688133 -0.5565,-7.416483 -2.30413,-8.24978 -6.84565,-14.42695 -13.83499,-18.8177 -2.5689,-1.6138 -5.43589,-2.83688 -8.7251,-3.72217 -2.55776,-0.68843 -9.42862,-0.95176 -12.402534,-0.47534 -10.8555,1.73904 -20.28912,9.58188 -23.99411,19.94801 -1.2723,3.55973 -1.72805,6.32622 -1.72707,10.483683 9.6e-4,4.08141 0.44822,6.87117 1.64645,10.26947 1.03429,2.9334 1.66772,4.17255 3.62059,7.08285 4.34347,6.47292 11.22797,11.10147 19.09019,12.83461 3.158324,0.69621 10.829344,0.56999 13.766484,-0.22652 z m -11.914404,-1.57307 c -13.08222,-2.28643 -23.09848,-13.06889 -24.03518,-25.87379 -0.64646,-8.837263 2.21242,-16.696163 8.28145,-22.765193 6.04898,-6.04898 13.79151,-8.88345 22.632904,-8.28572 11.92033,0.8059 22.16853,9.45106 25.46177,21.479 0.51415,1.87781 0.59239,2.81007 0.59239,7.058363 0,4.2483 -0.0782,5.18056 -0.59239,7.05837 -2.99448,10.9368 -11.36764,18.84373 -22.34177,21.09776 -1.91619,0.39357 -8.23426,0.53966 -9.999174,0.23121 z m 1.164184,-11.67565 c -2.463224,-1.79225 -5.168364,-5.26924 -6.569154,-8.44346 l -0.49623,-1.12448 h -2.87023 c -1.97121,0 -2.87024,0.0944 -2.87024,0.30147 0,0.43057 1.47343,2.76695 2.60716,4.13412 2.35223,2.83656 7.61793,5.74857 10.595564,5.85951 0.56836,0.0212 0.52671,-0.0552 -0.39687,-0.72716 z m 8.03494,0.37347 c 3.18248,-0.84719 6.87927,-3.15195 8.83123,-5.50582 1.13372,-1.36717 2.60715,-3.70355 2.60715,-4.13412 0,-0.20822 -0.92068,-0.29876 -2.97656,-0.29273 l -2.97657,0.009 -1.10778,2.30636 c -1.27253,2.64936 -3.14145,5.05872 -5.2672,6.79035 -1.61221,1.3133 -1.46174,1.45319 0.88973,0.82722 z m -5.49495,-5.04661 v -4.8948 h -3.968754 c -2.71819,0 -3.96875,0.092 -3.96875,0.29204 0,0.80418 2.18452,4.28343 3.70416,5.89957 1.368124,1.45499 3.805444,3.55555 4.167194,3.59142 0.0364,0.004 0.0661,-2.1961 0.0661,-4.88823 z m 5.15937,1.855 c 1.80981,-1.83861 3.13335,-3.76242 3.9611,-5.75761 l 0.41163,-0.99219 h -3.9723 -3.9723 v 4.91281 4.91281 l 0.85989,-0.59713 c 0.47294,-0.32843 1.69334,-1.44384 2.71198,-2.47869 z m -15.337294,-8.80032 c -0.0992,-0.25466 -0.3097,-1.50481 -0.46779,-2.77812 -0.27657,-2.22771 -0.0302,-6.130013 0.46779,-7.408343 0.16538,-0.42455 -0.0719,-0.46302 -2.85627,-0.46302 h -3.03663 l -0.36511,1.25677 c -0.21641,0.74491 -0.36512,2.49603 -0.36512,4.299483 0,1.80346 0.14871,3.55458 0.36512,4.29948 l 0.36511,1.25677 h 3.03663 c 2.78435,0 3.02165,-0.0385 2.85627,-0.46302 z m 10.177924,-5.09323 v -5.556253 h -4.346874 -4.34687 l -0.32567,1.52136 c -0.41827,1.95392 -0.41827,6.115873 0,8.069793 l 0.32567,1.52135 h 4.34687 4.346874 z m 10.36219,4.43177 c 0.42701,-1.46197 0.42701,-7.401563 0,-8.863543 l -0.32842,-1.12448 h -4.22314 -4.22313 v 5.556253 5.55625 h 4.22313 4.22314 z m 7.66123,-0.13229 c 0.21641,-0.7449 0.36512,-2.49602 0.36512,-4.29948 0,-1.803453 -0.14871,-3.554573 -0.36512,-4.299483 l -0.36511,-1.25677 h -3.03315 -3.03315 l 0.22326,1.38907 c 0.1228,0.76398 0.22327,2.63922 0.22327,4.167183 0,1.52797 -0.10047,3.40321 -0.22327,4.16719 l -0.22326,1.38906 h 3.03315 3.03315 z M 94.345136,92.009577 c 1.40079,-3.17422 4.10593,-6.6512 6.569154,-8.44346 1.19166,-0.86706 0.84372,-0.96209 -1.367474,-0.37346 -3.18248,0.84719 -6.87926,3.15195 -8.83122,5.50582 -1.13373,1.36716 -2.60716,3.70355 -2.60716,4.13412 0,0.20704 0.89903,0.30146 2.87024,0.30146 h 2.87023 z m 9.109144,-3.78302 v -4.9075 l -1.12839,0.77635 c -1.88197,1.29483 -4.751514,4.5327 -5.817124,6.5638 -0.5456,1.03993 -0.99199,2.02219 -0.99199,2.18282 0,0.20001 1.25056,0.29203 3.96875,0.29203 h 3.968754 z m 9.12047,3.91532 c -1.13224,-2.72914 -4.20629,-6.5233 -6.67308,-8.2363 l -0.85989,-0.59713 v 4.91281 4.9128 h 3.9723 3.9723 z m 7.81286,0.69072 c 0,-0.43057 -1.47343,-2.76696 -2.60715,-4.13412 -1.95196,-2.35387 -5.64875,-4.65863 -8.83123,-5.50582 -2.35147,-0.62597 -2.50194,-0.48608 -0.88973,0.82722 2.12575,1.73162 3.99467,4.14099 5.2672,6.79035 l 1.10778,2.30636 2.97657,0.009 c 2.05588,0.006 2.97656,-0.0845 2.97656,-0.29273 z"
|
|
127
|
+
id="path1"
|
|
128
|
+
sodipodi:nodetypes="cccccccccsssscssssssssscssssscsccscssssccssccssccccssscccsscccccsssssscssscssccccssccccsscccccccsssscccssscccssssssscsccssssccsscccccssssssccss"
|
|
129
|
+
inkscape:path-effect="#path-effect6"
|
|
130
|
+
inkscape:original-d="m 64.560526,100.27781 v -79.375 h 39.687504 39.6875 v 79.375 79.375 h -39.6875 -39.687504 z m 47.103984,29.96041 c 3.30617,-0.89658 6.16277,-2.11655 8.7251,-3.72622 6.98934,-4.39076 11.53086,-10.56792 13.83499,-18.8177 0.48271,-1.72835 0.5565,-2.71166 0.5565,-7.41649 0,-4.704823 -0.0738,-5.688133 -0.5565,-7.416483 -2.30413,-8.24978 -6.84565,-14.42695 -13.83499,-18.8177 -2.5689,-1.6138 -5.43589,-2.83688 -8.7251,-3.72217 -2.55776,-0.68843 -9.42862,-0.95176 -12.402534,-0.47534 -10.8555,1.73904 -20.28912,9.58188 -23.99411,19.94801 -1.2723,3.55973 -1.72805,6.32622 -1.72707,10.483683 9.6e-4,4.08141 0.44822,6.87117 1.64645,10.26947 1.03429,2.9334 1.66772,4.17255 3.62059,7.08285 4.34347,6.47292 11.22797,11.10147 19.09019,12.83461 3.158324,0.69621 10.829344,0.56999 13.766484,-0.22652 z m -11.914404,-1.57307 c -13.08222,-2.28643 -23.09848,-13.06889 -24.03518,-25.87379 -0.64646,-8.837263 2.21242,-16.696163 8.28145,-22.765193 6.04898,-6.04898 13.79151,-8.88345 22.632904,-8.28572 11.92033,0.8059 22.16853,9.45106 25.46177,21.479 0.51415,1.87781 0.59239,2.81007 0.59239,7.058363 0,4.2483 -0.0782,5.18056 -0.59239,7.05837 -2.99448,10.9368 -11.36764,18.84373 -22.34177,21.09776 -1.91619,0.39357 -8.23426,0.53966 -9.999174,0.23121 z m 1.164184,-11.67565 c -2.463224,-1.79225 -5.168364,-5.26924 -6.569154,-8.44346 l -0.49623,-1.12448 h -2.87023 c -1.97121,0 -2.87024,0.0944 -2.87024,0.30147 0,0.43057 1.47343,2.76695 2.60716,4.13412 2.35223,2.83656 7.61793,5.74857 10.595564,5.85951 0.56836,0.0212 0.52671,-0.0552 -0.39687,-0.72716 z m 8.03494,0.37347 c 3.18248,-0.84719 6.87927,-3.15195 8.83123,-5.50582 1.13372,-1.36717 2.60715,-3.70355 2.60715,-4.13412 0,-0.20822 -0.92068,-0.29876 -2.97656,-0.29273 l -2.97657,0.009 -1.10778,2.30636 c -1.27253,2.64936 -3.14145,5.05872 -5.2672,6.79035 -1.61221,1.3133 -1.46174,1.45319 0.88973,0.82722 z m -5.49495,-5.04661 v -4.8948 h -3.968754 c -2.71819,0 -3.96875,0.092 -3.96875,0.29204 0,0.80418 2.18452,4.28343 3.70416,5.89957 1.368124,1.45499 3.805444,3.55555 4.167194,3.59142 0.0364,0.004 0.0661,-2.1961 0.0661,-4.88823 z m 5.15937,1.855 c 1.80981,-1.83861 3.13335,-3.76242 3.9611,-5.75761 l 0.41163,-0.99219 h -3.9723 -3.9723 v 4.91281 4.91281 l 0.85989,-0.59713 c 0.47294,-0.32843 1.69334,-1.44384 2.71198,-2.47869 z m -15.337294,-8.80032 c -0.0992,-0.25466 -0.3097,-1.50481 -0.46779,-2.77812 -0.27657,-2.22771 -0.0302,-6.130013 0.46779,-7.408343 0.16538,-0.42455 -0.0719,-0.46302 -2.85627,-0.46302 h -3.03663 l -0.36511,1.25677 c -0.21641,0.74491 -0.36512,2.49603 -0.36512,4.299483 0,1.80346 0.14871,3.55458 0.36512,4.29948 l 0.36511,1.25677 h 3.03663 c 2.78435,0 3.02165,-0.0385 2.85627,-0.46302 z m 10.177924,-5.09323 v -5.556253 h -4.346874 -4.34687 l -0.32567,1.52136 c -0.41827,1.95392 -0.41827,6.115873 0,8.069793 l 0.32567,1.52135 h 4.34687 4.346874 z m 10.36219,4.43177 c 0.42701,-1.46197 0.42701,-7.401563 0,-8.863543 l -0.32842,-1.12448 h -4.22314 -4.22313 v 5.556253 5.55625 h 4.22313 4.22314 z m 7.66123,-0.13229 c 0.21641,-0.7449 0.36512,-2.49602 0.36512,-4.29948 0,-1.803453 -0.14871,-3.554573 -0.36512,-4.299483 l -0.36511,-1.25677 h -3.03315 -3.03315 l 0.22326,1.38907 c 0.1228,0.76398 0.22327,2.63922 0.22327,4.167183 0,1.52797 -0.10047,3.40321 -0.22327,4.16719 l -0.22326,1.38906 h 3.03315 3.03315 z M 94.345136,92.009577 c 1.40079,-3.17422 4.10593,-6.6512 6.569154,-8.44346 1.19166,-0.86706 0.84372,-0.96209 -1.367474,-0.37346 -3.18248,0.84719 -6.87926,3.15195 -8.83122,5.50582 -1.13373,1.36716 -2.60716,3.70355 -2.60716,4.13412 0,0.20704 0.89903,0.30146 2.87024,0.30146 h 2.87023 z m 9.109144,-3.78302 v -4.9075 l -1.12839,0.77635 c -1.88197,1.29483 -4.751514,4.5327 -5.817124,6.5638 -0.5456,1.03993 -0.99199,2.02219 -0.99199,2.18282 0,0.20001 1.25056,0.29203 3.96875,0.29203 h 3.968754 z m 9.12047,3.91532 c -1.13224,-2.72914 -4.20629,-6.5233 -6.67308,-8.2363 l -0.85989,-0.59713 v 4.91281 4.9128 h 3.9723 3.9723 z m 7.81286,0.69072 c 0,-0.43057 -1.47343,-2.76696 -2.60715,-4.13412 -1.95196,-2.35387 -5.64875,-4.65863 -8.83123,-5.50582 -2.35147,-0.62597 -2.50194,-0.48608 -0.88973,0.82722 2.12575,1.73162 3.99467,4.14099 5.2672,6.79035 l 1.10778,2.30636 2.97657,0.009 c 2.05588,0.006 2.97656,-0.0845 2.97656,-0.29273 z" /></g></svg>
|
package/media/index.html
CHANGED
|
@@ -34,8 +34,55 @@
|
|
|
34
34
|
<script src="janusweb.js"></script>
|
|
35
35
|
</head>
|
|
36
36
|
<body>
|
|
37
|
-
<janus-viewer src="
|
|
37
|
+
<janus-viewer src="./index.html"></janus-viewer> <!-- project this document in 3D -->
|
|
38
38
|
</body>
|
|
39
39
|
</html>
|
|
40
40
|
|
|
41
|
+
<!--
|
|
41
42
|
|
|
43
|
+
<fireboxroom>
|
|
44
|
+
<assets></assets>
|
|
45
|
+
<room use_local_asset="room_plane" fwd="0 0 1">
|
|
46
|
+
<object js_id="links" rotation="0 180 0">
|
|
47
|
+
|
|
48
|
+
<link js_id="1" pos="3 0 10" xdir="-0.866027 0 0.499998" ydir="0 1 0" zdir="-0.499998 0 -0.866027" url="https://www.reddit.com/r/vrsites" col="#ffffff" scale="1.5 3 1" draw_glow="false" >
|
|
49
|
+
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
|
50
|
+
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
|
51
|
+
</paragraph>
|
|
52
|
+
</link>
|
|
53
|
+
|
|
54
|
+
<link js_id="3" pos="5 0 8.5" xdir="-0.707109 0 0.707105" ydir="0 1 0" zdir="-0.707105 0 -0.707109" url="https://vesta.janusxr.org" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
|
55
|
+
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
|
56
|
+
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
|
57
|
+
</paragraph>
|
|
58
|
+
</link>
|
|
59
|
+
|
|
60
|
+
<link js_id="2" pos="-3 0 10" xdir="-0.866024 0 -0.500002" ydir="0 1 0" zdir="0.500002 0 -0.866024" url="workspaces" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
|
61
|
+
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
|
62
|
+
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
|
63
|
+
</paragraph>
|
|
64
|
+
</link>
|
|
65
|
+
|
|
66
|
+
<link js_id="4" pos="-5 0 8.5" xdir="-0.707106 0 -0.707108" ydir="0 1 0" zdir="0.707108 0 -0.707106" url="bookmarks" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
|
67
|
+
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
|
68
|
+
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
|
69
|
+
</paragraph>
|
|
70
|
+
</link>
|
|
71
|
+
|
|
72
|
+
<link js_id="0" pos="0 0 10.8" xdir="-1 0 -0.000002" ydir="0 1 0" zdir="0.000002 0 -1" url="https://www.janusxr.org/newlobby/index.html" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
|
73
|
+
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
|
74
|
+
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
|
75
|
+
</paragraph>
|
|
76
|
+
</link>
|
|
77
|
+
|
|
78
|
+
<link js_id="5" pos="-6.51 0 6.5" rotation="-180 65 -180" url="https://xrforge.isvery.ninja" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
|
79
|
+
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
|
80
|
+
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
|
81
|
+
</paragraph>
|
|
82
|
+
</link>
|
|
83
|
+
|
|
84
|
+
</object>
|
|
85
|
+
</room>
|
|
86
|
+
</fireboxroom>
|
|
87
|
+
|
|
88
|
+
-->
|
package/package.json
CHANGED
package/scripts/client.js
CHANGED
|
@@ -152,6 +152,30 @@ elation.require(['elements.elements', 'elements', 'engine.engine', 'engine.asset
|
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
});
|
|
155
|
+
this.initProxies()
|
|
156
|
+
}
|
|
157
|
+
initProxies() {
|
|
158
|
+
elation.engine.assets = new Proxy(elation.engine.assets,{
|
|
159
|
+
get(me,k){
|
|
160
|
+
if( k == "corsproxy" && me[k] ){
|
|
161
|
+
const p = elation.config.get("engine.assets.corsproxies")
|
|
162
|
+
if( ! p?.length ){
|
|
163
|
+
return me[k] // nothing to roundrobin
|
|
164
|
+
}else{ // roundrobin proxies
|
|
165
|
+
if( !p.index ) p.index = 0
|
|
166
|
+
const corsproxy = p[ p.index ]
|
|
167
|
+
elation.config.set("engine.assets.corsproxy", corsproxy )
|
|
168
|
+
p.index = (p.index + 1) % p.length
|
|
169
|
+
return corsproxy
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return me[k]
|
|
173
|
+
},
|
|
174
|
+
set(me,k,v){
|
|
175
|
+
me[k] = v
|
|
176
|
+
return true
|
|
177
|
+
}
|
|
178
|
+
})
|
|
155
179
|
}
|
|
156
180
|
initButtons() {
|
|
157
181
|
this.sharebutton = elation.ui.button({classname: 'janusweb_sharing', label: 'Share'});
|
package/scripts/config.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
elation.config.set('janusweb.network.host', 'wss://presence.janusxr.org:5567'); // Default presence server
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
proxies = [
|
|
4
|
+
'https://p.janusxr.org/',
|
|
5
|
+
'https://cors.xrforge.isvery.ninja/'
|
|
6
|
+
]
|
|
7
|
+
elation.config.set('engine.assets.corsproxy', proxies[0]); // CORS proxy URL
|
|
8
|
+
elation.config.set('engine.assets.corsproxies', [] ); // rotate **online** proxies only
|
|
9
|
+
proxies.map( (url) =>
|
|
10
|
+
fetch(url,{method:'HEAD'})
|
|
11
|
+
.then( (res) => res.ok && elation.config.get("engine.assets.corsproxies").push(url) )
|
|
12
|
+
)
|
|
13
|
+
|
|
3
14
|
elation.config.set('engine.assets.workers', 'auto'); // Number of workers to use for asset parsing
|
|
4
15
|
//elation.config.set('engine.assets.image.maxsize', 16384);
|
|
5
16
|
elation.config.set('engine.assets.image.anisotropy', 16);
|
package/scripts/janusbase.js
CHANGED
|
@@ -353,6 +353,7 @@ elation.require(['engine.things.generic', 'utils.template', 'janusweb.parts'], f
|
|
|
353
353
|
jsid: ['property', 'js_id'],
|
|
354
354
|
pos: ['property', 'position'],
|
|
355
355
|
rotation: ['property', 'rotation'],
|
|
356
|
+
angular: ['property', 'angular'],
|
|
356
357
|
scale: ['property', 'scale'],
|
|
357
358
|
//rotation_order: ['property', 'rotation_order'],
|
|
358
359
|
col: ['property', 'color'],
|