1
メディカルアプリの3D人体パートの選択を準備しようとしていました。SCNViewの選択された場所の表示に関する問題
ジオメトリの選択された場所を表示する必要があります。
しかし、私がこのプロセスを達成するために直面している問題は、正面から身体に触れると、(選択された位置を示す)円は体に平行です。
しかし、同じことを背面または側面から適用すると、平行に描画されません。
ここはスクリーンショットです。
私はここ
-(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
"それは平行四辺形を描いていない"と言ったとき - 両方のマーカーが同じ平面にあるか、カメラに向けることを期待していますか?期待される行動が何であるかを明確にすることはできますか? – sambro
私はちょうど円(触れられた点のハイライト)が身体の部分に平行にしたいです。 たとえば、はんだに触れると、円ははんだと平行になります。 もし私が背中に触れるならば、それは背中と平行でなければなりません。私が平行に言うと正確である必要はなく、上の画像に示されている胸の点のようにすべきです。 3Dボディで同じことをするときに円が動いたり変形したりしても問題ありません。 –