Skip to content

Commit b7781d9

Browse files
committed
Merge branch 'hotfix-5.0.4'
2 parents 6daac0e + 4d90da7 commit b7781d9

File tree

9 files changed

+90
-3
lines changed

9 files changed

+90
-3
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "xml3d.js",
33
"description": "XML3D implementation based on JS and WebGL",
44
"homepage": "http://ww.xml3d.org",
5-
"version": "5.0.3",
5+
"version": "5.0.4",
66
"repository": {
77
"type": "git",
88
"url": "https://github.com/xml3d/xml3d.js"

src/asset/asset.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ var SubData = function(xflowNodeOut, xflowNodeIn, refNode){
237237
this.material = null;
238238
this.transform = null;
239239
this.meshType = null;
240+
this.visible = true;
240241
this.assetParent = null;
241242
this.loading = false;
242243
this.loadLevel = 0;
@@ -343,6 +344,10 @@ SubData.prototype.setMeshType = function(meshType){
343344
invalidateParent(this);
344345
};
345346

347+
SubData.prototype.setVisibility = function(isVisible) {
348+
this.visible = isVisible;
349+
invalidateParent(this);
350+
};
346351
function invalidateParent(subData){
347352
if(subData.assetParent){
348353
invalidateAsset(subData.assetParent);
@@ -544,6 +549,7 @@ function rec_getDataTree(table){
544549
type: entry.meshType,
545550
material: entry.material,
546551
transform: entry.transform,
552+
visible: entry.visible,
547553
refNode: entry.refNode
548554
});
549555
}
@@ -649,6 +655,7 @@ function AssetTableEntry (subData){
649655
this.postQueue = [];
650656
this.material = null;
651657
this.transform = null;
658+
this.visible = true;
652659

653660
this.accumulatedXflowNode = null;
654661
this.outOfSync = true;
@@ -695,6 +702,7 @@ AssetTableEntry.prototype.pushTableEntry = function(srcEntry){
695702
this.name = srcEntry.name;
696703
Set.add(this.classNames, srcEntry.classNames);
697704
if(srcEntry.meshType) this.meshType = srcEntry.meshType;
705+
if(srcEntry.visible !== undefined) this.visible = srcEntry.visible;
698706

699707
if(srcEntry.transform) this.transform = combineTransform(this.transform, srcEntry.transform);
700708
if(srcEntry.material) this.material = srcEntry.material;
@@ -718,6 +726,7 @@ AssetTableEntry.prototype.pushPostEntry = function(subData){
718726
Set.add(this.classNames, subData.classNames);
719727
if(subData.meshType) this.meshType = subData.meshType;
720728
if(subData.material) this.material = subData.material;
729+
if(subData.visible !== undefined) this.visible = subData.visible;
721730
if(subData.transform) this.transform = combineTransform(this.transform, subData.transform);
722731
};
723732

src/data/adapter/asset.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ createClass(AssetMeshAdapter, AssetDataAdapter, {
271271
this.assetEntry.setMeshType(this.node.getAttribute("type") || "triangles");
272272
this.assetEntry.setMatchFilter(this.node.getAttribute("match"));
273273
this.transformFetcher.update();
274+
this.updateVisibility();
274275
},
275276

276277
attributeChangedCallback: function (name, oldValue, newValue) {
@@ -285,6 +286,7 @@ createClass(AssetMeshAdapter, AssetDataAdapter, {
285286
case "style":
286287
case "transform":
287288
this.transformFetcher.update();
289+
this.updateVisibility();
288290
break;
289291
case "type":
290292
this.assetEntry.setMeshType(newValue || "triangles")
@@ -293,6 +295,14 @@ createClass(AssetMeshAdapter, AssetDataAdapter, {
293295

294296
notifyChanged: function (evt) {
295297
AssetDataAdapter.prototype.notifyChanged.call(this, evt);
298+
},
299+
300+
updateVisibility: function () {
301+
if (!this.node.style) {
302+
this.node.style = window.getComputedStyle(this.node);
303+
}
304+
var none = this.node.style.display == "none";
305+
this.assetEntry && this.assetEntry.setVisibility(!none);
296306
}
297307
});
298308

src/renderer/renderer/adapter/model.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ function rec_createRenderNodes(adapter, parentNode, dataTreeNode) {
212212
data: meshSets[i].xflowNode, type: meshSets[i].type
213213
},
214214
name: adapter.node.id,
215-
visible: true
215+
visible: meshSets[i].visible
216216
});
217217
renderNode.setLocalMatrix(meshSets[i].transform || c_IDENTITY);
218218
renderNode.setMaterial(adapter.getMaterialConfiguration(meshSets[i].material, adapter._subRenderNodes.length));

src/renderer/renderer/scene/rendernode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var RenderNode = function (type, scene, pageEntry, opt) {
2323

2424
this.setParent(opt.parent || scene.rootNode);
2525

26-
this.localVisible = true;
26+
this.localVisible = opt.visible !== undefined ? opt.visible : true;
2727
// The global visibility depends on visibility of parents
2828
this.visible = true;
2929
this.evaluateVisibility();

tests/all.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,9 @@
6666
<div id="overall">
6767
<div id="qunit"></div>
6868
</div>
69+
70+
<div id="pointerPosElement" style="position:absolute; top: 25px; left: 30vw; color: white;">
71+
GLCoords:
72+
</div>
6973
</body>
7074
</html>

tests/asset-and-model.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,49 @@ test("Modify material assignment", 5, function () {
3838

3939
});
4040

41+
test("Modify visibility", function () {
42+
stop();
43+
var frameLoaded = Q.fcall(promiseIFrameLoaded, "scenes/asset-basic.html");
44+
45+
var test = frameLoaded.then(function (doc) {
46+
var xTest = doc.getElementById("xml3dTest");
47+
var mm1 = doc.getElementById("mm1");
48+
var override = doc.createElement("assetmesh");
49+
override.setAttribute("name", "mesh1");
50+
override.setAttribute("id", "mesh1Override");
51+
override.setAttribute("style", "display: none");
52+
mm1.appendChild(override);
53+
return xTest;
54+
}).then(promiseSceneRendered).then(function (s) {
55+
QUnit.closePixel(XML3DUnit.getPixelValue(getContextForXml3DElement(s), 248, 151), [0,0,0,0], PIXEL_EPSILON, "Assetmesh visibility was overridden");
56+
s.querySelector("#mesh1Override").setAttribute("style", "display: notnone");
57+
return s;
58+
}).then(promiseSceneRendered).then(function(s) {
59+
QUnit.closePixel(XML3DUnit.getPixelValue(getContextForXml3DElement(s), 248, 151), [255, 127, 127, 255], PIXEL_EPSILON, "Assetmesh responded to change in visibility");
60+
return s;
61+
});
62+
test.fin(QUnit.start).done();
63+
});
64+
65+
test("Modify CSS transform on assetmesh", function () {
66+
stop();
67+
var frameLoaded = Q.fcall(promiseIFrameLoaded, "scenes/asset-basic.html");
68+
69+
var test = frameLoaded.then(function (doc) {
70+
var xTest = doc.getElementById("xml3dTest");
71+
var mesh2 = doc.getElementById("outerSubData");
72+
mesh2.setAttribute("style", "transform: translateX(2px)");
73+
return xTest;
74+
}).then(promiseSceneRendered).then(function (s) {
75+
QUnit.closePixel(XML3DUnit.getPixelValue(getContextForXml3DElement(s), 192, 137), [0,255,0, 255], PIXEL_EPSILON, "Assetmesh transform was overridden");
76+
s.querySelector("#outerSubData").setAttribute("style", "");
77+
return s;
78+
}).then(promiseSceneRendered).then(function(s) {
79+
QUnit.closePixel(XML3DUnit.getPixelValue(getContextForXml3DElement(s), 130, 137), [0, 255, 0, 255], PIXEL_EPSILON, "Assetmesh returned to original position");
80+
return s;
81+
});
82+
test.fin(QUnit.start).done();
83+
});
4184

4285
test("Modify asset pick", 5, function () {
4386
stop();

tests/qunit/xml3d-config.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,25 @@ function promiseIFrameLoaded(url) {
257257
var f = function(e) {
258258
deferred.resolve(v.contentDocument);
259259
v.removeEventListener("load", f, true);
260+
var xml3ds = v.contentDocument.querySelectorAll("xml3d");
261+
for (var i=0; i<xml3ds.length; i++) {
262+
xml3ds[i].addEventListener("mousemove", displayMousePosition);
263+
}
260264
};
261265
// TODO: Loading failed
262266
v.addEventListener("load", f, true);
263267
v.src = url +window.location.search;
264268
return deferred.promise;
265269
};
266270

271+
function displayMousePosition(e) {
272+
console.log(e.clientX + ", " + e.clientY);
273+
var pointerPosElement = document.getElementById("pointerPosElement");
274+
if (pointerPosElement) {
275+
pointerPosElement.textContent = "GLCoords: "+ e.clientX+", "+ (this.height - e.clientY);
276+
}
277+
}
278+
267279
function promiseOneSceneCompleteAndRendered(xml3dElement) {
268280
if(xml3dElement.complete) {
269281
return Q(xml3dElement);

tests/scenes/asset-basic.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@
5252
</float4x4>
5353
</data>
5454

55+
<data id="t2">
56+
<float4x4 name="transform">
57+
1.5 0 0 0
58+
0 1.5 0 0
59+
0 0 1 0
60+
0 0 0 1
61+
</float4x4>
62+
</data>
63+
5564

5665
<asset id="asset1">
5766
<assetmesh name="mesh1" type="triangles" material="#redmaterial">

0 commit comments

Comments
 (0)