public KinectV2SettingsControl(int kinectNumber, ref KinectBase.MasterSettings settings, KinectBase.IKinectCore kinect)
        {
            if (settings != null)
            {
                if (settings.kinectOptionsList[kinectNumber].version == KinectBase.KinectVersion.KinectV2)
                {
                    masterSettings = settings;
                    dynamic tempSettings = settings.kinectOptionsList[kinectNumber];
                    kinectSettings = (KinectV2Settings)tempSettings;
                    kinectID = kinectNumber;
                    kinectCore = (KinectCoreV2)kinect;
                    uniqueKinectID = kinect.uniqueKinectID;

                    InitializeComponent();
                    this.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                    this.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
                }
                else
                {
                    throw new ArgumentException("The provided KinectID is not for a Kinect v2 sensor.");
                }
            }
            else
            {
                throw new NotSupportedException("Method arguments are invalid!");
            }
        }
Beispiel #2
0
        public KinectCoreV2(ref KinectBase.MasterSettings settings, bool isGUILaunched, int kinectNumber)
        {
            masterSettings = settings;
            dynamic temp = masterSettings.kinectOptionsList[kinectNumber];
            masterKinectSettings = (KinectV2Settings)temp;

            //TODO: Update this to open a specific Kinect v2, if the SDK is ever updated to support multiple on one machine
            kinect = KinectSensor.GetDefault();
            kinectID = kinectNumber;

            uint tempC = kinect.ColorFrameSource.FrameDescription.LengthInPixels;
            uint tempD = kinect.DepthFrameSource.FrameDescription.LengthInPixels;
            uint tempI = kinect.InfraredFrameSource.FrameDescription.LengthInPixels;
            colorImagePool = new KinectBase.ObjectPool<byte[]>(() => new byte[tempC * 4]);
            depthImagePool = new KinectBase.ObjectPool<byte[]>(() => new byte[tempD * 4]);
            irImagePool = new KinectBase.ObjectPool<byte[]>(() => new byte[tempI * sizeof(UInt16)]);

            if (isGUILaunched)
            {
                isGUI = true;
                LaunchKinect();
            }
            else
            {
                launchKinectDelegate kinectDelegate = LaunchKinect;
                IAsyncResult result = kinectDelegate.BeginInvoke(null, null);
                kinectDelegate.EndInvoke(result);  //Even though this is blocking, the events should be on a different thread now.
            }
        }
        //TODO: Subscribe this to the skeletonChanged event and update the GUI with a preview of the skeleton positions
        public NetworkKinectSettingsControl(int kinectNumber, ref KinectBase.MasterSettings settings, KinectBase.IKinectCore kinect)
        {
            if (settings != null)
            {
                if (settings.kinectOptionsList[kinectNumber].version == KinectBase.KinectVersion.NetworkKinect)
                {
                    masterSettings = settings;
                    dynamic tempSettings = settings.kinectOptionsList[kinectNumber];
                    kinectSettings = (NetworkKinectSettings)tempSettings;
                    kinectID = kinectNumber;
                    kinectCore = (NetworkKinectCore)kinect;
                    uniqueKinectID = kinect.uniqueKinectID;

                    InitializeComponent();

                    this.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                    this.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;

                    //Set the binding on the joint mapping data grid
                    jointMappingDataGrid.ItemsSource = kinectSettings.jointMappings;
                    jointMappingDataGrid.Items.Refresh();
                }
                else
                {
                    throw new ArgumentException("The provided KinectID is not for a network Kinect sensor.");
                }
            }
            else
            {
                throw new ArgumentNullException("settings");
            }
        }
