[vtkusers] Three cutting planes?

Carlos Martinez Burgos cmarbur at iti.upv.es
Fri Mar 9 04:10:44 EST 2001


Hi all.

I am trying to apply three cutting planes to an object (see the atachment
file). I pass the object to a ClipPolyData filter an to a Cutter
filter like in the capCow.tcl example. Then I append the results and take
it's output like an object, to cut it whith the second plane. The same is
done with the third.

I think I got the wrong way but I don't know how to do it easily. I have
tried whith vtkImplicitBoolean and with vtkPlanes, but I get wrong
results.

Please, could somebody take a look to my program and tell me how? (It is
written in Java, but the pipeline is the same)

How can I apply the same three cutting planes to more than one object?

Thanks in advance. I have a big problem and I don't have much knowledge 
of VTK.

Greetings.

-- 
----------------------------------------------------------------------
Carlos Martínez Burgos      |     Instituto Tecnológico de Informática
Ingeniero Informático       |      Universidad Politécnica de Valencia
Tlf: +34 963877237          |                        Camí de Vera, S/N
cmarbur at iti.upv.es          |                   46071 Valencia - Spain
www.iti.upv.es/~cmarbur     |                           www.iti.upv.es
----------------------------------------------------------------------
-------------- next part --------------
import vtk.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Prueba extends JPanel implements KeyListener {
    vtkPanel panelVTK;
    vtkRenderer renderer;
    double corteX,corteY,corteZ;
    vtkPlane planoX,planoY,planoZ;

    vtkClipPolyData clipperX,clipperY,clipperZ;
    vtkCutter cutterX,cutterY,cutterZ;
    vtkFeatureEdges edgesX,edgesY,edgesZ;
    vtkCleanPolyData cleanX,cleanY,cleanZ;
    vtkTriangleFilter triangles;
    vtkStripper stripperX,stripperY,stripperZ;
    vtkPolyData cuttedPolyX,cuttedPolyY,cuttedPolyZ;
    vtkAppendPolyData appendX,appendY,appendZ;
    vtkPolyDataMapper mapper;
    vtkActor actor;

    public Prueba() {
	panelVTK=new vtkPanel();
	panelVTK.setSize(500,500);
	panelVTK.addKeyListener(this);
	add(panelVTK);

	renderer=panelVTK.getRenderer();
	renderer.TwoSidedLightingOn();
	renderer.SetBackground(1,1,1);

	corteX=0;
	planoX=new vtkPlane();
	planoX.SetOrigin(corteX,0,0);
	planoX.SetNormal(1,0,0);

	corteY=0;
	planoY=new vtkPlane();
	planoY.SetOrigin(0,corteY,0);
	planoY.SetNormal(0,1,0);

	corteZ=0;
	planoZ=new vtkPlane();
	planoZ.SetOrigin(0,0,corteZ);
	planoZ.SetNormal(0,0,1);

	vtkSphereSource esfera=new vtkSphereSource();
	esfera.SetCenter(0,0,0);
	esfera.SetRadius(100);
	esfera.SetPhiResolution(20);
	esfera.SetThetaResolution(20);

	clipperX=new vtkClipPolyData();
	clipperX.SetInput(esfera.GetOutput());
	clipperX.SetClipFunction(planoX);
	clipperX.GenerateClipScalarsOff();
	clipperX.GenerateClippedOutputOff();
	clipperX.SetValue(0);

	cutterX=new vtkCutter();
	cutterX.SetInput(esfera.GetOutput());
	cutterX.SetCutFunction(planoX);
	cutterX.GenerateCutScalarsOn();
	cutterX.SetValue(0,0);

	stripperX=new vtkStripper();
	stripperX.SetInput(cutterX.GetOutput());
	stripperX.Update();

	cuttedPolyX=new vtkPolyData();
	cuttedPolyX.SetPoints(stripperX.GetOutput().GetPoints());
	cuttedPolyX.SetPolys(stripperX.GetOutput().GetLines());

	appendX=new vtkAppendPolyData();
	appendX.AddInput(clipperX.GetOutput());
	appendX.AddInput(cuttedPolyX);


	clipperY=new vtkClipPolyData();
	clipperY.SetInput(appendX.GetOutput());
	clipperY.SetClipFunction(planoY);
	clipperY.GenerateClipScalarsOff();
	clipperY.GenerateClippedOutputOff();
	clipperY.SetValue(0);

	cutterY=new vtkCutter();
	cutterY.SetInput(appendX.GetOutput());
	cutterY.SetCutFunction(planoY);
	cutterY.GenerateCutScalarsOn();
	cutterY.SetValue(0,0);

	stripperY=new vtkStripper();
	stripperY.SetInput(cutterY.GetOutput());
	stripperY.Update();

	cuttedPolyY=new vtkPolyData();
	cuttedPolyY.SetPoints(stripperY.GetOutput().GetPoints());
	cuttedPolyY.SetPolys(stripperY.GetOutput().GetLines());

	appendY=new vtkAppendPolyData();
	appendY.AddInput(clipperY.GetOutput());
	appendY.AddInput(cuttedPolyY);


	clipperZ=new vtkClipPolyData();
	clipperZ.SetInput(appendY.GetOutput());
	clipperZ.SetClipFunction(planoZ);
	clipperZ.GenerateClipScalarsOff();
	clipperZ.GenerateClippedOutputOff();
	clipperZ.SetValue(0);

	cutterZ=new vtkCutter();
	cutterZ.SetInput(appendY.GetOutput());
	cutterZ.SetCutFunction(planoZ);
	cutterZ.GenerateCutScalarsOn();
	cutterZ.SetValue(0,0);

	stripperZ=new vtkStripper();
	stripperZ.SetInput(cutterZ.GetOutput());
	stripperZ.Update();

	cuttedPolyZ=new vtkPolyData();
	cuttedPolyZ.SetPoints(stripperZ.GetOutput().GetPoints());
	cuttedPolyZ.SetPolys(stripperZ.GetOutput().GetLines());

	appendZ=new vtkAppendPolyData();
	appendZ.AddInput(clipperZ.GetOutput());
	appendZ.AddInput(cuttedPolyZ);


	mapper=new vtkPolyDataMapper();
	mapper.SetInput(appendZ.GetOutput());

	actor=new vtkActor();
	actor.SetMapper(mapper);
	actor.GetProperty().SetColor(0,0,1);

	renderer.AddActor(actor);
    }

    public void actualizar() {
	planoX.SetOrigin(corteX,0,0);
	planoY.SetOrigin(0,corteY,0);
	planoZ.SetOrigin(0,0,corteZ);
	stripperX.Update();
	cuttedPolyX.SetPoints(stripperX.GetOutput().GetPoints());
	cuttedPolyX.SetPolys(stripperX.GetOutput().GetLines());
	stripperY.Update();
	cuttedPolyY.SetPoints(stripperY.GetOutput().GetPoints());
	cuttedPolyY.SetPolys(stripperY.GetOutput().GetLines());
	stripperZ.Update();
	cuttedPolyZ.SetPoints(stripperZ.GetOutput().GetPoints());
	cuttedPolyZ.SetPolys(stripperZ.GetOutput().GetLines());
	mapper.Update();
	panelVTK.Render();
    }

    public void updatePipeline() {
	panelVTK.Render();
    }

    public void keyPressed(KeyEvent e) {
	if (e.getKeyCode()==KeyEvent.VK_Q) {
	    System.exit(0);
	}
	else if (e.getKeyCode()==KeyEvent.VK_X) {
	    if (e.getModifiers()==KeyEvent.SHIFT_MASK)
		corteX+=10;
	    else
		corteX-=10;
	    System.out.println("Corte X="+corteX);
	}
	else if (e.getKeyCode()==KeyEvent.VK_Y) {
	    if (e.getModifiers()==KeyEvent.SHIFT_MASK)
		corteY+=10;
	    else
		corteY-=10;
	    System.out.println("Corte Y="+corteY);
	}
	else if (e.getKeyCode()==KeyEvent.VK_Z) {
	    if (e.getModifiers()==KeyEvent.SHIFT_MASK)
		corteZ+=10;
	    else
		corteZ-=10;
	    System.out.println("Corte Z="+corteZ);
	}
	actualizar();
    }

    public void keyReleased(KeyEvent e) {}
    public void keyTyped(KeyEvent e) {}

    public static void main(String args[]) {
	JFrame frame=new JFrame("Prueba de VTK con Java");
	frame.addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent e) {
		    System.exit(0);
		}
	    });
	frame.getContentPane().add(new Prueba());
	frame.pack();
	frame.setSize(500,500);
	frame.setVisible(true);
    }
}


More information about the vtkusers mailing list