Skip to content

Commit

Permalink
more gui tests
Browse files Browse the repository at this point in the history
  • Loading branch information
SteveDoyle2 committed Apr 20, 2018
1 parent 7c4879f commit bb110c3
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 37 deletions.
33 changes: 33 additions & 0 deletions pyNastran/converters/nastran/test_nastran_gui.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
"""tests the NastranIO class"""
import os
import unittest

import numpy as np
import vtk

from pyNastran.gui.testing_methods import FakeGUIMethods
from pyNastran.converters.nastran.nastran_io import NastranIO
import pyNastran
Expand Down Expand Up @@ -318,13 +321,43 @@ def test_gui_bar_chan(self):
test.on_rotate_cclockwise()
test.rotate(15.0)
test.set_focal_point([0., 1., 2.])
test.export_case_data(icases=[0, 1])

test.update_camera('+x')
test.update_camera('-x')
test.update_camera('+y')
test.update_camera('-y')
test.update_camera('+z')
test.update_camera('-z')
#test.on_wireframe()
#test.on_surface()

with open('rotate.py', 'w') as pyfile:
pyfile.write('self.rotate(20.)\n')
test.on_run_script('rotate.py')

def test_gui_screenshot(self):
bdf_filename = os.path.join(MODEL_PATH, 'bars', 'pbarl_chan.bdf')
test = NastranGUI()
test.load_nastran_geometry(bdf_filename)

magnify = None

render_large = vtk.vtkRenderLargeImage()
test.run_vtk = True
#test.create_corner_axis()

# faking coordinate system
axes_actor = vtk.vtkAxesActor()
test.corner_axis = vtk.vtkOrientationMarkerWidget()
test.corner_axis.SetOrientationMarker(axes_actor)

#test.on_take_screenshot(fname='chan.png', magnify=None, show_msg=True)
out = test.tool_actions._screenshot_setup(magnify, render_large)
line_widths0, point_sizes0, coord_scale0, fake_axes_actor, magnify = out
test.tool_actions._screenshot_teardown(
line_widths0, point_sizes0, coord_scale0, axes_actor)

def test_gui_bar_chan1(self):
"""tests a PBARL/CHAN1"""
bdf_filename = os.path.join(MODEL_PATH, 'bars', 'pbarl_chan1.bdf')
Expand Down
2 changes: 2 additions & 0 deletions pyNastran/gui/qt_files/gui_attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -674,3 +674,5 @@ def on_wireframe(self):
"""sets the main/toggle actors to wirefreme"""
self.view_actions.on_wireframe()

def on_take_screenshot(self, fname=None, magnify=None, show_msg=True):
self.tool_actions.on_take_screenshot(fname=fname, magnify=magnify, show_msg=show_msg)
4 changes: 3 additions & 1 deletion pyNastran/gui/test/mock_vtk.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def SetPointSize(self, size):
assert isinstance(size, int), type(size)


class GeometryActor(object):
class vtkActor(object):
def __init__(self):
self._prop = GeometryProperty()
def GetProperty(self):
Expand Down Expand Up @@ -256,6 +256,8 @@ def GetActiveCamera(self):
return vtkCamera()
def ResetCameraClippingRange(self):
pass
def ResetCamera(self):
pass
def Render(self):
pass

Expand Down
10 changes: 5 additions & 5 deletions pyNastran/gui/testing_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
from pyNastran.bdf.cards.base_card import deprecated

from pyNastran.gui.test.mock_vtk import (
GeometryActor, GeometryProperty, GridMapper, # Grid
GeometryProperty, GridMapper, # Grid, vtkActor,
ArrowSource, Glyph3D, PolyDataMapper, VTKInteractor, vtkRenderer,
)
from vtk import vtkTextActor, vtkLODActor
from vtk import vtkTextActor, vtkLODActor, vtkActor
import vtk