Beispiel #4
0
        //Why is the kinectNumber nullable if it is requried later?
        public KinectCoreV1(ref KinectBase.MasterSettings settings, bool isGUILaunched, int? kinectNumber = null)
        {
            if (kinectNumber != null)
            {
                masterSettings = settings;
                dynamic tempSettings = masterSettings.kinectOptionsList[(int)kinectNumber];  //We have to use dynamic because the type of the Kinect settings in the master list isn't defined until runtime
                masterKinectSettings = (KinectV1Settings)tempSettings;

                //Initialize the object pools
                colorImagePool = new KinectBase.ObjectPool<byte[]>(() => new byte[640 * 480 * 4]);
                depthImagePool = new KinectBase.ObjectPool<byte[]>(() => new byte[640 * 480 * 4]);

                //Note: the kinectNumber could be greater than the number of Kinect v1s if there are other types of sensors in use
                //Therefore, we have to find the correct Kinect, if it exists using this loop
                int globalIndex = -1;
                for (int i = 0; i < KinectSensor.KinectSensors.Count; i++)
                {
                    if (KinectSensor.KinectSensors[i].DeviceConnectionId == masterSettings.kinectOptionsList[(int)kinectNumber].uniqueKinectID)
                    {
                        globalIndex = i;
                        break;
                    }
                }
                if (globalIndex >= 0)
                {
                    kinect = KinectSensor.KinectSensors[globalIndex];
                    kinectID = (int)kinectNumber;
                }
                else
                {
                    throw new System.IndexOutOfRangeException("Specified Kinect sensor does not exist");
                }

                if (isGUILaunched)
                {
                    isGUI = true;
                    LaunchKinect();
                }
                else
                {
                    launchKinectDelegate kinectDelegate = LaunchKinect;
                    IAsyncResult result = kinectDelegate.BeginInvoke(null, null);
                    kinectDelegate.EndInvoke(result);  //Even though this is blocking, the events should be on a different thread now.
                }
            }
            else
            {
                //TODO: Open the default Kinect?
                throw new NullReferenceException("To create a KinectCore object, the KinectNumber must be valid.");
            }
        }
        public KinectV1SettingsControl(int kinectNumber, ref KinectBase.MasterSettings settings, KinectBase.IKinectCore kinect)
        {
            if (settings != null)
            {
                if (settings.kinectOptionsList[kinectNumber].version == KinectBase.KinectVersion.KinectV1)
                {
                    masterSettings = settings;
                    dynamic tempSettings = settings.kinectOptionsList[kinectNumber];
                    kinectSettings = (KinectV1Settings)tempSettings;
                    kinectID = kinectNumber;
                    kinectCore = (KinectCoreV1)kinect;
                    kinectCore.AccelerationChanged += kinectCore_AccelerationChanged;
                    uniqueKinectID = kinect.uniqueKinectID;

                    InitializeComponent();

                    this.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                    this.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
                    //This moved to the wrapper
                    //Grid.SetColumn(this, 2);
                    //this.Visibility = System.Windows.Visibility.Collapsed;

                    if (kinectCore.isXbox360Kinect != null && (bool)kinectCore.isXbox360Kinect)
                    {
                        DisableK4WOnlyOptions();
                    }
                }
                else
                {
                    throw new ArgumentException("The provided KinectID is not for a Kinect v1 sensor.");
                }
            }
            else
            {
                throw new ArgumentNullException("settings");
            }
        }
Beispiel #6
0
        protected virtual void OnColorFrameReceived(KinectBase.ColorFrameEventArgs e)
        {
            if (ColorFrameReceived != null)
            {
                ColorFrameReceived(this, e);
            }

            //Put the object back in the image pool
            if (e.isIR)
            {
                irImagePool.PutObject(e.image);
            }
            else
            {
                colorImagePool.PutObject(e.image);
            }
        }
Beispiel #7
0
        protected virtual void OnDepthFrameReceived(KinectBase.DepthFrameEventArgs e)
        {
            if (DepthFrameReceived != null)
            {
                DepthFrameReceived(this, e);
            }

            //Put the image array back in the image pool
            depthImagePool.PutObject(e.image);
        }
