[vtkusers] extending vtkPolyDataAlgoritm
Alexander MacLennan
alex.maclennan at gmail.com
Thu Apr 20 09:42:50 EDT 2006
Ah! Great idea!
I'll give that a go
Thanks for your help
On 4/20/06, John Biddiscombe <biddisco at cscs.ch> wrote:
>
> If you must use Java, then try subclassing from a PolyDataAlgorithm that
> already has zero inputs. (eg. vtkSphereSource, vtkConeSource etc) these
> objects generate data without having an input. in general Wrapped
> languages are ok for using vtk etc, but subclassing a native class with
> a java extension is probably going to be dodgy
>
> JB
>
>
> Alexander MacLennan wrote:
> > Thanks John,
> >
> > This option doesn't seem to be available using Java wrappers, or is it
> > specified as a parameter to the constructor?
> >
> > cheers
> >
> > alex
> >
> > On 4/20/06, * John Biddiscombe* <biddisco at cscs.ch
> > <mailto:biddisco at cscs.ch>> wrote:
> >
> > 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
> >
> >
>
>
> --
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20060420/8162ddf6/attachment.htm>
More information about the vtkusers
mailing list