• No results found

Introduction to Python Introduction to VTK Filip Malmberg filip

N/A
N/A
Protected

Academic year: 2022

Share "Introduction to Python Introduction to VTK Filip Malmberg filip"

Copied!
77
0
0

Loading.... (view fulltext now)

Full text

(1)

Filip Malmberg

filip @cb.uu.se

(2)

IT Uppsala universitet

(3)

What is Python?

• Dynamic, interpreted high-level language.

• Created in 1991 by Guido van Rossum.

• Design philosophy: Short development time is prioritized over excecution speed.

• Syntax similar to C++ or Java.

(4)

08-01-29 | #4

@ UU/IT

Facts about Python

• Portable, available for all common platforms.

• Python is Open Source and free to use, even for commercial applications.

• (Relatively) Easy to integrate with other languages, such as Java, C/C++, Fortran and .NET.

• Designed for multiple paradigms. Both object oriented and

procedural programming are possible.

(5)

What is Python good for?

• Internet applications, good support for HTTP, FTP, SMTP and CGI.

• Integrating components written in a low-level language,

“glue code”.

• Portable system tools, same commands on each platform.

Compare with dir (Windows) and ls (Linux).

• Portable GUI:s.

• Database handling.

• Projects where time of development is more important than

speed of execution.

(6)

08-01-29 | #6

@ UU/IT

What is Python not good for?

• Tasks where performance is critical.

• Such tasks can be implemented in C/C++ modules

using tools such as SWIG (www.swig.org).

(7)

Python and VTK

• VTK is written in C++, but has bindings to Python, Java, Tcl ...

• In this course, we will use VTK with Python.

(8)

08-01-29 | #8

@ UU/IT

The Python prompt

• Can be used to execute individual Python commands interactively.

• The prompt has a “memory” which is kept until the prompt is closed.

• Start the prompt by typing python in a

terminal.

(9)

The Python language

• Variables and types

• Control structures

• Functions

• Classes

• File handling

(10)

08-01-29 | #10

@ UU/IT

Variables

•All variables in Python are references

Variable Data

(11)

Variable assignment

•A reference is created with=

a = 10b = 20

c = a + b

a 10

b 20

c 30

Creates the following situation:

(12)

08-01-29 | #12

@ UU/IT

More on references

•Multiple references: Many variables can refer to the same object.

•Reference counting: An object is deleted automatically when no variables refer to it.

list_a [1, 2, 3]

list_b list_c

>>> list = [1, 2, 3]

>>> list_a = [1, 2, 3]

>>> list_b = list_a

>>> list_c = list_b

>>> list_c[2] = 78

>>> list_a [1, 2, 78]

(13)

Variable names

•May contain english letters, numbers and underscores.

• Must not start with a number.

Invalid names

påskmust 1_varname varname 1 var&name

Valid names

varname

vArNaMe1

var_name_1

_var_name

(14)

08-01-29 | #14

@ UU/IT

Datatypes

• Numbers

• Strings

• Boolean types

• Lists

• Tuples

• Others...

(15)

Numbers

•Different kinds of

numbers are represented by different classes:

Integers (int)

Big integers (long) Real numbers (float)

Complex numbers (complex)

>>> a = 10

>>> a.__class__

<type 'int'>

>>> big_num = 9875628736L

>>> big_num.__class__

<type 'long'>

>>> pi_constant = 3.1415

>>> pi_constant.__class__

<type 'float'>

>>> z = complex(3.4, 8.35)

>>> z

(3.399999999+8.349999999j)

>>> z.__class__

<type 'complex'>

(16)

08-01-29 | #16

@ UU/IT

Operations on numbers

• The operations +, -, * and / work as usual.

• % - Remainder // - Integer division ** - Power

• abs(x) int(x) long(x) float(x)

complex(a, b)

>>> a = 3.14

>>> b = 5

>>> c = b / a

>>> c.__class__

<type 'float'>

>>> 5 // 2

2>>> 5 // float(2) 2.0>>> 5 / float(2)

2.5>>> b / complex(6, 4)

(0.576923072-0.384615381j)

>>> 2 / 3 0

(17)

Strings

• A string is a sequence of characters.

• A string is created using single or double quotes.

>>> s1 = "exempeltext"

>>> s2 = 'exempeltext igen'

>>> s3 = "felaktigt'

File "<stdin>", line 1 s3 = "felaktigt'

SyntaxError: EOL while scanning ^ single-quoted string

>>> s4 = s1 + s2

