1/2 >>

PyOpenGL

いまさらながら,
Python2.4.3で検証。

とりあえずsite-packagesにインストールしているもの

Numeric-24.2.win32-py2.4.exe
ctypes-1.0.1-py2.4-win32.egg
PyOpenGL-3.0.0b5-py2.4.egg(PyOpenGL-3.0.0a5-py2.4.zipからsetup.py install)
setuptools-0.6c3-py2.4.egg
setuptools-0.6c8-py2.4.egg

必要なものなどなど
Togl2.0-8.4-Windows.zip
gle32.zip


import OpenGL.Tkでパスがみつからないエラーがでていた。

Traceback (most recent call last):
File "C:\Python24\PyOpenGL-3.0.0b5\Demo\tom\checker.py", line 15, in ?
from OpenGL.Tk import *
File "c:\python24\lib\site-packages\PyOpenGL-3.0.0b5-py2.4.egg\OpenGL\Tk\__ini
t__.py", line 87, in ?
_default_root.tk.call('package', 'require', 'Togl')
_tkinter.TclError: can't find package Togl

Togl2.0-8.4-Windows.zipを解凍し,

C:\Python24\Lib\site-packages\PyOpenGL-3.0.0b5-py2.4.egg\OpenGL\Tk
のなかに,win32-tk8.4フォルダを作成。
Togl20.dll
pkgIndex.tcl
を放り込んだら,動いた。

keyファンクションで怒られる。
エスケープでsys.exit()しようとすると

Traceback (most recent call last):
File "c:\python24\lib\site-packages\PyOpenGL-3.0.0b5-py2.4.egg\OpenGL\GLUT\spe
cial.py", line 117, in safeCall
return function( *args, **named )
File "C:\Python24\nehe1-10\dms\bounce.py", line 38, in keyboard
sys.exit(0)
SystemExit: 0
GLUT Keyboard callback with ('\x1b', 360, 163)
,{} failed: returning None 0

Python2.5だと問題ないようですが,
PyOpenGLの
PyOpenGL-2.0.2.01.py2.4-numpy23.exeだとエラーは出なかった。

いろいろなOpenGLサンプルが動いたり,動かなかったり,
きっちり,モジュールは何を使うか,決めるか。
モジュールって,ポケモンみたいだ。
  • -
  • -

Jython起動しない・・・・

はじめて試してみる。
バッチを起動してもコンソールが出ない・・・
C:\jython2.2.1>jython.bat
Exception in thread "main" java.lang.NoClassDefFoundError: Files\Java\j2re1/4/2\
lib\ext\QTJava/zip
Caused by: java.lang.ClassNotFoundException: Files\Java\j2re1.4.2\lib\ext\QTJava
.zip
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

調べてみたら,以前インストールしたQuickTimeかiTuneの仕業。
環境変数
CLASSPATH
"C:\Program Files\Java\j2re1.4.2\lib\ext\QTJava.zip"
が書き込まれていた。
削除して,
コマンドプロンプトから
C:\jython2.2.1>set classpath
CLASSPATH="C:\Program Files\Java\j2re1.4.2\lib\ext\QTJava.zip"

C:\jython2.2.1>set classpath=

C:\jython2.2.1>set classpath
環境変数 classpath が定義されていません

つぎに,jython起動。
C:\jython2.2.1>jython.bat
Jython 2.2.1 on java1.6.0_07
Type "copyright", "credits" or "license" for more information.
>>> 2**100
1267650600228229401496703205376L
>>>

できました。
おかわり!!
  • -
  • -

まとめる

基本的には、継続した勉強をする。
Python触り始めて、自分なりのヘナチョコにプログラミングだが、面白い。常に勉強になる。
AIRでBMRTサンプルをレンダリング
今日も一日ありがとうございます。
  • -
  • -

Python+VTK

こちらから,コンパイルされた,VTK 5.2.1 (ZIP, 11.9 MB) for Python 2.5 Win32 compiled with Visual Studio 2003. をダウンロードする。ありがとうございます。
http://www.lfd.uci.edu/~gohlke/

解凍して,C:\Python25\Lib\site-packagesへインストールした。

