Я хочу скрыть «верхнюю» часть всех меток разъемов на схеме. Для этого я попытался настроить скрипт, но в настоящее время он скрывает ВСЕ метки (также «нижние» метки, которые я хочу сохранить):

// Get a reference to the current diagram
var currentDiagram as EA.Diagram;
currentDiagram = Repository.GetCurrentDiagram();

if (currentDiagram != null)
{
    for (var i = 0; i < currentDiagram.DiagramLinks.Count; i++)
    {
        var currentDiagramLink as EA.DiagramLink;
        currentDiagramLink = currentDiagram.DiagramLinks.GetAt(i);

        currentDiagramLink.Geometry = currentDiagramLink.Geometry
            .replace(/HDN=0/g, "HDN=1")
            .replace(/LLT=;/, "LLT=HDN=1;")
            .replace(/LRT=;/, "LRT=HDN=1;");
        if (!currentDiagramLink.Update())
        {
            Session.Output(currentDiagramLink.GetLastError());
        }
    }
}

Когда я скрываю только верхние метки вручную (контекстное меню соединителя / Видимость / Установить видимость метки), свойство Geometry в DiagramLinks остается неизменным, поэтому я предполагаю, что подробная информация о видимости метки должна содержаться где-то еще в модели.

Кто-нибудь знает, как изменить мой сценарий?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Диалог редактирования детальной видимости метки выглядит следующим образом: Диалог видимости метки Enterprise Architect

Моя цель - программно снять флажки "верхний ярлык".

2
blackcomb 3 Июл 2017 в 18:33
Можете ли вы пояснить с помощью картинки, что именно вы подразумеваете под «верхней частью»?
 – 
qwerty_so
3 Июл 2017 в 23:23
Я добавил изображение.
 – 
blackcomb
4 Июл 2017 в 13:04

1 ответ

Лучший ответ

В атрибуте Geometry вы найдете частичную строку, например

LLT=CX=36:CY=13:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;

Итак, между LLT и следующей точкой с запятой вам нужно найти HDN=0 и заменить его на HDN=1. Простое глобальное изменение, подобное приведенному выше, не сработает. Для правильной работы вам понадобится подстановочный знак, такой как в регулярном выражении LLT=([^;]+);.

0
qwerty_so 4 Июл 2017 в 14:08
Спасибо, вы правы, мне нужно установить HDN в 1 ТОЛЬКО для LLT и LRT, а не глобально. Я решил это с помощью этого кода замены: currentDiagramLink.Geometry = currentDiagramLink.Geometry .replace(/(LLT=[^;]*HDN)=0([^;]*;)/, "$1=1$2") .replace(/(LRT=[^;]*HDN)=0([^;]*;)/, "$1=1$2") .replace(/LLT=;/, "LLT=HDN=1;") .replace(/LRT=;/, "LRT=HDN=1;");
 – 
blackcomb
4 Июл 2017 в 18:04