Beispiel #8
0
 protected virtual void OnAccelerationChanged(KinectBase.AccelerationEventArgs e)
 {
     if (AccelerationChanged != null)
     {
         AccelerationChanged(this, e);
     }
 }
Beispiel #9
0
 protected virtual void OnAudioPositionChanged(KinectBase.AudioPositionEventArgs e)
 {
     if (AudioPositionChanged != null)
     {
         AudioPositionChanged(this, e);
     }
 }
Beispiel #10
0
 protected virtual void OnDepthFrameReceived(KinectBase.DepthFrameEventArgs e)
 {
     if (DepthFrameReceived != null)
     {
         DepthFrameReceived(this, e);
     }
 }
Beispiel #11
0
        public KinectBase.KinectSkeleton TransformSkeleton(KinectBase.KinectSkeleton skeleton)
        {
            KinectBase.KinectSkeleton transformedSkeleton = new KinectBase.KinectSkeleton();
            transformedSkeleton.leftHandClosed = skeleton.leftHandClosed;
            transformedSkeleton.rightHandClosed = skeleton.rightHandClosed;
            transformedSkeleton.TrackingId = skeleton.TrackingId;
            transformedSkeleton.SkeletonTrackingState = skeleton.SkeletonTrackingState;
            //transformedSkeleton.utcSampleTime = skeleton.utcSampleTime;
            transformedSkeleton.sourceKinectID = skeleton.sourceKinectID;
            transformedSkeleton.Position = skeletonTransformation.Transform(skeleton.Position);

            //Transform the joints
            for (int i = 0; i < skeleton.skeleton.Count; i++)
            {
                transformedSkeleton.skeleton[i] = TransformJoint(skeleton.skeleton[i]);
            }

            return transformedSkeleton;
        }
        void kinectCore_AccelerationChanged(object sender, KinectBase.AccelerationEventArgs e)
        {
            //Don't bother calling the disptacher (which is kind of expensive) if the control is hidden
            if (IsInitialized && Visibility == System.Windows.Visibility.Visible)
            {
                this.Dispatcher.BeginInvoke((Action)(() =>
                {
                    if (e.acceleration.HasValue)
                    {
                        AccelXTextBlock.Text = e.acceleration.Value.X.ToString("F2");
                        AccelYTextBlock.Text = e.acceleration.Value.Y.ToString("F2");
                        AccelZTextBlock.Text = e.acceleration.Value.Z.ToString("F2");
                    }
                    else
                    {
                        AccelXTextBlock.Text = "N/A";
                        AccelYTextBlock.Text = "N/A";
                        AccelZTextBlock.Text = "N/A";
                    }

                    if (e.elevationAngle.HasValue)
                    {
                        AngleTextBlock.Text = e.elevationAngle.Value.ToString();
                    }
                    else
                    {
                        AngleTextBlock.Text = "N/A";
                    }
                }), null);
            }
        }
Beispiel #13
0
        public Point MapJointToDepth(KinectBase.Joint joint, bool undoTransform)
        {
            Point mappedPoint = new Point(0, 0);
            Point3D transformedPosition = joint.Position;

            if (undoTransform)
            {
                Matrix3D inverseTransform = skeletonTransformation;
                inverseTransform.Invert();
                transformedPosition = inverseTransform.Transform(transformedPosition);
            }

            SkeletonPoint skelPoint = new SkeletonPoint();
            skelPoint.X = (float)transformedPosition.X;
            skelPoint.Y = (float)transformedPosition.Y;
            skelPoint.Z = (float)transformedPosition.Z;
            DepthImagePoint point = kinect.CoordinateMapper.MapSkeletonPointToDepthPoint(skelPoint, kinect.DepthStream.Format);
            mappedPoint.X = point.X;
            mappedPoint.Y = point.Y;

            return mappedPoint;
        }
