Digitals + Delphi 7 часть вторая или Novator 2

Библиотека содержит 28 классов, которые сделают работу с Digitals (сборки 17.03.09) в среде программирования Delphi 7 удобной. О главном Novator и Novator 2 не совместимы. Библиотека была переписана полностью:

  1. Экземпляры классов хранят данные только об уникальных идентификаторах объектов, что позволило:
  • уменьшить объём данных передаваемых через сервер команд Digitals, поскольку запрашиваются только необходимые данные;

  • сделать актуальными данные полученные/переданные через члены классов библиотеки.

    1. Реализован механизм исключительных ситуаций, который позволяет отследить ошибки следующего характера:
  • обращение к несуществующему объекту;

  • отсутствие связи с сервером команд Digitals;

  • отсутствие файла шаблона;

  • повторное добавление элемента.
    Так что появление непонятных ошибок практически исключено.

    1. Реализован механизм событий, который поддерживает следующие события:
  • создание объекта;

  • удаление объекта;

  • изменение объекта;

  • начало сбора объекта;

  • конец сбора объекта;

  • выделение объектов;

  • добавление точки в объект;

  • удаление точки из объекта;

  • добавление объекта типа точка.

    1. Добавлена документация, так что всю интересующую информацию ищите там (NOVATOR 2_0).
      Novator2 - 10-03-10.zip (288 KB)

Серьезный подход. Очевидно набор классов создавался для применения в реальных задачах. Поделитесь какие задачи вы решаете при помощи своего новатора? Насколько быстро это работает с большими картами?

Реализованные задачи с примерами хотелось бы увидеть.

На данный момент ни каких серьёзных задач решено не было. Novator 2 создавался как продолжение идеи Novator. Так что всё впереди.

Всё зависит от того что нужно сделать и как это реализовать. Но Novator 2 быстрее чем Novator. Вот небольшой пример работы с событиями (иногда бывают сбои, но над этим пока работаю).
Example.zip (513 KB)

я так понимаю, что ограничение на количество передаваемых данных так и осталось?

Ошибка при подключении: List index of bounds (1042)
в результате передана только часть объектов

Да, вот только сейчас это стало менее актуальным, но и не без этого. В чём вся проблема - в координатах объекта, они формируют львиную долю текста описания объекта.

Как был раньше - изменять объект можно было командами Map.GetObject/Map.PutObject и остальными из этой серии. Принимать большой ответ сервера я смог, поэтому и команда Map.GetObject мог использовать. То есть получить объект можно было без проблем. А вот передать серверу команд большой текст у меня не получается (КТО ЗНАЕТ ПОДСКАЖИТЕ) поэтому использование команды Map.PutObject, с большими объектами, приводило к ошибка. Следовательно вносить изменения в большие объекты было нельзя.

Потом любимый скриптовый язык расширился… Появились команды из серии Map[n].Object[n].Point[n] и другие. Частично отпала необходимость в использовании команд Map.GetObject/Map.PutObject. Но нововведение (от 01.10.2008) не позволяли вставлять и удалять точки в объекте.

Потом (КОГДА ЗАКОНЧИЛСЯ ПЕРИОД ОБНОВЛЕНИЯ МОЕГО ДИГИТАЛСА) появились команды позволяющие вставлять и удалять точки из объекта - но увы, мне эти обновления были недоступны… К чему я всё это - если ты хочешь добавить или удалить точки из больших объектов Novator 2 этого не умеет. Зато изменить значения координат точек таких объектов уже можно.

Так что ждём пока начальство обновит Дигиталс или кто то подскажет как передать команду содержащую много текста в Дигиталс через TCP/IP.

а ты ведь раньше как-то разбивал строку, чтобы извлечь все данные. Как это происходит сейчас?
и как вообще передаются данные? По объектно?

для объектов:
получить/изменить слой объекта и его ID - Map.GetObjectHeader/Map.PutObjectHeader
получить/изменить координаты объекта и параметры Map[n].Object[n].Point[n]/Parameter[n]
добавить удалить точки объекта Map.PutObjectCoordinates/Map.GetObjectCoordinates

Открой файл Novator_2.pas - и посмотри (ну ты же 5.5 лет знакома с Delphi)

Давайте мы лучше обновим ваш ключ бесплатно. За заслуги перед отечеством и пользователями Digitals :slight_smile: Отправьте нам код ключа на help@vingeo.com.

Вот эт я понимаю - вот что значит патриотизм - и из страны даже уезжать только из-за этого уже не хочется :cry:

Чё греха таить - я просто офигел… :open_mouth:

Ну вот, при содействии разработчиков Digitals, ограничение на количество точек в объекте, с которым осуществляется работа, теоретически отсутствует. Ну а практика покажет…
Novator2 - 15-03-10.zip (288 KB)

Расширение функциональности Novator2, добавлено:
TNObject.Selected
TNObjects.ObjectsList
TNObjects.SelObjectsList
описание читайте в файле помощи.

Ещё один пример использования Novator2. Что такое COM технология узнать можно из интернета, на этом не останавливаемся. Скажу только одно знаете ли Вы Делфи или нет это уже не важно. По средствам интерфейсом (читай описание в Хелпе) получить доступ к данным Дигиталс возможно из любого известного Вам языка (ну если он поддерживает интерфейсы). В примере был использован VB который имеется в продуктах Office

Если Вы всё скачаете и запустите - то ничего не заработает :smiley: . COM сервет (вернее всё его содержимое) нужно зарегистрировать в системе. Я знаю два варианта:

-первый (он же мною апробированный) распаковываем проек, открываем его (ну если конечно у Вас установлен Delphi 7) делаем Run - и всё ОК.

-иной (не пробовал) зарегистрировать COM сервер утилитой tregsvr.exe - запустив RegisterSer.bat (в файле прописано tregsvr.exe -t NovatorCOMforDigitals.exe). Что будет потом - самому интересно. :wink:

Если что напутал - исправляйте.
NovaCOM.zip (572 KB)
Demo COM.exe (806 KB)
Novator2 - 10-03-22.zip (93.2 KB)

Вот они распределенные приложения :slight_smile: COM сервер управляет Digitals, VBA управляет COM сервером. Писать приложения для Digitals теперь можно на любом языке с поддержкой ActiveX. Вот если бы еще встроить COM сервер в сам Digitals.

Ну так в чём проблема, давайте совместными усилия сделаем COM для дигиталс.

Есть же фрилансеры тут на форуме - которые не прочь помочь :wink: И даже некоторые - безвозмездно. :unamused:

Исправлено использование классом TNConnector переменной WaitReply при работе с большими объёмами данных.
Novator2 - 28-06-11.zip (12.9 KB)

Тема похоже умерла. А жаль, есть вопросы. Хотелось бы получить подсказку. Я немного царапаю на Vb6 и посему непонимаю приведенныев инструкции примеры. В открытой карте все более менее понятно, параметры вывести там координаты объекта. Это все получается, а вот сохранить активную карту в файл с заданным именем,закрыть активную карту таких операторов ненашел. Подскажите пожалуйста

Я не автор данного модуля. Но, просмотрев исходный код, можно понять, что для сохранения карты используется метод TNMap.SaveAs(mName:String)

Посмотрите реализацию. Функционал модуля легко расширить добавляя в него отправку команд скриптов (команды одинаковые для TCP/IP и скриптов Digitals).