[Bug] vtkPlanes: a change to the plane points or normals does not update the clip filters

Abierto Apto para principiantes
#3,743 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
javascript
Área
backend, testing

Línea de trabajo

Empieza en Sources/Common/DataModel/Planes/index.js:290, donde se exponen los puntos y las normales, e inspecciona cómo informa vtkPlanes de su tiempo de modificación. La reproducción del issue muestra la salida obsoleta a través de vtkClipPolyData; ejecútala después de actualizar el comportamiento de MTime y confirma que xmin after es 0.5. Comprueba también el mismo comportamiento en vtkCutter, que, según el issue, depende del MTime de la función implícita.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

type: bug 🐞
Bug description

Sources/Common/DataModel/Planes/index.js:290 gives access to points and
normals through macro.setGet. vtkPlanes does not override getMTime.
If you move a plane with a change to these arrays and call their
modified(), the vtkPlanes MTime does not change. vtkClipPolyData and
vtkCutter use only the MTime of the implicit function, so they keep their
old output.

Steps to reproduce
  1. Run this code:
import vtkPoints from '@kitware/vtk.js/Common/Core/Points';
import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray';
import vtkPlanes from '@kitware/vtk.js/Common/DataModel/Planes';
import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData';
import vtkClipPolyData from '@kitware/vtk.js/Filters/Core/ClipPolyData';

const points = vtkPoints.newInstance();
points.setData(new Float32Array([0, 0, 0]), 3);
const normals = vtkDataArray.newInstance({
  numberOfComponents: 3,
  values: new Float32Array([1, 0, 0]),
});
const planes = vtkPlanes.newInstance();
planes.setPoints(points);
planes.setNormals(normals);

const quad = vtkPolyData.newInstance();
quad.getPoints().setData(
  new Float32Array([-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0]),
  3
);
quad.getPolys().setData(new Uint32Array([4, 0, 1, 2, 3]));

const clip = vtkClipPolyData.newInstance({ clipFunction: planes });
clip.setInputData(quad);
console.log('xmin before', clip.getOutputData().getBounds()[0]);

// Move the plane from x = 0 to x = 0.5.
points.setPoint(0, 0.5, 0, 0);
points.modified();

console.log('xmin after', clip.getOutputData().getBounds()[0]);
Detailed Behavior

The output is:

xmin before 0
xmin after 0

A new filter with the plane at x = 0.5 gives xmin 0.5. The old filter does
not execute again.

Expected Behavior

vtkPlanes.getMTime() includes the MTime of the points and the normals. The
filter executes again and xmin after is 0.5.

Environment
  • vtk.js version: master (67328bc3ef)
  • Browsers: Chromium (Playwright, Vitest 5 browser mode)
  • OS: Windows 11
Lenguaje dominante
JavaScript
Estrellas
1.5k
Forks
428
Merge medio
5 d 9 h
PR fusionados (30 d)
22

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Kitware/vtk-js

Todos los issues de Kitware/vtk-js

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.