public override void TouchesEnded(NSSet touches, UIEvent evt)
        {
            base.TouchesEnded(touches, evt);

            if (touches.AnyObject is UITouch touch)
            {
                var point = touch.LocationInView(SceneView);

                var hitTestOptions = new SCNHitTestOptions();

                var hits = SceneView.HitTest(point, hitTestOptions);
                var hit  = hits.FirstOrDefault();

                if (hit == null)
                {
                    return;
                }

                var node = hit.Node;

                if (node == null)
                {
                    return;
                }

                var redMaterial = new SCNMaterial();
                redMaterial.Diffuse.Contents = UIColor.Purple;

                node.Geometry.Materials = new SCNMaterial[] { redMaterial };
            }
        }
Esempio n. 2
0
        public override void TouchesEnded(NSSet touches, UIEvent evt)
        {
            //TODO 2.2 Interactuando con elementos de pantalla
            base.TouchesEnded(touches, evt);

            if (touches.AnyObject is UITouch touch)
            {
                CGPoint point = touch.LocationInView(this.sceneView);

                SCNHitTestOptions hitTestOptions = new SCNHitTestOptions();

                SCNHitTestResult[] hits = sceneView.HitTest(point, hitTestOptions);
                SCNHitTestResult   hit  = hits.FirstOrDefault();

                if (hit == null)
                {
                    return;
                }

                SCNNode node = hit.Node;

                if (node == null)
                {
                    return;
                }

                node.RemoveFromParentNode();
            }
        }
Esempio n. 3
0
        // Hit tests against the `sceneView` to find an object at the provided point.
        protected VirtualObject VirtualObjectAt(CGPoint loc)
        {
            var hitTestOptions = new SCNHitTestOptions {
                BoundingBoxOnly = true
            };
            var hitTestResults = SceneView.HitTest(loc, hitTestOptions);

            if (hitTestResults.Count() == 0)
            {
                return(null);
            }
            var firstNodeHit = hitTestResults.First((result) => VirtualObject.IsNodePartOfVirtualObject(result.Node));
            var voNode       = VirtualObject.ForChildNode(firstNodeHit.Node);

            return(voNode);
        }
Esempio n. 4
0
 public static SCNHitTestResult[] HitTest(ISCNSceneRenderer This, CGPoint thePoint, SCNHitTestOptions options)
 {
     return This.HitTest (thePoint, options == null ? null : options.Dictionary);
 }
Esempio n. 5
0
		public void DidBeginContact (SCNPhysicsWorld world, SCNPhysicsContact contact)
		{
			SCNNode ball;

			if (contact.NodeA.PhysicsBody.Type == SCNPhysicsBodyType.Dynamic) {
				ball = contact.NodeA;
			} else {
				ball = contact.NodeB;
			}

			if (ball != null) {
				DispatchQueue.MainQueue.DispatchAsync (ball.RemoveFromParentNode);

				var plokCopy = (SCNParticleSystem)Plok.Copy ();
				plokCopy.ParticleImage = Plok.ParticleImage; // to workaround an bug in seed #1
				plokCopy.ParticleColor = (SKColor)ball.Geometry.FirstMaterial.Diffuse.Contents;
				Scene.AddParticleSystem (plokCopy, SCNMatrix4.CreateTranslation (contact.ContactPoint.X, contact.ContactPoint.Y, contact.ContactPoint.Z));

				//compute texture coordinate
				var pointA = new SCNVector3 (contact.ContactPoint.X, contact.ContactPoint.Y, contact.ContactPoint.Z + 20);
				var pointB = new SCNVector3 (contact.ContactPoint.X, contact.ContactPoint.Y, contact.ContactPoint.Z - 20);

				var hitTestOptions = new SCNHitTestOptions (NSDictionary.FromObjectAndKey (Torus, SCNHitTest.RootNodeKey));
				var results = SceneView.Scene.RootNode.HitTest (pointA, pointB, hitTestOptions);

				if (results.Length > 0) {
					var hit = results [0];
					AddPaint (hit.GetTextureCoordinatesWithMappingChannel (0), plokCopy.ParticleColor);
				}
			}
		}
 public static SCNHitTestResult[] HitTest(ISCNSceneRenderer This, CGPoint thePoint, SCNHitTestOptions options)
 {
     return(This.HitTest(thePoint, options == null ? null : options.Dictionary));
 }