0 Replies
      Latest reply on Mar 17, 2019 12:16 AM by Jack C
      Jack C Level 1 Level 1 (0 points)

        I want to test the SCNNode whether overlap to other exist SCNNode. Therefore, I try to use contactTestBetween. But, I got crash. I cannot provide more crash information because I encounter "iPhone has denied the launch request" and must turn off debug executable.

         

        var node: SCNNode!
        var node2: SCNNode!
        @objc func handleTap(_ gesture: UITapGestureRecognizer) {
        
        
            if(node == nil){
                let center = gesture.location(in: gesture.view)
                let boxCenter = CGPoint(x: center.x, y: center.y)
        
        
                let arHitTestResult: [ARHitTestResult] = drawer.cameraView.hitTest(boxCenter, types: [.estimatedHorizontalPlane, .featurePoint])
                if let result = arHitTestResult.first{
                    let transform: matrix_float4x4 = result.worldTransform
        
        
                    node = SCNNode()
                    let box = SCNBox(width: 0.3, height: 0.3, length: 0.3, chamferRadius: 0)
                    box.firstMaterial?.diffuse.contents = TLDarknet.labels_tl_color[0]
                    node.geometry = box
                    node.position = SCNVector3Make(transform.columns.3.x, transform.columns.3.y, transform.columns.3.z)
                    node.physicsBody = SCNPhysicsBody(type: .kinematic, shape: SCNPhysicsShape(geometry: box, options: nil))
                    node.physicsBody!.categoryBitMask = 2
                    node.physicsBody!.contactTestBitMask = 2
                    node.physicsBody!.collisionBitMask = 2
                    self.cameraView.scene.rootNode.addChildNode(node)
        
        
        
        
                    let pointer = SCNScene(named: "art.scnassets/pointer.dae")
                    let t1 = pointer!.rootNode.childNodes[2]
                    t1.scale = SCNVector3(0.3, 0.3, 0.3)
        
        
                    node2 = SCNNode()
                    let box2 = SCNBox(width: CGFloat(t1.boundingBox.max.x - t1.boundingBox.min.x), height: CGFloat(t1.boundingBox.max.y - t1.boundingBox.min.y), length: CGFloat(t1.boundingBox.max.z - t1.boundingBox.min.z), chamferRadius: 0)
                    box2.firstMaterial?.diffuse.contents = TLDarknet.labels_tl_color[1]
                    node2.addChildNode(t1)
                    node2.position = SCNVector3Make(transform.columns.3.x, transform.columns.3.y, transform.columns.3.z)
                    node2.physicsBody = SCNPhysicsBody(type: .kinematic, shape: SCNPhysicsShape(geometry: box2, options: nil))
                    node2.physicsBody!.categoryBitMask = 2
                    node2.physicsBody!.contactTestBitMask = 2
                    node2.physicsBody!.collisionBitMask = 2
                    self.cameraView.scene.rootNode.addChildNode(node2)
                }
            }else{
                let center = gesture.location(in: gesture.view)
                let boxCenter = CGPoint(x: center.x, y: center.y)
        
        
                let arHitTestResult: [ARHitTestResult] = drawer.cameraView.hitTest(boxCenter, types: [.estimatedHorizontalPlane, .featurePoint])
                if let result = arHitTestResult.first{
                    let transform: matrix_float4x4 = result.worldTransform
        
        
                    let pointer = SCNScene(named: "art.scnassets/pointer.dae")
                    let t1 = pointer!.rootNode.childNodes[2]
                    t1.scale = SCNVector3(0.3, 0.3, 0.3)
        
        
                    node2 = SCNNode()
                    let box2 = SCNBox(width: CGFloat(t1.boundingBox.max.x - t1.boundingBox.min.x), height: CGFloat(t1.boundingBox.max.y - t1.boundingBox.min.y), length: CGFloat(t1.boundingBox.max.z - t1.boundingBox.min.z), chamferRadius: 0)
                    box2.firstMaterial?.diffuse.contents = TLDarknet.labels_tl_color[1]
                    node2.addChildNode(t1)
                    node2.position = SCNVector3Make(transform.columns.3.x, transform.columns.3.y, transform.columns.3.z)
                    node2.physicsBody = SCNPhysicsBody(type: .kinematic, shape: SCNPhysicsShape(geometry: box2, options: nil))
                    node2.physicsBody!.categoryBitMask = 2
                    node2.physicsBody!.contactTestBitMask = 2
                    node2.physicsBody!.collisionBitMask = 2
                    self.cameraView.scene.rootNode.addChildNode(node2)
                }
        
        
                print("ok? ", self.cameraView.scene.physicsWorld.contactTestBetween(node.physicsBody!, node2.physicsBody!, options: nil))
            }
        }