[vtkusers] extending vtkPolyDataAlgoritm
John Biddiscombe
biddisco at cscs.ch
Thu Apr 20 07:52:40 EDT 2006
I see that you are using Java and have already asked about
SetNumberOfInputPorts in Java. The answer is use C++.
JB
> You need to ensure in your class that you SetNumberOfInputPorts(0) in
> your constructor, what the error message is telling you is that it is
> expecting an input, but none has been provided. If your code is a source
> object (ie not a filter), then you can tell it no inputs are needed
>
> JB
>
>
> Alexander MacLennan wrote:
>> Hi,
>>
>> I am getting the following error message when I use my own class that
>> converts from OOGL to a format viewable using VTK
>>
>>
>>
>> ERROR: In
>> /usr/student/tango/maclenna/cvs/VTK/Filtering/vtkDemandDrivenPipeline.cxx,
>> line 692
>> vtkStreamingDemandDrivenPipeline (0x8073228): Input port 0 of
>> algorithm vtkPolyDataAlgorithm(0x8074588) has 0 connections but is not
>> optional.
>>
>> Its vtk compiled from CVS as of a few days ago.
>>
>> Does anyone have some hints?
>>
>> cheers
>>
>> alex
>>
>> Here is my class:
>>
>>
>>
>> import java.awt.color.ColorSpace;
>>
>> public class vtkOOGLtoVtk extends vtk.vtkPolyDataAlgorithm {
>> private OOGLObject o;
>>
>> public void setOOGL(OOGLObject o) {
>> this.o = o;
>> }
>>
>> /**
>> * Get oogl object in vtk format
>> * Follows the pattern set by vtkPLYReader.cxx
>> *
>> * @param request
>> * @param inputVector
>> * @param outputVector
>> * @return
>> */
>> public int RequestData(vtkInformation request,
>> vtkInformationVector inputVector, vtkInformationVector
>> outputVector) {
>> // Ape the stuff from vtkPLYReader until I know whats
>> going on
>> vtkInformation outInfo = outputVector.GetInformationObject(0);
>> // Casting done with C++ example, not the best for java???
>> vtkPolyData output = (vtkPolyData)outInfo.Get(new
>> vtkInformationDataObjectKey());
>> output.Initialize();
>> // Return value
>> int result = 1;
>> // Temp vertex holder
>> Point3d v = null;
>> // Temp face holder
>> Point3i f = null;
>> // Temp variable for testing number of colours defined
>> for OOGL Object
>> int count = 0;
>> // Boolean variable for checking to see if RGB data
>> available ( well HSV )
>> boolean colourDataAvailable = false;
>> // RGB values for points
>> vtkUnsignedCharArray rgbPoints = null;
>> // Temp variable for putting colour into table as rgb
>> float[] colourComponents = null;
>> // Test number of colours defined for vertices
>> if ( o.getVertexColours() != null)
>> count = o.getVertexColours().size();
>> if ( count > 0)
>> colourDataAvailable = true;
>> // If there are vertex colours then use RGB Points
>> if (colourDataAvailable){
>> rgbPoints = new vtkUnsignedCharArray();
>> rgbPoints.SetName("RGB");
>> output.GetPointData().SetScalars(rgbPoints);
>> rgbPoints.Initialize();
>> rgbPoints.SetNumberOfComponents(3);
>> rgbPoints.SetNumberOfTuples (this.o.getVertices().size());
>> }
>> // Don't worry about colours by face for the moment.. its not
>> important
>> // to implement this right now
>> // Now load vertices into structure
>> vtkPoints points = new vtkPoints();
>> points.SetDataTypeToFloat();
>> points.SetNumberOfPoints(this.o.getVertices().size());
>> for ( int i = 0 ; i < o.getVertices().size(); i++){
>> // Get the vertex values and set them in the point data
>> object
>> v = o.getVertices().get(i);
>> points.SetPoint(i, v.x, v.y, v.z);
>> // If colours available insert them, converting
>> from hsb to rgb
>>
>> if (colourDataAvailable){
>> colourComponents =
>> o.getVertexColours().get(i).get().getComponents(ColorSpace.getInstance(ColorSpace.TYPE_RGB),
>> new float[3]);
>> rgbPoints.SetTuple3 (i, colourComponents[0],
>> colourComponents[1], colourComponents[2]);
>> }
>> }
>> // Now set the up the faces
>> vtkCellArray polys = new vtkCellArray();
>> // Allocate space for faces
>> for (int i = 0; i < this.o.getFaceCount(); i++) {
>> // Get face to insert
>> f = this.o.getFaces().get(i);
>>
>> // Tell ca that next cell is a triangle
>> polys.InsertNextCell(3);
>>
>> // Insert point reference values that
>> // make up the face
>> polys.InsertCellPoint(f.x);
>> polys.InsertCellPoint(f.y);
>> polys.InsertCellPoint (f.z);
>> }
>> output.SetPolys(polys);
>> output.SetPoints(points);
>> return result;
>> }
>>
>> }
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> This is the private VTK discussion list. Please keep messages
>> on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
--
John Biddiscombe, email:biddisco @ cscs.ch
http://www.cscs.ch/about/BJohn.php
CSCS, Swiss National Supercomputing Centre | Tel: +41 (91) 610.82.07
Via Cantonale, 6928 Manno, Switzerland | Fax: +41 (91) 610.82.82
More information about the vtkusers
mailing list