Example #1
0
        public void TestNearestNeighborInterpolationDoubleEntry()
        {
            TrackingData  data      = new TrackingData(2);
            TrackingEntry expected1 = new TrackingEntry(0.0, new Point3(0.0f, 1.0f, 2.0f), new Point3(3.0f, 4.0f, 5.0f));
            TrackingEntry expected2 = new TrackingEntry(0.0, new Point3(6.0f, 7.0f, 8.0f), new Point3(4.0f, 3.0f, 2.0f));

            data.PushEntry(2.0, expected1.Position, expected1.Rotation);
            data.PushEntry(1.0, expected2.Position, expected2.Rotation);
            // t = 0.0
            expected1.TimeStamp = 0.0;
            PerformEntryComparison(expected1, data.GetDataAtTime(expected1.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 0.5
            expected1.TimeStamp = 0.5;
            PerformEntryComparison(expected1, data.GetDataAtTime(expected1.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 1.0
            expected2.TimeStamp = 1.0;
            PerformEntryComparison(expected2, data.GetDataAtTime(expected2.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 1.5
            expected2.TimeStamp = 1.5;
            PerformEntryComparison(expected2, data.GetDataAtTime(expected2.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 2.0
            expected2.TimeStamp = 2.0;
            PerformEntryComparison(expected2, data.GetDataAtTime(expected2.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 3.0
            expected2.TimeStamp = 3.0;
            PerformEntryComparison(expected2, data.GetDataAtTime(expected2.TimeStamp, InterpolationMethod.NearestNeighbor));
        }
Example #2
0
        private List <TrackingEntry> GetTrackingEntries(List <DsioTrackingItem> commandEntries)
        {
            // *** Gets a list of tracking entries from dsio tracking items ***

            List <TrackingEntry> returnEntries = new List <TrackingEntry>();

            // *** Check that we have something to work with ***
            if (commandEntries != null)
            {
                if (commandEntries.Count > 0)
                {
                    // *** Go through each ***
                    foreach (DsioTrackingItem dsioItem in commandEntries)
                    {
                        // *** Create the entry ***
                        TrackingEntry newEntry = new TrackingEntry()
                        {
                            PatientDfn  = dsioItem.Dfn,
                            Comment     = dsioItem.Comment,
                            EntryId     = dsioItem.Id,
                            Reason      = dsioItem.Reason,
                            PatientName = dsioItem.PatientName,
                            Source      = dsioItem.Source,
                            UserName    = dsioItem.User
                        };

                        // *** Convert from fileman date time ***
                        //newEntry.EntryDateTime = Util.GetDateTime(dsioItem.TrackingItemDateTime);
                        //CultureInfo enUS = new CultureInfo("en-US");
                        //DateTime tempDateTime;
                        //if (DateTime.TryParseExact(dsioItem.TrackingItemDateTime,VistaDates.VistADateFormatTwo, enUS,DateTimeStyles.None, out tempDateTime))
                        //    newEntry.EntryDateTime = tempDateTime;

                        // *** Use VistaDates parser ***
                        // *** Try with seconds and then without ***
                        DateTime tempDateTime = VistaDates.ParseDateString(dsioItem.TrackingItemDateTime, VistaDates.VistADateFormatFour);
                        if (tempDateTime == DateTime.MinValue)
                        {
                            tempDateTime = VistaDates.ParseDateString(dsioItem.TrackingItemDateTime, VistaDates.VistADateFormatEight);
                        }

                        if (tempDateTime != DateTime.MinValue)
                        {
                            newEntry.EntryDateTime = tempDateTime;
                        }

                        // *** Add entry type ***
                        if (IsValidEntryType(dsioItem.TrackingType))
                        {
                            newEntry.EntryType = GetEntryType(dsioItem.TrackingType);
                        }

                        // *** Add to list ***
                        returnEntries.Add(newEntry);
                    }
                }
            }

            return(returnEntries);
        }
Example #3
0
 void PerformEntryComparison(TrackingEntry expected, TrackingEntry actual)
 {
     Assert.IsNotNull(actual);
     Assert.AreEqual(expected.TimeStamp, actual.TimeStamp, 0.000001);
     Assert.AreEqual <Point3>(expected.Position, actual.Position);
     Assert.AreEqual <Point3>(expected.Rotation, actual.Rotation);
 }
Example #4
0
        private void SaveEntryChanges(TrackingEntry entry)
        {
            if ((entry.EntryState & (EntryState.Unchanged | EntryState.Detached)) != entry.EntryState)
            {
                if (entry.Entity is Folder)
                {
                    var folder = entry.Entity as Folder;

                    switch (entry.EntryState)
                    {
                    case EntryState.Modified:
                        break;

                    case EntryState.Added:
                        //CloudBlobDirectory directory;
                        //directory.Container.CreateIfNotExists();
                        //cloudBlob.UploadFromStream(new MemoryStream(new byte[] { }));
                        //cloudBlob.SetProperties();
                        //cloudBlob.SetMetadata();
                        break;

                    case EntryState.Deleted:
                        //directory.Container.Delete();
                        //cloudBlob.Delete();
                        break;
                    }
                }
                else if (entry.Entity is FolderItem)
                {
                    var folderItem = entry.Entity as FolderItem;

                    var directory =
                        this.CurrentCloudBlobClient.ListBlobs(folderItem.FolderId, false, BlobListingDetails.None)
                        .FirstOrDefault() as CloudBlobDirectory;
                    //var directory = CurrentCloudBlobClient.GetBlobDirectoryReference(folderItem.FolderId);
                    var cloudBlob = directory.GetBlockBlobReference(folderItem.FolderItemId);

                    this.MapFolderItem2CloudBlob(folderItem, cloudBlob);

                    switch (entry.EntryState)
                    {
                    case EntryState.Added:
                    case EntryState.Modified:
                        if (cloudBlob.Properties.Length == 0)
                        {
                            cloudBlob.UploadFromStream(new MemoryStream(new byte[] { }));
                            //cloudBlob.UploadByteArray(new byte[] { });
                        }
                        cloudBlob.SetProperties();
                        cloudBlob.SetMetadata();
                        break;

                    case EntryState.Deleted:
                        cloudBlob.Delete();
                        break;
                    }
                }
            }
        }
Example #5
0
        private ObservableChangeTracker CreateChangeTracker()
        {
            var retVal = new ObservableChangeTracker();

            retVal.AddAction = (x) =>
            {
                var entry = ChangeTracker.GetTrackingEntry(x);
                _delayedActions.Add(() => SaveEntryChanges(entry));
            };
            retVal.RemoveAction = (x) =>
            {
                var entry = ChangeTracker.GetTrackingEntry(x);
                entry.EntryState = EntryState.Detached;
                var clonedEntry = new TrackingEntry {
                    Entity = x.DeepClone(new AssetEntityFactoryExt()), EntryState = EntryState.Deleted
                };
                _delayedActions.Add(() => SaveEntryChanges(clonedEntry));
            };

            retVal.AddNewOneToManyRelationAction = (source, property, target) =>
            {
                var folder = source as Folder;
                if (folder != null && property == "SubFolders")
                {
                    if (folder.FolderId != null)
                    {
                        ((Folder)target).ParentFolderId = folder.FolderId;
                    }
                }
                else if (folder != null && property == "FolderItems")
                {
                    if (folder.FolderId != null)
                    {
                        ((FolderItem)target).FolderId = folder.FolderId;
                    }
                }
            };

            retVal.PropertyChangedAction = (source, property, target) =>
            {
                var folder = source as Folder;
                if (folder != null)
                {
                    if (property == "FolderId")
                    {
                        foreach (var subFolder in folder.Subfolders)
                        {
                            subFolder.ParentFolderId = folder.FolderId;
                        }
                        foreach (var folderItem in folder.FolderItems)
                        {
                            folderItem.FolderId = folder.FolderId;
                        }
                    }
                }
            };

            return(retVal);
        }
        private void SaveEntryChanges(TrackingEntry entry)
        {
            if (entry.EntryState == EntryState.Added)
            {
            }

            if ((entry.EntryState & (EntryState.Unchanged | EntryState.Detached)) != entry.EntryState)
            {
                if (entry.Entity is Folder)
                {
                    var folder = entry.Entity as Folder;

                    switch (entry.EntryState)
                    {
                    case EntryState.Modified:
                        var oldFolderPath = Absolute(folder.FolderId);
                        var newFolderPath = Path.Combine(Path.GetDirectoryName(oldFolderPath) ?? String.Empty, folder.Name);
                        Directory.Move(oldFolderPath, newFolderPath);
                        break;

                    case EntryState.Added:
                        var newFolder = Path.Combine(Absolute(folder.ParentFolderId), folder.Name);
                        Directory.CreateDirectory(newFolder);
                        break;

                    case EntryState.Deleted:
                        var folderPathToRemove = Absolute(folder.FolderId);
                        Directory.Delete(folderPathToRemove, true);
                        break;
                    }
                }
                else if (entry.Entity is FolderItem)
                {
                    var folderItem = entry.Entity as FolderItem;

                    switch (entry.EntryState)
                    {
                    case EntryState.Added:
                    case EntryState.Modified:

                        break;

                    case EntryState.Deleted:
                        var item = Absolute(folderItem.FolderItemId);
                        File.Delete(item);
                        var thumbFile = GenerateThumbnailPath(item);
                        if (File.Exists(thumbFile))
                        {
                            File.Delete(thumbFile);
                        }
                        break;
                    }
                }
            }
        }
Example #7
0
        /// <summary>
        /// 添加要清除的拦截器
        /// </summary>
        /// <param name="interceptor">拦截器</param>
        public void Add(LifetimeInterceptor interceptor)
        {
            var entry = new TrackingEntry(interceptor);

            this.trackingEntries.Enqueue(entry);

            // 从0变为1,要启动清理作业
            if (Interlocked.Increment(ref this.trackingEntryCount) == 1)
            {
                this.StartCleanup();
            }
        }
        /// <summary>
        /// Sets the "first time seen" status of a packageId until the game is restarted.
        /// </summary>
        /// <exception cref="ArgumentNullException">Throws on null packageId</exception>
        public void SetFirstTimeSeen(string packageId, bool setFirstTimeSeen)
        {
            if (packageId == null)
            {
                throw new ArgumentNullException(nameof(packageId));
            }
            WaitForInspectionCompletion();
            var currentlyFirstTimeSeen = FirstTimeSeen(packageId);

            if (setFirstTimeSeen != currentlyFirstTimeSeen)
            {
                entries[packageId] = new TrackingEntry(packageId)
                {
                    FirstTimeSeen = setFirstTimeSeen
                };
            }
        }
 protected override void LoadFromXml(XDocument xml)
 {
     entries.Clear();
     if (xml.Root == null)
     {
         throw new NullReferenceException("Missing root node");
     }
     foreach (var entryNode in xml.Root.Elements())
     {
         try {
             var entry = TrackingEntry.FromXMLElement(entryNode);
             entries[entry.PackageId] = entry;
         } catch (Exception e) {
             throw new FormatException($"Failed to parse entry:\n{entryNode}\nException: {e}");
         }
     }
 }
Example #10
0
 private bool GetCheckData()
 {
     checkData = new TrackingEntry();
     if (!currentTrackingDevice.Tracking.IsCheckedOut)
     {
         foreach (Control c in CheckOutBox.Controls)
         {
             if (c is TextBox)
             {
                 if (c.Visible)
                 {
                     if (c.Text.Trim() == "")
                     {
                         OtherFunctions.Message("Please complete all fields.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, "Missing Data", this);
                         return(false);
                     }
                 }
             }
         }
     }
     else
     {
         foreach (Control c in CheckInBox.Controls)
         {
             if (c is TextBox)
             {
                 if (c.Text.Trim() == "")
                 {
                     OtherFunctions.Message("Please complete all fields.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, "Missing Data", this);
                     return(false);
                 }
             }
         }
     }
     checkData.CheckoutTime = dtCheckOut.Value;
     checkData.DueBackTime  = dtDueBack.Value;
     checkData.UseLocation  = txtUseLocation.Text.Trim().ToUpper();
     checkData.UseReason    = txtUseReason.Text.Trim().ToUpper();
     checkData.CheckinNotes = txtCheckInNotes.Text.Trim().ToUpper();
     checkData.Guid         = currentTrackingDevice.Guid;
     checkData.CheckoutUser = NetworkInfo.LocalDomainUser;
     checkData.CheckinTime  = dtCheckIn.Value;
     checkData.CheckinUser  = NetworkInfo.LocalDomainUser;
     return(true);
 }
Example #11
0
        public void TestNearestNeighborInterpolationSingleEntry()
        {
            TrackingData  data     = new TrackingData(1);
            TrackingEntry expected = new TrackingEntry(0.0, new Point3(0.0f, 1.0f, 2.0f), new Point3(3.0f, 4.0f, 5.0f));

            data.PushEntry(1.0, expected.Position, expected.Rotation);
            // t = 0.0
            expected.TimeStamp = 0.0;
            PerformEntryComparison(expected, data.GetDataAtTime(0.0, InterpolationMethod.NearestNeighbor));
            // t = 0.25
            expected.TimeStamp = 0.25;
            PerformEntryComparison(expected, data.GetDataAtTime(0.25, InterpolationMethod.NearestNeighbor));
            // t = 0.5
            expected.TimeStamp = 0.5;
            PerformEntryComparison(expected, data.GetDataAtTime(0.5, InterpolationMethod.NearestNeighbor));
            // t = 0.75
            expected.TimeStamp = 0.75;
            PerformEntryComparison(expected, data.GetDataAtTime(0.75, InterpolationMethod.NearestNeighbor));
            // t = 1.0
            expected.TimeStamp = 1.0;
            PerformEntryComparison(expected, data.GetDataAtTime(1.0, InterpolationMethod.NearestNeighbor));
        }
Example #12
0
        public void TestNearestNeighborInterpolationMultipleEntry()
        {
            TrackingData  data      = new TrackingData(5);
            TrackingEntry expected1 = new TrackingEntry(0.0, new Point3(0.0f, 1.0f, 2.0f), new Point3(3.0f, 4.0f, 5.0f));
            TrackingEntry expected2 = new TrackingEntry(0.0, new Point3(6.0f, 7.0f, 8.0f), new Point3(4.0f, 3.0f, 2.0f));
            TrackingEntry expected3 = new TrackingEntry(0.0, new Point3(1.0f, 1.0f, 6.0f), new Point3(1.0f, 2.0f, 8.0f));
            TrackingEntry expected4 = new TrackingEntry(0.0, new Point3(3.0f, 2.0f, 3.0f), new Point3(0.0f, 1.0f, 6.0f));
            TrackingEntry expected5 = new TrackingEntry(0.0, new Point3(9.0f, 5.0f, 1.0f), new Point3(6.0f, 0.0f, 1.0f));

            data.PushEntry(1.0, expected1.Position, expected1.Rotation);
            data.PushEntry(6.0, expected2.Position, expected2.Rotation);
            data.PushEntry(3.0, expected3.Position, expected3.Rotation);
            data.PushEntry(5.0, expected4.Position, expected4.Rotation);
            data.PushEntry(1.0, expected5.Position, expected5.Rotation);
            // t = 0.0
            expected1.TimeStamp = 0.0;
            PerformEntryComparison(expected1, data.GetDataAtTime(expected1.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 2.0
            expected2.TimeStamp = 2.0;
            PerformEntryComparison(expected2, data.GetDataAtTime(expected2.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 3.0
            expected2.TimeStamp = 3.0;
            PerformEntryComparison(expected2, data.GetDataAtTime(expected2.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 8.0
            expected3.TimeStamp = 8.0;
            PerformEntryComparison(expected3, data.GetDataAtTime(expected3.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 8.5
            expected4.TimeStamp = 8.5;
            PerformEntryComparison(expected4, data.GetDataAtTime(expected4.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 12.0
            expected4.TimeStamp = 12.0;
            PerformEntryComparison(expected4, data.GetDataAtTime(expected4.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 14.0
            expected5.TimeStamp = 14.0;
            PerformEntryComparison(expected5, data.GetDataAtTime(expected5.TimeStamp, InterpolationMethod.NearestNeighbor));
            // t = 17.0
            expected5.TimeStamp = 17.0;
            PerformEntryComparison(expected5, data.GetDataAtTime(expected5.TimeStamp, InterpolationMethod.NearestNeighbor));
        }
Example #13
0
        public void TestLinearInterpolationDoubleEntry()
        {
            TrackingData  data = new TrackingData(2);
            TrackingEntry expected;

            data.PushEntry(2.0, new Point3(0.0f, 0.0f, 1.0f), new Point3(0.0f, 0.0f, 1.0f));
            data.PushEntry(1.0, new Point3(1.0f, -2.0f, 1.0f), new Point3(1.0f, -2.0f, 1.0f));
            // t = 0.0
            expected = new TrackingEntry(0.0, new Point3(0.0f, 0.0f, 1.0f), new Point3(0.0f, 0.0f, 1.0f));
            PerformEntryComparison(expected, data.GetDataAtTime(expected.TimeStamp, InterpolationMethod.Linear));
            // t = 0.5
            expected = new TrackingEntry(0.5, new Point3(0.25f, -0.5f, 1.0f), new Point3(0.25f, -0.5f, 1.0f));
            PerformEntryComparison(expected, data.GetDataAtTime(expected.TimeStamp, InterpolationMethod.Linear));
            // t = 1.0
            expected = new TrackingEntry(1.0, new Point3(0.5f, -1.0f, 1.0f), new Point3(0.5f, -1.0f, 1.0f));
            PerformEntryComparison(expected, data.GetDataAtTime(expected.TimeStamp, InterpolationMethod.Linear));
            // t = 1.5
            expected = new TrackingEntry(1.5, new Point3(0.75f, -1.5f, 1.0f), new Point3(0.75f, -1.5f, 1.0f));
            PerformEntryComparison(expected, data.GetDataAtTime(expected.TimeStamp, InterpolationMethod.Linear));
            // t = 2.0
            expected = new TrackingEntry(2.0, new Point3(1.0f, -2.0f, 1.0f), new Point3(1.0f, -2.0f, 1.0f));
            PerformEntryComparison(expected, data.GetDataAtTime(expected.TimeStamp, InterpolationMethod.Linear));
        }
Example #14
0
        private void SaveEntryChanges(TrackingEntry entry)
        {
            if (entry.EntryState == EntryState.Added)
            {
                GenereateEntityKey(entry.Entity as StorageEntity);
            }
            if ((entry.EntryState & (EntryState.Unchanged | EntryState.Detached)) != entry.EntryState)
            {
                if (entry.Entity is Folder)
                {
                    var folder = entry.Entity as Folder;

                    switch (entry.EntryState)
                    {
                    case EntryState.Modified:
                        break;

                    case EntryState.Added:
                        Directory.CreateDirectory(folder.FolderId);
                        break;

                    case EntryState.Deleted:
                        try
                        {
                            Directory.Delete(folder.FolderId, true);
                        }
                        catch (Exception)
                        {
                        }
                        break;
                    }
                }
                else if (entry.Entity is FolderItem)
                {
                    var folderItem = entry.Entity as FolderItem;

                    switch (entry.EntryState)
                    {
                    case EntryState.Added:
                        using (var fs = File.Create(folderItem.FolderItemId))
                            if (folderItem.SmallData != null)
                            {
                                using (var binaryWriter = new BinaryWriter(fs))
                                {
                                    binaryWriter.Write(folderItem.SmallData);
                                }
                            }
                        break;

                    case EntryState.Modified:
                        break;

                    case EntryState.Deleted:
                        try
                        {
                            File.Delete(folderItem.FolderItemId);
                        }
                        catch (Exception)
                        {
                        }
                        break;
                    }
                }
            }
        }