有关显示SCNView的所选位置的问题

时间:2017-03-05 08:12:19

标签: ios objective-c xcode xcode8 scenekit

我正在尝试为医疗应用程序准备一个3d人体部位选择。

我需要在其中显示选定的几何位置。

但我实现这个过程的问题是,当我从前视图触摸身体时,圆圈(表示选定的位置。)与身体平行。

但是当我从后视图或侧视图中应用相同的东西时,它并不是平行的。

以下是截图。Front view of 3D view, Side view of 3D view

我申请的代码

-(void)HandleTap:(UIGestureRecognizer *)sender
{
CGPoint p = [sender locationInView:self.sceneView];
NSMutableArray *hitResults = nil;
hitResults = [[self.sceneView hitTest:p options:nil] mutableCopy];
if([hitResults count] > 0){
    __block SCNHitTestResult *result = [hitResults objectAtIndex:0];
    float circleArea = .5;
    SCNPlane * plane = [SCNPlane planeWithWidth:circleArea height:circleArea];
    plane.cornerRadius = circleArea/2.0;
    plane.firstMaterial.diffuse.contents = [UIColor redColor];
    SCNNode *shapeNode = [SCNNode nodeWithGeometry: plane];
    shapeNode.position = SCNVector3Make(result.localCoordinates.x, result.localCoordinates.y, result.localCoordinates.z+.1);
    [result.node addChildNode:shapeNode];
    UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Alert" message:@"Give a title to selected Human body area." preferredStyle:UIAlertControllerStyleAlert];
    __block UITextField * bodyAreaField;
    [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        bodyAreaField = textField;
    }];
    [alert addAction:[UIAlertAction actionWithTitle:@"Set" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSMutableArray * array = [[[NSUserDefaults standardUserDefaults] valueForKey:@"SelectedParts"] mutableCopy];
        if(!array)
        {
            array = [NSMutableArray new];
        }
        NSDictionary * dict = @{@"BodyArea":bodyAreaField.text,
                                @"BodyArea_X_position":[NSNumber numberWithFloat:result.localCoordinates.x],
                                @"BodyArea_Y_position":[NSNumber numberWithFloat:result.localCoordinates.y],
                                @"BodyArea_Z_position":[NSNumber numberWithFloat:result.localCoordinates.z]};
        [array addObject:dict];
        [[NSUserDefaults standardUserDefaults] setValue:array forKey:@"SelectedParts"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        NSLog(@"stored body parts %@",[[NSUserDefaults standardUserDefaults] valueForKey:@"SelectedParts"]);
    }]];
    [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    }]];
    [self presentViewController:alert animated:YES completion:^{
    }];
}
}

这是我想要创建的演示 https://www.dropbox.com/s/i7y28enid51d4cw/Selection%20of%20body%20part.mov?dl=0

1 个答案:

答案 0 :(得分:0)

为包含您圈子的每个平面添加>>> df = pd.DataFrame({'Person': ['bob', 'jim', 'joe', 'bob', 'jim', 'joe'], 'Color':['blue', 'green', 'orange', 'yellow', 'pink', 'purple']}) >>> df Color Person 0 blue bob 1 green jim 2 orange joe 3 yellow bob 4 pink jim 5 purple joe 。这将使他们面向相机。你还必须让他们成为场景的根节点的孩子,而不是身体的孩子,这样他们就可以独立于身体移动。