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++; } }
public ICenterLineObject(ICenterLine ICenterLineinstance) { ICenterLineInstance = ICenterLineinstance; }
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(); }