Страница 1 из 1

Единицы измерения смещения линий в новой символике

Добавлено: 29 янв 2011, 16:09
SS_Rebelious
В каких единицах измеряется смещение линий в новой символике? Как я понимаю, ширина линий измеряется в пунктах, но вот смещение явно в чём-то другом.

Пример: создаю условный знак шоссе:
highwayoriginal.png
highwayoriginal.png (2.07 КБ) 8922 просмотра
Для этого знака я использую 4 линии (можно и 3, но результат получается менее контрастным): коричнево-оранжевую (А) толщиной 1,0; две чёрные (B) толщиной 0,3 и одну чёрную толщиной 0,15. Двум чёрным линиям по бокам я должне задать смещение. Если смещение задаётся в тех же единицах, что толщина, то смещение осевой линии b относительно осевой линии (А) будет равно 1/2*W(А)+1/2*W(B), где W-ширина линии в пунктах. Получается, смешение = 1/2*(1,0) + 1/2*(0,3) = 0,65. Однако, если выставить величину смещения 0,65, то чёрная линия, хоть и смещается, но совершенно очевидно остаётся в пределах линии (А), и чтобы добиться необходимого эффекта приходится выставлять значение смещения 2,0. То есть единицы измерения смещения не равны единицам измерения толщины.

В чём же измеряется смещение? В пикселах? Наверное следует единицы измерения сделать едиными, ну или подписывать хотя-бы.
Спойлер

Код: Выделить всё

<symbol outputUnit="MM" alpha="1" type="line" name="highway_under_construction_25k">
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="255,255,255,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="0"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="1"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="255,128,0,255"/>
        <prop k="customdash" v="4;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="0"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="1"/>
        <prop k="width" v="1"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="0,0,0,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="-2"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="0.3"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="0,0,0,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="2"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="0.3"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="square"/>
        <prop k="color" v="0,0,0,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="0"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="0.15"/>
      </layer>
    </symbol>
Вот пример, как это выглядит: нижняя чёрная линия смещена на 0,65, верхняя - на 2,0
highway0-65.png
highway0-65.png (46.24 КБ) 8922 просмотра
Вот так выглядит, если обе линии смещены на 2,0
highway2-0.png
highway2-0.png (46 КБ) 8922 просмотра

Re: Единицы измерения смещения линий в новой символике

Добавлено: 05 фев 2011, 02:20
SS_Rebelious
Какой изврат! Кажется я понял, что такое "смещение" и в чём оно измеряется! Одна единица смещения равна размеру символа (единица измерения смещения символа - значение размера символа): если размер символа 0,5, то значение смещения равное 1 будет означать реальное смещение на 0,5. Это значит, что если необходимо точно выставить смещение - его нужно сначала вычислить исходя из значения размера символа. OMG!

Итак, чтобы вычислить "смещение" (Х), нужно разделить желаемое смещение (С) на размер символа (Р):
Х = С / Р.
Ели и само желаемое смещение (С) тоже нужно вычислить, то решаем простенькую систему из 2-х уравнений... а что, прикольно!

Наверное здесь следует как-минимум информировать юзера прямо в окошке, что такое всё-таки смещение, а в лучшем случае использовать одни и те же единицы для размера символа и его смещения.

Re: Единицы измерения смещения линий в новой символике

Добавлено: 05 фев 2011, 11:55
ericsson
Забавно. Идея, очевидно, позаимствована из языка стилей CSS, в котором применяется аж две подобные единицы - em, ex.

Re: Единицы измерения смещения линий в новой символике

Добавлено: 08 фев 2011, 00:21
SS_Rebelious
[...]вырезано много мата[...] У меня просто зла не зватает!

Смещение считается по-разному для отображения слоя на мониторе (как по формуле, приведённой выше, но похоже она не совсем верна) и для экспорта в PDF/ растр (здесь применяются те же единицы измерения, что и для ширины линии)!!! То есть для печати и для работы на экране нужно создавать разные стили!

Считать багрепортом! r15130
стили.png
стили.png (50.08 КБ) 8791 просмотр
стили2.png
Стиль "для монитора" после экспорта в растр
стили2.png (75.68 КБ) 8791 просмотр
стили3.png
Стиль "для печати" после экспорта в растр
стили3.png (60.63 КБ) 8791 просмотр

Re: Единицы измерения смещения линий в новой символике

Добавлено: 08 фев 2011, 07:30
Максим Дубинин
неплохо бы все-таки более четкий пример по шагам сделать, тогда можно и в трекер

Re: Единицы измерения смещения линий в новой символике

Добавлено: 08 фев 2011, 12:29
SS_Rebelious
Максим Дубинин писал(а):неплохо бы все-таки более четкий пример по шагам сделать, тогда можно и в трекер
Пытаемся создать условный знак, пример которого дан в первом посте. Для этого используем 4 линии:
1) шириной 1,6, без смещения - коричневая
2) шириной 0,15, без смещения - чёрная
3) шириной 0,3, смещение 3,0 - чёрная
4) шириной 0,3, смещение -3,0 - чёрная

Полученная линия в предыдущем посте названа "для монитора" и вуглядит он на экране нормально. Присваиваем этот стиль к линейному слою - выглядит хорошо. Идём в компоновку карты, компонуем как нравится, экспортируем в PDF или растр; получаем картинку "стили2.png" - из прошлого поста. Линии для которых было применено смещение "отлетели" далеко от того места, где должны были быть. В первом посте топика есть код для аналогичной линии, где обрамляющие линии смещены - можно использовать его дя демонстрации.

Переделываем нашу линию. Точнее оставляем основную часть настроек прежней, а смещение для 2-х обрамляющих линий (3 и 4) выставляем смещение 0,65 и -0,65 соответственно. Получаем то, что в предыдущем посте названо "для печати": все три чёрные линии сгрудились в центре символа, превратив его в кашу на экране монитора, однако, если мы из компоновки карты (предварительно применив стиль к нашему линейному слою) экспортируем карту в PDF или растр, то на картинке линия выглядит так как надо ("стили3.png"- последний рисунок в предыдущем посте).