示例#1
0
        public void LoadData(IMouseFrame frame)
        {
            TargetFrame = frame;

            IAngleTypeBase angleType;
            IWhisker       noseWhisker        = TargetFrame.Whiskers.FirstOrDefault(x => x.WhiskerId == -1);
            IWhisker       orientationWhisker = TargetFrame.Whiskers.FirstOrDefault(x => x.WhiskerId == 0);

            if (noseWhisker == null || orientationWhisker == null)
            {
                //can't generate centerline, use vertical
                angleType = ModelResolver.Resolve <IVertical>();
            }
            else
            {
                ICenterLine centerLine = ModelResolver.Resolve <ICenterLine>();
                centerLine.NosePoint        = noseWhisker.WhiskerPoints[0];
                centerLine.OrientationPoint = orientationWhisker.WhiskerPoints[0];
                angleType = centerLine;
            }


            foreach (IWhisker whisker in TargetFrame.Whiskers)
            {
                if (whisker.IsGenericPoint)
                {
                    continue;
                }

                ISingleWhiskerAngle singleWhiskerCurve = ModelResolver.Resolve <ISingleWhiskerAngle>();
                singleWhiskerCurve.Whisker   = whisker;
                singleWhiskerCurve.AngleType = angleType;
                Targets.Add(singleWhiskerCurve);
            }
        }
        public void LoadData(IMouseFrame frame, IWhiskerAngularVelocityFrame previousFrame, IFrameRateSettings frameRateSettings)
        {
            TargetFrame = frame;

            IAngleTypeBase angleType;
            IWhisker       noseWhisker        = TargetFrame.Whiskers.FirstOrDefault(x => x.WhiskerId == -1);
            IWhisker       orientationWhisker = TargetFrame.Whiskers.FirstOrDefault(x => x.WhiskerId == 0);

            if (noseWhisker == null || orientationWhisker == null)
            {
                //can't generate centerline, use vertical
                angleType = ModelResolver.Resolve <IVertical>();
            }
            else
            {
                ICenterLine centerLine = ModelResolver.Resolve <ICenterLine>();
                centerLine.NosePoint        = noseWhisker.WhiskerPoints[0];
                centerLine.OrientationPoint = orientationWhisker.WhiskerPoints[0];
                angleType = centerLine;
            }

            int numberOfWhiskers = TargetFrame.Whiskers.Length;

            int previousFrameCounter = 0;

            for (int i = 0; i < numberOfWhiskers; i++)
            {
                IWhisker whisker = TargetFrame.Whiskers[i];

                if (whisker.IsGenericPoint)
                {
                    continue;
                }

                ISingleWhiskerAngularVelocity singleWhiskerAngularVelocity = ModelResolver.Resolve <ISingleWhiskerAngularVelocity>();
                singleWhiskerAngularVelocity.Whisker   = whisker;
                singleWhiskerAngularVelocity.AngleType = angleType;
                singleWhiskerAngularVelocity.FrameRate = frameRateSettings.OriginalFrameRate;

                if (previousFrame != null)
                {
                    singleWhiskerAngularVelocity.PreviousFrame = previousFrame.Targets[previousFrameCounter];
                }

                Targets.Add(singleWhiskerAngularVelocity);
                previousFrameCounter++;
            }
        }
示例#3
0
 public ICenterLineObject(ICenterLine ICenterLineinstance)
 {
     ICenterLineInstance = ICenterLineinstance;
 }
示例#4
0
        public void LoadData(IMouseFrame frame)
        {
            TargetFrame = frame;

            IAngleTypeBase angleType;
            IWhisker       noseWhisker        = TargetFrame.Whiskers.FirstOrDefault(x => x.WhiskerId == -1);
            IWhisker       orientationWhisker = TargetFrame.Whiskers.FirstOrDefault(x => x.WhiskerId == 0);

            if (noseWhisker == null || orientationWhisker == null)
            {
                //can't generate centerline, don't let it work
                return;
            }

            ICenterLine centerLine = ModelResolver.Resolve <ICenterLine>();

            centerLine.NosePoint        = noseWhisker.WhiskerPoints[0];
            centerLine.OrientationPoint = orientationWhisker.WhiskerPoints[0];
            angleType = centerLine;

            List <ISingleWhiskerAngle> leftWhiskers  = new List <ISingleWhiskerAngle>();
            List <ISingleWhiskerAngle> rightWhiskers = new List <ISingleWhiskerAngle>();

            foreach (IWhisker whisker in TargetFrame.Whiskers)
            {
                if (whisker.IsGenericPoint)
                {
                    continue;
                }

                ISingleWhiskerAngle singleWhiskerAngle = ModelResolver.Resolve <ISingleWhiskerAngle>();
                singleWhiskerAngle.Whisker   = whisker;
                singleWhiskerAngle.AngleType = angleType;
                Targets.Add(singleWhiskerAngle);

                //Is whisker on left or right?
                double x1 = centerLine.NosePoint.XRatio;
                double y1 = centerLine.NosePoint.YRatio;
                double x2 = centerLine.OrientationPoint.XRatio;
                double y2 = centerLine.OrientationPoint.YRatio;

                double x = singleWhiskerAngle.Whisker.WhiskerPoints[0].XRatio;
                double y = singleWhiskerAngle.Whisker.WhiskerPoints[0].YRatio;

                double determinant = ((x - x1) * (y2 - y1)) - ((y - y1) * (x2 - x1));

                if (determinant < 0)
                {
                    //On left side
                    leftWhiskers.Add(singleWhiskerAngle);
                }
                else
                {
                    //On right side
                    rightWhiskers.Add(singleWhiskerAngle);
                }
            }

            LeftWhiskers  = leftWhiskers.ToArray();
            RightWhiskers = rightWhiskers.ToArray();
            CalculateData();
        }