Создание собственных стилей площадных заливок в MapInfo

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


В заметке приведены способы создания собственных стилей площадных заливок для MapInfo

По-умолчанию, в ГИС системе MapInfo Proffesional представлены некоторые виды стилей линий и площадных заливок. Однако, в отличии от стилей символьных объектов, которые можно не только выбирать из .ttf шрифтов, но даже и создавать свои собственные символы из растровых картинок, стили линий и штриховок редактировать штатными средствами MapInfo нельзя. Но если для редактирования файлов формата .pen, отвечающего за стили линий, существует бесплатная утилита Line Style Editor, то со стилями штриховок ситуация сложнее. Дело в том, что стили штриховок созданы в виде отдельных файлов .bmp и прикреплены к системному файлу. Поэтому даже если мы и создадим свои штриховки, тем самым подредактировав системный файл MapInfo, нам нужно будет этот же файл целиком передать тому, кто собирается открывать таблицы. В противном случае, у того, кому мы всё это передадим, ничего не отобразится. Поэтому создавать свои заливки удобно скорее тем, кто хочет внести что-то новое, похвастаться, или, допустим, создавать свою собственную заливку, выполнить с её помощью какую-то работу, сделать картинку и отправить заказчику.

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

Способ первый

Мы покупаем полнофункциональную версию программы "Редактор площадных заливок". Программа сразу же определяет версию MapInfo, установленную в системе, и предлагает нам подредактировать заливки. Программа удобна тем, что позволяет нам редактировать штриховки напрямую; нет нужды сначала извлекать их, редактировать и прикреплять в качестве ресурсов обратно к библиотеке. Демо-версию можно скачать здесь.

Способ второй

У нас нет желания покупать программу "Редактор площадных заливок". Что же - можно обойтись и без неё. Для этого мы скачиваем небольшую бесплатную утилитку Resource Hacker для редактирования ресурсов. Скачиваем, устанавливаем и запускаем.

Главное окно Resource Hacker

В качестве испытуемого объекта я брал MapInfo версии 11.5.4. Начиная с версии 10.0 ресурсы, относящиеся к заливкам, лежат в файле micore.dll и не менялись в том числе и до версии 11.5.4. Проще говоря - они вездесь одинаковы. Что же - давайте откроем файл micore.dll, находящийся в корневой директории MapInfo. Предварительно не забываем сохранить оригинальный файл micore.dll где-нибудь в другом месте.

Открытый в программе RH файл micore.dll

Перед нами куча ресурсов. Любой из них мы можем брать и заменять на свой собственный, не вмешиваясь в код файла. Нас интересует папка Bitmap. Если туда зайти и прощёлкать ресурсы с 1 по 183, то окажется, что это и есть наши заливки. К слову говоря стилей заливок в MapInfo 184 штуки. Отсутствие заливки (под номером один в самой программе) тоже своего рода заливка. Давайте потренируемся извлекать ресурсы в отдельные файлы. Выделим для примера последнюю заливку, кликнем правой кнопкой и выберем "Save [Bitmap : 183 : 1033]". После чего сохраним файл под любым именем куда-нибудь к себе.

Сохраняем ресурс к себе

Дальше дело за графическим редактором. С учётом того, что мы редактируем примитивный битовый .bmp, то подойдёт обычный paint. Давайте откроем наш сохранённый файл .bmp и как-нибудь его изменим. Тут уже вступает в дело втолько Ваша фантазия. После необходимых изменений попробуем заменить тот же самый ресурс, который мы недавно экспортировали. Чтобы это сделать, кликните правой кнопкой на нашем 183-м ресурсе и выберите "Replace Resource".

Заменяем ресурс

В появившемся окошке нажимаем "Open file with new bitmap", после чего выбираем наш созданный .bmp и нажимаем Ок. Если нас всё устраиваем, нажимаем Replace.

Повторно выбрав 183-й ресурс, убедитесь, что он заменился. Сохраните изменённый .dll файл через File - Save. Закрывать RH не обязательно.

Запускайте MapInfo и убедить на любом полигональном объекте, что новая штриховка появилась.

Новая штриховка

Отлично, у нас всё получилось. По сути говоря, в извлечении ресурса не было необходимости. Мы могли и вручную создать картинку в любом графическом редакторе и затем подменить.

Давайте пойдём дальше. Как видно на моей последней картинке, в таблице стилей штриховок есть две свободные ячейки (строка 24, колонки G и H). Давайте попробуем добавить свои заливки. Создайте две любые .bmp с таким же размером (32х32). Имена файлов могут быть любые. После этого делаем следующее. Выделяем папку Bitmap (просто щелкнув по ней левой кнопкой мыши) и в меню выбираем "Action - Add a new Resource".

Добавляем новый ресурс

Нажимаем "Open file with new resource" и выбираем наш созданный .bmp файлик. В качестве имён для первого указываем следующий по порядку номер в ресурсах, то есть "184" (без кавычек). Для второго будет соотвественно "185". Resource language в обоих случаях указываем "1033". Если Вы ошиблись с именем ресурса - не беда. Если кликнуть по нужному ресурсу правой кнопкой и выбрать команду "Rename Resource", то ресурсу можно присвоить новое имя.

Сохраняем наш файл. Запускаем MapInfo и смотрим результат.

Ещё две добавленные штриховки

Всё получилось, мы добавили две новые штриховки. Но и это ещё не всё. Если добавить ещё одну штриховку (теперь под номером 186), то можно увидеть такую вещь:

Новая строка со штриховками

MapInfo прочёл ещё одну штриховку и добавил её в новую строку. Таким образом мы можем продолжать создавать и добавлять штриховки до какого-то определённого предела, ограниченного MapInfo. Максимально лично у меня было в общей сложности 260 заливок и MapInfo продолжал работать стабильно. По логике вещей стилей площадных заливок можно добавить от 1 до 899, так как с ресурса под номером 900 уже начинаются другие элементы интерфейса.

Если Ваша версия MapInfo ниже 10 и Вы не можете найти файл micore.dll, то Ваш файл, с которым будете работать, будет называться mires***.dll, где *** - номер версии MapInfo. Например, для MapInfo версии 8.5 файл называется mires850.dll и находится он в корневой директории MapInfo. Принцип работы тот же. Возможно Вас может смутить тот факт, что количество реальных штриховок внутри MapInfo и количество bitmap картинок внутри mires850.dll различаются. Это не страшно. Достаточно найти номер ресурса последней штриховки и мы так же можем добавлять по вышеописанной схеме новые штриховки.

Если у Вас возникают вопросы, касающиеся языка добавляемых ресурсов, то есть Language Resource, то просто используйте такой же номер языка, в котором выполнены другие ресурсы. Language Resource это по сути номер языка программы. Например, 1033 для английской версии и 1049 для русской версии. Но в большинстве случаев это число обозначают в шестнадцатеричной кодировке. Соответственно это будут числа 0x409 и 0x419. Полный список номеров можно посмотреть здесь.

На этом всё, успешной Вам работы!

Всеволод Slinger Виноградов