>>> s4

'exempeltextexempeltext igen'

>>> s5 = str(3)

>>> s5

'3'>>> s5.__class__

<type 'str'>

(18)

08-01-29 | #18

@ UU/IT

Boolean types

• The following expressions are false:

None False

The number 0

Every empty sequence Every empty mapping {}

• All other objects are defined to be true.

>>> a = True

>>> a.__class__

<type 'bool'>

>>> a = 5 > 7

>>> a False

(19)

Lists

• Lists are containers with an arbitrary number of elements.

• The elements can be any Python object. A single list can contain objects of many different types.

>>> list = [1, 2, 3]

>>> list [1, 2, 3]

>>> list_2 = [1, "mixed","li"+"st"]

>>> list_2

[1, 'mixed', 'list']

(20)

08-01-29 | #20

@ UU/IT

More on lists

• Individual element are accessed with an index within square brackets [index]. The first element has index 0.

>>> list_2

[1, 'blandad', 'lista']

>>> list_2[1]

'blandad'

>>> list_2[1] = "Nytt element"

>>> list_2

[1, 'Nytt element', 'lista']

(21)

Tuples

• Tuples are static lists.

• Tuples have better performance than lists, but are less flexible.

>>> tuple_1 = (1, 2, 3)

>>> tuple_2 = (1, "mixed")

>>> tuple_2[1]

'mixed'

>>> tuple_2[1] = "New element"

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment

(22)

08-01-29 | #22

@ UU/IT

Printing

• The Python command for writing text to the prompt is print.

>>> print "Hello"

Hello

>>> print "Hello", "world"

Hello world

>>> print 10+3 13

(23)

If-statements

• Note the indentation! In Python, indentation is used to control which block a statement belongs to. A colon indicates that a new block of code begins.

>>> a = 10

>>> if a > 5:

... print "The number is greater than 5"

...The number is greater than 5

(24)

08-01-29 | #24

@ UU/IT

else

>>> a = 10

>>> if a < 5:

... print "a is less than 5"

... else:

... print "a is greater than or equal to 5"

...a is greater than or equal to 5

(25)

Multiple choices

• Multiple choices are handled with elif.

• Many languages have a case-statement for handling multiple choices. This was deemed redundant by the Python developers.

>>> a = 10

>>> if a == 1:

... print "a is one"

... elif a == 2:

... print "a is two"

... elif a == 3:

... print "a is three"

... else:

... print "a is something else"

...a is something else

(26)

08-01-29 | #26

@ UU/IT

for-loops

• Again, use indentation to

define a block of code.

>>> for i in range(10):

... print i

...0 12 34 56 78 9

(27)

Nested loops

>>> for i in range(2):

... for j in range(3):

... for k in range(4):

... print "i=%i, j=%i, k=%i" % (i, j, k) ...i=0, j=0, k=0

i=0, j=0, k=1 i=0, j=0, k=2 i=0, j=0, k=3 i=0, j=1, k=0 i=0, j=1, k=1 ...i=1, j=1, k=2 i=1, j=1, k=3 i=1, j=2, k=0 i=1, j=2, k=1 i=1, j=2, k=2 i=1, j=2, k=3

(28)

08-01-29 | #28

@ UU/IT

Beyond the Python prompt

• The python prompt is not suited for larger programs.

• Python programs are stored in regular text files.

• Commonly the filenames end with .py, but

this is not required.

(29)

Executing Python programs

• Python files are executed using the python command.

• The search path to this program must be

• On windows, this is set by the system set.

variable PYTHONPATH.

(30)

08-01-29 | #30

@ UU/IT

Python is dynamically typed

# -*- coding: utf-8 -*-

# a refers to a number a = 1

print a, a.__class__

# a refers to a string a = "lkshjdglgv"

print a, a.__class__

# a refers to a list a = [5, 2, 8, 5]

print a, a.__class__

a.sort()

# a refers to a number again a = 10

a.sort()

$> python dynamic_binding.py 10 <type 'int'>

lkshjdglgv <type 'str'>

[5, 2, 8, 5] <type 'list'>

Traceback (most recent call last):

File "dynamic_binding.py", line 18, in<module>

a.sort()

AttributeError: 'int' object has no attribute 'sort'

Duck Typing:

"when I see a bird that walks like a duck and swims like

a duck and quacks like a duck, I call that bird a duck."

(31)

Python is strongly typed

• No implicit type conversions

>>> a = 3

>>> b = '4'

