public void AddCluster(Cluster cluster, bool repeat = false) { if (repeat || !Clusters.Contains(cluster)) { Clusters.Add(cluster); } }
private void BuildClustersMenu() { Clusters.Clear(); if (Presentation == null) { return; } var transformations = Presentation.GetModule <ITransformationModule>(); var captions = Presentation.GetModule <ICaptionModule>(); var clusters = transformations.Graph.Clusters .Union(Presentation.Graph.Clusters) .Select(c => c.Id) .Distinct() .Select(id => new ClusterWithCaption { Id = id, Caption = captions.Get(id).DisplayText }) .OrderBy(id => id.Caption); foreach (var cluster in clusters) { Clusters.Add(cluster); } }
public void Start() { Random rand = new Random(); // On commence par sélectionner un "point" au hasard pour chaque cluster for (int i = 0; i < m_clusters; i++) { Clusters.Add(new Cluster( i, new Vector4( rand.NextFloat(0.0f, 0.8f), rand.NextFloat(0.0f, 0.8f), rand.NextFloat(0.0f, 0.8F), 1.0f), new Vector3(rand.NextFloat(-1.0f, 1.0f), rand.NextFloat(-1.0f, 1.0f), 0.0f))); Centroids.Add(new Entity(Entity)); MeshRenderer meshrenderer = Centroids[i].AddComponent <MeshRenderer>(); meshrenderer.material_ = new MaterialDX11(); meshrenderer.material_.SetMainColor(Clusters[i].Color); meshrenderer.model_ = Quad.GetMesh(); Centroids[i].transform_.SetScale(0.05f, 0.05f, 1.0f); } m_start = true; }
public scenario_structure_bsp(CacheBase Cache, CacheBase.IndexItem Tag) { cache = Cache; int Address = Tag.Offset; EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); Reader.SeekTo(Address + 68); XBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); YBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); ZBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); #region Clusters Block Reader.SeekTo(Address + 172); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Tag.Magic; for (int i = 0; i < iCount; i++) { ModelSections.Add(new ModelSection(Cache, Tag, iOffset + 176 * i, null) { FacesIndex = i, VertsIndex = i, NodeIndex = 255 }); Clusters.Add(new Cluster(i)); } #endregion #region Shaders Block Reader.SeekTo(Address + 180); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Tag.Magic; for (int i = 0; i < iCount; i++) { Shaders.Add(new Halo2Xbox.render_model.Shader(Cache, iOffset + 32 * i)); } #endregion #region ModelParts Block Reader.SeekTo(Address + 328); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Tag.Magic; for (int i = 0; i < iCount; i++) { ModelSections.Add(new ModelSection(Cache, Tag, iOffset + 200 * i, BoundingBoxes) { FacesIndex = i + Clusters.Count, VertsIndex = i + Clusters.Count, NodeIndex = 255 }); } #endregion #region GeometryInstances Block Reader.SeekTo(Address + 336); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Tag.Magic; for (int i = 0; i < iCount; i++) { GeomInstances.Add(new InstancedGeometry(Cache, iOffset + 88 * i, Clusters.Count)); } #endregion }
public void AddCluster(Cluster cluster) { Guard_SettingMustBeDefinedInDefaults(cluster.AsDictionary()); if (!Clusters.Contains(cluster)) { Clusters.Add(cluster); } }
private Cluster CreateOrUpdateCluster(string component) { if (Clusters.Count(x => x.Label == component) == 0) { Clusters.Add(new Cluster { Label = component, Nodes = new List <Node>() }); } return(Clusters.Where(x => x.Label == component).Single()); }
public scenario_structure_bsp(CacheBase Cache, CacheBase.IndexItem Tag) { cache = Cache; int Address = Tag.Offset; EndianReader Reader = Cache.Reader; Reader.SeekTo(Address + 0xE0); XBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); YBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); ZBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); Reader.SeekTo(Address + 0x110); indexCount = Reader.ReadInt32() * 3; indexOffset = Reader.ReadInt32() - Tag.Magic; #region Lightmaps Block Reader.SeekTo(Address + 0x11C); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Tag.Magic; for (int i = 0; i < iCount; i++) { ModelSections.Add(new Lightmap(cache, iOffset + 32 * i, Tag.Magic) { VertsIndex = i, FacesIndex = i, NodeIndex = 255 }); } #endregion #region Create Shader List var sIDs = new List <int>(); for (int i = 0; i < ModelSections.Count; i++) { var section = ModelSections[i]; for (int j = 0; j < section.Submeshes.Count; j++) { var mesh = (Lightmap.Material)section.Submeshes[j]; if (!sIDs.Contains(mesh.shaderID)) { sIDs.Add(mesh.shaderID); } mesh.ShaderIndex = sIDs.IndexOf(mesh.shaderID); } } foreach (int ID in sIDs) { Shaders.Add(new Shader(ID)); } for (int i = 0; i < ModelSections.Count; i++) { Clusters.Add(new Cluster(i)); } #endregion }
public NetworkInitializationViewModel(NetworkStructure network, IUnityContainer container) { _network = network; var removeChildElementCommand = new RelayCommand((p) => { Clusters.Remove(p as ClusterViewModel); InitializeClusterDependencyMatrix(); }); _addClusterCommand = new RelayCommand((p) => { Clusters.Add(new ClusterViewModel(new Cluster(), removeChildElementCommand)); InitializeClusterDependencyMatrix(); }); _clusterDependecyChangedCommand = new RelayCommand((p) => { var dependency = p as Wrapper <bool>; if (dependency != null) { _network.ClusterDependencyMatrix[dependency.I, dependency.J] = dependency.Value; _network.UpdateNetwork(); } }); Clusters = new ObservableCollection <ClusterViewModel>(_network.Clusters.Select(c => new ClusterViewModel(c, removeChildElementCommand))); ClusterDependencyMatrix = _network.ClusterDependencyMatrix.ToWrappedMatrix(); Clusters.CollectionChanged += (s, e) => { if (e.NewItems != null) { var newItems = e.NewItems .Cast <ClusterViewModel>() .Select(cv => cv.Cluster); _network.Clusters.AddRange(newItems); } if (e.OldItems != null) { var oldItems = e.OldItems .Cast <ClusterViewModel>() .Select(cv => cv.Cluster); foreach (var cluster in oldItems) { _network.Clusters.Remove(cluster); } } }; }
private void Initialize() { //Create all cluster with empty for (int i = 0, dec = 2; i < Settings.Settings.NumberCluster; i++, dec++) { string hexValue = $"0x{dec:X}"; Clusters.Add(new Cluster { ClusterFile = new EmptyClusterFile(), Address = hexValue }); } }
private void Initialize() { if (initialized) { throw new InvalidOperationException("Already initialized!"); } if (log != null && log.IsDebugEnabled) { log.Debug("Starting Initialize()"); } // Set stuff up this.Clusters = new List <Cluster>(); this.ClientLoadModule = new ClientLoad(); // Add any configured clusters in config file? if (clientConfig.Clusters != null && clientConfig.Clusters.Count > 0) { foreach (var cluster in clientConfig.Clusters) { lock (_globalLockObject) Clusters.Add(new Cluster(clientConfig) { ClusterUri = cluster }); } } // Enable Multicast client if (clientConfig.MulticastEnabled) { StartClusterMulticastClient(); } // Any contexts loaded from config? If so, start them. if (clientConfig.RegisteredContextsFromConfig.Count > 0) { RegisterRoute(clientConfig.RegisteredContextsFromConfig); } // Done init initialized = true; if (log != null && log.IsDebugEnabled) { log.Debug("Done Initialize()"); } }
public async void Get() { var jData = await DataService.Get("Cluster"); if (jData == "ConnectionError") { StandardMessagesDisplay.NoConnectionToast(); } else if (jData == "null") { StandardMessagesDisplay.NoDataDisplayMessage(); } else if (jData == "Error") { StandardMessagesDisplay.Error(); } else if (jData == "ErrorTracked") { StandardMessagesDisplay.ErrorTracked(); } else { try { var data = JsonConvert.DeserializeObject <Dictionary <string, ClusterModel> >(jData); if (data != null) { foreach (KeyValuePair <string, ClusterModel> item in data) { Clusters?.Add( new ClusterModel { ClusterName = item.Value.ClusterName, CurrentVaccinePeriodId = item.Value.CurrentVaccinePeriodId, Id = item.Value.Id } ); } } } catch (Exception ex) { Crashes.TrackError(ex); StandardMessagesDisplay.InputToast(ex.Message); } } }
public KMeans(List <DataPoint> dataPoints, ProcessingData data) : base(dataPoints, data) { DataPoint tmp = new DataPoint(); Thread.Sleep(20); Random rand = new Random((int)DateTime.Now.Ticks & 0x0000FFFF); for (int i = 0; i < ProcessingData.GroupsQuantity; i++) { for (int j = 0; j < ProcessingData.dimensionQuantity; j++) { tmp.Coordinates.Add((rand.Next(0, 60001)) / (double)100); } Clusters.Add(new Cluster(new DataPoint(tmp))); tmp.Coordinates.Clear(); } }
private async Task _setRefinedCenters() { Random r = new Random(); List <Helper> helpers = new List <Helper>(); List <Point> CM = new List <Point>(); double quality = double.PositiveInfinity; List <Cluster> res = new List <Cluster>(); for (int j = 0; j < 10; j++) { helpers.Add(new Helper() { UseMahalanobisDistance = false, k = this.k }); for (int i = 0; i < AllPoints.Count / 10; i++) { helpers[j].AllPoints.Add(AllPoints[r.Next(0, AllPoints.Count)]); } await helpers[j].Solve(new Action <Point, int>((p, i) => { })); CM.AddRange(helpers[j].AllPoints); } for (int j = 0; j < 10; j++) { var clusters = helpers[j].Clusters; helpers[j] = new Helper(true) { UseMahalanobisDistance = false, k = this.k }; helpers[j].AllPoints = CM; await helpers[j]._setConcreteCenters(clusters); var qual = await helpers[j].Solve(new Action <Point, int>((p, i) => { })); if (qual < quality) { quality = qual; res = helpers[j].Clusters; } } foreach (var clust in res) { Clusters.Add(new Cluster() { Center = clust.Center }); } }
private async Task _setRandomCenters() { Random r = new Random(); var indexes = new List <int>(); for (int i = 0; i < k; i++) { Clusters.Add(new Cluster()); int index = -1; do { index = r.Next(0, AllPoints.Count); }while(indexes.Contains(index)); indexes.Add(index); Clusters[i].Elements.Add(AllPoints[index]); await Clusters[i].RefreshCenter(); } }
/// <summary> /// 初始化处理集群 /// </summary> private void Init() { if (Clusters == null) { Clusters = new Dictionary <string, ProcessingTower <TIn, TOut> >(); } if (Clusters.Count <= 0) { var pc = 5;//Environment.ProcessorCount; for (int i = 0; i < pc; i++) { Clusters.Add(i.ToString(), new ProcessingTower <TIn, TOut>() { ProcessHandle = this.ProcessHandle, ProcessEndHandle = this.ProcessEndHandle, ProcessorID = i, ProcessorKey = i.ToString(), Stop = false }); } } }
private async Task _setCleverCenters() { Random r = new Random(); Clusters.Add(new Cluster()); Clusters[0].Elements.Add(AllPoints[r.Next(0, AllPoints.Count)]); await Clusters[0].RefreshCenter(); while (Clusters.Count < k) { double sum = 0; foreach (var point in AllPoints) { foreach (var cluster in Clusters) { var curDist = await _getDistance(point, cluster.Center); if (point.Distance > curDist) { point.Distance = curDist; } } point.Distance = Math.Pow(point.Distance, 2); sum += point.Distance; } var rnd = (double)r.Next(0, 100000) / 100000; rnd = rnd * sum; sum = 0; foreach (var point in AllPoints) { if (sum < rnd) { sum += point.Distance; } else { Clusters.Add(new Cluster()); Clusters[Clusters.Count - 1].Elements.Add(point); await Clusters[Clusters.Count - 1].RefreshCenter(); break; } } } }
private void Initialize() { var numCluster = Settings.NumberCluster; if (numCluster < 3) { numCluster = 4; } //Create all cluster with empty for (int i = 0, dec = 2; i < numCluster; i++, dec++) { var hexValue = $"0x{dec:X}"; Clusters.Add(new Cluster(hexValue) { Content = new EmptyContentCluster() }); } DiskCapacity = Settings.NumberCluster * Settings.ClusterSize; DiskSpaceUsed = Settings.ClusterSize * 2; }
public void Travel(IVirtualDesktop start) { _global_object_index = 0; _global_cluster_index = 1; var result = ParseNode(start); Objects = result.Objects; Clusters = result.Clusters; Relations = result.Relations; if (result.Element is GraphCluster) { var cc = result.Element as GraphCluster; Clusters.Add(cc); } else { Objects.Add(result.Element as GraphObject); } }
public void PaintWorld(WorldLayer layer) { if ((Hud.Game.SpecialArea != SpecialArea.Rift) && (Hud.Game.SpecialArea != SpecialArea.GreaterRift) && (Hud.Game.SpecialArea != SpecialArea.ChallengeRift)) { return; } var monsters = Hud.Game.AliveMonsters.Where(x => (x.SnoMonster != null) && (IncludeOffScreen || x.IsOnScreen) && !((x.SummonerAcdDynamicId != 0) && (x.Rarity == ActorRarity.RareMinion))); foreach (var monster in monsters) { var nearMe = monsters.Where(x => x != monster && x.FloorCoordinate.XYDistanceTo(monster.FloorCoordinate) <= Range); Clusters.Add(monster, nearMe.Sum(x => x.SnoMonster.RiftProgression) + monster.SnoMonster.RiftProgression); } var clusters = 0; while (Clusters.Count > 0 && clusters < ClustersMax) { var cluster = Clusters.Aggregate((l, r) => l.Value > r.Value ? l : r); if ((cluster.Value / Hud.Game.MaxQuestProgress * 100d) >= ProgressMin) { Decorator.Paint(layer, cluster.Key, cluster.Key.FloorCoordinate, (cluster.Value / Hud.Game.MaxQuestProgress * 100d).ToString("F2", CultureInfo.InvariantCulture) + "%"); var nearMeAgain = monsters.Where(x => x.FloorCoordinate.XYDistanceTo(cluster.Key.FloorCoordinate) <= Range * 2f); foreach (var monster in nearMeAgain) { Clusters.Remove(monster); } clusters++; } else { clusters = ClustersMax; } } Clusters.Clear(); }
public scenario_structure_bsp(CacheBase Cache, int Address) { cache = Cache; EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); #region sldt ID //sldt's sections address will be used instead of the one in sbsp int sectionAddress = 0; foreach (var item in Cache.IndexItems) { if (item.ClassCode == "scnr") { Reader.SeekTo(item.Offset + 20); int cnt = Reader.ReadInt32(); int ptr = Reader.ReadInt32() - Cache.Magic; int bspIndex = 0; for (int i = 0; i < cnt; i++) { Reader.SeekTo(ptr + 108 * i + 12); if (Cache.IndexItems.GetItemByID(Reader.ReadInt32()).Offset == Address) { bspIndex = i; break; } } Reader.SeekTo(item.Offset + 1776 + 12); int sldtID = Reader.ReadInt32(); int sldtAddress = Cache.IndexItems.GetItemByID(sldtID).Offset; Reader.SeekTo(sldtAddress + 4); cnt = Reader.ReadInt32(); ptr = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < cnt; i++) { Reader.SeekTo(ptr + 436 * i + 2); if (Reader.ReadInt16() != bspIndex) { continue; } Reader.SeekTo(ptr + 436 * i + 312); sectionAddress = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(ptr + 436 * i + 428); geomRawID = Reader.ReadInt32(); } break; } } #endregion Reader.SeekTo(Address + 60); XBounds = new RealBounds(Reader.ReadSingle(), Reader.ReadSingle()); YBounds = new RealBounds(Reader.ReadSingle(), Reader.ReadSingle()); ZBounds = new RealBounds(Reader.ReadSingle(), Reader.ReadSingle()); #region Clusters Block Reader.SeekTo(Address + 180); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Clusters.Add(new Cluster(Cache, iOffset + 220 * i)); } #endregion #region Shaders Block Reader.SeekTo(Address + 192); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Shaders.Add(new Halo3Beta.render_model.Shader(Cache, iOffset + 36 * i)); } #endregion #region GeometryInstances Block Reader.SeekTo(Address + 432); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { GeomInstances.Add(new InstancedGeometry(Cache, iOffset + 120 * i)); } #endregion Reader.SeekTo(Address + 580); RawID1 = Reader.ReadInt32(); #region ModelSections Block Reader.SeekTo(Address + 740); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { ModelSections.Add(new Halo3Beta.render_model.ModelSection(Cache, sectionAddress + 76 * i)); } #endregion #region Bounding Boxes Block Reader.SeekTo(Address + 752); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { BoundingBoxes.Add(new Halo3Beta.render_model.BoundingBox(Cache, iOffset + 44 * i)); } #endregion Reader.SeekTo(Address + 860); RawID2 = Reader.ReadInt32(); Reader.SeekTo(Address + 892); RawID3 = Reader.ReadInt32(); }
public virtual void AddCluster(ItemCluster <T> input) { Clusters.Add(input); }
public scenario_structure_bsp(CacheBase Cache, int Address) { cache = Cache; EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); #region sldt/lbsp ID //lbsp's sections address will be used instead of the one in sbsp int sectionAddress = 0; int sectionCount = 0; foreach (var item in Cache.IndexItems) { if (item.ClassCode == "scnr") { Reader.SeekTo(item.Offset + 76); int cnt = Reader.ReadInt32(); int ptr = Reader.ReadInt32() - Cache.Magic; int bspIndex = 0; for (int i = 0; i < cnt; i++) { Reader.SeekTo(ptr + 172 * i + 12); if (Cache.IndexItems.GetItemByID(Reader.ReadInt32()).Offset == Address) { bspIndex = i; break; } } Reader.SeekTo(item.Offset + 1844 + 12); int sldtID = Reader.ReadInt32(); int sldtAddress = Cache.IndexItems.GetItemByID(sldtID).Offset; Reader.SeekTo(sldtAddress + 4); cnt = Reader.ReadInt32(); ptr = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(ptr + 32 * bspIndex + 12); int lbspID = Reader.ReadInt32(); int lbspAddress = Cache.IndexItems.GetItemByID(lbspID).Offset; Reader.SeekTo(lbspAddress + 124); sectionCount = Reader.ReadInt32(); sectionAddress = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(lbspAddress + 268); geomRawID = Reader.ReadInt32(); break; } } #endregion Reader.SeekTo(Address + 236); XBounds = new RealBounds(Reader.ReadSingle(), Reader.ReadSingle()); YBounds = new RealBounds(Reader.ReadSingle(), Reader.ReadSingle()); ZBounds = new RealBounds(Reader.ReadSingle(), Reader.ReadSingle()); #region Clusters Block Reader.SeekTo(Address + 308); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Clusters.Add(new Cluster(Cache, iOffset + 140 * i)); } #endregion #region Shaders Block Reader.SeekTo(Address + 320); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Shaders.Add(new ReachRetail.render_model.Shader(Cache, iOffset + 44 * i)); } #endregion #region GeometryInstances Block Reader.SeekTo(Address + 608); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { GeomInstances.Add(new InstancedGeometry(Cache, iOffset + 4 * i)); } #region Load Fixup Data Reader.SeekTo(Address + 1298); int id = Reader.ReadUInt16(); var entry = Cache.zone.RawEntries[id]; var er = new EndianReader(new MemoryStream(Cache.zone.FixupData), EndianFormat.BigEndian); int addr = entry.Fixups[entry.Fixups.Count - 10].Offset; for (int i = 0; i < GeomInstances.Count; i++) { er.SeekTo(entry.FixupOffset + addr + 156 * i); var geom = GeomInstances[i]; geom.TransformScale = er.ReadSingle(); geom.TransformMatrix.m11 = er.ReadSingle(); geom.TransformMatrix.m12 = er.ReadSingle(); geom.TransformMatrix.m13 = er.ReadSingle(); geom.TransformMatrix.m21 = er.ReadSingle(); geom.TransformMatrix.m22 = er.ReadSingle(); geom.TransformMatrix.m23 = er.ReadSingle(); geom.TransformMatrix.m31 = er.ReadSingle(); geom.TransformMatrix.m32 = er.ReadSingle(); geom.TransformMatrix.m33 = er.ReadSingle(); geom.TransformMatrix.m41 = er.ReadSingle(); geom.TransformMatrix.m42 = er.ReadSingle(); geom.TransformMatrix.m43 = er.ReadSingle(); er.ReadUInt16(); er.ReadUInt16(); er.ReadUInt16(); geom.SectionIndex = er.ReadUInt16(); } er.Close(); er.Dispose(); #endregion #endregion Reader.SeekTo(Address + 796); RawID1 = Reader.ReadInt32(); Reader.SeekTo(Address + 976); RawID2 = Reader.ReadInt32(); #region ModelParts Block Reader.SeekTo(Address + 1100); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; if (sectionAddress == -Cache.Magic) { sectionAddress = iOffset; //null address in lbsp } for (int i = 0; i < iCount; i++) { ModelSections.Add(new ReachRetail.render_model.ModelSection(Cache, sectionAddress + 92 * i)); } #endregion #region Bounding Boxes Block Reader.SeekTo(Address + 1112); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { BoundingBoxes.Add(new ReachRetail.render_model.BoundingBox(Cache, iOffset + 52 * i)); } #endregion Reader.SeekTo(Address + 1244); RawID3 = Reader.ReadInt32(); }
public scenario_structure_bsp(CacheBase Cache, int Address) { cache = Cache; EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); #region sldt/lbsp ID //lbsp's sections address will be used instead of the one in sbsp int sectCount = 0, sectionAddress = 0, bbCount = 0, bbAddr = 0; foreach (var item in Cache.IndexItems) { if (item.ClassCode == "scnr") { Reader.SeekTo(item.Offset + 160); int cnt = Reader.ReadInt32(); int ptr = Reader.ReadInt32() - Cache.Magic; int bspIndex = 0; for (int i = 0; i < cnt; i++) { Reader.SeekTo(ptr + 336 * i + 12); if (Cache.IndexItems.GetItemByID(Reader.ReadInt32()).Offset == Address) { bspIndex = i; break; } } Reader.SeekTo(item.Offset + 1896 + 12); int sldtID = Reader.ReadInt32(); int sldtAddress = Cache.IndexItems.GetItemByID(sldtID).Offset; Reader.SeekTo(sldtAddress + 4); cnt = Reader.ReadInt32(); ptr = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(ptr + 32 * bspIndex + 12); int lbspID = Reader.ReadInt32(); int lbspAddress = Cache.IndexItems.GetItemByID(lbspID).Offset; Reader.SeekTo(lbspAddress + 320); //320, 512, 692 sectCount = Reader.ReadInt32(); sectionAddress = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(lbspAddress + 344); //344, 536, 716 bbCount = Reader.ReadInt32(); bbAddr = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(lbspAddress + 464); //464, 656, 836 geomRawID = Reader.ReadInt32(); break; } } #endregion Reader.SeekTo(Address + 268); XBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); YBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); ZBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); #region Clusters Block Reader.SeekTo(Address + 340); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < 1; i++) { Clusters.Add(new Cluster(Cache, iOffset + 140 * i)); } #endregion #region Shaders Block Reader.SeekTo(Address + 352); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Shaders.Add(new Halo4Retail.render_model.Shader(Cache, iOffset + 44 * i)); } #endregion #region GeometryInstances Block Reader.SeekTo(Address + 640); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { GeomInstances.Add(new InstancedGeometry(Cache, iOffset + 4 * i)); } #region Load Fixup Data Reader.SeekTo(Address + 1364); int id = Reader.ReadInt32(); var entry = Cache.zone.RawEntries[id & 0xFFFF]; var er = new EndianReader(new MemoryStream(Cache.GetRawFromID(id)), EndianFormat.Big); int addr = entry.Fixups[entry.Fixups.Count - 10].Offset; for (int i = 0; i < GeomInstances.Count; i++) { er.SeekTo(addr + 148 * i); var geom = GeomInstances[i]; geom.TransformScale = er.ReadSingle(); geom.TransformMatrix = Matrix4x3.Read(er); er.ReadUInt16(); er.ReadUInt16(); er.ReadInt32(); er.ReadUInt16(); geom.SectionIndex = er.ReadUInt16(); } er.Close(); er.Dispose(); #endregion #endregion Reader.SeekTo(Address + 844); RawID1 = Reader.ReadInt32(); Reader.SeekTo(Address + 1048); RawID2 = Reader.ReadInt32(); #region ModelSections Block Reader.SeekTo(Address + 1144); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; if (sectionAddress == -Cache.Magic) { sectionAddress = iOffset; //null address in lbsp } for (int i = 0; i < sectCount; i++) { ModelSections.Add(new Halo4Retail.render_model.ModelSection(Cache, sectionAddress + 112 * i)); } #endregion #region Bounding Boxes Block Reader.SeekTo(Address + 1168); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < bbCount; i++) { BoundingBoxes.Add(new Halo4Retail.render_model.BoundingBox(Cache, bbAddr + 52 * i)); } #endregion Reader.SeekTo(Address + 1288); RawID3 = Reader.ReadInt32(); }
private async Task _setSampledCenters() { double sum = 0; Random r = new Random(); Clusters.Add(new Cluster() { Center = AllPoints[0] }); Clusters.Add(new Cluster() { Center = AllPoints[1] }); double centerDist = await _getDistance(Clusters[0].Center, Clusters[1].Center); for (int i = 0; i < AllPoints.Count - 1; i++) { for (int j = i + 1; j < AllPoints.Count; j++) { var norm = await _getDistance(AllPoints[i], AllPoints[j]); if (norm > centerDist) { AllPoints[i].Distance = norm; sum += norm; centerDist = norm; } } } var rnd = (double)r.Next(0, 100000) / 100000; rnd = rnd * sum; sum = 0; foreach (var point in AllPoints) { if (sum < rnd) { sum += point.Distance; } else { Clusters[0].Center = point; break; } } sum = 0; foreach (var point in AllPoints) { if (sum < rnd) { sum += point.Distance; } else { Clusters[1].Center = point; break; } } while (Clusters.Count < k) { sum = 0; double min = double.NegativeInfinity; foreach (var point in AllPoints) { point.Distance = 0; foreach (var cluster in Clusters) { var norm = await _getDistance(point, cluster.Center); if (norm > min) { min = norm; point.Distance = norm; sum += norm; } } } rnd = (double)r.Next(0, 100000) / 100000; rnd = rnd * sum; sum = 0; foreach (var point in AllPoints) { if (sum < rnd) { sum += point.Distance; } else { Clusters.Add(new Cluster() { Center = point }); break; } } } }
/// <summary> /// Adds or updates a kubecontext. /// </summary> /// <param name="context">The new context.</param> /// <param name="cluster">The context cluster information.</param> /// <param name="user">The context user information.</param> /// <param name="noSave">Optionally prevent context save after the change.</param> public void SetContext(KubeConfigContext context, KubeConfigCluster cluster, KubeConfigUser user, bool noSave = false) { Covenant.Requires <ArgumentNullException>(context != null, nameof(context)); Covenant.Requires <ArgumentNullException>(cluster != null, nameof(cluster)); Covenant.Requires <ArgumentNullException>(user != null, nameof(user)); Covenant.Requires <ArgumentNullException>(context.Properties.Cluster == cluster.Name, nameof(context)); Covenant.Requires <ArgumentNullException>(context.Properties.User == user.Name, nameof(context)); var updated = false; for (int i = 0; i < Contexts.Count; i++) { if (Contexts[i].Name == context.Name) { Contexts[i] = context; updated = true; break; } } if (!updated) { Contexts.Add(context); } // We also need to add or update the referenced cluster and user properties. updated = false; for (int i = 0; i < Clusters.Count; i++) { if (Clusters[i].Name == context.Properties.Cluster) { Clusters[i] = cluster; updated = true; break; } } if (!updated) { Clusters.Add(cluster); } updated = false; for (int i = 0; i < Users.Count; i++) { if (Users[i].Name == context.Properties.User) { Users[i] = user; updated = true; break; } } if (!updated) { Users.Add(user); } // Persist as required. if (!noSave) { Save(); } }
private void ClusterMulticastClientReceive(IAsyncResult ar) { byte[] received = null; try { // Closing? if (clusterMulticastClient == null) { return; } // Receive message try { received = clusterMulticastClient.EndReceive(ar, ref clusterMulticastClientEndPoint); // if (log != null && log.IsDebugEnabled) log.Info("Multicast received from " + clusterMulticastClientEndPoint.Address.ToString() + ": " + received.GetString()); } catch (NullReferenceException) { } catch (ObjectDisposedException) { return; } catch (Exception ex) { if (log != null && log.IsErrorEnabled) { log.Error("ClusterMulticastClientReceive() fail", ex); } } // This may fall thru here if disposing or quitting if (disposed) { return; } // Empty? Quit. if (received == null) { return; } try { // Ignoring message? if (!clientConfig.MulticastEnabled) { return; } // Process received message // Message looks like the following: // HTTP/1.0 200 OK // Date: Wed, 30 Apr 2014 15:23:38 GMT // Sequence: 77 // Digest: 29da46a8d26397116bcb0a8d06e73a89 // Server: c70d84cb-5f51-8544-885d-b2a1451b9aba // X-Manager-Address: 127.0.0.1:6666 // X-Manager-Url: /c70d84cb-5f51-8544-885d-b2a1451b9aba // X-Manager-Protocol: http // X-Manager-Host: myservername string httpCode = received.GetString().Split('\n')[0]; if (!(httpCode.StartsWith("HTTP/1.0 200 OK") || httpCode.StartsWith("HTTP/1.1 200 OK"))) { Dictionary <string, string> goneDataDict = received.ToDictionary(); Cluster goodByeCluster = Clusters.Where(c => c.MulticastServerId == goneDataDict["Server"]).FirstOrDefault(); if (goodByeCluster != null) { if (log.IsDebugEnabled) { log.Debug("ClusterMulticastClient caught server " + goodByeCluster.ClusterUri + " (" + goneDataDict["Server"] + ") is going away"); } goodByeCluster.RouteRegistered = false; } else { if (log.IsDebugEnabled) { log.Debug("ClusterMulticastClient caught server " + goneDataDict["Server"] + " is going away"); } } return; } Dictionary <string, string> dataDict = received.ToDictionary(); Uri clusterUri = null; try { clusterUri = dataDict.GetUriFromBroadcast(); } catch (Exception ex) { if (log.IsDebugEnabled) { log.Debug("ClusterMulticastClient got data that created an invalid uri. Cannot autoregister.", ex); } return; } // Scan to see if we need to add it if (Clusters.Count(c => c.ClusterUri.ToString() == clusterUri.ToString()) > 0) { return; } if (log != null && log.IsInfoEnabled) { log.Info("Multicast received, registering to " + clusterUri); } lock (_globalLockObject) { // Do not start on cluster if no contexts are registered if (clientConfig.RegisteredContexts.Count() + clientConfig.RegisteredContextsFromConfig.Count() == 0) { if (log.IsDebugEnabled) { log.Debug("ClusterMulticastClient did not auto-register cluster " + clusterUri + " because there are no contexts to register, will try again on next multicast receive"); } return; } // Initialize New Cluster try { Cluster cluster = new Cluster(clientConfig) { ClusterUri = clusterUri, MulticastServerId = dataDict["Server"] }; cluster.RegisterRoute(clientConfig.RegisteredContexts.Union(clientConfig.RegisteredContextsFromConfig).Distinct()); Clusters.Add(cluster); } catch (Exception ex) { log.Error("ClusterMulticastClient could not auto-register cluster " + clusterUri + ", will try again on next multicast receive", ex); return; } } } finally { // Listen for the next message clusterMulticastClient.BeginReceive(new AsyncCallback(ClusterMulticastClientReceive), null); } } catch (Exception ex) { if (log != null && log.IsErrorEnabled) { log.Error("ClusterMulticastClientReceive() unhandled exception", ex); } } }
private bool TryMergeClusters(int slaMaxPing) { if (Clusters.Count < 2) { return(false); } //perhaps work with average ping from one's members to the other's's? //remove doubles that are reversed //and try to implement the "geo-near" bit here to reduce all the possible combos var closestOrdered = Clusters.SelectMany(cl1 => Clusters.Select(cl2 => new Tuple <double, Cluster, Cluster>(cl1.FogNode.Distance(cl2.FogNode), cl1, cl2))).Where(t => t.Item2 != t.Item3 && t.Item1 < slaMaxPing).OrderBy(t => t.Item1).ToList(); var idx = 0; var merged = false; while (!merged && idx < closestOrdered.Count()) { //Console.WriteLine("Trying to merge cluster " + closestOrdered[idx].Item2 + " and " + closestOrdered[idx].Item3); var mergedCluster1 = SimulateMerge(closestOrdered[idx].Item2, closestOrdered[idx].Item3, slaMaxPing); var mergedCluster2 = SimulateMerge(closestOrdered[idx].Item3, closestOrdered[idx].Item2, slaMaxPing); Cluster mergedCluster = null; //determine best avg ping between the 2 if (mergedCluster1 != null && mergedCluster2 != null) { if (mergedCluster1.Nodes.Count == 0) { mergedCluster = mergedCluster1; } else { //Console.WriteLine("Both recombinations possible, finding best avg ping"); var avgCluster1Ping = mergedCluster1.Nodes.Average(n => n.Pings[mergedCluster1.FogNode]); var avgCluster2Ping = mergedCluster2.Nodes.Average(n => n.Pings[mergedCluster2.FogNode]); //Console.WriteLine("Avg ping combo 1 " + avgCluster1Ping + " Avg ping combo 2 " + avgCluster2Ping); if (avgCluster1Ping < avgCluster2Ping) { mergedCluster = mergedCluster1; } else { mergedCluster = mergedCluster2; } } } else { //otherwise take the one not null, or either one if both null mergedCluster = mergedCluster1 == null ? mergedCluster2 : mergedCluster1; } if (mergedCluster != null) { //Console.WriteLine("Merge successful, merging into " + mergedCluster); merged = true; Clusters.Remove(closestOrdered[idx].Item2); Clusters.Remove(closestOrdered[idx].Item3); Clusters.Add(mergedCluster); } idx++; } return(merged); }
public scenario_structure_bsp(CacheBase Cache, int Address) { cache = Cache; EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); #region sldt/lbsp ID //lbsp's sections address will be used instead of the one in sbsp int sectionAddress = 0; foreach (var item in Cache.IndexItems) { if (item.ClassCode == "scnr") { Reader.SeekTo(item.Offset + 68); int cnt = Reader.ReadInt32(); int ptr = Reader.ReadInt32() - Cache.Magic; int bspIndex = 0; for (int i = 0; i < cnt; i++) { Reader.SeekTo(ptr + 168 * i + 12); if (Cache.IndexItems.GetItemByID(Reader.ReadInt32()).Offset == Address) { bspIndex = i; break; } } Reader.SeekTo(item.Offset + 1828 + 12); int sldtID = Reader.ReadInt32(); var sldt = Cache.IndexItems.GetItemByID(sldtID); int sldtAddress = Cache.IndexItems.GetItemByID(sldtID).Offset; Reader.SeekTo(sldtAddress + 4); cnt = Reader.ReadInt32(); ptr = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(ptr + 32 * bspIndex + 12); int lbspID = Reader.ReadInt32(); var lbsp = Cache.IndexItems.GetItemByID(lbspID); int lbspAddress = Cache.IndexItems.GetItemByID(lbspID).Offset; Reader.SeekTo(lbspAddress + 116); sectionAddress = Reader.ReadInt32() - Cache.Magic; Reader.SeekTo(lbspAddress + 244); geomRawID = Reader.ReadInt32(); break; } } #endregion Reader.SeekTo(Address + 236); XBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); YBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); ZBounds = new Range <float>(Reader.ReadSingle(), Reader.ReadSingle()); #region Clusters Block Reader.SeekTo(Address + 308); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Clusters.Add(new Cluster(Cache, iOffset + 288 * i)); } #endregion #region Shaders Block Reader.SeekTo(Address + 320); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Shaders.Add(new ReachBeta.render_model.Shader(Cache, iOffset + 44 * i)); } #endregion #region GeometryInstances Block Reader.SeekTo(Address + 620); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { GeomInstances.Add(new InstancedGeometry(Cache, iOffset + 168 * i)); } #endregion Reader.SeekTo(Address + 796); RawID1 = Reader.ReadInt32(); Reader.SeekTo(Address + 976); RawID2 = Reader.ReadInt32(); #region ModelParts Block Reader.SeekTo(Address + 1112); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { ModelSections.Add(new ReachBeta.render_model.ModelSection(Cache, sectionAddress + 92 * i)); } #endregion #region Bounding Boxes Block Reader.SeekTo(Address + 1124); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { BoundingBoxes.Add(new ReachBeta.render_model.BoundingBox(Cache, iOffset + 52 * i)); } #endregion Reader.SeekTo(Address + 1244); RawID3 = Reader.ReadInt32(); }