In the Designer tab in Display panel locate Labels section and press Text dropdown: there is a preloaded list of automatic labels for the level hierarchy and reserves fields. We can add to this list by configuring custom labels.
In Designer tab, Display panel, Labels section find gear icon on the right from Text dropdown.
Click the blue plus icon to add a new label.
Rename the label to "Ore Tonnes".
Paste the sample formula into the code editor.
Double click in the Available Formulas for code hints.
Press OK to finish.
...
...
Во вкладке Designer в панели Display найдите раздел Labels и нажмите на раскрывающийся список Text (Текст). В нем находится предварительно загруженный список автоматических меток для иерархии уровня и полей запасов. Вы можете расширить этот список, добавив в него пользовательские метки.
Нажмите значок шестеренки, находящийся справа от раскрывающегося спика Text.
Нажмите синюю кнопку со знаком плюса, чтобы добавить новую метку.
Измените имя метки на «Ore Tonnes» (Тонн руды).
Вставьте фрагмент формулы в редактор кода.
Подсказки по кодам можно посмотреть дважды щелкнув по Available Formulas (Доступные формулы).
Нажмите ОК для завершения.
...
Многострочная метка
Code Block | ||
---|---|---|
| ||
using System; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { public string GetLabel(ShadingContext context) { return "Blast " + context.GetLevelName("Solid") + "\n" + context.GetReserveValue("Volume").ToString("#,##0") + " bcm \n" + context.GetReserveValue("DryTonnes").ToString("#,##0") + "t"; } } |
...
Участок/
...
периметр
Code Block | ||
---|---|---|
| ||
using System; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { public string GetLabel(ShadingContext context) { return (context.SurfaceArea / context.Perimeter).ToString("#,##0.00"); } } |
...
Метка тонн руды
Code Block | ||
---|---|---|
| ||
using System; using System.Collections.Generic; using System.Linq; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { public string GetLabel(ShadingContext context) { List<string> parcels = context.GetParcels(); List<string> ores = new List<string>(){ "hg", "mg", "lg" }; double oreTonnes = 0; foreach(var parcel in parcels) { if(ores.Any(ore => parcel.StartsWith(ore))) { oreTonnes += context.GetReserveValue("DryTonnes", parcel); } } return oreTonnes.ToString("#,##0"); } } |
...
Пакет большинства
Code Block | ||
---|---|---|
| ||
using System; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { public string GetLabel(ShadingContext context) { var parcels = context.GetParcels(); string majorityParcel = ""; double majorityTonnes = -1e7; foreach (var parcel in parcels) { double t = context.GetReserveValue("DryTonnes", parcel); if (t > majorityTonnes) { majorityTonnes = t; majorityParcel = parcel; } } return majorityParcel; } } |
...
Коэффициент руды
Code Block | ||
---|---|---|
| ||
using System; using System.Collections.Generic; using System.Linq; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { public string GetLabel(ShadingContext context) { List<string> wasteList = new List<string>(){ "w", "lg1", "lg2", "lg3" }; double oreTonnes = 0; foreach(var parcel in context.GetParcels()) { if(!wasteList.Contains(parcel.ToLower())) { oreTonnes += context.GetReserveValue("DryTonnes", parcel); } } double allTonnes = context.GetReserveValue("DryTonnes"); return allTonnes == 0 ? "0" : (oreTonnes / allTonnes).ToString("0.0%"); } } |
...
Присовение имен по качеству
Code Block | ||
---|---|---|
| ||
using System; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { public string GetLabel(ShadingContext context) { string mine = context.GetLevelName("Mine"); string pit = context.GetLevelName("Pit"); string bench = context.GetLevelName("Bench"); string blast = context.GetLevelName("Solid"); string gradeBlock = context.GetSolidPropertyString("GradeBlock"); if(context.ReservesDataSource.ToString() == "BlockModel") { return mine + "/" + pit + "/" + bench + "/" + blast; } else { blast = blast.Split('_')[0]; return mine + "/" + pit + "/" + bench + "/" + blast + "/" + gradeBlock; } } } |
...
Расчет типа взрывного блока
Code Block | ||
---|---|---|
| ||
using System; using System.Collections.Generic; using System.Linq; using Alastri.RR.Ui; using Alastri.RR.Service; public class LabelFormat : ILabel { Dictionary<string,double> parcelLookup = new Dictionary<string, double>(); Dictionary<string,double> newBins = new Dictionary<string, double>(); public string GetLabel(ShadingContext context) { parcelLookup.Clear(); newBins.Clear(); //organise parcels into bins foreach(var parcel in context.GetParcels()) { parcelLookup[parcel] = context.GetReserveValue("Volume", parcel); string newBin = parcel.Key.Substring(0,1); //first letter of parcel if(!newBins.TryGetValue(newBin, out double volume)) { newBins[newBin] = 0; } newBins[newBin] += parcel.Value; } //find majority bin string bin = null; double max = -1; foreach(var newBin in newBins) { if(newBin.Value > max) { max = newBin.Value; bin = newBin.Key; } } return bin; } } |
...