>>> a + b

Traceback (most recent call last):

File "<stdin>", line 1, in

<module>

TypeError: unsupported operand type(s)

for +: 'int' and 'str'

>>> str(a) + b '34'>>> a + int(b) 7

(32)

08-01-29 | #32

@ UU/IT

Functions in Python

• A function is create using the reserved word def followed by the function name and a colon.

• The rules for function names are the same as for variable names.

$> python function_01.py Detta skrivs först.

Detta skrivs inuti funktionen Detta skrivs efter metodanropet.

# function_01.py def function_a():

print "Detta skrivs inuti funktionen."

print "Detta skrivs först."

function_a() # Funktionen anropas

print "Detta skrivs efter metodanropet."

(33)

Function arguments

•We communicate with functions by specifying arguments in the function call.

$> python function_02.py Hello Maja. You are

23 years old.

Hello Pelle. You are 31 years old.

# function_02.py

def greeting(name, age):

print """Hello %s. You are %i years old.""" % (name, age)

(34)

08-01-29 | #34

@ UU/IT

Default arguments

•Default arguments can be used to avoid having to specify all arguments.

# function_03.py

def greeting(name, age=20):

print """Hej %s. Du är %i år gammal.""" % (name, age)

greeting("Maja", 23) greeting("Pelle")

$> python function_03.py Hej Maja. Du är

23 år gammal.

Hej Pelle. Du är 20 år gammal.

(35)

Order of arguments

•Problems with many arguments: Arguments must be given in the order given in the function defintion.

# function_04.py

def greeting(name="Unknown", age=20):

print """Hello %s. You are %i years old.""" % (name, age)

greeting()

greeting("Pelle")

greeting(45) # Gives the wrong result

$> python function_04.py

Hello Unknown. You are 20 years old.

(36)

08-01-29 | #36

@ UU/IT

Arguments by name

• The solution is to give arguments by name.

# function_05.py

def greeting(name="Okänd", age=20):

print """Hej %s. Du är %i år gammal.""" % (name, age) greeting()

greeting("Pelle") # Still works

greeting(name="Pelle") # Eqvivalent

greeting(age=45) # Gives the right result greeting("Maja", 33)

greeting(name = "Maja", age = 33) # Eqvivalent

$> python function_05.py

Hej Okänd. Du är 20 år gammal.

Hej Pelle. Du är 20 år gammal.

Hej Pelle. Du är 20 år gammal.

Hej Okänd. Du är 45 år gammal.

Hej Maja. Du är 33 år gammal.

Hej Maja. Du är 33 år gammal.

(37)

Return values

•The return statement is used to return a value from a function.

# return_values_01.py

def my_own_join(texts, separator=" "):

s = ""

for text in texts:

s += text + separator

s = s[:-len(separator)] + "."

return s

my_text_pieces = ["Detta", "är", "inte",

"så", "meningsfullt"]

print my_own_join(my_text_pieces, "_")

(38)

08-01-29 | #38

@ UU/IT

Multiple return values

• Python allows any number of return values.

# return_values_03.py def min_max(seq):

return min(seq), max(seq) a = [3, 573, 234, 24]

minimum, maximum = min_max(a) print minimum, maximum

result = min_max(a) print result

print result.__class__

$> python return_values_03.py 3 573

(3, 573)

<type 'tuple'>

(39)

Modules

•When writing larger programs, it is not practical to keep all code in the same file.

•In python Modules offer a way to separate large programs into smaller units.

•Modules are also used to organize functions and

variables into namespaces.

(40)

08-01-29 | #40

@ UU/IT

Standard modules

•Python has a number of standard modules that are always available for import.

•Modules are imported with the import-statement.

>>> sys

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name 'sys' is not defined

>>> import sys

>>> sys

<module 'sys' (built-in)>

>>> sys.version

'2.4.3 (#1, Dec 11 2006, 11:39:03) \n[GCC 4.1.1 20061130 (Red Hat 4.1.1-43)]'

(41)

3 party modules

• Lots of freely available modules for:

– GUI:s

– Image Processing – Computer Graphics – Web development

– Numerical Computations

– ...

(42)

08-01-29 | #42

@ UU/IT

The VTK module

 VTK in python is implemented as a Module

>>> import vtk

(43)

Object oriented programming

• Python is originally a procedural language, with added support for object orientation.

• Classes are defined using the class keyword:

# -*- coding: utf-8 -*-

# io_01.py class MyClass:

MyNumber=10

