Skip to content

Commit

Permalink
Merge pull request #631 from Kitware/skybox-example
Browse files Browse the repository at this point in the history
Skybox example
  • Loading branch information
jourdain authored Mar 7, 2018
2 parents 8a6ff8d + 0dde7da commit 41b0da3
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 24 deletions.
25 changes: 2 additions & 23 deletions Examples/Applications/SkyboxViewer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
import 'vtk.js/Sources/favicon';

import vtkFullScreenRenderWindow from 'vtk.js/Sources/Rendering/Misc/FullScreenRenderWindow';
import vtkMapper from 'vtk.js/Sources/Rendering/Core/Mapper';
import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor';
import vtkCubeSource from 'vtk.js/Sources/Filters/Sources/CubeSource';
import vtkSkybox from 'vtk.js/Sources/Rendering/Core/Skybox';
import vtkSkyboxReader from 'vtk.js/Sources/IO/Misc/SkyboxReader';

import style from './SkyboxViewer.mcss';
Expand Down Expand Up @@ -41,21 +39,8 @@ function createVisualization(container, mapReader) {
});
const renderer = fullScreenRenderer.getRenderer();
const renderWindow = fullScreenRenderer.getRenderWindow();
const source = vtkCubeSource.newInstance({
generate3DTextureCoordinates: true,
});
const mapper = vtkMapper.newInstance();
const actor = vtkActor.newInstance();

// Hide the cube perception from the user
actor.getProperty().setAmbient(1);
actor.getProperty().setDiffuse(0);

// Add texture
const actor = vtkSkybox.newInstance();
actor.addTexture(mapReader.getOutputData());

actor.setMapper(mapper);
mapper.setInputData(source.getOutputData());
renderer.addActor(actor);
renderWindow.render();

Expand All @@ -73,12 +58,6 @@ function createVisualization(container, mapReader) {
actor.addTexture(mapReader.getOutputData());
renderWindow.render();
});
document.querySelector('.resetCamera').addEventListener('click', (e) => {
renderer.getActiveCamera().setPosition(0, 0, 0);
renderer.getActiveCamera().setViewUp(0, 0, 1);
renderer.getActiveCamera().setFocalPoint(1, 0, 0);
renderWindow.render();
});
}
}

Expand Down
5 changes: 4 additions & 1 deletion Sources/IO/Misc/SkyboxReader/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ function vtkSkyboxReader(publicAPI, model) {
model.positions = Object.keys(model.dataMapping);
model.position = model.positions[0];
});
return true;
return publicAPI.getReadyPromise();
};

publicAPI.requestData = (inData, outData) => {
Expand All @@ -135,6 +135,9 @@ function vtkSkyboxReader(publicAPI, model) {
});
});
};

// return Busy state
publicAPI.isBusy = () => model.busy;
}

// ----------------------------------------------------------------------------
Expand Down
67 changes: 67 additions & 0 deletions Sources/Proxy/Representations/SkyboxRepresentationProxy/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import macro from 'vtk.js/Sources/macro';
import vtkSkybox from 'vtk.js/Sources/Rendering/Core/Skybox';

import vtkAbstractRepresentationProxy from 'vtk.js/Sources/Proxy/Core/AbstractRepresentationProxy';

// ----------------------------------------------------------------------------
// vtkSkyboxRepresentationProxy methods
// ----------------------------------------------------------------------------

function vtkSkyboxRepresentationProxy(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkSkyboxRepresentationProxy');
model.actor = vtkSkybox.newInstance();
model.actors.push(model.actor);

function updateTexture(texture) {
model.actor.removeAllTextures();
model.actor.addTexture(texture);

// Update domain
const values = model.input.getAlgo().getPositions();
publicAPI.updateProxyProperty('position', { values });
}

model.sourceDependencies.push({ setInputData: updateTexture });

// API ----------------------------------------------------------------------

publicAPI.setColorBy = () => {};
publicAPI.getColorBy = () => [];
publicAPI.listDataArrays = () => [];

publicAPI.setPosition = (value) => {
model.input.getAlgo().setPosition(value);
};

publicAPI.getPosition = () => model.input.getAlgo().getPosition();
}

// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------

const DEFAULT_VALUES = {};

// ----------------------------------------------------------------------------

export function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);

// Object methods
vtkAbstractRepresentationProxy.extend(publicAPI, model);

// Object specific methods
vtkSkyboxRepresentationProxy(publicAPI, model);
}

// ----------------------------------------------------------------------------

export const newInstance = macro.newInstance(
extend,
'vtkSkyboxRepresentationProxy'
);

// ----------------------------------------------------------------------------

export default { newInstance, extend };
3 changes: 3 additions & 0 deletions Sources/macro.js
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,9 @@ export function obj(publicAPI = {}, model = {}) {

publicAPI.modified();
};

// Allow usage as decorator
return publicAPI;
}

// ----------------------------------------------------------------------------
Expand Down

0 comments on commit 41b0da3

Please sign in to comment.