Beispiel #14
0
        internal void ChangeColorResolution(KinectBase.ColorImageFormat newResolution)
        {
            kinect.ColorStream.Disable();
            if (newResolution != KinectBase.ColorImageFormat.Undefined)
            {
                kinect.ColorStream.Enable(convertColorImageFormat(newResolution));

                //Get the size, in bytes, of the new image array and reset the image pool
                int size = 0;
                if (newResolution == KinectBase.ColorImageFormat.InfraredResolution640x480Fps30)
                {
                    size = 640 * 480 * 2;
                }
                else if (newResolution == KinectBase.ColorImageFormat.RawBayerResolution1280x960Fps12 || newResolution == KinectBase.ColorImageFormat.RgbResolution1280x960Fps12)
                {
                    size = 1280 * 960 * 4;
                }
                else
                {
                    size = 640 * 480 * 4;
                }
                colorImagePool.ResetPool(() => new byte[size]);

                isColorStreamOn = true;
            }
            else
            {
                isColorStreamOn = false;
            }
        }
        public void UpdateGUI(KinectBase.MasterSettings newSettings)
        {
            if (kinectID.HasValue)
            {
                masterSettings = newSettings;
                dynamic tempSettings = newSettings.kinectOptionsList[kinectID.Value];
                kinectSettings = (KinectV2Settings)tempSettings;

                //Update the color options
                useColorRadioButton.IsChecked = kinectSettings.useColorPreview;
                useIRRadionButton.IsChecked = kinectSettings.useIRPreview;

                //Update the depth options
                ScaleDepthCheckBox.IsChecked = kinectSettings.scaleDepthToReliableRange;
                ColorizeDepthCheckBox.IsChecked = kinectSettings.colorizeDepth;

                //Update skeleton options
                UseSkeletonCheckBox.IsChecked = kinectSettings.mergeSkeletons;
                UseRawSkeletonCheckBox.IsChecked = kinectSettings.sendRawSkeletons;
                XFormRawSkeletonCheckBox.IsChecked = kinectSettings.transformRawSkeletons;

                //Update audio settings
                SendSoundAngleCheckBox.IsChecked = kinectSettings.sendAudioAngle;
                audioServerTextBox.Text = kinectSettings.audioAngleServerName;
                audioChannelTextBox.Text = kinectSettings.audioAngleChannel.ToString();
                audioBeamSkeletonNumberTextBox.Text = kinectSettings.audioBeamTrackSkeletonNumber.ToString();
                switch (kinectSettings.audioTrackMode)
                {
                    //Note: the enabled/disabled controls don't need to be set manually here because the selected index changed event will still be hit
                    case KinectBase.AudioTrackingMode.Feedback:
                    {
                        audioBeamModeComboBox.SelectedIndex = 1;
                        break;
                    }
                    case KinectBase.AudioTrackingMode.MergedSkeletonX:
                    {
                        audioBeamModeComboBox.SelectedIndex = 2;
                        break;
                    }
                    case KinectBase.AudioTrackingMode.LocalSkeletonX:
                    {
                        audioBeamModeComboBox.SelectedIndex = 3;
                        break;
                    }
                    default:
                    {
                        audioBeamModeComboBox.SelectedIndex = 0;
                        break;
                    }
                }

                //Update the position options
                xPosTextBox.Text = kinectSettings.kinectPosition.X.ToString();
                yPosTextBox.Text = kinectSettings.kinectPosition.Y.ToString();
                zPosTextBox.Text = kinectSettings.kinectPosition.Z.ToString();
                yawPosTextBox.Text = kinectSettings.kinectYaw.ToString();
                pitchPosTextBox.Text = kinectSettings.kinectPitch.ToString();
                rollPosTextBox.Text = kinectSettings.kinectRoll.ToString();
            }
        }