def printNumber(self):

print 'The number is ',MyNumber

#Now we use the class anObject=MyClass() anObject.printNumber()

(44)

08-01-29 | #44

@ UU/IT

Private variables

• Python has limited support for private class variables.

• Variable names starting with two

underscores (“__”) are considered private.

• If you really want to, it is still possible to

access those variables from outside the

class.

(45)

Private variables, cont.

• Under the hood, private variables are hidden by textually replacing the name “__member”

with “_classname__member”

# -*- coding: utf-8 -*-

# io_01.py class MyClass:

__MyNumber=10 #private variable

#Now we use the class anObject=MyClass()

print anObject.__MyNumber #This won't work

print anObject._MyClass__MyNumber #This will work, but is usually a bad idea

(46)

08-01-29 | #46

@ UU/IT

File I/O in python

• Files are opened with the open statement

# -*- coding: utf-8 -*-

# io_01.py

f = open("newfile.txt", "r") # Öppna filen print f.read() # Läs in hela filen

“r” -read only

“w”- write only

“r+” - read and write

“a” - append data at the end of the file

“b”- binary file

(47)

Reading parts of a file

# -*- coding: utf-8 -*-

# io_01.py

f = open("newfile.txt") for row in f.readlines():

print row, f.close()

f = open("newfile.txt") print f.read(8)

print f.read(5)

$> python io_02.py Detta är textrad 1.

Detta är textrad 2.

Detta är textrad 3.

Detta är textrad 4.

Detta är text

(48)

08-01-29 | #48

@ UU/IT

Writing to a file

# -*- coding: utf-8 -*-

# io_03.py

f = open("newfile.txt", "w") f.write(str(3) + "\n")

f.write(str([1,2,3]) + "\n")

f.write(str({"name":"Kalle"}) + "\n") f.close()

f = open("newfile.txt", "a") f.write("Denna rad läggs till.") f.close()

f = open("newfile.txt") print f.read()

f.close()

$> python io_03.py 3[1, 2, 3]

{'name': 'Kalle'}

Denna rad läggs till.

(49)

That's it!

• Now you know the basics of Python

• More info: www.python.org

(50)

IT Uppsala universitet

(51)

 What is VTK?

 What can VTK be used for?

 How to actually use VTK?

VTK – The Visualization ToolKit

(52)

08-01-29 | #52

@ UU/IT

VTK – The Visualization ToolKit

 Open source, freely available software for

• 3D computer graphics

• image processing

• visualization

 Managed by Kitware, Inc.

 Object-oriented design (C++)

 High-level of abstraction

 Use C++, Tcl/Tk, Python, Java

(53)

True visualization system

 Techniques for visualizing

• scalar fields

• vector fields

• tensor fields

 Polygon reduction

 Mesh smoothing

 Image processing

 Your own algorithms

(54)

08-01-29 | #54

@ UU/IT

Additional features

 Parallel support

• message passing

• multi-threading

 Stereo support

 Integrates with Motif, Qt, Tcl/Tk, Python/Tk, X11, Windows, ...

 Event handling

 3D widgets

(55)

3D graphics

 Surface rendering

 Volume rendering

• Ray casting

• Texture mapping (2D, 3D)

 Lights and cameras

 Textures

 Save render window to .png, .jpg, ...

(useful for movie creation)

(56)

08-01-29 | #56

@ UU/IT

Data Representation

Collection of cells & points

 Cells specify topology

• Shape such as triangle, tetrahedron

 Points specify geometry

• Point coordinates assigned to a topology

 Data attributes

• Data associated with topology or geometry

(57)

Data attributes assigned to points or cells

 Scalar

 Vector

• magnitude and direction

 Normal

• a vector of magnitude 1

• used for lighting

 Texture coordinate

• mapping data points into a texture space

(58)

08-01-29 | #58

@ UU/IT

Visualization of attributes

 Scalar fields

• Color Mapping

 vtkLookupTable

 vtkScalarsToColors

 vtkColorTransferFunction

• Contouring

 vtkContourFilter

 vtkMarchingCubes

(59)

Visualization of attributes

 Vector fields

• Glyphs

 vtkGlyph3D

• Streamlines/points/tubes

 vtkStreamer

 vtkStreamLine

 vtkStreamPoints

(60)

08-01-29 | #60

@ UU/IT

Visualization of attributes

 Tensor fields

• vtkTensor

• vtkTensorGlyph

(61)

The Visualization Pipeline

DATA

