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)); }
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); }
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); }
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; } } } }
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; } } } }
/// <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}"); } } }
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); }
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)); }
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)); }
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)); }
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; } } } }