Beispiel #16
0
        internal void ChangeDepthResolution(KinectBase.DepthImageFormat newResolution)
        {
            kinect.DepthStream.Disable();
            if (newResolution != KinectBase.DepthImageFormat.Undefined)
            {
                kinect.DepthStream.Enable(convertDepthImageFormat(newResolution));

                //Get the size, in bytes, of the new image array and reset the image pool
                int size = 0;
                if (newResolution == KinectBase.DepthImageFormat.Resolution640x480Fps30)
                {
                    size = 640 * 480 * 4;
                }
                else if (newResolution == KinectBase.DepthImageFormat.Resolution320x240Fps30)
                {
                    size = 320 * 240 * 4;
                }
                else
                {
                    size = 80 * 60 * 4;
                }
                depthImagePool.ResetPool(() => new byte[size]);

                isDepthStreamOn = true;
            }
            else
            {
                isDepthStreamOn = false;
            }
        }
Beispiel #17
0
 private DepthImageFormat convertDepthImageFormat(KinectBase.DepthImageFormat format)
 {
     //The depth formats are all numbered the same for the Kienct v1, so we can do a straight cast
     return (DepthImageFormat)format;
 }
Beispiel #18
0
 private ColorImageFormat convertColorImageFormat(KinectBase.ColorImageFormat format)
 {
     //The color formats are all numbered the same for the Kienct v1, so we can do a straight cast
     return (ColorImageFormat)format;
 }
Beispiel #19
0
 protected virtual void OnLogMessageGenerated(KinectBase.LogMessageEventArgs e)
 {
     if (LogMessageGenerated != null)
     {
         LogMessageGenerated(this, e);
     }
 }
        public void UpdateGUI(KinectBase.MasterSettings settings)
        {
            if (kinectID.HasValue)
            {
                masterSettings = settings;
                dynamic tempSettings = masterSettings.kinectOptionsList[kinectID.Value];
                kinectSettings = (NetworkKinectSettings)tempSettings;

                //Shutdown the server, if it is running
                bool wasRunning = false;
                if (kinectCore.isKinectRunning)
                {
                    kinectCore.ShutdownSensor();
                    wasRunning = true;
                }

                //Update the skeleton server and joint mappings
                serverNameTextBox.Text = kinectSettings.serverName;
                jointMappingDataGrid.ItemsSource = kinectSettings.jointMappings;
                jointMappingDataGrid.Items.Refresh();

                //Update the physical position
                xPosTextBox.Text = kinectSettings.kinectPosition.X.ToString();
                yPosTextBox.Text = kinectSettings.kinectPosition.Y.ToString();
                zPosTextBox.Text = kinectSettings.kinectPosition.Z.ToString();
                yawTextBox.Text = kinectSettings.kinectYaw.ToString();
                pitchTextBox.Text = kinectSettings.kinectPitch.ToString();
                rollTextBox.Text = kinectSettings.kinectRoll.ToString();

                //Update the hand grab data
                lhServerTextBox.Text = kinectSettings.lhServerName;
                lhChannelTextBox.Text = kinectSettings.lhChannel.ToString();
                rhServerTextBox.Text = kinectSettings.rhServerName;
                rhChannelTextBox.Text = kinectSettings.rhChannel.ToString();

                //Restart the server if it was running to begin with
                if (wasRunning)
                {
                    kinectCore.StartNetworkKinect();
                }
            }
        }
Beispiel #21
0
 //Methods to fire the events
 protected virtual void OnSkeletonChanged(KinectBase.SkeletonEventArgs e)
 {
     if (SkeletonChanged != null)
     {
         SkeletonChanged(this, e);
     }
 }
Beispiel #22
0
        public KinectBase.Joint TransformJoint(KinectBase.Joint joint)
        {
            KinectBase.Joint transformedJoint = new KinectBase.Joint();
            transformedJoint.Confidence = joint.Confidence;
            transformedJoint.JointType = joint.JointType;
            transformedJoint.TrackingState = joint.TrackingState;
            transformedJoint.Orientation = skeletonRotQuaternion * joint.Orientation;
            transformedJoint.Position = skeletonTransformation.Transform(joint.Position);
            transformedJoint.utcTime = joint.utcTime;

            return transformedJoint;
        }