FILTER MAPPING

Visualization algorithms

(62)

08-01-29 | #62

@ UU/IT

Objects

 Data objects

• e.g. vtkPolyData, vtkImageData

 Process objects

• Source objects (vtkReader, vtkSphereSource)

• Filter objects (vtkContourFilter)

• Mapper objects (vtkPolyDataMapper)

(63)

7 basic VTK objects to render a scene

vtkRenderWindow: manages a window on the display device

vtkRenderer: coordinates the rendering process involving lights, cameras, and actors

vtkLight: a source of light to illuminate the scene

vtkCamera: defines the view position, focal point, etc.

vtkActor: represents an object rendered in the scene,

both its properties and position in the world coordinate system

vtkProperty: defines the appearance properties of an actor including colour, transparency, and lighting properties such as specular and diffuse. Also representational properties like

wireframe and solid surface

vtkMapper: the geometric representation for an actor.

More than one actor may refer to the same mapper

(64)

08-01-29 | #64

@ UU/IT

Cube example

http://www.it.uu.se/edu/course/homepage/vetvis/ht11/

(65)

User interaction

 vtkRenderWindowInteractor

• allows the user to interact with the objects

 Try the following key presses

w wireframe mode s surface mode j joystick mode t trackball mode

button1 rotate button2 translate

button3 scale r reset camera view

e, q exit

(66)

08-01-29 | #66

@ UU/IT

Sphere example

http://www.it.uu.se/edu/course/homepage/vetvis/ht11/

(67)

VTK and C++

 Build with CMake and your favorite compiler

 CMake generates makefiles or project files for your environment

 Use the resulting file(s) to build your executable

 Under Windows you can use Microsoft Visual C++

Express Edition

 You have to install Tcl and/or Python to run vtk

scripts

(68)

08-01-29 | #68

@ UU/IT

VTK resources

 www.vtk.org

• Download

• Documentation

• Mailing lists

• Links

• FAQ, Search

 www.kitware.com

• VTK Textbook

• VTK User’s guide

• Mastering CMake

(69)

VTK Examples

 Really useful for getting started

 Available on the VTK webpage or in the VTK

folder.

(70)

08-01-29 | #70

@ UU/IT

VTK documentation

(71)

Summary +

 Free and open source

 Create graphics/visualization applications fairly fast

 Object oriented - easy to derive new classes

 Build applications using “interpretive” languages Tcl, Python, and Java

 Many (state-of-the-art) algorithms

 Heavily tested in real-world applications

 Large user base provides decent support

(72)

08-01-29 | #72

@ UU/IT

Summary -

 Not a super-fast graphics engine

due to portability and C++ dynamic binding – you need a decent workstation

 Very large class hierarchy 

learning threshold might be steep

(73)

Computer exercises

 2 assignments on VTK

(74)

08-01-29 | #74

@ UU/IT

Computer exercises

 One project on VTK

(75)

Computer exercises

 Deadline is next lab session

• Give a demonstration of your program

• Show source code

• Be able to answer questions

(76)

08-01-29 | #76

@ UU/IT

Computer exercises

 Lab 1

Wednesday September 7 13:15-17:00 P1312D, P1313D

Basics of VTK

 UpUnet account, UU-LOCAL, password C

 VTK 5.0.0 is installed in

• G:\Program\ACGV\VTK-5.0.0

 You need to set the proper paths, run the script in a command prompt

• G:\Program\ACGV\set_paths.bat

(77)

Filip Malmberg

filip @cb.uu.se

References

Related documents

I The main goal of the course is that you will learn how to program using the programming language Python..

Important greedy problems and algorithms discussed in this chapter include the knapsack problem (selecting a weight-bounded subset of items with maximum value), where the

A one-line method is all that is required (code example 13). Duck typing also makes the meta parameter completely generic and transparent. It is generic because any parameter type

(Recall that a sorting algorithm sorts in place if only a constant number of elements of the input ar- ray are ever stored outside the array.) Merge sort has a better asymptotic

When denesting infinitely nested radicals, as when we deal with infinity in general (infinite sums, infinite products), we have to study the convergence of those.. We will

Examinations for courses that are cancelled or rescheduled such that they are not given in one or several years are held three times during the year that immediately follows the

Examinations for courses that are cancelled or rescheduled such that they are not given in one or several years are held three times during the year that immediately follows the

Examinations for courses that are cancelled or rescheduled such that they are not given in one or several years are held three times during the year that immediately follows the