All files / Sources/Widgets/Representations/CircleContextRepresentation index.js

82.35% Statements 14/17
88.88% Branches 8/9
50% Functions 3/6
82.35% Lines 14/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99                        1x           1x 1x 1x             1x             1x           1x           1x                   1x                                               1x 1x 1x     1x         1x                
import macro from 'vtk.js/Sources/macros';
import vtkCircleSource from 'vtk.js/Sources/Filters/Sources/CircleSource';
import vtkGlyphRepresentation from 'vtk.js/Sources/Widgets/Representations/GlyphRepresentation';
import { Behavior } from 'vtk.js/Sources/Widgets/Representations/WidgetRepresentation/Constants';
import { Resolve } from 'vtk.js/Sources/Rendering/Core/Mapper/CoincidentTopologyHelper';
 
// ----------------------------------------------------------------------------
// vtkCircleContextRepresentation methods
// ----------------------------------------------------------------------------
 
function vtkCircleContextRepresentation(publicAPI, model) {
  // Set our className
  model.classHierarchy.push('vtkCircleContextRepresentation');
 
  // --------------------------------------------------------------------------
  // Generic rendering pipeline
  // --------------------------------------------------------------------------
 
  model._pipeline.actor.getProperty().setOpacity(0.2);
  model._pipeline.mapper.setResolveCoincidentTopology(Resolve.PolygonOffset);
  model._pipeline.mapper.setRelativeCoincidentTopologyPolygonOffsetParameters(
    -1,
    -1
  );
 
  // --------------------------------------------------------------------------
 
  publicAPI.setGlyphResolution = macro.chain(
    publicAPI.setGlyphResolution,
    model._pipeline.glyph.setResolution
  );
 
  // --------------------------------------------------------------------------
 
  publicAPI.setDrawBorder = macro.chain(publicAPI.setDrawBorder, (draw) =>
    model._pipeline.glyph.setLines(draw)
  );
 
  // --------------------------------------------------------------------------
 
  publicAPI.setDrawFace = macro.chain(publicAPI.setDrawFace, (draw) =>
    model._pipeline.glyph.setFace(draw)
  );
 
  // --------------------------------------------------------------------------
 
  publicAPI.setOpacity = (opacity) => {
    model._pipeline.actor.getProperty().setOpacity(opacity);
  };
}
 
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
 
function defaultValues(initialValues) {
  return {
    behavior: Behavior.CONTEXT,
    glyphResolution: 32,
    drawBorder: false,
    drawFace: true,
    ...initialValues,
    _pipeline: {
      glyph:
        initialValues?.pipeline?.glyph ??
        vtkCircleSource.newInstance({
          resolution: initialValues.glyphResolution ?? 32,
          radius: 1,
          lines: initialValues.drawBorder ?? false,
          face: initialValues.drawFace ?? true,
          direction: [0, 0, 1],
        }),
      ...initialValues?.pipeline,
    },
  };
}
 
// ----------------------------------------------------------------------------
 
export function extend(publicAPI, model, initialValues = {}) {
  vtkGlyphRepresentation.extend(publicAPI, model, defaultValues(initialValues));
  macro.setGet(publicAPI, model, ['glyphResolution', 'drawFace', 'drawBorder']);
  macro.get(publicAPI, model._pipeline, ['glyph', 'mapper', 'actor']);
 
  // Object specific methods
  vtkCircleContextRepresentation(publicAPI, model);
}
 
// ----------------------------------------------------------------------------
 
export const newInstance = macro.newInstance(
  extend,
  'vtkCircleContextRepresentation'
);
 
// ----------------------------------------------------------------------------
 
export default { newInstance, extend };