# Стилевой файл программы BotikMap. # Некоторые пояснения: # данный файл представляет собой сценарий на языке TCL, # который исполняется при запуске BotikMap. # В нем используется конструкция # "array set arr {a val1 b val2}", которая создает массив arr такой, что: # arr(a)==val1 и arr(b)==val2. # Объявление глобальных переменных: global layers2 objects types zooms classes images cursors hints configVars keys # Слои: array set layers2 { 0 Оборудование 1 Сенсоры 2 Каналы 3 Объекты 4 Дома 5 Улицы 6 Зелень 7 Мосты 8 Водоемы 9 Кварталы } # Объекты в слоях: array set objects { Оборудование {Ящик} Сенсоры {{Сенсорный узел}} Каналы {Канал Столб} Объекты {Точечный Линейный Площадной} Дома {{Номер Дома} Дом} Улицы {{Название Улицы} Бордюр} Зелень {Кустарник Вал Лес} Мосты {Мост} Водоемы {Oзеро {Название Водоема} Pека Pучей Канава} Кварталы {{Название Квартала} Квартал} } # Типы для объектов и параметры для каждого из типов: array set types { Ящик { Хаб* {-style box -fill green1 -text "H" -textfill red} Свич {-style trUp -fill green2 -text "S" -textfill red} Роутер {-style diamond -fill green3 -text "R" -textfill red} Оптомодуль {-style circle -fill green3 -text "O" -textfill red} Абонент {-style trDn -fill lightblue -text "A" -textfill red} Пустой {-style trDn -fill white -text "E" -textfill red} Проект {-style icon -file dot.gif} Электроящик {-style trUp -fill yellow -text "!" -textfill black -font {Arial 13 bold}} Другой {-style circle -fill lightgreen -text "B" -textfill red3} } {Сенсорный узел} { {Сенсорный узел*} {-style box -fill khaki3 -text "C" -textfill black} } Канал { FOMM-100* {-m 1 -x 2 -fill blue} FOMM-10 {-m 1 -x 1 -fill blue} FOSM-1000 {-m 1 -x 2 -fill blue4} FOSM-100 {-m 1 -x 1 -fill blue4} SFTP-100 {-m 1 -x 2 -fill red1} SFTP {-m 0 -x 1 -fill red1} PK75 {-m 1 -x 2 -fill gray60} Radio11 {-m 1 -x 2 -fill green4} Radio5 {-m 1 -x 1 -fill green2} Radio2 {-m 1 -x 1 -fill green1} Проект {-m 1 -x 1 -fill khaki3} Другой {-m 0 -x 1 -fill gray80} } Столб { Обычный* {-style circle -fill brown -textfill red} Другой {-style circle -fill black -textfill red} } Точечный { Магазин* {-fill gray -textfill red -anchor se} Ларек {-fill purple -textfill red -anchor se} Аптека {-fill red3 -textfill red -anchor se} Кафе {-fill lightblue -textfill red -anchor se} Ресторан {-fill blue3 -textfill red -anchor se} Другой {-fill green3 -textfill red -anchor se} } Линейный { {Автобусный маршрут*} {} Другой {} } Площадной { {Гаражный кооператив} {} {Площадь*} {} Другой {} } {Номер Дома} { Большой {-k 1.0 -t 3} Средний* {-k 0.5 -t 2} Малый {-k 0.3 -t 1} } Дом { Построенный* {-dash {}} {Проект или стройка} {-dash {1 2}} Другой {-dash {-.} -outline green} Перспективный {-fill green3 -dash {}} } {Название Квартала} { Большое {-k 1.5} Среднее* {-k 1.0} Малое {-k 0.5} } } # Уровни масштабирования и параметры к ним: array set zooms { Ящик { {1 2 3} {-state hidden} {4} {-radius 3 -font {Helvetica 3}} {5} {-radius 5 -font {Helvetica 4}} {6} {-radius 8 -font {Helvetica 7}} {7} {-radius 12 -font {Helvetica 9}} } {Сенсорный узел} { {1 2 3} {-state hidden} {4} {-state normal -radius 3 -font {Times 3 normal}} {5} {-state normal -radius 4 -font {Times 4 normal}} {6} {-state normal -radius 8 -font {Times 5 bold}} {7} {-state normal -radius 13 -font {Times 9 bold}} } Канал { {1 2 3} {-state {[expr {$pars(-m) ? {normal} : {hidden}}]} -width $pars(-x)} {4 5} {-state normal -width {[expr 2*$pars(-x)]}} {6 7} {-state normal -width {[expr 3*$pars(-x)]}} } Столб { {1 2 3} {-state hidden} {4} {-radius 3} {5} {-radius 4} {6 7} {-radius 5} } Точечный { {1} {-radius 2 -font {Helvetica 2 bold}} {2} {-radius 2 -font {Helvetica 2 bold}} {3} {-radius 3 -font {Helvetica 3 bold}} {4} {-radius 3 -font {Helvetica 3 bold}} {5} {-radius 6 -font {Helvetica 5 bold}} {6} {-radius 9 -font {Helvetica 7 bold}} {7} {-radius 15 -font {Helvetica 10 bold}} } Линейный { {1 2 3 4 5 6 7} {-fill gray} } Площадной { {1 2 3 4 5 6 7} {-fill snow3 -dash {1 1 2}} } {Номер Дома} { {1 2 3 4 5} {-state hidden} {6} {-fill red -font {Helvetica [expr int($pars(-k)*10)] normal}} {7} {-fill red -font {Helvetica [expr int($pars(-k)*22)] normal}} } Дом { {1 2 3} {-state hidden} {4} {-minarea 420 -fill {#8f8f8f} -width 3} {5} {-minarea 280 -fill {#8f8f8f} -width 3} {6} {-minarea 140 -fill {#8f8f8f} -width 3} {7} {-fill {#8f8f8f} -width 5} } {Название Улицы} { {1 2 3} {-state hidden} {4} {-fill black -font {Helvetica 4 normal} -diff 2} {5} {-fill black -font {Helvetica 8 normal} -diff 5} {6} {-fill black -font {Helvetica 12 normal} -diff 11} {7} {-fill black -font {Helvetica 25 normal} -diff 22} } Бордюр { {1 2 3 4} {-state hidden} {5 6 7} {-fill black -width 1} } Вал { {1 2 3 4 5 6 7} {-fill {#626200} -width 1 -splinesteps 100} } Лес { {1 2 3 4 5 6 7} {-fill green1} } Кустарник { {1 2 3 4 5 6 7} {-fill green4} } Мост { {1 2 3} {-state hidden} {4 5 6 7} {-linefill black -linewidth 2 -polywidth 2 -polyfill snow2 -polyoutline black} } Oзеро { {1 2 3 4} {-fill {#a6e0ff} -width 2 -smooth bezier -splinesteps 100} {5 6 7} {-fill {#a6e0ff} -width 3 -smooth bezier -splinesteps 100} } Pека { {1} {-state hidden} {2 3} {-fill {#a6e0ff}} {4 5} {-fill {#a6e0ff}} {6 7} {-fill {#a6e0ff}} } Pучей { {1 2 3} {-state hidden} {4 5 6 7} {-fill blue1 -width 1} } Канава { {1} {-state hidden} {2 3} {-fill {#a6e0ff} -outline DodgerBlue1 -width 1} {4 5} {-fill {#a6e0ff} -outline DodgerBlue1 -width 1} {6 7} {-fill {#a6e0ff} -outline DodgerBlue1 -width 2} } {Название Водоема} { {1 2 3} {-state hidden} {4} {-fill red -font {Helvetica 3 normal} -diff 3} {5} {-fill red -font {Helvetica 5 normal} -diff 5} {6} {-fill red -font {Helvetica 11 normal} -diff 11} {7} {-fill red -font {Helvetica 19 normal} -diff 15} } {Название Квартала} { {1 2 3} {-state hidden} {4} {-fill orange3 -font {Helvetica [expr int($pars(-k)*4)] normal}} {5} {-fill orange3 -font {Helvetica [expr int($pars(-k)*7)] normal}} {6} {-fill orange3 -font {Helvetica [expr int($pars(-k)*10)] normal}} {7} {-fill orange3 -font {Helvetica [expr int($pars(-k)*21)] normal}} } Квартал { {1 2 3 4 5 6 7} {-width 0 -fill LemonChiffon} } } # -outline brown # # Классы объектов, определяющие их способ визуализации: # line - линейные объекты; # polygon - объекты в виде многоугольника; # text - текстовые объекты; # dot - точечные объекты; # TOP - объекты в виде текста, расположенного вдоль ломаной (Text On Path); # bridge - мосты; array set classes { Ящик dot {Сенсорный узел} dot Канал line Столб dot Точечный dot Линейный line Площадной polygon {Номер Дома} text Дом polygon {Название Улицы} TOP Бордюр line Вал polygon Лес polygon Кустарник polygon Мост bridge Oзеро polygon Pека polygon Pучей line Канава polygon {Название Водоема} TOP {Название Квартала} text Квартал polygon } # Картинки для кнопок: array set images { imagedir img imgcancel close.gif imgopen open.gif saveas save_as.gif help help.gif layerman layerman.gif srch search.gif zoommenu zoommenu.gif layermenu layermenu.gif showsub showsub.gif gotopoint gotopoint.gif authb auth.gif send send.gif mod mod.gif binddot bind.gif start start.gif select select.gif zoom zoom.gif center crosshair.gif pantool hand.gif addremnode addremnode.gif chSmooth smooth.gif to_front to_front.gif to_back to_back.gif imgupdate update.gif imgsystem computer.gif tbminimap tbminimap.gif tbsensnode tbsensnode.gif spinimg spin.gif saveimg scr.gif cutline scissors.gif Ящик box.gif {Сенсорный узел} sensnode.gif Канал line.gif Столб post.gif Точечный dot2.gif Линейный line.gif Площадной poly.gif Дом house.gif Бордюр border.gif Вал val.gif Лес forest.gif Кустарник kust.gif Мост bridge.gif Oзеро lake.gif Pека river.gif Pучей ruchej.gif Канава river.gif {Номер Дома} house_num.gif {Название Водоема} water_name.gif {Название Квартала} block_name.gif {Название Улицы} street_name.gif Квартал block.gif } # Курсоры: array set cursors { cursordir cur zoom_w zoom.cur zoom_u zoom.xbm addremnode_w addremnode.cur addremnode_u addremnode.xbm pantool1_w hand.cur pantool2_w hand_s.cur pantool1_u hand.xbm pantool2_u hand_s.xbm } # Подсказки к кнопкам: array set hints { imgcancel "Стоп" imgopen "Чтение из файла" saveas "Сохранение в файл" help "Вызов справки" layerman "Менеджер слоев" srch "Поиск" choosezoom "Выбор масштаба" chooselayer "Выбор текущего слоя" choosemaptype "Выбор карты" sub "Показать/Убрать подложку (исп. ctrl+shift+arrow для ее перемещения)" dot "Переход в точку" auth "Авторизация и загрузка объектов" start "Получение объектов с сервера" send "Сохранение изменений на сервер" mod "Модерирование объектов" bind "Связать точечный объект с другими объектами" select "Выбор объекта" zoom "Изменение масштаба" center "Перемещение в точку" pantool "Перемещение" addremnode "Добавление/удаление узлов объекту" chSmooth "Изменение сглаживания углов объекта" to_front "Поднятие oбъекта" to_back "Снижение объекта" imgupdate "Обновить карту" imgsystem "Сильная/слабая машина" tbminimap "Миникарта" tbsensnode "Сенсорные узлы" saveimg "Снимок экрана" cutline "Разрезание линии" } # Конфигурационные переменные: # 1 - показывать ли полосы прокрутки # 2,3 - показывать ли всплывающие подсказки к кнопкам и объектам array set configVars { showScrolls 1 showButtonHints 0 showObjectHints 1 showHints 0 } # Ключевые (обязательные) поля для объектов: # 3 - тип # 4 - состояние # 5 - имя # 6 - адрес # 7 - комментарий array set keys { Ящик {3 6} {Сенсорный узел} {} Канал {3} Столб {} Точечный {3 5 6} Линейный {3 5} Площадной {3 5} {Номер Дома} {3} Дом {3} {Название Улицы} {} Бордюр {} Вал {} Лес {} Кустарник {} Мост {} Oзеро {} Pека {5} Pучей {} Канава {} {Название Водоема} {} {Название Квартала} {3} Квартал {} } # Возможные параметры обрисовки для каждого класса объектов: # Класс "line": # -arrow a : указывает в каком месте линии следует изображать стрелки: # first - в начале линии, last - в конце линии, both - в обоих концах линии, # none - стрелки не изображаются. # -dash d : рисование линии в виде пунктира, "d" может быть списком чисел от 1 до 255, # где каждое число - длина отрезка линии в пикселях, # четные отрезки закрашиваются, нечетные отрезки остаются прозрачными. # -fill c : цвет линии, значение "c" может быть строкой (напр.,black) # или в формате #RGB, #RRGGBB или #RRRGGGBBB, # где R, G, B - шестнадцатеричные числа. # -smooth s : указывает, нужно ли сглаживать углы линии, # превращая ее в кривую Безье, "s" может быть 0 или 1(или bezier). # -state s : состояние объекта, может быть normal(нормальное), disabled(нерабочее) или hidden(невидимое). # -stipple b : закрашивание линии в соответствии с образцом # пунктира "b"(напр.,gray25.bmp). # -width w : ширина линии, значение "w" - число пикселей(напр.,5), # миллиметров(напр.,5m) или сантиметров(напр.,5c); # Класс "polygon": # -dash d : рисование контура многоугольника в виде пунктира, # "d" может быть списком чисел от 1 до 255, # где каждое число - длина отрезка контура в пикселях, # четные отрезки закрашиваются, нечетные отрезки остаются прозрачными. # -fill c : цвет заливки многоугольника. # -outline c : цвет контура многоугольника. # -smooth s : указывает, нужно ли сглаживать углы многоугольника, # превращая его в замкнутую кривую Безье, "s" может быть 0 или 1(или bezier). # -state s : состояние объекта, может быть normal(нормальное), disabled(нерабочее) или hidden(невидимое). # -stipple b : закрашивание многоугольника в соответствии с образцом # пунктира "b" (напр.,gray25.bmp); параметр, отвечающий за прозрачность многоугольника. # -width w : ширина контура многоугольника, значение "w" - число пикселей(напр.,5), # миллиметров(напр.,5m) или сантиметров(напр.,5c); # Класс "text": # -font f : задает шрифт, размер и насыщенность текста, напр.: {Helvetica 6 bold}. # -fill f : задает цвет текста. # Класс "TOP": все параметры объектов класса "text" плюс -diff d : расстояние между буквами(в пикселах). # Класс "dot": объекты этого класса состоят из многоугольника и текста в центре. # К ним применимы все параметры класса polygon, и: # -style s : стиль отрисовки многоугольника: # trUp - треугольник, направленный вверх; # trDn - треугольник, направленный вниз; # box - квадрат; # icon - картинка; # circle - овал; # diamond - ромб. # -text t : текст, расположенный в центре объекта. # -textfill tf : цвет текста. # -font f : задает шрифт, размер и насыщенность текста в центре объекта, напр.: {Helvetica 6 bold}. # -radius r : расстояние в пикселах от центральной точки объекта до его углов. # -file f (для стиля "icon"): файл картинки для объекта. # -name n (для стиля "icon"): задает имя объекта. # -anchor a: задаёт расположение точки привязки текста; s (south) - точка под текстом, # n (north) - точка над текстом, w (west) - точка левее текста, e (east) - точка правее текста, # также возможны комбинации. # Класс "bridge": объекты этого класса состоят из двух линий и одного многоугольника. # -linefill lf : цвет линий; # -linewidth lw : ширина линий; # -polywidth pw : ширина контура многоугольника; # -polyoutline po : цвет контура многоугольника; # -polyfill pf : цвет заливки многоугольника; # все прочие параметры - общие как для линий, так и для многоугольника.