Skip to content

Commit

Permalink
Merge pull request #351 from K3D-tools/devel
Browse files Browse the repository at this point in the history
v2.14.0
  • Loading branch information
artur-trzesiok authored May 24, 2022
2 parents 64e9f3a + bad3187 commit 6fd6ab1
Show file tree
Hide file tree
Showing 26 changed files with 100 additions and 92 deletions.
2 changes: 1 addition & 1 deletion js/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "k3d",
"version": "2.13.1",
"version": "2.14.0",
"description": "3D visualization library",
"author": "k3d team",
"main": "src/index.js",
Expand Down
13 changes: 13 additions & 0 deletions js/src/core/lib/helpers/math.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,17 @@ module.exports = {
fmod(a, b) {
return Number((a - (Math.floor(a / b) * b)).toPrecision(8));
},
decodeFloat16(binary) {
var exponent = (binary & 0x7C00) >> 10,
fraction = binary & 0x03FF;
return (binary >> 15 ? -1 : 1) * (
exponent ?
(
exponent === 0x1F ?
fraction ? NaN : Infinity :
Math.pow(2, exponent - 15) * (1 + fraction / 0x400)
) :
6.103515625e-5 * (fraction / 0x400)
);
}
};
2 changes: 1 addition & 1 deletion js/src/core/lib/objectsGUIprovider.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ function update(K3D, json, GUI, changes) {
break;
case 'mesh_detail':
if (json.shader === 'mesh') {
addController(K3D.gui_map[json.id], json, param, 0, 8, 1).name('meshDetail').onChange(
addController(K3D.gui_map[json.id], json, param, 0, 12, 1).name('meshDetail').onChange(
changeParameter.bind(this, K3D, json, param),
);
}
Expand Down
37 changes: 17 additions & 20 deletions js/src/k3d.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const TFEdit = require('./transferFunctionEditor');
const serialize = require('./core/lib/helpers/serialize');
const ThreeJsProvider = require('./providers/threejs/provider');
const CreateK3DAndLoadBinarySnapshot = require('./standalone').CreateK3DAndLoadBinarySnapshot;
const { viewModes } = require('./core/lib/viewMode');

const semverRange = require('./version').version;

Expand Down Expand Up @@ -389,30 +390,26 @@ const PlotView = widgets.DOMWidgetView.extend({
});

this.objectHoverCallback = this.K3DInstance.on(this.K3DInstance.events.OBJECT_HOVERED, (param) => {
if (objectsList[param.object.K3DIdentifier]) {
objectsList[param.object.K3DIdentifier].send({
msg_type: 'hover_callback',
position: param.point.toArray(),
normal: param.face.normal.toArray(),
distance: param.distance,
face_index: param.faceIndex,
face: [param.face.a, param.face.b, param.face.c],
uv: param.uv,
});
if (objectsList[param.K3DIdentifier] &&
this.K3DInstance.parameters.viewMode === viewModes.callback) {

objectsList[param.K3DIdentifier].send(
_.extend({
msg_type: 'hover_callback'
}, param)
);
}
});

this.objectClickCallback = this.K3DInstance.on(this.K3DInstance.events.OBJECT_CLICKED, (param) => {
if (objectsList[param.object.K3DIdentifier]) {
objectsList[param.object.K3DIdentifier].send({
msg_type: 'click_callback',
position: param.point.toArray(),
normal: param.face.normal.toArray(),
distance: param.distance,
face_index: param.faceIndex,
face: [param.face.a, param.face.b, param.face.c],
uv: param.uv,
});
if (objectsList[param.K3DIdentifier] &&
this.K3DInstance.parameters.viewMode === viewModes.callback) {

objectsList[param.K3DIdentifier].send(
_.extend({
msg_type: 'click_callback'
}, param)
);
}
});
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
const threeMeshBVH = require('three-mesh-bvh');
const intersectCallback = require('../interactions/intersectCallback');
// THREE = require('three'),
// viewModes = require('./../../../core/lib/viewMode').viewModes;
const StandardInteractions = require('../interactions/StandardCallback');

module.exports = {
init(config, object, K3D) {
init(config, object, K3D, InteractionsCallback) {
object.startInteraction = function () {
if (!object.interactions) {
object.geometry.boundsTree = new threeMeshBVH.MeshBVH(object.geometry);
object.interactions = intersectCallback(object, K3D);

if (InteractionsCallback) {
object.interactions = InteractionsCallback(object, K3D);
} else {
object.interactions = StandardInteractions(object, K3D);
}
}
};

Expand All @@ -19,11 +22,11 @@ module.exports = {
}
};

// if (config.click_callback || config.hover_callback || K3D.parameters.viewMode === viewModes.manipulate) {
if (config.click_callback || config.hover_callback) {
object.startInteraction();
}

// THREE = require('three');
// object.startInteraction();
//
// var o = new THREE.Group(),
Expand Down
4 changes: 4 additions & 0 deletions js/src/providers/threejs/initializers/Scene.js
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,10 @@ function raycast(K3D, x, y, camera, click, viewMode) {

this.K3DObjects.traverse((object) => {
if (object.interactions) {
if (object.geometry && object.geometry.attributes.position.count === 0) {
return;
}

meshes.push(object);
}
});
Expand Down
29 changes: 29 additions & 0 deletions js/src/providers/threejs/interactions/StandardCallback.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* Interactions handlers for standard object
* @memberof K3D.Providers.ThreeJS.Interactions
*/

function prepareParam(param) {
return {
position: param.point.toArray(),
normal: param.face.normal.toArray(),
distance: param.distance,
face_index: param.faceIndex,
face: [param.face.a, param.face.b, param.face.c],
uv: param.uv,
K3DIdentifier: param.object.K3DIdentifier
};
}

module.exports = function (object, K3D) {
return {
onHover(intersect) {
K3D.dispatch(K3D.events.OBJECT_HOVERED, prepareParam(intersect));
return false;
},
onClick(intersect) {
K3D.dispatch(K3D.events.OBJECT_CLICKED, prepareParam(intersect));
return false;
},
};
};
1 change: 0 additions & 1 deletion js/src/providers/threejs/interactions/Voxels.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ const THREE = require('three');
const { viewModes } = require('../../../core/lib/viewMode');
/**
* Interactions handlers for Voxels object
* @method Voxels
* @memberof K3D.Providers.ThreeJS.Interactions
*/
module.exports = function (object, mesh, rollOverMesh, K3D) {
Expand Down
39 changes: 0 additions & 39 deletions js/src/providers/threejs/interactions/intersectCallback.js

This file was deleted.

6 changes: 3 additions & 3 deletions js/src/providers/threejs/objects/MarchingCubes.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const THREE = require('three');
const BufferGeometryUtils = require('three/examples/jsm/utils/BufferGeometryUtils');
const intersectHelper = require('../helpers/Intersection');
const interactionsHelper = require('../helpers/Interactions');
const marchingCubesPolygonise = require('../../../core/lib/helpers/marchingCubesPolygonise');
const yieldingLoop = require('../../../core/lib/helpers/yieldingLoop');
const { areAllChangesResolve } = require('../helpers/Fn');
Expand Down Expand Up @@ -129,7 +129,7 @@ module.exports = {
object = new THREE.Mesh(geometry, material);
object.scale.set(1.0 / sizeX, 1.0 / sizeY, 1.0 / sizeZ);

intersectHelper.init(config, object, K3D);
interactionsHelper.init(config, object, K3D);

modelMatrix.set.apply(modelMatrix, config.model_matrix.data);

Expand All @@ -148,7 +148,7 @@ module.exports = {
update(config, changes, obj) {
const resolvedChanges = {};

intersectHelper.update(config, changes, resolvedChanges, obj);
interactionsHelper.update(config, changes, resolvedChanges, obj);

if (typeof (changes.opacity) !== 'undefined' && !changes.opacity.timeSeries) {
obj.material.opacity = changes.opacity;
Expand Down
7 changes: 3 additions & 4 deletions js/src/providers/threejs/objects/MeshStandard.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const THREE = require('three');
const intersectHelper = require('../helpers/Intersection');
const interactionsHelper = require('../helpers/Interactions');
const colorMapHelper = require('../../../core/lib/helpers/colorMap');
const { handleColorMap } = require('../helpers/Fn');
const { areAllChangesResolve } = require('../helpers/Fn');
Expand Down Expand Up @@ -68,8 +68,7 @@ module.exports = {

object = new THREE.Mesh(geometry, material);


intersectHelper.init(config, object, K3D);
interactionsHelper.init(config, object, K3D);

object.applyMatrix4(modelMatrix);
object.updateMatrixWorld();
Expand Down Expand Up @@ -198,7 +197,7 @@ module.exports = {
resolvedChanges.opacity = null;
}

intersectHelper.update(config, changes, resolvedChanges, obj);
interactionsHelper.update(config, changes, resolvedChanges, obj);

commonUpdate(config, changes, resolvedChanges, obj);

Expand Down
6 changes: 3 additions & 3 deletions js/src/providers/threejs/objects/MeshVolume.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const THREE = require('three');
const intersectHelper = require('../helpers/Intersection');
const interactionsHelper = require('../helpers/Interactions');
const colorMapHelper = require('../../../core/lib/helpers/colorMap');
const { typedArrayToThree } = require('../helpers/Fn');
const { areAllChangesResolve } = require('../helpers/Fn');
Expand Down Expand Up @@ -96,7 +96,7 @@ module.exports = {

const object = new THREE.Mesh(geometry, material);

intersectHelper.init(config, object, K3D);
interactionsHelper.init(config, object, K3D);

modelMatrix.set.apply(modelMatrix, config.model_matrix.data);
object.applyMatrix4(modelMatrix);
Expand All @@ -109,7 +109,7 @@ module.exports = {
update(config, changes, obj) {
const resolvedChanges = {};

intersectHelper.update(config, changes, resolvedChanges, obj);
interactionsHelper.update(config, changes, resolvedChanges, obj);

if (typeof (changes.volume) !== 'undefined' && !changes.volume.timeSeries) {
if (obj.material.uniforms.volumeTexture.value.image.data.constructor === changes.volume.data.constructor
Expand Down
6 changes: 3 additions & 3 deletions js/src/providers/threejs/objects/Surface.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const THREE = require('three');
const intersectHelper = require('../helpers/Intersection');
const interactionsHelper = require('../helpers/Interactions');
const { handleColorMap } = require('../helpers/Fn');
const { areAllChangesResolve } = require('../helpers/Fn');
const { commonUpdate } = require('../helpers/Fn');
Expand Down Expand Up @@ -79,7 +79,7 @@ module.exports = {

const object = new THREE.Mesh(geometry, material);

intersectHelper.init(config, object, K3D);
interactionsHelper.init(config, object, K3D);

modelMatrix.set.apply(modelMatrix, config.model_matrix.data);

Expand All @@ -97,7 +97,7 @@ module.exports = {
update(config, changes, obj) {
const resolvedChanges = {};

intersectHelper.update(config, changes, resolvedChanges, obj);
interactionsHelper.update(config, changes, resolvedChanges, obj);
commonUpdate(config, changes, resolvedChanges, obj);

if (areAllChangesResolve(changes, resolvedChanges)) {
Expand Down
6 changes: 3 additions & 3 deletions js/src/providers/threejs/objects/TextureData.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const THREE = require('three');
const intersectHelper = require('../helpers/Intersection');
const interactionsHelper = require('../helpers/Interactions');
const colorMapHelper = require('../../../core/lib/helpers/colorMap');
const { areAllChangesResolve } = require('../helpers/Fn');
const { commonUpdate } = require('../helpers/Fn');
Expand Down Expand Up @@ -90,7 +90,7 @@ module.exports = {

const object = new THREE.Mesh(geometry, material);

intersectHelper.init(config, object, K3D);
interactionsHelper.init(config, object, K3D);

modelMatrix.set.apply(modelMatrix, config.model_matrix.data);
object.applyMatrix4(modelMatrix);
Expand All @@ -110,7 +110,7 @@ module.exports = {
update(config, changes, obj) {
const resolvedChanges = {};

intersectHelper.update(config, changes, resolvedChanges, obj);
interactionsHelper.update(config, changes, resolvedChanges, obj);

if (typeof (changes.color_range) !== 'undefined' && !changes.color_range.timeSeries) {
obj.material.uniforms.low.value = changes.color_range[0];
Expand Down
6 changes: 3 additions & 3 deletions js/src/providers/threejs/objects/TextureImage.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const THREE = require('three');
const intersectHelper = require('../helpers/Intersection');
const interactionsHelper = require('../helpers/Interactions');
const { areAllChangesResolve } = require('../helpers/Fn');
const { commonUpdate } = require('../helpers/Fn');
const buffer = require('../../../core/lib/helpers/buffer');
Expand Down Expand Up @@ -48,7 +48,7 @@ module.exports = {
material = new THREE.MeshBasicMaterial({ color: 0xffffff, side: THREE.DoubleSide, map: texture });
object = new THREE.Mesh(geometry, material);

intersectHelper.init(config, object, K3D);
interactionsHelper.init(config, object, K3D);

modelMatrix.set.apply(modelMatrix, config.model_matrix.data);
object.applyMatrix4(modelMatrix);
Expand Down Expand Up @@ -76,7 +76,7 @@ module.exports = {
update(config, changes, obj) {
const resolvedChanges = {};

intersectHelper.update(config, changes, resolvedChanges, obj);
interactionsHelper.update(config, changes, resolvedChanges, obj);
commonUpdate(config, changes, resolvedChanges, obj);

if (areAllChangesResolve(changes, resolvedChanges)) {
Expand Down
7 changes: 5 additions & 2 deletions js/src/providers/threejs/objects/shaders/Points.vertex.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,13 @@ void main() {

mvPosition = modelViewMatrix * vec4(position, 1.0);

float fov = 2.0 * atan(1.0 / projectionMatrix[1][1]) * 180.0 / PI;
float fovCorrection = tan((PI / 180.0) * fov / 2.0);

#if (USE_PER_POINT_SIZE == 1)
gl_PointSize = 2.0 * sizes * (scale / - mvPosition.z);
gl_PointSize = sizes * (scale / - mvPosition.z) / fovCorrection;
#else
gl_PointSize = 2.0 * size * (scale / - mvPosition.z);
gl_PointSize = size * (scale / - mvPosition.z) / fovCorrection;
#endif

gl_Position = projectionMatrix * mvPosition;
Expand Down
2 changes: 1 addition & 1 deletion js/src/providers/threejs/provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ module.exports = {
*/
Interactions: {
Voxels: require('./interactions/Voxels'),
intersectCallback: require('./interactions/intersectCallback'),
StandardCallback: require('./interactions/StandardCallback'),
},

THREE,
Expand Down
Loading

0 comments on commit 6fd6ab1

Please sign in to comment.