示例#1
0
        /// <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();
            }
        }
示例#2
0
 public void Insert(int index, Overlap value)
 {
     if (index < Overlaps.Count)
     {
         Overlaps.Insert(index, value);
     }
     else
     {
         Overlaps.Add(value);
     }
 }
示例#3
0
        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);
            }
        }
示例#4
0
        /// <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);
                    }
                }
            }
        }
示例#5
0
        /// <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();
        }
示例#6
0
 protected internal void AddOverlap(BroadPhaseOverlap overlap)
 {
     overlapAddLock.Enter();
     Overlaps.Add(overlap);
     overlapAddLock.Exit();
 }