Created
February 8, 2020 18:17
-
-
Save lydonchandra/ea812ec87af9d313ea6869c27e993c93 to your computer and use it in GitHub Desktop.
triangleIntersection.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var VisMan = Symbol.for("VisMan") | |
var cesiumViewer = () => { | |
return window[VisMan].cesiumViewer | |
} | |
var initCesiumViewer = () => { | |
if(window.viewer && window.viewer.state && window.viewer.state.viewer) { | |
window[VisMan].cesiumViewer = window.viewer.state.viewer | |
} else { | |
window[VisMan].cesiumViewer = findReactCesiumViewer("cesiumContainer-0") | |
} | |
return window[VisMan].cesiumViewer | |
} | |
var findReactCesiumViewer = (cesiumId) => { | |
let cesiumViewer = null | |
const el = document.getElementById(cesiumId) | |
for (let key in el) { | |
if (key.startsWith('__reactInternalInstance$')) { | |
const fiberNode = el[key]; | |
if (fiberNode && fiberNode.return && fiberNode.return.memoizedState.next.memoizedState) { | |
cesiumViewer = fiberNode.return.memoizedState.next.memoizedState | |
} | |
break | |
} | |
} | |
return cesiumViewer | |
} | |
var Cartesian3 = Cesium.Cartesian3 | |
var Matrix4 = Cesium.Matrix4 | |
var removeGeometryInstances = () => { | |
let primitives = cesiumViewer().scene.primitives | |
for( let idx=primitives.length-1; idx >= 0 ; idx-- ) { | |
let primitive = cesiumViewer().scene.primitives.get( idx ) | |
if( Object.keys(primitive).indexOf('geometryInstances') >= 0) { | |
cesiumViewer().scene.primitives.remove(primitive) | |
} | |
} | |
cesiumViewer().scene.requestRender() | |
} | |
var addTriangles = (positions) => { | |
var geometry = new Cesium.Geometry({ | |
attributes: { | |
position: new Cesium.GeometryAttribute({ | |
componentDatatype: Cesium.ComponentDatatype.DOUBLE, // not FLOAT | |
componentsPerAttribute: 3, | |
values: positions | |
}), | |
// normal: new Cesium.GeometryAttribute({ | |
// componentDatatype: Cesium.ComponentDatatype.FLOAT, | |
// componentsPerAttribute: 3, | |
// values: normals | |
// }) | |
}, | |
// Don't need the following line if no vertices are shared. | |
//indices: new Uint32Array([0, 1, 2, 3, 4, 5]), | |
primitiveType: Cesium.PrimitiveType.TRIANGLES, | |
boundingSphere: Cesium.BoundingSphere.fromVertices(positions) | |
}); | |
var triangleInstance = new Cesium.GeometryInstance({ | |
geometry: geometry, | |
attributes: { | |
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED) | |
}, | |
show: new Cesium.ShowGeometryInstanceAttribute(true) | |
}); | |
cesiumViewer().scene.primitives.add(new Cesium.Primitive({ | |
geometryInstances: [triangleInstance], | |
asynchronous: false, | |
appearance: new Cesium.PerInstanceColorAppearance({ | |
closed: true, | |
translucent: false | |
}) | |
})); | |
cesiumViewer().scene.requestRender() | |
} | |
var transformPoints = (points, transformMat4) => { | |
let out = new Float64Array( points.length ) | |
for( let idx=0; idx<points.length; idx+=3 ) { | |
let x = points[idx] | |
let y = points[idx+1] | |
let z = points[idx+2] | |
let cart3 = new Cartesian3(x, y, z) | |
let transformed = Matrix4.multiplyByPoint( transformMat4, cart3, new Cartesian3 ) | |
out[idx] = transformed.x | |
out[idx+1] = transformed.y | |
out[idx+2] = transformed.z | |
} | |
return out | |
} | |
initCesiumViewer() | |
removeGeometryInstances() | |
cesiumViewer().scene.requestRender() | |
var transformMat4 = cesiumViewer().scene._primitives._primitives[2].root.transform | |
var triPoints_modelSpace = [ | |
0,10,20, 60,60,60, 10,10,60, | |
0,0,20, 60,-60,60, 10,-10,60 ] | |
var transformed = transformPoints( triPoints_modelSpace, transformMat4 ) | |
console.log(transformed) | |
addTriangles(transformed) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment