@@ -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