Beispiel #23
0
        internal static void SaveSettings(string fileName, KinectBase.MasterSettings settings)
        {
            //Create a serializable version of the settings (basically, move the Kinect options from the Master settings to a type specific array)
            List<KinectV1Wrapper.Settings> kinect1Settings = new List<KinectV1Wrapper.Settings>();
            List<KinectV2Wrapper.Settings> kinect2Settings = new List<KinectV2Wrapper.Settings>();
            List<NetworkKinectWrapper.Settings> networkSettings = new List<NetworkKinectWrapper.Settings>();
            for (int i = 0; i < settings.kinectOptionsList.Count; i++)
            {
                if (settings.kinectOptionsList[i].version == KinectVersion.KinectV1)
                {
                    kinect1Settings.Add((KinectV1Wrapper.Settings)settings.kinectOptionsList[i]);
                }
                else if (settings.kinectOptionsList[i].version == KinectVersion.KinectV2)
                {
                    kinect2Settings.Add((KinectV2Wrapper.Settings)settings.kinectOptionsList[i]);
                }
                else if (settings.kinectOptionsList[i].version == KinectVersion.NetworkKinect)
                {
                    networkSettings.Add((NetworkKinectWrapper.Settings)settings.kinectOptionsList[i]);
                }
            }
            SerializableSettings serialSettings = new SerializableSettings();
            serialSettings.masterSettings = settings;
            serialSettings.kinectV1Settings = kinect1Settings.ToArray();
            serialSettings.kinectV2Settings = kinect2Settings.ToArray();
            serialSettings.networkKinectSettings = networkSettings.ToArray();

            //Do the actual serialization
            XmlSerializer serializer = new XmlSerializer(typeof(SerializableSettings));
            using (FileStream file = new FileStream(fileName, FileMode.Create))
            {
                serializer.Serialize(file, serialSettings);
                file.Close();
                file.Dispose();
            }
        }
