This is hanging due to the way avalon.py works.  It's primarily intended for 
working at the interactive console.  When Avalon.py gets started it hijacks the 
console execution so that all execution occurs on another thread.  This other 
thread is the primary thread for the app's window and its constantly pumping 
messages.  This allows you to continue to work at the console while the app 
remains responsive.

When you run this from a script that's not going to work because the script 
isn't being entered at the console.  The key thing you need to do is app = 
Application() and then app.Run() at the bottom of your script.  I copied the 
necessary lines out of Avalon.py and ended up with:

import clr

#from avalon import *

clr.AddReferenceByPartialName("PresentationCore")
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("WindowsBase")


from System import *
from System.Windows import *
from System.Windows.Media import *
from System.Windows.Media.Animation import *
from System.Windows.Controls import *
from System.Windows.Shapes import *
from System.Windows.Threading import *
from System.Windows import *
from System.Windows.Media import *
from System.Windows.Media.Media3D import * #from System.Windows.Media.Media3D 
import Viewport3D


w=Window()
v=Viewport3D()

cam = PerspectiveCamera()
cam.FarPlaneDistance = 100
cam.LookDirection = Vector3D(-11,-10,-9)
cam.UpDirection = Vector3D(0,0,1)
cam.NearPlaneDistance = 1
cam.Position = Point3D(11,10,9)
cam.FieldOfView = 70
v.Camera = cam

triangleMesh = MeshGeometry3D()
point0 = Point3D(0, 0, 0)
point1 = Point3D(5, 0, 0)
point2 = Point3D(0, 0, 5)
triangleMesh.Positions.Add(point0)
triangleMesh.Positions.Add(point1)
triangleMesh.Positions.Add(point2)
triangleMesh.TriangleIndices.Add(0)
triangleMesh.TriangleIndices.Add(2)
triangleMesh.TriangleIndices.Add(1)
normal = Vector3D(0, 1, 0)
triangleMesh.Normals.Add(normal)
triangleMesh.Normals.Add(normal)
triangleMesh.Normals.Add(normal)
material = DiffuseMaterial(SolidColorBrush(Colors.Lime))
triangleModel = GeometryModel3D(triangleMesh, material)
model = ModelVisual3D()
model.Content = triangleModel
v.Children.Add(model)

#aggiungo una luce
lightmodel = ModelVisual3D()
light = DirectionalLight()
light.Color=Colors.White
light.Direction=Vector3D(-2,-3,-1)
lightmodel.Content = light
v.Children.Add(lightmodel)

#visualizza:
w.Content=v
w.Show()
app = Application()
app.Run()
#############################

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of walgri
Sent: Wednesday, August 15, 2007 7:01 AM
To: [email protected]
Subject: Re: [IronPython] WPF 3D: Missing Viewport3D when importing

Sorry, please replace the previous script with the following one.
Running this script as standalone actually shows what I meant and
hangs. But I guess this is unrelated to the Viewport3D issue.
#############################
import clr

from avalon import *

clr.AddReferenceByPartialName("PresentationCore")
clr.AddReferenceByPartialName("PresentationFramework")


from System.Windows import *
from System.Windows.Media import *
from System.Windows.Media.Media3D import *
#from System.Windows.Media.Media3D import Viewport3D


w=Window()
v=Viewport3D()

cam = PerspectiveCamera()
cam.FarPlaneDistance = 100
cam.LookDirection = Vector3D(-11,-10,-9)
cam.UpDirection = Vector3D(0,0,1)
cam.NearPlaneDistance = 1
cam.Position = Point3D(11,10,9)
cam.FieldOfView = 70
v.Camera = cam

triangleMesh = MeshGeometry3D()
point0 = Point3D(0, 0, 0)
point1 = Point3D(5, 0, 0)
point2 = Point3D(0, 0, 5)
triangleMesh.Positions.Add(point0)
triangleMesh.Positions.Add(point1)
triangleMesh.Positions.Add(point2)
triangleMesh.TriangleIndices.Add(0)
triangleMesh.TriangleIndices.Add(2)
triangleMesh.TriangleIndices.Add(1)
normal = Vector3D(0, 1, 0)
triangleMesh.Normals.Add(normal)
triangleMesh.Normals.Add(normal)
triangleMesh.Normals.Add(normal)
material = DiffuseMaterial(SolidColorBrush(Colors.Lime))
triangleModel = GeometryModel3D(triangleMesh, material)
model = ModelVisual3D()
model.Content = triangleModel
v.Children.Add(model)

#aggiungo una luce
lightmodel = ModelVisual3D()
light = DirectionalLight()
light.Color=Colors.White
light.Direction=Vector3D(-2,-3,-1)
lightmodel.Content = light
v.Children.Add(lightmodel)

#visualizza:
w.Content=v
w.Show()
#############################

Best regards,
Walgri

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to