Управление масштабом перьев

<< Click to Display Table of Contents >>

Navigation:  Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Работа с трендами >

Управление масштабом перьев

По умолчанию масштаб пера на тренде наследуется от шкалы, а если ее нет, то берется от 0 до 100. Например, может быть ситуация, в зависимости от текущего режима процесса необходимо автоматически менять на тренде масштаб шкалы (на первом шаге диапазон от 0 до 20, на втором от 15 до 50 и т.д.). Для этой задачи также можно использовать скрипт.

Сделаем заготовку. В объекте размещены Команда 1 и Команда 2, которые добавлены на тренд и формируют имитационные сигналы, командами Минимум и Максимум мы будем устанавливать масштаб нашего тренда, по сигналу на кнопку Применить.

sluzhebnie_skript_rukovodstvo_i_primery_rabota_s_trendami_upravlenie_masshtabom_perev

Сделаем заготовку скрипта:

public override void Execute()
{
 if (Применить == true && M == false && Минимум.HasValue && Максимум.HasValue)
 {
  //Ссылка на текущий проект       
  var Project = HostFB.TreeItemHlp.Project;
  //получаем корневой объект
  var ParentObject = (ITreeItemHlp)HostFB.TreeItemHlp.Parent;
  //получаем тренд        
  RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
  {
   foreach (Trend trend in Project.GetService<TrendService>().Opened)
   {
    var host = trend.Host as System.Windows.Forms.Control;
    Object name;
    if (host != null)
    {
     name = WinFormsControlBase.GetAmbientProperty(host, WindowlessControlBase.DISPID.DISPID_AMBIENT_NAME);
     if (name.ToString() != ИМЯ_ТРЕНДА || trend.Attribute.TreeItem.ID != ParentObject.ID || trend.Attribute.DisplayName != ИМЯ_ОКНА) continue;
    }
   }
  }));
 }
 M = Применить;
}

Обратите внимание, что скрипт проверяет что значения на входа Минимум и Максимум заданы.

Для того чтобы изменить масштаб оси, сперва нужно ее получить, для этого используется поиск среди осей в объектах тренда:

var axis = trend.Settings.Objects.OfType<Axis>().FirstOrDefault(c => c.AxisType == LineDirectionEnum.Вертикальная);

Получив ось, можно менять ее параметры.

if (axis != null)
{
 axis.MinValueY = Минимум.Value;
 axis.MaxValueY = Максимум.Value;
}

 

Итоговый скрипт будет выглядеть так:

public partial class ФБ : ScriptBase
{
    string ИМЯ_ТРЕНДА = "Тренд";
    string ИМЯ_ОКНА = "Мнемосхема";
    bool? M = false;
    public override void Execute()
    {
        if (Применить == true && M == false && Минимум.HasValue && Максимум.HasValue)
        {
            //Ссылка на текущий проект       
            var Project = HostFB.TreeItemHlp.Project;
            //получаем корневой объект
            var ParentObject = (ITreeItemHlp)HostFB.TreeItemHlp.Parent;
            //получаем тренд        
            RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
            {
                foreach (Trend trend in Project.GetService<TrendService>().Opened)
                {
                    var host = trend.Host as System.Windows.Forms.Control;
                    Object name;
                    if (host != null)
                    {
                        name = WinFormsControlBase.GetAmbientProperty(host, WindowlessControlBase.DISPID.DISPID_AMBIENT_NAME);
                        if (name.ToString() != ИМЯ_ТРЕНДА || trend.Attribute.TreeItem.ID != ParentObject.ID || trend.Attribute.DisplayName != ИМЯ_ОКНА) continue;
                        //получение вертикальной оси
                        var axis = trend.Settings.Objects.OfType<Axis>().FirstOrDefault(c => c.AxisType == LineDirectionEnum.Вертикальная);
                        if (axis != null)
                        {
                            axis.MinValueY = Минимум.Value;
                            axis.MaxValueY = Максимум.Value;
                        }
                    }
                }
            }));
        }
        M = Применить;
    }
}

Проверим работу нашего скрипта в режиме исполнения.

sluzhebnie_skript_rukovodstvo_i_primery_rabota_s_trendami_upravlenie_masshtabom_perev1

Готовый проект можно скачать по ссылке.