您的位置:首页 > 其它

vtk类之vtkPlaneSource:创建一个平面的poly data

2012-12-10 19:03 330 查看
vtkPlaneSource

创建一个平面的四边形的数组。
vtkPlaneSource创建一个m×n阵列表示的一个平面上的四边形。改平面指通过指定一个起点,然后和其他两个点,定义了两个轴的向量。这两个向量不一定是正交的,但是必须不平行的一个四边形。 可以控制的ivars XResolution和YResolution来调节平面的分辨率(即,细分数)。
缺省情况下,平面的中心在原点并垂直于z轴,长度为1和分辨率设置为1的宽度和高度。
有三种方便的方法,让您可以轻松设置平面。第一,SetNormal(),允许指定平面的法向量。沿着法向量旋转平面。第二,SetCenter(),平移到指定的中心点。第三种方法,Push(),可以让你沿着平面法向量平移一定的距离。

基本用法:

1. 使用 SetOrigin() SetPoint1() 和SetPoint2()确定不在一条直线上的三个点,决定一个四边形平面。

2. 使用SetCenter(), SetNormal()和 Push()等 对平面的空间位置做旋转,平移等变换。

例子:

#-*- coding: UTF-8 -*-
#-------------------------------------------------------------------------------
# Name:        planeActorFactory package
# Purpose:     创建一条平面的
#
# Author:      ankier
#
# Created:     12-12-2012
# Copyright:   (c) ankier 2012
# Licence:     <your licence>
#-------------------------------------------------------------------------------

from ActorFactory import ActorFactory
from glo import Global
from vtk import *

## @brief 直线的actor factory
class PlaneActorFactory(ActorFactory):
def __init__(self):
ActorFactory.__init__(self)
self.__PlaneSource = vtkPlaneSource()

def __del__(self):
del self.__PlaneSource

## @brief 更新线的poly data
def __UpdateData(self):
globalInstance = Global.GetInstance()
self.__PlaneSource.SetOrigin(-50, -50, 0)
self.__PlaneSource.SetPoint1(50, -50 , 0)
self.__PlaneSource.SetPoint2(-50 , 50 , 0)
self.__PlaneSource.SetXResolution(50)
self.__PlaneSource.SetYResolution(50)

## @brief 平移平面 到指定的position 位置
def SetCenter(self, position):
self.__PlaneSource.SetCenter(position[0], position[1], position[2])

def GetCenter(self):
return self.__PlaneSource.GetCenter()

## @brief 设置平面 新的法向量
def SetNormal(self, normal):
self.__PlaneSource.SetNormal(normal[0], normal[1], normal[2])

## @brief 沿着平面的法向量方向上, 移动distance距离
def Push(self, distance):
self.__PlaneSource.Push(distance)

def GetNormal(self):
return self.__PlaneSource.GetNormal()

## @brief 重写基类方法
#  see    ActorFactory._MakeActors
def _MakeActors(self):
self.__UpdateData()
polyDataMapper = vtkPolyDataMapper()
polyDataMapper.SetInputConnection(self.__PlaneSource.GetOutputPort())
actor = self._NewActor()
actor.SetMapper(polyDataMapper)
actor.GetProperty().SetColor((1, 0.1, 0.5))
del polyDataMapper
return [actor]


运行效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: