[vtkusers] Edge size.
Meehan, Bernard
MEEHANBT at nv.doe.gov
Tue Aug 26 18:25:28 EDT 2014
Hi Marco - have you looked at these classes?:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ImplicitModeller
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ImplicitPolyDataDistance
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ImplicitDataSetClipping
In this python code, I was using the vtkImplicitPolyDataDistance object to
find an isosurface that was a given distance away from the surface of a
cone, and I then cut it to show a cross-section of the surface. I'm not
sure what sort of offset surface you were looking to make, but this might
do the trick for you:
from vtk import *
cone = vtkConeSource()
cone.SetResolution(100)
cone.Update()
# You have to call update before the bounds of the object are valid. I am
# increasing the bounds of the object by a fixed percentage in order to
get a
# volume that is larger than just the simple bounds of the object.
bounds = list(1.2*s for s in cone.GetOutputDataObject(0).GetBounds())
# I also want the sample dimensions to be chosen such that the "voxels"
will be
# pretty much cubic.
dx = bounds[1] - bounds[0]
dy = bounds[3] - bounds[2]
dz = bounds[5] - bounds[4]
# I want to subdivide the minimum dimension into 20 parts, and the others
# relative to this.
s = min(dx, dy, dz)
delta = s/20.
# Given this minimum sample size, you can pick the correct number of x, y,
and
# z samples for the vtkSampleFunction.
Nx, Ny, Nz = [int(s/delta) for s in (dx, dy, dz)]
# This gives a field of minimum distances to the input vtkPolyData object.
ipd = vtkImplicitPolyDataDistance()
ipd.SetInput(cone.GetOutputDataObject(0))
sample = vtk.vtkSampleFunction()
sample.SetSampleDimensions(Nx, Ny, Nz)
sample.SetImplicitFunction(ipd)
sample.SetModelBounds(*bounds)
sample.Update()
contour = vtk.vtkContourFilter()
contour.SetInputConnection(sample.GetOutputPort())
contour.SetValue(0, 0.1)
contour.Update()
cutter_plane = vtk.vtkPlane()
cutter_plane.SetOrigin(*cone.GetOutputDataObject(0).GetCenter())
cutter_plane.SetNormal(0., 0., 1.)
cutter = vtk.vtkCutter()
cutter.SetCutFunction(cutter_plane)
cutter.SetInputConnection(contour.GetOutputPort())
cutter.Update()
stripper = vtk.vtkStripper()
stripper.SetInputConnection(cutter.GetOutputPort())
stripper.Update()
mapper = vtk.vtkPolyDataMapper()
# mapper.SetInputConnection(contour.GetOutputPort())
# mapper.SetInputConnection(cutter.GetOutputPort())
mapper.SetInputConnection(stripper.GetOutputPort())
mapper.ScalarVisibilityOff()
cone_mapper = vtk.vtkPolyDataMapper()
cone_mapper.SetInputConnection(cone.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# actor.GetProperty().SetColor(0.5, 0.2, 1.0)
# actor.GetProperty().SetOpacity(0.2)
cone_actor = vtk.vtkActor()
cone_actor.SetMapper(cone_mapper)
cone_actor.GetProperty().SetOpacity(0.5)
ren = vtk.vtkRenderer()
ren.AddActor(actor)
ren.AddActor(cone_actor)
ren.SetBackground(.2, .3, .4)
renw = vtk.vtkRenderWindow()
renw.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renw)
ren.ResetCamera()
renw.Render()
iren.Start()
On 8/25/14 12:41 AM, "Marco Salatin" <marco.salatin at gmail.com> wrote:
>Hello vtk users,
> there are some one who can help me to do a function
>that can increase offset (shell) of edge of a object?
>
>Thanks
>
>Marco
>
>
>
>--
>View this message in context:
>http://vtk.1045678.n5.nabble.com/Edge-size-tp5728359.html
>Sent from the VTK - Users mailing list archive at Nabble.com.
>_______________________________________________
>Powered by www.kitware.com
>
>Visit other Kitware open-source projects at
>http://www.kitware.com/opensource/opensource.html
>
>Please keep messages on-topic and check the VTK FAQ at:
>http://www.vtk.org/Wiki/VTK_FAQ
>
>Follow this link to subscribe/unsubscribe:
>http://public.kitware.com/mailman/listinfo/vtkusers
>
More information about the vtkusers
mailing list