Beispiel #24
0
 protected virtual void OnColorFrameReceived(KinectBase.ColorFrameEventArgs e)
 {
     if (ColorFrameReceived != null)
     {
         ColorFrameReceived(this, e);
     }
 }
        public void UpdateGUI(KinectBase.MasterSettings newSettings)
        {
            if (kinectID.HasValue)
            {
                masterSettings = newSettings;
                dynamic tempSettings = masterSettings.kinectOptionsList[kinectID.Value];
                kinectSettings = (KinectV1Settings)tempSettings;

                //Update the color options
                switch (kinectSettings.colorImageMode)
                {
                    case KinectBase.ColorImageFormat.RgbResolution640x480Fps30:
                    {
                        colorResComboBox.SelectedIndex = 0;
                        break;
                    }
                    case KinectBase.ColorImageFormat.RgbResolution1280x960Fps12:
                    {
                        colorResComboBox.SelectedIndex = 1;
                        break;
                    }
                    case KinectBase.ColorImageFormat.InfraredResolution640x480Fps30:
                    {
                        colorResComboBox.SelectedIndex = 2;
                        break;
                    }
                    default:
                    {
                        //If we don't know how to handle a mode, lets just shut it off
                        colorResComboBox.SelectedIndex = 3;
                        break;
                    }
                }

                //Update the skeleton settings
                UseSkeletonCheckBox.IsChecked = kinectSettings.mergeSkeletons;
                UseRawSkeletonCheckBox.IsChecked = kinectSettings.sendRawSkeletons;
                XFormRawSkeletonCheckBox.IsChecked = kinectSettings.transformRawSkeletons;
                SeatedModeCheckBox.IsChecked = kinectSettings.rawSkeletonSettings.isSeatedMode;

                //Update the depth settings
                irOnCheckBox.IsChecked = kinectSettings.irON;
                nearModeCheckBox.IsChecked = kinectSettings.isNearMode;
                switch (kinectSettings.depthImageMode)
                {
                    case KinectBase.DepthImageFormat.Resolution320x240Fps30:
                    {
                        depthResComboBox.SelectedIndex = 1;
                        break;
                    }
                    case KinectBase.DepthImageFormat.Resolution80x60Fps30:
                    {
                        depthResComboBox.SelectedIndex = 2;
                        break;
                    }
                    default:
                    {
                        depthResComboBox.SelectedIndex = 0;
                        break;
                    }
                }

                //Update the audio settings
                SendSoundAngleCheckBox.IsChecked = kinectSettings.sendAudioAngle;
                audioServerTextBox.Text = kinectSettings.audioAngleServerName;
                audioChannelTextBox.Text = kinectSettings.audioAngleChannel.ToString();
                audioBeamSkeletonNumberTextBox.Text = kinectSettings.audioBeamTrackSkeletonNumber.ToString();
                switch (kinectSettings.audioTrackMode)
                {
                    //Note: the enabled/disabled controls don't need to be set manually here because the selected index changed event will still be hit
                    case KinectBase.AudioTrackingMode.Feedback:
                    {
                        audioBeamModeComboBox.SelectedIndex = 1;
                        break;
                    }
                    case KinectBase.AudioTrackingMode.MergedSkeletonX:
                    {
                        audioBeamModeComboBox.SelectedIndex = 2;
                        break;
                    }
                    case KinectBase.AudioTrackingMode.LocalSkeletonX:
                    {
                        audioBeamModeComboBox.SelectedIndex = 3;
                        break;
                    }
                    default:
                    {
                        audioBeamModeComboBox.SelectedIndex = 0;
                        break;
                    }
                }

                //Update the acceleration options
                SendAccelCheckBox.IsChecked = kinectSettings.sendAcceleration;
                accelServerTextBox.Text = kinectSettings.accelerationServerName;
                accelXChannelTextBox.Text = kinectSettings.accelXChannel.ToString();
                accelYChannelTextBox.Text = kinectSettings.accelYChannel.ToString();
                accelZChannelTextBox.Text = kinectSettings.accelZChannel.ToString();

                //Update the position options
                xPosTextBox.Text = kinectSettings.kinectPosition.X.ToString();
                yPosTextBox.Text = kinectSettings.kinectPosition.Y.ToString();
                zPosTextBox.Text = kinectSettings.kinectPosition.Z.ToString();
                yawPosTextBox.Text = kinectSettings.kinectYaw.ToString();
            }
        }
Beispiel #26
0
        public Point MapJointToDepth(KinectBase.Joint joint, bool undoTransform)
        {
            //TODO: Update this so it takes a joint array instead of a single joint (this is supposed to be more efficient for the Kinect 2)
            Point mappedPoint = new Point(0, 0);
            Point3D transformedPosition = joint.Position;

            if (undoTransform)
            {
                Matrix3D inverseTransform = skeletonTransformation;
                inverseTransform.Invert();
                transformedPosition = inverseTransform.Transform(transformedPosition);
            }

            //Setup the Kinect v2 objects to do the transformation
            CameraSpacePoint[] skelPoints = new CameraSpacePoint[1];
            skelPoints[0] = new CameraSpacePoint();
            skelPoints[0].X = (float)transformedPosition.X;
            skelPoints[0].Y = (float)transformedPosition.Y;
            skelPoints[0].Z = (float)transformedPosition.Z;
            DepthSpacePoint[] points = new DepthSpacePoint[1];
            kinect.CoordinateMapper.MapCameraPointsToDepthSpace(skelPoints, points);

            //Convert back to the base object type
            mappedPoint.X = points[0].X;
            mappedPoint.Y = points[0].Y;

            return mappedPoint;
        }