Форум пользователей Visio
http://visio.getbb.ru/

z-order с помощью DisplayLevel (что не так?)
http://visio.getbb.ru/viewtopic.php?f=29&t=1280
Страница 1 из 1

Автор:  Lankoser [ 29 янв 2018, 22:16 ]
Заголовок сообщения:  z-order с помощью DisplayLevel (что не так?)

Добрый день.
Есть задача: нужно управлять порядком наложения шейпов (z-order). Вычитал что для этого есть в шейплисте DisplayLevel в разделе Shape Layout. Меняю значения DisplayLevel но визуально ничего не меняется. В чём проблема?

Автор:  Tumanov [ 29 янв 2018, 23:22 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

DisplayLevel он как бы и для этого, но не совсем...
Самое правильное - это менять порядок с помощью BringForward и подобных методов.
А DisplayLevel назначает некую начальную полосу на момент появления шейпа (например, при добавлении его на страницу). То есть - это начальная установка. Как я понимаю, в основном предназначен для мастер-шейпов. Вроде как определенный признак при размещении.
Шейп с более отрицательным значением ляжет ниже.
Да и появился DisplayLevel только в последних версиях Visio. В 2007 его не было. В 2010 - не помню.

Автор:  Гость [ 30 янв 2018, 01:31 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

Tumanov писал(а):
появился DisplayLevel только в последних версиях Visio. В 2007 его не было. В 2010 - не помню.
Уже был в 2010

Автор:  god-udach [ 30 янв 2018, 03:53 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

Tumanov писал(а):
Как я понимаю, в основном предназначен для мастер-шейпов.
не совсем так
Цитата:
Уровень отображения

Как правило, в Visio фигуры, добавленные последними, отображаются поверх других фигур на странице. Для изменения порядка отображения пользователи могут применять такие команды, как «Переместить назад» или «Переместить вперед», которые содержатся в группе «Упорядочить» на вкладке «Главная». Поскольку фигуры контейнеров предназначены для размещения позади других фигур, а выноски — поверх других фигур, в Visio 2010 добавлена новая функция, избавляющая пользователя от необходимости постоянно вносить изменения в порядок отображения.

Ячейка DisplayLevel в таблице свойств фигуры позволяет определять для фигуры диапазон z-порядка. Visio будет автоматически отображать фигуру позади любой фигуры с более высоким значением DisplayLevel и, соответственно, поверх любой фигуры с более низким значением DisplayLevel. Диапазон значений DisplayLevel варьируется в пределах от -32767 до 32767. По умолчанию для фигур задано значение DisplayLevel, равное «0». Встроенные контейнеры Visio имеют значение DisplayLevel, равное -25000, а встроенные выноски Visio — значение, равное 25000.
источник
визио на уровне приложения устанавливает эти значения. пользователь может попытаться изменить значение в этой ячейке - значение может измениться на желаемое, визио может подставить другой вариант значения. но по факту изменения порядка следования фигур не происходит в результате действий пользователя по отношению к этой ячейке!

Автор:  Tumanov [ 30 янв 2018, 10:34 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

Цитата:
не совсем так

Цитата:
визио на уровне приложения устанавливает эти значения

Ну, извините, в корне не согласен!
Не вижу, как Visio "устанавливает эти значения".
Это делает не Visio, а разработчики смарт-шейпов. В том числе и встроенных контейнеров.
Сделайте свой контейнер - думаете в нем появится значение -25000? Не появится. Зато если Вы сами внесете в него (в мастер-шейп своего контейнера) такое значение, его копии будут работать аналогично штатным контейнерам.
Вот я и говорю, основной сценарий использования этого параметра - воздействие на мастер-шейп (естественно, для придания нужного поведения его копиям).
Вы видите какой-то другой сценарий? Покажите. Очень интересно.
Фраза в справке
Цитата:
Visio будет автоматически отображать фигуру позади любой фигуры с более высоким значением DisplayLevel и, соответственно, поверх любой фигуры с более низким значением DisplayLevel.
просто некорректна, о чем и заявил топикстартер. Если вы измените значение ячейки в шейпе, уже находящемся на странице, изображение нисколько не изменится! Хотя, это повлияет на его копии в случае дублирования. Но это опять-таки аналогия с мастер-шейпом.

Автор:  Tumanov [ 30 янв 2018, 11:36 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

Вот иллюстрация.
- создаем 10 шейпов.
- дублируем их.
Результат - порядок перекрытия сохраняется.
- стираем все
- создаем 10 шейпов
- присваиваем уровень в обратном порядке (9,8,...0). Изображение не изменяется.
- дублируем.
Новые шейпы размещены в обратном порядке, как определено значением DisplayLevel. Следующий шейп "подсовывается" под предыдущий, потому что его уровень (в прототипе) ниже.

Вложения:
z.vsd [19.5 Кб]
Скачиваний: 135
z.gif
z.gif [ 198.62 Кб | Просмотров: 502 ]

Автор:  Tumanov [ 30 янв 2018, 11:40 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

Код:
Sub CreateShapes()
    x0 = 1
    y0 = 3
    For i = 1 To 10
        Set shp = ActivePage.DrawRectangle(x0, y0, x0 + 1, y0 + 1)
        shp.Text = i
        x0 = x0 + 0.75
        y0 = y0 + 0.2
    Next
End Sub

Sub Reverse()
    For i = ActivePage.Shapes.Count To 1 Step -1
        ActivePage.Shapes(i).BringToFront
    Next
End Sub

Sub SetLevel()
    For i = 1 To ActivePage.Shapes.Count
        Set shp = ActivePage.Shapes(i)
        shp.Cells("DisplayLevel") = 10 - i
    Next
End Sub

Sub SetDouble()
    For i = 1 To ActivePage.Shapes.Count
        Set shp = ActivePage.Shapes(i)
        shp.Duplicate
    Next
End Sub

Автор:  god_udach [ 30 янв 2018, 13:58 ]
Заголовок сообщения:  Re: z-order с помощью DisplayLevel (что не так?)

Tumanov писал(а):
Не вижу, как Visio "устанавливает эти значения".
я просто добавил шейку в контекстное меню действие. В котором использовалась формула Setf("DisplayLevel",33333). После клика по данному пункту меню, у меня в ячейку DisplayLevel почему-то записалось совсем не то!
Из этого я сделал вывод, что сам визио каким то образом влияет на значение в этой ячейке.
То ли руки кривые, то ли глюк?

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/