Skip to content

Commit 6a36d74

Browse files
committed
Don't reset camera when toggling wireframe
1 parent 3db332c commit 6a36d74

1 file changed

Lines changed: 43 additions & 40 deletions

File tree

Viewer/SceneViewController.swift

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ class SceneViewController: NSViewController {
139139
guard showAxes != oldValue else {
140140
return
141141
}
142-
updateAxesNode()
143-
resetCamera(nil)
142+
updateAxesAndCamera()
144143
}
145144
}
146145

@@ -156,9 +155,9 @@ class SceneViewController: NSViewController {
156155

157156
var camera: CameraType = .front {
158157
didSet {
159-
updateAxesNode()
160-
updateCameraNode()
161-
resetCamera(nil)
158+
if camera != oldValue {
159+
updateAxesAndCamera()
160+
}
162161
}
163162
}
164163

@@ -169,32 +168,38 @@ class SceneViewController: NSViewController {
169168

170169
var geometry: Geometry? {
171170
didSet {
172-
// clear scene
173-
scnScene.rootNode.childNodes.forEach { $0.removeFromParentNode() }
174-
175-
// add axes
176-
if showAxes {
177-
scnScene.rootNode.addChildNode(axesNode)
171+
refreshGeometry()
172+
if geometry?.bounds != oldValue?.bounds {
173+
updateAxesAndCamera()
178174
}
175+
refreshView()
176+
}
177+
}
179178

180-
// restore selection
181-
selectGeometry(selectedGeometry?.scnGeometry)
179+
private func refreshGeometry() {
180+
// clear scene
181+
scnScene.rootNode.childNodes.forEach { $0.removeFromParentNode() }
182182

183-
guard let geometry = geometry, !geometry.bounds.isEmpty else {
184-
scnView.allowsCameraControl = showAxes
185-
return
186-
}
183+
// add axes
184+
if showAxes {
185+
scnScene.rootNode.addChildNode(axesNode)
186+
}
187187

188-
// create geometry
189-
geometry.children.forEach {
190-
scnScene.rootNode.addChildNode(SCNNode($0))
191-
}
188+
// restore selection
189+
selectGeometry(selectedGeometry?.scnGeometry)
192190

193-
// update camera
194-
updateCameraNode()
195-
scnView.allowsCameraControl = true
196-
refreshView()
191+
guard let geometry = geometry, !geometry.bounds.isEmpty else {
192+
scnView.allowsCameraControl = showAxes
193+
return
197194
}
195+
196+
// create geometry
197+
geometry.children.forEach {
198+
scnScene.rootNode.addChildNode(SCNNode($0))
199+
}
200+
201+
// update camera
202+
scnView.allowsCameraControl = true
198203
}
199204

200205
private func refreshView() {
@@ -248,8 +253,7 @@ class SceneViewController: NSViewController {
248253
scnView.autoenablesDefaultLighting = true
249254
scnView.antialiasingMode = .multisampling16X
250255
scnView.allowsCameraControl = geometry != nil
251-
updateCameraNode()
252-
resetCamera(nil)
256+
updateAxesAndCamera()
253257

254258
// add a click gesture recognizer
255259
let clickGesture = NSClickGestureRecognizer(target: self, action: #selector(handleClick(_:)))
@@ -258,7 +262,18 @@ class SceneViewController: NSViewController {
258262
scnView.gestureRecognizers = gestureRecognizers
259263
}
260264

261-
func updateCameraNode() {
265+
private func updateAxesAndCamera() {
266+
// Update axes
267+
axesNode.removeFromParentNode()
268+
axesNode = SCNNode(Axes(
269+
scale: axesSize,
270+
camera: camera,
271+
background: background
272+
))
273+
if showAxes {
274+
scnScene.rootNode.insertChildNode(axesNode, at: 0)
275+
}
276+
// Update camera node
262277
guard let bounds = geometry?.bounds else {
263278
return
264279
}
@@ -286,18 +301,6 @@ class SceneViewController: NSViewController {
286301
cameraNode.position = SCNVector3(viewCenter - camera.direction * distance + offset)
287302
cameraNode.eulerAngles = SCNVector3(.zero)
288303
cameraNode.look(at: SCNVector3(viewCenter))
289-
}
290-
291-
func updateAxesNode() {
292-
axesNode.removeFromParentNode()
293-
axesNode = SCNNode(Axes(
294-
scale: axesSize,
295-
camera: camera,
296-
background: background
297-
))
298-
if showAxes {
299-
scnScene.rootNode.insertChildNode(axesNode, at: 0)
300-
}
301304
resetCamera(nil)
302305
}
303306

0 commit comments

Comments
 (0)