/// <summary> /// Adds a broad phase overlap if the collision rules permit it. /// </summary> /// <param name="entryA">First entry of the overlap.</param> /// <param name="entryB">Second entry of the overlap.</param> protected internal void TryToAddOverlap(BroadPhaseEntry entryA, BroadPhaseEntry entryB) { CollisionRule rule; if ((rule = GetCollisionRule(entryA, entryB)) < CollisionRule.NoBroadPhase) { overlapAddLock.Enter(); Overlaps.Add(new BroadPhaseOverlap(entryA, entryB, rule)); overlapAddLock.Exit(); } }
public void Insert(int index, Overlap value) { if (index < Overlaps.Count) { Overlaps.Insert(index, value); } else { Overlaps.Add(value); } }
public void Insert(int index, Point p) { var e = new Overlap(); e.X = (byte)p.X; e.Y = (byte)p.Y; if (index < Overlaps.Count) { Overlaps.Insert(index, e); } else { Overlaps.Add(e); } }
/// <summary> /// Calculate a list of which views overlap this handle. /// </summary> /// <param name="group">The parent texture group, used to find a view's base CPU VA offset</param> /// <param name="views">The list of views to search for overlaps</param> public void RecalculateOverlaps(TextureGroup group, List <Texture> views) { // Overlaps can be accessed from the memory tracking signal handler, so access must be atomic. lock (Overlaps) { int endOffset = Offset + Size; Overlaps.Clear(); foreach (Texture view in views) { int viewOffset = group.FindOffset(view); if (viewOffset < endOffset && Offset < viewOffset + (int)view.Size) { Overlaps.Add(view); } } } }
/// <summary> /// Construct initialization. /// </summary> /// <param name="fragList">Fragment list.</param> /// <param name="maxOverlapLen">Minimum overlap length.</param> private void Init(ObservableCollection <Fragment> fragList, DesignerSettings settings) { this.Overlaps = new List <Overlap>(); this.Settings = settings; //forward String seq5 = ""; String seq3 = ""; String name = ""; List <MiscFeature> featList = new List <MiscFeature>(); for (int i = 0; i < fragList.Count; i++) { name += fragList[i].Name; seq3 = fragList[i].GetString(); int len5 = Math.Min(settings.MaxOverlapLen, seq5.Length); int len3 = Math.Min(settings.MaxGeneSpecificLen, seq3.Length); String overlapping = seq5.Substring(seq5.Length - len5, len5); String geneSpecific = seq3.Substring(0, len3); String loc = (seq5.Length + 1).ToString() + ".." + (seq5.Length + seq3.Length).ToString(); MiscFeature gene = new MiscFeature(loc); gene.StandardName = fragList[i].Name; featList.Add(gene); seq5 += seq3; if (i == 0) { Overlaps.Add(new Overlap(fragList[i].Name + "_fwd", new Sequence(Alphabets.DNA, geneSpecific))); } else { Overlaps.Add(new Overlap(fragList[i].Name + "_fwd", new Sequence(Alphabets.DNA, overlapping), new Sequence(Alphabets.DNA, geneSpecific))); } } this.Sequence = new Sequence(Alphabets.DNA, seq5); //meta GenBankMetadata meta = new GenBankMetadata(); meta.Locus = new GenBankLocusInfo(); meta.Locus.MoleculeType = MoleculeType.DNA; meta.Locus.Name = name; meta.Locus.Date = System.DateTime.Now; meta.Locus.SequenceLength = seq5.Length; meta.Comments.Add("designed with mufasa"); meta.Definition = "synthetic construct"; meta.Features = new SequenceFeatures(); meta.Features.All.AddRange(featList); this.Sequence.Metadata.Add("GenBank", meta); //reverse fragList.Add(new Fragment(fragList[0])); fragList.RemoveAt(0); seq5 = ""; seq3 = ""; for (int i = fragList.Count - 1; i >= 0; i--) { seq5 = fragList[i].GetReverseComplementString(); int len3 = Math.Min(settings.MaxOverlapLen, seq3.Length); int len5 = Math.Min(settings.MaxGeneSpecificLen, seq5.Length); String overlapping = seq3.Substring(seq3.Length - len3, len3); String geneSpecific = seq5.Substring(0, len5); seq3 += seq5; if (i == fragList.Count - 1) { Overlaps.Add(new Overlap(fragList[i].Name + "_rev", new Sequence(Alphabets.DNA, geneSpecific))); } else { Overlaps.Add(new Overlap(fragList[i].Name + "_rev", new Sequence(Alphabets.DNA, overlapping), new Sequence(Alphabets.DNA, geneSpecific))); } } TermoOptimizeOverlaps(); }
protected internal void AddOverlap(BroadPhaseOverlap overlap) { overlapAddLock.Enter(); Overlaps.Add(overlap); overlapAddLock.Exit(); }