と言う訳で、下のエントリ書きながらタバコすってたら「ここだー!」とかダメなところを思いついてしまったので直してうp。

up/downは上下の角度修正になっているので、penUp/penDownでペンの上げ下ろしを行う。
あと、backはないのでforwardしかない。
クリアもリセットもない。
でも螺旋とか書けそうな気がしてくる。
以前作成したwireFrameを修正して使う。

#!/usr/bin/env python

from wireFrame import *
from math import *

class turtle3D:
    def __init__(self):
        self.wf = wireFrame()
        self.currentPoint = (0,0,0)
        self.angle = [0,0]
        self.penStatus = 1

    def right(self,angle):
        xy,z = self.angle
        xy = xy - angle
        self.angle = [xy,z]

    def left(self,angle):
        xy,z = self.angle
        xy = xy + angle
        self.angle = [xy,z]

    def up(self,angle):
        xy,z = self.angle
        z = z + angle
        self.angle = [xy,z]

    def down(self,angle):
        xy,z = self.angle
        z = z + angle
        self.angle = [xy,z]

    def penDown(self):
        self.penStatus = 1
    
    def penUp(self):
        self.penStatus = 0

    def forward(self,l):
        x,y,z = self.currentPoint
        axy,az = self.angle
        zcos = cos(radians(az))
        zsin = sin(radians(az))
        nx,ny,nz = cos(radians(axy))*l*zcos+x,sin(radians(axy))*l*zcos+y,z+zsin*l
        if self.penStatus==1:
            self.wf.createObject(['line',x,y,z,nx,ny,nz])
        print x,y,z,nx,ny,nz,axy,az
        self.currentPoint = [nx,ny,nz]

修正されたwireFrame

#!/usr/bin/env python

import Tkinter
import tkFileDialog
import math

class wireFrame:
    def clickOpenFile(self):
        fileName = tkFileDialog.askopenfilename()
        self.openFile(fileName)
    def cnvMap(self,x,y,z):
        return (x-self.width/2,y*-1+self.height/2)

    def cnvCanvas(self,x,y,z):
        interval = self.viewPoint.get()*10 / (self.viewPoint.get()*10 + float(z))
        x = x*interval
        y = y*interval
        return (x+self.width/2,(y-self.height/2)*-1)

    def roll(self,x,y,degree):
        (orgX,orgY) = (x,y)
        orgR = math.sqrt(math.pow(orgX,2)+math.pow(orgY,2))
        if orgR==0:
            return (x,y)
        orgTheta = math.atan2(orgY/orgR,orgX/orgR)
        theta = math.radians(degree)+orgTheta
        x = math.cos(theta)*orgR
        y = math.sin(theta)*orgR
        return (x,y)

    def roll3DbySetting(self,x,y,z):
        x,y = self.roll(x,y,self.zAxisRollAngle.get())
        y,z = self.roll(y,z,self.xAxisRollAngle.get())
        x,z = self.roll(x,z,self.yAxisRollAngle.get())
        return (x,y,z)

    def createObject(self,item):
        if item[0]=='line':
            (itemType,sx,sy,sz,ex,ey,ez) = (item[0],
                                            int(item[1]),int(item[2]),int(item[3]),
                                            int(item[4]),int(item[5]),int(item[6]))
            (rsx,rsy,rsz) = self.roll3DbySetting(sx,sy,sz)
            (rex,rey,rez) = self.roll3DbySetting(ex,ey,ez)
            (lineSx,lineSy) = self.cnvCanvas(rsx,rsy,rsz)
            (lineEx,lineEy) = self.cnvCanvas(rex,rey,rez)
            line = self.canvas.create_line(lineSx,lineSy,
                                           lineEx,lineEy,
                                           fill="red",width=3)
            self.objects.append((line,itemType,sx,sy,sz,ex,ey,ez))
        else:
            pass
        pass
    def openFile(self,fileName):
        f = open(fileName)
        for row in f:
            row = row.replace('\n','')
            if row=='':continue
            item = row.split(',')
            obj = self.createObject(item)
        f.close()

    def angleChanged(self,event):
        for ii in range(len(self.objects)):
            item,itemType,sx,sy,sz,ex,ey,ez = self.objects[ii]
            (rsx,rsy,rsz) = self.roll3DbySetting(sx,sy,sz)
            (rex,rey,rez) = self.roll3DbySetting(ex,ey,ez)
            (lineSx,lineSy) = self.cnvCanvas(rsx,rsy,rsz)
            (lineEx,lineEy) = self.cnvCanvas(rex,rey,rez)
            self.canvas.coords(item,lineSx,lineSy,lineEx,lineEy)
            
    def __init__(self):
        self.window = Tkinter.Tk()
        self.width = 640
        self.height = 480
        self.canvas = Tkinter.Canvas(self.window,bg="white",
                                     width=self.width,height=self.height)
        self.canvas.pack()
        self.xAxisRollAngle = Tkinter.Scale(self.window, from_=0, to=360,
                                            orient=Tkinter.HORIZONTAL)
        self.xAxisRollAngle.bind("<ButtonPress-1>",self.angleChanged)
        self.xAxisRollAngle.bind("<ButtonRelease-1>",self.angleChanged)
        self.xAxisRollAngle.bind("<B1-Motion>",self.angleChanged)
        self.xAxisRollAngle.pack(side=Tkinter.LEFT);

        self.yAxisRollAngle = Tkinter.Scale(self.window, from_=0, to=360,
                                            orient=Tkinter.HORIZONTAL)
        self.yAxisRollAngle.bind("<ButtonPress-1>",self.angleChanged)
        self.yAxisRollAngle.bind("<ButtonRelease-1>",self.angleChanged)
        self.yAxisRollAngle.bind("<B1-Motion>",self.angleChanged)
        self.yAxisRollAngle.pack(side=Tkinter.LEFT);

        self.zAxisRollAngle = Tkinter.Scale(self.window, from_=0, to=360,
                                            orient=Tkinter.HORIZONTAL)
        self.zAxisRollAngle.bind("<ButtonRelease-1>",self.angleChanged)
        self.zAxisRollAngle.bind("<ButtonPress-1>",self.angleChanged)
        self.zAxisRollAngle.bind("<B1-Motion>",self.angleChanged)
        self.zAxisRollAngle.pack(side=Tkinter.LEFT);

        self.viewPoint = Tkinter.Scale(self.window, from_=1, to=100,
                                       orient=Tkinter.HORIZONTAL)
        self.viewPoint.bind("<ButtonRelease-1>",self.angleChanged)
        self.viewPoint.bind("<ButtonPress-1>",self.angleChanged)
        self.viewPoint.bind("<B1-Motion>",self.angleChanged)
        self.viewPoint.set(100)
        self.viewPoint.pack(side=Tkinter.LEFT);

        self.btnOpenFile = Tkinter.Button(self.window,text="open",command=self.clickOpenFile)
        self.btnOpenFile.pack(side=Tkinter.RIGHT)

        self.objects = []
        
#        self.window.mainloop()

if __name__=='__main__':
    wireFrame()