vtk类之vtkSuperquadricSource:创建以原点为中心的多边形超二次曲面的poly data

vtkSuperquadricSource 创建以原点为中心的多边形超二次曲面,可以设置尺寸。可以设置两个(φ)的纬度和经度(θ)方向的分辨率(多边形离散化)。浑圆度参数(纬度浑圆度和经度浑圆度)控制超二次曲面的形状。环形布尔值控制是否产生环形的超二次曲面。如果是的话,厚度参数控制的厚度的环形:0是最薄的环形,和1具有最小尺寸的孔。缩放尺度参数允许超二次曲面,在x,y,和z(在任何情况下,正确地生成法线向量)进行缩放。 尺寸参数控制的超二次曲面的size。

原理是基于“刚性基于物理的超二次曲面”,AH巴尔,在“图形宝石III”,大卫柯克,编,科学出版社,1992年。

基本方法:

  SetCenter()设置中心点

  SetThickness()厚度参数控制的厚度的环形:0是最薄的环形,和1具有最小尺寸的孔

  ToroidalOn()开启环形

  SetPhiRoundness(),SetThetaRoundness设置经纬度的环形度

  SetScale()设置在x,y,z方向的超二次曲面的拉伸系数。

例子:

#-*- coding: UTF-8 -*-
#-------------------------------------------------------------------------------
# Name:        模块2
# Purpose:
#
# Author:      ankier
#
# Created:     12-12-2012
# Copyright:   (c) Ankier 2012
# Licence:     <your licence>
#-------------------------------------------------------------------------------

from ActorFactory import ActorFactory

from vtk import *
## @detal 生产超二次曲面
class SuperquadricActorFactory(ActorFactory):
    def __init__(self):
        ActorFactory.__init__(self)        
        self.__SuperquadricSource = vtkSuperquadricSource()        
        
    def _MakeActors(self):
        self.__SuperquadricSource.SetCenter(0, 0, 0)        
        self.__SuperquadricSource.SetThickness(0.8)
        self.__SuperquadricSource.SetSize(20)
        self.__SuperquadricSource.ToroidalOn()
        self.__SuperquadricSource.SetPhiRoundness(10)
        self.__SuperquadricSource.SetThetaRoundness(1)
        self.__SuperquadricSource.SetScale(1 ,0.5, 1)
        
        polyDataMapper = vtkPolyDataMapper()
        polyDataMapper.SetInput(self.__SuperquadricSource.GetOutput())
        
        actor = self._NewActor()
        actor.SetMapper(polyDataMapper)
        actor.GetProperty().SetColor((1.0, 0.7, 0.2))
        
        return [actor]
    
    def __del__(self):
        del self.__SuperquadricSource

运行效果:

 

posted on 2012-12-11 09:13  |残阳|露  阅读(917)  评论(0编辑  收藏  举报

导航