[vtkusers] Fwd: How to generate a surface normal glyph for a triangle cell

Amy Squillacote ahs at cfdrc.com
Wed Oct 8 11:28:55 EDT 2008


Hi Elvis,

I'm copying this back to the vtkusers list. Please keep the discussion 
on the list so other people can contribute to it and so it's archived 
for future reference.

- Amy

Elvis Dowson wrote:
> Hi Amy,
>                   Yes, I realized later that I had to turn orient on. 
> I have a very fundamental question, the sample that Miguel pointed me 
> to uses vtkPolyDataNormals to compute the normals of the plane source, 
> and since the plane source has four vertices, four glyphs get generated. 
>
> However, the plane source has a GetNormal() method, which will return 
> the x, y, z coordinates of it's surface normal. I tried to directly 
> create a vktPolyData structure and inserted the plane source normal 
> and try to get it to display the surface normal, but it kept orienting 
> the wrong way, even after I turned orient on for the 3D glyph. 
>
> Any ideas why?  
>
> The source code can be found below.
>
> Best regards,
>
> Elvis Dowson
>
> Begin forwarded message:
>
>> *From: *Elvis Dowson <elvis.dowson at mac.com <mailto:elvis.dowson at mac.com>>
>> *Date: *October 8, 2008 3:49:33 PM GMT+04:00
>> *To: *marf at itccanarias.org <mailto:marf at itccanarias.org>
>> *Cc: *vtkusers at vtk.org <mailto:vtkusers at vtk.org>
>> *Subject: **Re: [vtkusers] How to generate a surface normal glyph for 
>> a triangle cell*
>>
>> Hi Miguel,
>>                      Thanks for the tip. It works when I use 
>> vtkPolyDataMapper as shown below. However, you the plane has a 
>> methods that returns the surface normal, which is a single surface 
>> normal. How can I pipe this surface normal data, directly to be 
>> generated as a single glyph? 
>>
>> The spikeF.tcl example code uses vtkMaskPoints to reduce the number 
>> of sampled points for generating the surface normal.
>>
>> In my specific case of the plane source, the surface normal is 
>> already available to me. I don't need to use vtkPolyDataMapper to 
>> generate the surface normals. How can I use the existing surface 
>> normal information from the plane source to generate a single glyph 
>> that represents the surface normal?
>>
>> If I use vtkPolyDataMapper, it will generate 4 glyphs corresponding 
>> to the surface normals at each of the four vertices of the plane. I 
>> just want to render one glyph corresponding to the surface normal 
>> computed from the central surface of the plane source.
>>
>> Best regards,
>>
>> Elvis Dowson 
>>
>> *Example TCL Code:*
>>
>> # This example shows how to manually construct a plane and display 
>> its surface normal 
>> # using Tcl. 
>> #
>>
>> package require vtk
>> package require vtkinteraction
>>
>> # Create a plane source
>> vtkPlaneSource planeSource
>>
>> vtkPolyDataNormals planeNormals
>>   planeNormals SetInputConnection [planeSource GetOutputPort]
>>  
>> vtkDataSetMapper planeMapper
>>   planeMapper SetInputConnection [planeNormals GetOutputPort]
>>
>> vtkActor planeActor
>>   planeActor SetMapper planeMapper
>>
>> # Create an arrow glyph to represent the surface normal
>> # -----------------------------------------------------
>>
>> # Specify the location of the glyph
>> #vtkPolyData arrowGlyphPolyData
>> #vtkPoints   arrowGlyphPoints
>>   #arrowGlyphPolyData SetPoints arrowGlyphPoints
>>   #arrowGlyphPoints InsertNextPoint 1 1 0
>>   #eval arrowGlyphPoints InsertNextPoint [planeSource GetNormal]
>>
>> # Specify the shape of the glyph
>> vtkArrowSource arrowSource
>>
>> vtkGlyph3D arrowGlyph
>>   arrowGlyph ScalingOn
>>   arrowGlyph SetScaleFactor 0.7
>>   arrowGlyph SetVectorModeToUseNormal
>>   arrowGlyph SetScaleModeToScaleByVector
>>   arrowGlyph OrientOn
>>   arrowGlyph SetSourceConnection [arrowSource GetOutputPort]
>>   arrowGlyph SetInputConnection  [planeNormals GetOutputPort]
>>
>> vtkDataSetMapper arrowGlyphMapper
>>   arrowGlyphMapper SetInputConnection [arrowGlyph GetOutputPort]
>>
>> vtkActor glyphActor
>>   glyphActor SetMapper arrowGlyphMapper
>>
>>
>> # Create the usual rendering stuff.
>> vtkRenderer ren1
>> vtkRenderWindow renWin
>>   renWin AddRenderer ren1
>>   renWin SetSize 300 150
>> vtkRenderWindowInteractor iren
>>   iren SetRenderWindow renWin
>>
>> #ren1 SetBackground .1 .2 .4
>>
>> ren1 AddActor planeActor
>> ren1 AddActor glyphActor
>>
>> ren1 ResetCamera
>> ren1 ResetCameraClippingRange
>>
>> renWin Render
>>
>> # render the image
>> #
>> iren AddObserver UserEvent {wm deiconify .vtkInteract}
>> iren Initialize
>> wm withdraw .
>>
>>
>>

-- 
Amy Squillacote                    Phone: (256) 726-4839
Computer Scientist                 Fax: (256) 726-4806
CFD Research Corporation           Web: http://www.cfdrc.com
215 Wynn Drive, Suite 501
Huntsville, AL  35805





More information about the vtkusers mailing list