こちらのサンプル
http://www.nims.go.jp/cmsc/staff/arai/pythonvtk/sample.html

無事実行できました。
ありがとうございます。

from vtk import *
#from libVTKCommonPython import *
#from libVTKGraphicsPython import *
コメントアウトにしたら動いた。ありがとうございます。

http://www.imaging.robarts.ca/~dgobbi/vtk/vtkpython.html
vtkTkRenderWidget.dllをコンパイルしないといけない???
TKの方はエラーが出てしまいます。

こちらのサンプルも動きました。面白い!!!
http://d.hatena.ne.jp/kenmo/20050708
  • -
  • -

VTK + Python2

こちらを参考にして,参考の参考になります。
http://www.hp.phys.titech.ac.jp/serino/hippo.html


#rensyu.py
# -*- coding: utf-8 -*-
#qを押すと2つ目のウインドウがでる。

import vtk
sphere=vtk.vtkSphereSource()
sphere.SetRadius(1.0)
sphere.SetThetaResolution(18)
sphere.SetPhiResolution(18)
map = vtk.vtkPolyDataMapper()
map.SetInput(sphere.GetOutput())
aSphere = vtk.vtkActor()
aSphere.SetMapper(map)
aSphere.GetProperty().SetColor(0,0,1)
ren1 = vtk.vtkRenderer()
renWin= vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
ren1.AddActor(aSphere)
ren1.SetBackground(0.2,0.4,0.6)
renWin.Render() #球体が表示される
iren.Start() #マウスで動かせる

quadric = vtk.vtkQuadric()
quadric.SetCoefficients(0.5,1,0.2,0,0.1,0,0,0.2,0,0)
sample = vtk.vtkSampleFunction()
sample.SetSampleDimensions(50,50,50)
sample.SetImplicitFunction(quadric)
contours = vtk.vtkContourFilter()
contours.SetInput(sample.GetOutput())
contours.GenerateValues(5,0.0,1.2)
contMapper = vtk.vtkPolyDataMapper()
contMapper.SetInput(contours.GetOutput())
contMapper.SetScalarRange(0.0,1.2)
contActor = vtk.vtkActor()
contActor.SetMapper(contMapper)
outline = vtk.vtkOutlineFilter()
outline.SetInput(sample.GetOutput())
outlineMapper = vtk.vtkPolyDataMapper()
outlineMapper.SetInput(outline.GetOutput())
outlineActor = vtk.vtkActor()
outlineActor.SetMapper(outlineMapper)
outlineActor.GetProperty().SetColor(0,0,0)
ren2 = vtk.vtkRenderer()
renWin2 = vtk.vtkRenderWindow()
renWin2.AddRenderer(ren2)
iren2 = vtk.vtkRenderWindowInteractor()
iren2.SetRenderWindow(renWin2)
ren2.AddActor(contActor)
ren2.AddActor(outlineActor)
ren2.SetBackground(0.2,0.4,0.6)
renWin2.Render()
iren2.Start()

VTK+Python
  • -
  • -

easy_installでPyOpenGLのアンインストール

easy_install -m PyOpenGL==3.0.0a5

Searching for PyOpenGL==3.0.0a5
Best match: pyopengl 3.0.0a5
Processing pyopengl-3.0.0a5-py2.5.egg
Removing pyopengl 3.0.0a5 from easy-install.pth file

Using c:\python25\lib\site-packages\pyopengl-3.0.0a5-py2.5.egg

Because this distribution was installed --multi-version, before you can
import modules from this package in an application, you will need to
'import pkg_resources' and then use a 'require()' call similar to one of
these examples, in order to select the desired version:

pkg_resources.require("pyopengl") # latest installed version
pkg_resources.require("pyopengl==3.0.0a5") # this exact version
pkg_resources.require("pyopengl>=3.0.0a5") # this version or higher

Processing dependencies for PyOpenGL==3.0.0a5
Finished processing dependencies for PyOpenGL==3.0.0a5

できました。ありがとうございます。
  • -
  • -

Pythonのインデント

