1 """
2 Old implementation using Tkinter. This is no longer supported.
3 If possible use the Qt-Variant
4 """
5
6 import sys
7
8 from PyFoam.RunDictionary.ParsedBlockMeshDict import ParsedBlockMeshDict
9 from PyFoam.Applications.PyFoamApplication import PyFoamApplication
10 from PyFoam.Error import error,warning
11
13 try:
14 global Tkinter
15 import Tkinter
16 global vtk
17 try:
18 import vtk
19 print "Using system-VTK"
20 except ImportError:
21 print "Trying VTK implementation from Paraview"
22 from paraview import vtk
23 global vtkTkRenderWindowInteractor
24 from vtk.tk.vtkTkRenderWindowInteractor import vtkTkRenderWindowInteractor
25 except ImportError,e:
26 error("Error while importing modules:",e)
27
30 description="""
31 Reads the contents of a blockMeshDict-file and displays the
32 vertices as spheres (with numbers). The blocks are sketched by
33 lines. One block can be seceted with a slider. It will be
34 displayed as a green cube with the local directions x1,x2 and
35 x3. Also a patch that is selected by a slider will be sketched
36 by blue squares.
37 This implementation uses Tkinter and is no longer activly developed.
38 Use the QT-version.
39 """
40 PyFoamApplication.__init__(self,
41 description=description,
42 usage="%prog [options] <blockMeshDict>",
43 interspersed=True,
44 nr=1)
45
47 doImports()
48
49 self.renWin = vtk.vtkRenderWindow()
50 self.ren = vtk.vtkRenderer()
51 self.renWin.AddRenderer(self.ren)
52 self.renWin.SetSize(600, 600)
53 self.ren.SetBackground(0.7, 0.7, 0.7)
54 self.ren.ResetCamera()
55 self.cam = self.ren.GetActiveCamera()
56
57 self.axes = vtk.vtkCubeAxesActor2D()
58 self.axes.SetCamera(self.ren.GetActiveCamera())
59
60 self.undefinedActor=vtk.vtkTextActor()
61 self.undefinedActor.GetPositionCoordinate().SetCoordinateSystemToNormalizedDisplay()
62 self.undefinedActor.GetPositionCoordinate().SetValue(0.05,0.2)
63 self.undefinedActor.GetTextProperty().SetColor(1.,0.,0.)
64 self.undefinedActor.SetInput("")
65
66 try:
67 self.readFile()
68 except Exception,e:
69 warning("While reading",self.parser.getArgs()[0],"this happened:",e)
70 raise e
71
72 self.ren.ResetCamera()
73
74 self.root = Tkinter.Tk()
75 self.root.withdraw()
76
77
78 self.top = Tkinter.Toplevel(self.root)
79 self.top.title("blockMesh-Viewer")
80 self.top.protocol("WM_DELETE_WINDOW", self.quit)
81
82
83 self.f1 = Tkinter.Frame(self.top)
84 self.f2 = Tkinter.Frame(self.top)
85
86 self.f1.pack(side="top", anchor="n", expand=1, fill="both")
87 self.f2.pack(side="bottom", anchor="s", expand="f", fill="x")
88
89
90 self.rw = vtkTkRenderWindowInteractor(self.f1, width=400, height=400, rw=self.renWin)
91 self.rw.pack(expand="t", fill="both")
92
93 self.blockHigh=Tkinter.IntVar()
94 self.blockHigh.set(-1)
95
96 self.oldBlock=-1
97 self.blockActor=None
98 self.blockTextActor=None
99
100 self.patchHigh=Tkinter.IntVar()
101 self.patchHigh.set(-1)
102
103 self.oldPatch=-1
104 self.patchActor=None
105 self.patchTextActor=vtk.vtkTextActor()
106 self.patchTextActor.GetPositionCoordinate().SetCoordinateSystemToNormalizedDisplay()
107 self.patchTextActor.GetPositionCoordinate().SetValue(0.05,0.1)
108 self.patchTextActor.GetTextProperty().SetColor(0.,0.,0.)
109 self.patchTextActor.SetInput("Patch: <none>")
110
111 self.scroll=Tkinter.Scale(self.f2,orient='horizontal',
112 from_=-1,to=len(self.blocks)-1,resolution=1,tickinterval=1,
113 label="Block (-1 is none)",
114 variable=self.blockHigh,command=self.colorBlock)
115
116 self.scroll.pack(side="top", expand="t", fill="x")
117
118 self.scroll2=Tkinter.Scale(self.f2,orient='horizontal',
119 from_=-1,to=len(self.patches.keys())-1,resolution=1,tickinterval=1,
120 label="Patch (-1 is none)",
121 variable=self.patchHigh,command=self.colorPatch)
122
123 self.scroll2.pack(side="top", expand="t", fill="x")
124
125 self.f3 = Tkinter.Frame(self.f2)
126 self.f3.pack(side="bottom", anchor="s", expand="f", fill="x")
127
128 self.b1 = Tkinter.Button(self.f3, text="Quit", command=self.quit)
129 self.b1.pack(side="left", expand="t", fill="x")
130 self.b2 = Tkinter.Button(self.f3, text="Reread blockMeshDict", command=self.reread)
131 self.b2.pack(side="left", expand="t", fill="x")
132
133 self.root.update()
134
135 self.iren = self.renWin.GetInteractor()
136 self.istyle = vtk.vtkInteractorStyleSwitch()
137
138 self.iren.SetInteractorStyle(self.istyle)
139 self.istyle.SetCurrentStyleToTrackballCamera()
140
141 self.addProps()
142
143 self.iren.Initialize()
144 self.renWin.Render()
145 self.iren.Start()
146
147 self.root.mainloop()
148
177
179 if not i in self.undefined:
180 self.undefined.append(i)
181
183 self.ren.AddViewProp(self.axes)
184 self.ren.AddActor2D(self.patchTextActor)
185 self.ren.AddActor2D(self.undefinedActor)
186
188 sphere=vtk.vtkSphereSource()
189 sphere.SetRadius(self.vRadius*factor)
190 sphere.SetCenter(coord)
191 mapper=vtk.vtkPolyDataMapper()
192 mapper.SetInputConnection(sphere.GetOutputPort())
193 actor = vtk.vtkActor()
194 actor.SetMapper(mapper)
195 self.ren.AddActor(actor)
196
197 return actor
198
200 coord=self.vertices[index]
201 self.vActors[index]=self.addPoint(coord)
202 text=vtk.vtkVectorText()
203 text.SetText(str(index))
204 tMapper=vtk.vtkPolyDataMapper()
205 tMapper.SetInput(text.GetOutput())
206 tActor = vtk.vtkFollower()
207 tActor.SetMapper(tMapper)
208 tActor.SetScale(2*self.vRadius,2*self.vRadius,2*self.vRadius)
209 tActor.AddPosition(coord[0]+self.vRadius,coord[1]+self.vRadius,coord[2]+self.vRadius)
210 tActor.SetCamera(self.cam)
211 tActor.GetProperty().SetColor(1.0,0.,0.)
212 self.ren.AddActor(tActor)
213
215 try:
216 c1=self.vertices[index1]
217 c2=self.vertices[index2]
218 except:
219 if index1>=len(self.vertices):
220 self.addUndefined(index1)
221 if index2>=len(self.vertices):
222 self.addUndefined(index2)
223 return None
224 line=vtk.vtkLineSource()
225 line.SetPoint1(c1)
226 line.SetPoint2(c2)
227 mapper=vtk.vtkPolyDataMapper()
228 mapper.SetInputConnection(line.GetOutputPort())
229 actor = vtk.vtkActor()
230 actor.SetMapper(mapper)
231 self.ren.AddActor(actor)
232 return actor
233
235 try:
236 c1=self.vertices[index1]
237 c2=self.vertices[index2]
238 except:
239 return None,None
240 line=vtk.vtkLineSource()
241 line.SetPoint1(c1)
242 line.SetPoint2(c2)
243 tube=vtk.vtkTubeFilter()
244 tube.SetRadius(self.vRadius*0.5)
245 tube.SetNumberOfSides(10)
246 tube.SetInput(line.GetOutput())
247 text=vtk.vtkVectorText()
248 text.SetText(label)
249 tMapper=vtk.vtkPolyDataMapper()
250 tMapper.SetInput(text.GetOutput())
251 tActor = vtk.vtkFollower()
252 tActor.SetMapper(tMapper)
253 tActor.SetScale(self.vRadius,self.vRadius,self.vRadius)
254 tActor.AddPosition((c1[0]+c2[0])/2+self.vRadius,(c1[1]+c2[1])/2+self.vRadius,(c1[2]+c2[2])/2+self.vRadius)
255 tActor.SetCamera(self.cam)
256 tActor.GetProperty().SetColor(0.0,0.,0.)
257 return tube.GetOutput(),tActor
258
260 points = vtk.vtkPoints()
261 for i in range(len(lst)):
262 v=lst[i]
263 points.InsertPoint(i,v[0],v[1],v[2])
264 spline=vtk.vtkParametricSpline()
265 spline.SetPoints(points)
266 spline.ClosedOff()
267 splineSource=vtk.vtkParametricFunctionSource()
268 splineSource.SetParametricFunction(spline)
269 mapper=vtk.vtkPolyDataMapper()
270 mapper.SetInputConnection(splineSource.GetOutputPort())
271 actor = vtk.vtkActor()
272 actor.SetMapper(mapper)
273 self.ren.AddActor(actor)
274
285
287 points = vtk.vtkPoints()
288 side = vtk.vtkCellArray()
289 side.InsertNextCell(len(lst))
290 for i in range(len(lst)):
291 try:
292 v=self.vertices[lst[i]]
293 except:
294 self.addUndefined(lst[i])
295 return None
296 points.InsertPoint(i,v[0],v[1],v[2])
297 side.InsertCellPoint(i)
298 result=vtk.vtkPolyData()
299 result.SetPoints(points)
300 result.SetPolys(side)
301
302 return result
303
305 b=self.blocks[index]
306
307 self.addLine(b[ 0],b[ 1])
308 self.addLine(b[ 3],b[ 2])
309 self.addLine(b[ 7],b[ 6])
310 self.addLine(b[ 4],b[ 5])
311 self.addLine(b[ 0],b[ 3])
312 self.addLine(b[ 1],b[ 2])
313 self.addLine(b[ 5],b[ 6])
314 self.addLine(b[ 4],b[ 7])
315 self.addLine(b[ 0],b[ 4])
316 self.addLine(b[ 1],b[ 5])
317 self.addLine(b[ 2],b[ 6])
318 self.addLine(b[ 3],b[ 7])
319
321 append=vtk.vtkAppendPolyData()
322 for a in self.vActors:
323 if a!=None:
324 append.AddInput(a.GetMapper().GetInput())
325 self.axes.SetInput(append.GetOutput())
326
327
328
331
333 self.ren.RemoveAllViewProps()
334 self.patchActor=None
335 self.blockActor=None
336 self.blockTextActor=None
337 self.addProps()
338 self.readFile()
339
340 tmpBlock=int(self.blockHigh.get())
341 if not tmpBlock<len(self.blocks):
342 tmpBlock=len(self.blocks)-1
343 self.scroll.config(to=len(self.blocks)-1)
344 self.blockHigh.set(tmpBlock)
345 self.colorBlock(tmpBlock)
346
347 tmpPatch=int(self.patchHigh.get())
348 if not tmpPatch<len(self.patches.keys()):
349 tmpPatch=len(self.patches.keys())-1
350 self.scroll2.config(to=len(self.patches.keys())-1)
351 self.patchHigh.set(tmpPatch)
352 self.colorPatch(tmpPatch)
353
354 self.renWin.Render()
355
357 newBlock=int(value)
358 if self.oldBlock>=0 and self.blockActor!=None:
359 self.ren.RemoveActor(self.blockActor)
360 for ta in self.blockTextActor:
361 self.ren.RemoveActor(ta)
362 self.blockActor=None
363 self.blockTextActor=None
364 if newBlock>=0:
365 append=vtk.vtkAppendPolyData()
366 append2=vtk.vtkAppendPolyData()
367 b=self.blocks[newBlock]
368 append.AddInput(self.makeFace([b[0],b[1],b[2],b[3]]))
369 append.AddInput(self.makeFace([b[4],b[5],b[6],b[7]]))
370 append.AddInput(self.makeFace([b[0],b[1],b[5],b[4]]))
371 append.AddInput(self.makeFace([b[3],b[2],b[6],b[7]]))
372 append.AddInput(self.makeFace([b[0],b[3],b[7],b[4]]))
373 append.AddInput(self.makeFace([b[1],b[2],b[6],b[5]]))
374 d,t1=self.makeDirection(b[0],b[1],"x1")
375 append.AddInput(d)
376 self.ren.AddActor(t1)
377 d,t2=self.makeDirection(b[0],b[3],"x2")
378 append.AddInput(d)
379 self.ren.AddActor(t2)
380 d,t3=self.makeDirection(b[0],b[4],"x3")
381 append.AddInput(d)
382 self.ren.AddActor(t3)
383 self.blockTextActor=(t1,t2,t3)
384 mapper=vtk.vtkPolyDataMapper()
385 mapper.SetInputConnection(append.GetOutputPort())
386 self.blockActor = vtk.vtkActor()
387 self.blockActor.SetMapper(mapper)
388 self.blockActor.GetProperty().SetColor(0.,1.,0.)
389 self.blockActor.GetProperty().SetOpacity(0.3)
390 self.ren.AddActor(self.blockActor)
391
392 self.oldBlock=newBlock
393 self.renWin.Render()
394
396 newPatch=int(value)
397 if self.oldPatch>=0 and self.patchActor!=None:
398 self.ren.RemoveActor(self.patchActor)
399 self.patchActor=None
400 self.patchTextActor.SetInput("Patch: <none>")
401 if newPatch>=0:
402 name=self.patches.keys()[newPatch]
403 subs=self.patches[name]
404 append=vtk.vtkAppendPolyData()
405 for s in subs:
406 append.AddInput(self.makeFace(s))
407 mapper=vtk.vtkPolyDataMapper()
408 mapper.SetInputConnection(append.GetOutputPort())
409 self.patchActor = vtk.vtkActor()
410 self.patchActor.SetMapper(mapper)
411 self.patchActor.GetProperty().SetColor(0.,0.,1.)
412 self.patchActor.GetProperty().SetOpacity(0.3)
413 self.ren.AddActor(self.patchActor)
414 self.patchTextActor.SetInput("Patch: "+name)
415
416 self.oldPatch=newPatch
417 self.renWin.Render()
418