[vtkusers] collision detection with vtk?
-Daniel-
ich_daniel at habmalnefrage.de
Sun Aug 25 06:00:10 EDT 2013
Unfortunately are some methods not available in Java.
The vtkCellLocator provides only / FindCell(double[]) / and /
FindCellsAlongLine(double[], double[], double, vtkIdList) / .
Now I use following code:
///..
vtkActor movedActor;
vtkPolyData movedPolydata;
vtkTransform transform = new vtkTransform();
transform.SetMatrix(movedActor.GetMatrix());
vtkTransformPolyDataFilter transformPolyData = new
vtkTransformPolyDataFilter();
transformPolyData.SetInputData(movedPolydata);
transformPolyData.SetTransform(transform);
transformPolyData.Update();
vtkActor actor = constantActors;
actor.SetPosition(centeredPosition);
vtkSelectEnclosedPoints selectEnclosedPoints = new
vtkSelectEnclosedPoints();
selectEnclosedPoints.SetInputConnection(transformPolyData.GetOutputPort());
selectEnclosedPoints.SetSurfaceData(actorToPolyData(actor));
selectEnclosedPoints.Update();
vtkDataArray insideArray = (vtkDataArray) selectEnclosedPoints
.GetOutput().GetPointData().GetArray("SelectedPoints");
for (int i = 0; i < insideArray.GetNumberOfTuples(); i++) {
if (insideArray.GetComponent(i, 0) == 1) {
// Collision!
..
break;
}
}
..
//by moving the movedActor then
transform.SetMatrix(movedActor.GetMatrix());
selectEnclosedPoints.Update();
vtkDataArray insideArray = (vtkDataArray) selectEnclosedPoints
.GetOutput().GetPointData().GetArray("SelectedPoints");
for (int i = 0; i < insideArray.GetNumberOfTuples(); i++) {
if (insideArray.GetComponent(i, 0) == 1) {
// Collision!
..
break;
}
} /
It is a little bit faster than before, but isn't ever correct.
--
View this message in context: http://vtk.1045678.n5.nabble.com/collision-detection-with-vtk-tp5722845p5723016.html
Sent from the VTK - Users mailing list archive at Nabble.com.
More information about the vtkusers
mailing list