2017-03-05 5 views
1

メディカルアプリの3D人体パートの選択を準備しようとしていました。SCNViewの選択された場所の表示に関する問題

ジオメトリの選択された場所を表示する必要があります。

しかし、私がこのプロセスを達成するために直面​​している問題は、正面から身体に触れると、(選択された位置を示す)円は体に平行です。

しかし、同じことを背面または側面から適用すると、平行に描画されません。

ここはスクリーンショットです。 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:^{ 
    }]; 
} 
} 

のために適用されているコードは、私はサークルを含む平面のそれぞれにSCNBillboardConstraintを追加 https://www.dropbox.com/s/i7y28enid51d4cw/Selection%20of%20body%20part.mov?dl=0

+0

"それは平行四辺形を描いていない"と言ったとき - 両方のマーカーが同じ平面にあるか、カメラに向けることを期待していますか?期待される行動が何であるかを明確にすることはできますか? – sambro

+0

私はちょうど円(触れられた点のハイライト)が身体の部分に平行にしたいです。 たとえば、はんだに触れると、円ははんだと平行になります。 もし私が背中に触れるならば、それは背中と平行でなければなりません。私が平行に言うと正確である必要はなく、上の画像に示されている胸の点のようにすべきです。 3Dボディで同じことをするときに円が動いたり変形したりしても問題ありません。 –

答えて

0

を作成しようとしていますことを、デモです。そうすれば、彼らはカメラに向けることができます。また、身体の子ではなく、シーンのルートノードの子にする必要があります。これにより、身体から独立して動くことができます。

関連する問題