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 }; } }
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(); } }
// 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); }
public static SCNHitTestResult[] HitTest(ISCNSceneRenderer This, CGPoint thePoint, SCNHitTestOptions options) { return This.HitTest (thePoint, options == null ? null : options.Dictionary); }
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)); }