Запрос на функцию

Поработал с внедренной картой и разочаровался:(.
Поиск не работает, выделение нескольких обьектов в инфо ничего, сервер команд работает только с одним выделенным обьектом, и.т.д..
Возможно проще запретить сохранение, копирование, изменение геометрии и параметров встроенных в exe слоев подобно “Статус слоев” - “Пометка”. :confused:

А можно сюда обратить снимание.
[Вставка внедренная карта - #2 від nikodim)
Я тут поп поводу Вставка|Внедренная карта… Не работает она у меня :frowning:
Версия Ged от 07.07.2006 (лицензия до 15.11.2006)

Утро, вечера мудренее:)
Добрался домой и придумал красивое решение распространения готовых карт.
Суть в следующем:
1.Создаем новый формат файла, на пример .dmv (Digitals Map View).
Что он собой представляет?
Тот же не компрессированный файл дигитался инвертируем, (первый байт становится последним), дальше сжимаем и получаем .dmv. Алгоритм может быть и другой, главное он закрыт.
2. В Дигиталс добавляем Exsport to dmv с просьбой ввести пароль доступа к серверу команд TCP/IP, этот пароль записываем туда же, где хранится пароль с “0 доступом”.
Функции открытия файла .dmv в дигиталсе нет!
3. Программа просмотра на базе dib или Ged, пока не обговариваем, на пример MapViewer, читает и записывает только .dmv формат.
Команды открыть, как таковой нет. В меню файл MapViewer отображаются файлы dmv которые лежат в одном каталоге с MapViewer, так же как файлы .dmt в дигиталс.
Пользователь, может выбрать, какая карта его интересует Киев, Винница, Мукачево, и.т.д.
Теперь про пароль для сервера TCP/IP, при подключении к серверу необходимо послать команду Password , которая сравнивает его с паролем “0 доступа”, если ответ ОК то можно работать.
Пользователь может делать с картой что пожелает, главное он не может её использовать ни где кроме как в MapViewer.
Пересчет координат, пароли и другие пункты меню можно обсудить отдельно.
Да, это важно, id создаваемых обьектов в MapViewer должен быть уникальным и пользователь в этот процесс не может вмешаться, нужно для связи с внешними данными.
MapViewer однооконное приложение.
Как вам такая реализация!?
Если это возможно то открываем новую тему и обсудим остальные возможности.
С уважением Volod.

Все более или менее понятно, кроме пароля.
Какая его функция и что и от кого он должен защищать?

Ведь если есть прога пользователя, которая посылает его по TCP/IP, значит она точно так же пошлет его не только в Digitals. Запустит человек любую программу принимающую соединения на нужный порт, а ваша прога будет думать что это Digitals и отправит туда пароль? :slight_smile:

Как помне пароль не нужен, от кого мы будем прятаться?
У нас есть исходник dmf, а у заказкича dmv (так называемый).
Заказчику не от кого защищать информацию. А разработчик при сохранении в dmv указывать доступные опции просмотра.
При этом Диджиталс не может импортировать dmv. Как было сказано ранее.
Dmv будет своеобразным откомпиленым dmf. Разработчик обновил информацию по месности, откомпилировал и отдал заказчику, а тот всвою очередь заменил старый файл на новый. Также как у нас с Ged.exe делаеться.

Проще сделать ЕХЕ-шник с внедренными данными который сам будет показывать свои внутренности. Отдаете заказчику его и все. Заказчику никаких приложений больше не надо, да и контроль по лучше.

И тем не менее, если оставить доступ к DMV по TCP/IP, то пароль в каком-то виде нужен.
А иначе зачем городить новый формат если можно будет подсоединившись “выкачать” всю информацию.

Помоему единственный мало-мальски рабочий вариант с паролями может быть такой. Digitals при подсоединении клиента выдает ему произвольное число. Клиент преобразует это число используя пароль в качестве ключа и отсылает в Digitals ответ. Digitals выполняет то же самое преобразование и сравнивает его с ответом.

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

Хотя и это все можно будет обойти если сделать программу посредника (типа прокси-сервера) которая передаст все что получила от Digitals клиентской программе, а полученный ответ вернет в Digitals, после чего сможет спокойно выкачать всю карту.

Надо думать дальше…

Мне так тоже кажется.
Хотя это чисто вопрос удобства пользователя, а с точки зрения технической реализации это мало что меняет. То ли отдельный файл с измененным форматом (DMV), то ли тот же файл присоединенный к екзешнику - без разницы. Можно даже сделать оба варианта.

Главное все же продумать систему защиты и ограничений пользователя. А иначе нет смысла огород городить если любой мало-мальски грамотный студент обойдет ее за пол-часа :slight_smile:

Что если попробовать так.
Не будем передавать пароль а просто на основании пароля кодируем и де кодируем сами команды и ответы.
Программа берет пароль из dmv а разработчик устанавливает его в своем приложении, теперь просто послать команду, или подслушать ответ не получится а подбирать пароль (ключ) должно быть трудно :exclamation:
Остается только написать функции кодирования и де кодирования. :slight_smile:
Ответы сервера команд возможно и не стоит шифровать.
Да! Надо не забыть про буфер обмена, что бы не совпадал с Дигиталс.

И всетаки самый простой вариант с ЕХЕ-шником. В нем ведь не обязательно реализовывать все возможности дигитался. Просто посмотреть и все. Никакой печати и т.п. Можно даже внести ассиметричное искажение координат при создании файла (чтобы даже принтскрин не помог). В этом случае даже взлом файла ничего хорошего не даст :slight_smile:

Попробуй взять фотографию и внести “ассиметричное искажение”, думаю тебе самому не понравится а что тебе на это заказчик скажет :exclamation: :question: Смещение в ноль вполне достаточно!

По поводу кодирования команд TCP/IP.
Может добавить еще и сжатие, возможно, это решит и эту проблему:
[Работа с TCP - #5 від Sergiy_Oliynyk)

Предлагаю добавить интересный инструмент:

Работает инструмент так же как инструмент выделения, но при выделении объекта запускается внешнее приложение с параметрами запуска установленные в настройках Дигиталса. При нажатой клавише Ctrl выделяются несколько объектов при отпускании Ctrl запускается внешнее приложение.
Настройки содержат два поля:
Приложение - путь к внешнему приложению(полный или относительно ged.exe)
Параметры запуска
В поля Приложение и Параметры запуска можно записать ссылку на параметры карты.
Пример:
Есть параметр 50 Моя программа типа файл.
В Настройки|Приложение - записываем P[50], в Параметры запуска записываем P[-6].
Теперь выделяя объект, запустится Моя программа с параметром запуска ID объекта.
Если выделено несколько объектов то запустится Моя программа и через запятую ID1, ID2, … выделенных объектов.
Таким образом мы сможем программировать реакцию на событие выделение объекта.

Речь не идет о большом смещении (5-10 см вполне достаточно). Визуально такое смещение заметно не будет. (тем более что данную возможность можно сделать опциональной)

Вижу интерес к теме “компонента” и “компилятора” пропал!?
Хотя не кто не говорил что это бесплатно.
Есть еще вариант он более гибкий и широкий о нем я писал в декабре 2005г.:

Имея SVG формат и используя бесплатный ActivX от Adobe без проблем создаем собственный Viwer для своей карты, правда реакцию на действия пользователя придется писать на Javascript примеры можно посмотреть (повторюсь):
http://www.dbxgeomatics.com/products/svgmapmaker/SVGMapMakerSamples.aspx.

Спасибо за внимание.
P.S.
(Лучше отрицательный ответ, чем совсем ничего!)

Злободневный вопрос: есть ли в командах TCP/IP средства работы с подписями (вынесение на карту, изменение, удаление…). Судя по списку - таких команд нет. :frowning:
Когда можно ожидать появления такой возможности?

Такая возможность есть.
Описана в этом же топике на пару страниц выше:
[Запрос на функцию - #18 від Sergiy_Oliynyk)

Нужна команда которая будет выбирать определенный слой для создания в нем объектов.

Что-то типа Map.EditIn 123

Нужно это для того чтобы делать кнопочки с определенным слоем. Нажал и создаешь забор (например). Просто кнопочек в “Избраных слоях” не хватает. Да и перемещать их невозможно для группировки.

Если имеется в виду выбор слоя для сбора, то такая функция уже есть:
Map.SetCollectionLayer LayerIndex
Можно задавать как номер слоя по порядку (Map.SetCollectionLayer 3), так и по коду (Map.SetCollectionLayer ID5)

:smiley: Работает. Спасибо за подсказку

ПС: А может есть уже и механизм выстраивания значков в несколько рядов. И неплохо бы иметь возможность менять высоту панельки из программы, а не корректировать файл руками :smiling_imp:

Чето оно работает не так как надо. Или я чего-то не понимаю.

Вот комманды:
@SelectTab 1
@Map.SetCollectionLayer ID51361001 (Слой с люками. Тип слоя одиночный символ)

Первое замечание:
Если перед нажатием на кнопку выделен объект с Типом слоя отличным от “одиночный символ” то и рисуется не одиночный символ. Для решения этой проблемы добавляю комманду снять пометку. Проблема решается.

Второе замечание:
Даже если принудительно ставить тип шаблона “Точка” то изменение текущего шаблона срабатывает только когда нажимать на кнопку 2 раза.