#class ScalarBar(object):
Expand Down Expand Up @@ -81,7 +81,7 @@ def __init__(self, inputs=None):
self.result_cases = OrderedDict()
self._finish_results_io = self.passer1
#self.geometry_actors = {
#'main' : GeometryActor(),
#'main' : vtkActor(),
#}
self.main_grid_mappers = {'main' : GridMapper()}
self.grid = vtk.vtkUnstructuredGrid()
Expand All @@ -92,7 +92,7 @@ def __init__(self, inputs=None):
'main' : self.grid,
}
self.main_geometry_actors = {
'main' : GeometryActor(),
'main' : vtkActor(),
}

self.glyph_source = ArrowSource()
Expand Down Expand Up @@ -261,7 +261,7 @@ def displacement_scale_factor(self):

def _add_alt_actors(self, alt_grids):
for name, grid in iteritems(alt_grids):
self.geometry_actors[name] = GeometryActor()
self.geometry_actors[name] = vtkActor()

def log_debug(self, msg):
"""turns logs into prints to aide debugging"""
Expand Down
67 changes: 36 additions & 31 deletions pyNastran/gui/tool_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,41 @@ def on_take_screenshot(self, fname=None, magnify=None, show_msg=True):
TODO: screenshot doesn't work well with the coordinate system text size
"""
fname, flt = self._get_screenshot_filename(fname)

if not fname:
return
render_large = vtk.vtkRenderLargeImage()
render_large.SetInput(self.rend)

out = self._screenshot_setup(magnify, render_large)
line_widths0, point_sizes0, coord_scale0, axes_actor, magnify = out

nam, ext = os.path.splitext(fname)
ext = ext.lower()
for nam, exts, obj in (('PostScript', ['.ps'], vtk.vtkPostScriptWriter),
("BMP", ['.bmp'], vtk.vtkBMPWriter),
('JPG', ['.jpg', '.jpeg'], vtk.vtkJPEGWriter),
("TIFF", ['.tif', '.tiff'], vtk.vtkTIFFWriter)):
if flt == nam:
fname = fname if ext in exts else fname + exts[0]
writer = obj()
break
else:
fname = fname if ext == '.png' else fname + '.png'
writer = vtk.vtkPNGWriter()

writer.SetInputConnection(render_large.GetOutputPort())
writer.SetFileName(fname)
writer.Write()

#self.log_info("Saved screenshot: " + fname)
if show_msg:
self.gui.log_command('on_take_screenshot(%r, magnify=%s)' % (fname, magnify))
self._screenshot_teardown(line_widths0, point_sizes0, coord_scale0, axes_actor)

def _get_screenshot_filename(self, fname):
"""helper method for ``on_take_screenshot``"""
if fname is None or fname is False:
filt = ''
default_filename = ''
Expand Down Expand Up @@ -274,37 +309,7 @@ def on_take_screenshot(self, fname=None, magnify=None, show_msg=True):
flt = ext.lower()
else:
flt = 'png'

if not fname:
return
render_large = vtk.vtkRenderLargeImage()
render_large.SetInput(self.rend)

out = self._screenshot_setup(magnify, render_large)
line_widths0, point_sizes0, coord_scale0, axes_actor, magnify = out

nam, ext = os.path.splitext(fname)
ext = ext.lower()
for nam, exts, obj in (('PostScript', ['.ps'], vtk.vtkPostScriptWriter),
("BMP", ['.bmp'], vtk.vtkBMPWriter),
('JPG', ['.jpg', '.jpeg'], vtk.vtkJPEGWriter),
("TIFF", ['.tif', '.tiff'], vtk.vtkTIFFWriter)):
if flt == nam:
fname = fname if ext in exts else fname + exts[0]
writer = obj()
break
else:
fname = fname if ext == '.png' else fname + '.png'
writer = vtk.vtkPNGWriter()

writer.SetInputConnection(render_large.GetOutputPort())
writer.SetFileName(fname)
writer.Write()

#self.log_info("Saved screenshot: " + fname)
if show_msg:
self.gui.log_command('on_take_screenshot(%r, magnify=%s)' % (fname, magnify))
self._screenshot_teardown(line_widths0, point_sizes0, coord_scale0, axes_actor)
return fname, flt

def _screenshot_setup(self, magnify, render_large):
"""helper method for ``on_take_screenshot``"""
Expand Down

0 comments on commit bb110c3

Please sign in to comment.