Skip to content

Commit a015e55

Browse files
authored
Merge pull request #55 from hsorby/main
Add new function rotate_to_next_standard_view.
2 parents 217ae13 + 1bff79e commit a015e55

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

src/cmlibs/utils/zinc/general.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from cmlibs.zinc.context import Context
77
from cmlibs.zinc.result import RESULT_OK
88

9+
from cmlibs.maths.vectorops import normalize, sub, magnitude, dot, mult
10+
911

1012
def is_exf_file(filename):
1113
if not os.path.isfile(filename):
@@ -168,5 +170,34 @@ def create_node(field_module, data_object, identifier=-1, node_set_name='nodes',
168170
return node.getIdentifier()
169171

170172

173+
def rotate_to_next_standard_view(scene_viewer):
174+
if scene_viewer is not None:
175+
result, eyePosition, lookAtPosition, upVector = scene_viewer.getLookatParameters()
176+
upVector = normalize(upVector)
177+
viewVector = sub(lookAtPosition, eyePosition)
178+
viewDistance = magnitude(viewVector)
179+
viewVector = normalize(viewVector)
180+
# viewX = dot(viewVector, [1.0, 0.0, 0.0])
181+
viewY = dot(viewVector, [0.0, 1.0, 0.0])
182+
viewZ = dot(viewVector, [0.0, 0.0, 1.0])
183+
# upX = dot(upVector, [1.0, 0.0, 0.0])
184+
upY = dot(upVector, [0.0, 1.0, 0.0])
185+
upZ = dot(upVector, [0.0, 0.0, 1.0])
186+
if (viewZ < -0.999) and (upY > 0.999):
187+
# XY -> XZ
188+
viewVector = [0.0, 1.0, 0.0]
189+
upVector = [0.0, 0.0, 1.0]
190+
elif (viewY > 0.999) and (upZ > 0.999):
191+
# XZ -> YZ
192+
viewVector = [-1.0, 0.0, 0.0]
193+
upVector = [0.0, 0.0, 1.0]
194+
else:
195+
# XY
196+
viewVector = [0.0, 0.0, -1.0]
197+
upVector = [0.0, 1.0, 0.0]
198+
eyePosition = sub(lookAtPosition, mult(viewVector, viewDistance))
199+
scene_viewer.setLookatParametersNonSkew(eyePosition, lookAtPosition, upVector)
200+
201+
171202
defineStandardGraphicsObjects = define_standard_graphics_objects
172203
createNode = create_node

0 commit comments

Comments
 (0)