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