エラーメッセージ
IndentationError: unindent does not match any outer indentation level
調べてみると・・・
インデントがきちんとしていると思っていたら、矢印キーでうろうろしてみると、2ヶ所、タブになっているところがありました。

  • スペースかタブかどちらかに統一して記述する。
    • -
    • -

    Improper indentation.

    Improper indentation.
    mqo pythonでエラー表示。
    いろんなサイトで公開されているスクリプトをこぴぺして実行しようとしたら、上記のエラー
    Improper indentation.

    メタセコイアのスクリプトエディタで表示された。
    どの行かも、黄色で表示される。
    EmEditorで編集してみたら、
    関数def部分のインデントが空白行とタブが混在していることがわかった。
    よって。エディタでタブに統一した。

    Metasequoia(メタセコイア)でpythonスクリプトを読み込んで実行したら、できました。
    ありがとうございます。
    • -
    • -

    辞書と正規化

    メタセコイアのPythonを使うために、
    辞書と関数について検証してみました。
    勉強になります。ありがとうございます。

    C:\Python22jp>python
    Python 2.2.3 (SJIS enhanced) (#42, Jun 8 2003, 01:46:45) [MSC 32 bit (Intel)] o
    n win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> c={}
    >>> for i in range(5):
    ... c[i]=[]
    ...
    >>> c
    {0: [], 1: [], 2: [], 3: [], 4: []}
    >>> c[0]=[1,2,3]
    >>> c
    {0: [1, 2, 3], 1: [], 2: [], 3: [], 4: []}
    >>> def add(a,b):
    ... return [a[i]+b[i] for i in range(len(a))]
    ...
    >>> c[1]=[3,2,1]
    >>> add(c[0],c[1])
    [4, 4, 4]
    >>> c
    {0: [1, 2, 3], 1: [3, 2, 1], 2: [], 3: [], 4: []}
    >>> c[2]=add(c[0],c[1])
    >>> c
    {0: [1, 2, 3], 1: [3, 2, 1], 2: [4, 4, 4], 3: [], 4: []}
    >>> import math
    >>> def normalize(x,y,z):
    ... s=math.sqrt(x*x+y*y+z*z)
    ... if s==0:s=1
    ... else: s=1.0/s
    ... return x*s,y*s,z*s
    ...
    >>> c[0]
    [1, 2, 3]
    >>> normalize(1,2,3)
    (0.2672612419124244, 0.53452248382484879, 0.80178372573727319)
    >>> normalize(c[0])
    Traceback (most recent call last):
    File "", line 1, in ?
    TypeError: normalize() takes exactly 3 arguments (1 given)
    >>> normalize(*c[0])
    (0.2672612419124244, 0.53452248382484879, 0.80178372573727319)
    >>> normalize(4,4,4)
    (0.57735026918962584, 0.57735026918962584, 0.57735026918962584)
    >>> normalize(*add(c[0],c[1]))
    (0.57735026918962584, 0.57735026918962584, 0.57735026918962584)
    >>>
    • -
    • -

    1〜20までの乱数を重複しないように表示する

    Pythonを使って、
    1〜20までの乱数を重複しないように20個表示するスクリプトを考えてみた。

    30回表示します。


    #random_num3.py
    import random

    for i in range(30):
    a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
    b=[]
    while len(a)>1:
    index=int(random.random()*len(a)+1)
    b.append(a[index-1])
    del a[index-1]
    b.append(a[0])
    print b




    表示結果
    C:\Python25>random_num3.py
    [11, 5, 15, 18, 6, 13, 16, 9, 8, 14, 1, 4, 7, 10, 12, 3, 20, 2, 19, 17]
    [17, 9, 12, 15, 7, 2, 18, 5, 16, 6, 4, 10, 19, 14, 1, 3, 20, 8, 13, 11]
    [13, 17, 1, 14, 19, 11, 2, 4, 10, 15, 3, 5, 18, 7, 20, 6, 8, 16, 12, 9]
    [6, 12, 19, 10, 17, 5, 13, 4, 1, 2, 3, 20, 16, 11, 14, 8, 18, 7, 15, 9]
    [12, 2, 15, 5, 19, 3, 6, 9, 20, 7, 4, 10, 17, 8, 14, 16, 13, 18, 1, 11]
    [18, 5, 2, 20, 19, 10, 7, 15, 16, 12, 6, 4, 11, 1, 3, 13, 8, 9, 17, 14]
    [6, 19, 14, 13, 15, 8, 5, 7, 11, 10, 2, 4, 12, 16, 20, 18, 3, 9, 1, 17]
    [4, 14, 13, 9, 2, 19, 12, 5, 11, 17, 8, 10, 16, 6, 18, 7, 1, 20, 3, 15]
    [18, 10, 20, 12, 16, 7, 17, 2, 6, 9, 8, 19, 11, 3, 15, 1, 14, 13, 5, 4]
    [14, 1, 15, 5, 11, 13, 2, 7, 4, 17, 6, 3, 18, 16, 10, 9, 8, 19, 12, 20]
    [13, 18, 19, 9, 7, 3, 20, 5, 2, 11, 15, 14, 8, 6, 10, 17, 16, 4, 12, 1]
    [14, 15, 20, 9, 16, 1, 2, 10, 18, 3, 13, 17, 5, 12, 19, 4, 8, 7, 11, 6]
    [13, 6, 3, 10, 5, 11, 14, 2, 16, 19, 20, 4, 8, 18, 1, 7, 12, 17, 15, 9]
    [17, 7, 19, 12, 2, 20, 3, 15, 16, 5, 10, 14, 1, 9, 18, 8, 6, 11, 13, 4]
    [3, 14, 11, 20, 18, 2, 17, 8, 7, 13, 6, 12, 5, 10, 15, 19, 9, 16, 1, 4]
    [11, 20, 4, 15, 1, 19, 18, 8, 3, 14, 2, 13, 6, 12, 7, 5, 9, 17, 16, 10]
    [8, 7, 18, 9, 11, 4, 20, 15, 5, 10, 16, 1, 12, 14, 13, 19, 3, 2, 6, 17]
    [15, 20, 6, 4, 8, 16, 2, 18, 13, 19, 11, 9, 7, 3, 10, 12, 17, 1, 5, 14]
    [8, 3, 11, 20, 9, 18, 7, 1, 13, 5, 4, 19, 2, 15, 12, 14, 17, 10, 16, 6]
    [2, 6, 10, 12, 8, 14, 15, 18, 3, 19, 13, 20, 4, 16, 17, 11, 5, 1, 9, 7]
    [11, 2, 8, 15, 17, 5, 3, 20, 1, 10, 13, 18, 19, 12, 14, 4, 7, 16, 6, 9]
    [19, 20, 18, 14, 12, 16, 9, 17, 11, 10, 5, 1, 2, 3, 13, 7, 4, 15, 8, 6]
    [14, 8, 2, 15, 11, 13, 9, 7, 16, 19, 17, 5, 6, 12, 18, 1, 4, 20, 10, 3]
    [4, 16, 3, 9, 6, 12, 8, 5, 17, 1, 14, 7, 18, 11, 19, 10, 15, 13, 20, 2]
    [2, 19, 8, 9, 12, 4, 5, 20, 10, 13, 11, 18, 7, 14, 16, 3, 6, 17, 15, 1]
    [11, 5, 1, 10, 3, 8, 18, 19, 15, 13, 12, 16, 7, 2, 4, 20, 6, 9, 17, 14]
    [16, 19, 15, 6, 9, 14, 5, 2, 12, 8, 10, 18, 3, 13, 4, 7, 1, 11, 20, 17]
    [8, 6, 13, 16, 7, 1, 4, 19, 5, 15, 11, 12, 14, 18, 20, 3, 2, 17, 10, 9]
    [4, 17, 18, 10, 6, 16, 13, 7, 1, 3, 11, 9, 14, 5, 12, 2, 20, 19, 15, 8]
    [16, 10, 6, 5, 20, 13, 2, 11, 9, 18, 1, 14, 3, 17, 12, 4, 19, 15, 8, 7]

    常に勉強します。
    • -
    • -

    1/2 >>