Подскажите,пожалуйста,есть ли в Диджтал (а если есть то как ей пользоваться) функция,позволяющая “отрезать” от полигона кусок заданной площади? Также хотелось бы узнать как создать свою штриховку. Заранее спасибо
Воспользуйтесь функцией Сервис-Разделить по площади.
В скрипты дижиталс добавили функционал обработки событий.
Вопрос: как обеспечить автоматический запуск скрипта с обработчиком при открытии дижиталса? Выставленный “автозапуск” на кнопке с обработчиком событий не работает
. На обычных скриптах автозапуск работает. Сборка 23.08.2011. Спасибо.
Пока народ обдумывает (надеюсь), добавлю немного ясности к своему предыдущему сообщению (почему собственно я его написал):
Я подготовил рабочую карту генплана, которую потом будут пополнять операторы без моего участия.
Думаю, две следующие задачи вполне обоснованы для группы людей, работающих с одной картой:
Задача 1: при пополнении карты оператором новыми данными обеспечить сохранность раннее внесенных данных.
[size=85]Простой запрет изменять геометрию и изменять параметры в свойствах карты не решает проблемы - оператору нужно вносить новые данные на те же слои, где уже есть объекты.[/size]
Задача 2 (контрольная): Найти новые или измененные объекты за определенный период.
[size=85]Сравнивать последнюю версию карты со всеми архивными копиями? Это затратно по времени и требует наличия всех архивных копий за интересуемый период.[/size]
На мой взгляд, проблему можно решить следующим образом:
- Внести два параметра “Дата создания” и “Дата редактирования”,
- Определить действия для событий OnCollect (добавлять дату создания), OnAdd, OnLayerChange, OnChange (добавлять дату редактирования, проверять дату создания редактируемого объекта, если старый - Undo или разрешить редактирование), OnSelect (выставлять StartOperationGroup)
- переопределять реакции на события до начала редактирования карты
Пункт 1) решается простым добавлением двух параметров в карту. Пункт 2) можно решить через внешние программы, завязанные с дижиталс по tcp-ip и запускаемые от событий, например для сбора:
%Events.OnCollect
$S=@EventObject
@Map.SelectObject $S
@Run "SetDateCreateObject.exe"
Пункт 3) с определением реакций на события - можно создать кнопку и к ней прикрепить все реакции, однако кнопку нужно будет нажимать при каждом открытии дигиталс, автозапуск для таких кнопок не работает
Если прописывать все рекции на каждый слой (много, но возможно) - то комманда %Events.OnLayerChange не работает в скрипте слоя, а объект, который лежит не в своем слое - это потерянный объект.
Понимаю, что мой вопрос скорее всего направлен к разработчикам системы, но рад буду узнать любые мнения и решения.
Подскажите пожалуйста, почему в программе Digital в функции свойства карты в области Datum отсутствуют зони СК 63?
Спосіб запуску скрипта на виконання: або виникнення події, або запуск Digitals визначений безповоротно і однозначно.
А чого не зробити два скрипта: один - з обробкою події, другий - того ж змісту (без обробщика події) але з автозапуском ![]()
voha, у меня проблема именно в автозапуске всех скриптов с обработчиками событий. Эти скрипты у меня основные.
Скрипты, завязанные на событиях, управляют атрибутами даты создания и редактирования объектов и эти скрипты должны быть активированы постоянно. В результате все объекты в карте будут иметь даты, на основе которых можно создавать другие скрипты, без обработчиков событий (задача 2).
Желательно этот функционал (ведение дат создания и редактирования объектов) реализовать в диджиталс (как автокаде, например, эти свойства объектов управляются системой без участия пользователя).
Добавьте вычисляемый параметр
=TimeStamp Объект_изменен
Установите тип параметра Вешественный и маску dd.mm.yyyy hh:mm
Это и будет дата и время последнего изменения объекта.
Bondarets Alexander, да, дату редактирования можно назначать и вашим способом.
Однако у меня проблема ведь в другом - не работает автозапуск скрипта с обработчиками событий. Мне нужен гарантированный запуск такого скрипта с защитой от любознательных операторов.
Як я розумію є два поняття: скрипт з автозапуском - виконується при запуску Digitals і скрипт обробки події - виконується при редактуванні відкритої карти, їх не можна утотожнювати. Ніколи Вам не вдасться оформити скрипт обробки події як скрипт автозапуску. Або можна повторити текст скрипта обробки події без рядка %Events. … в скрипті з присвоєним йому автозапуском.
У цьому змісті: функция (событие) %Events.OnFileOpen
Дякую за підтримку. Поки, мабуть, тільки створюючи текст скрипта “на льоту” виконанням сторонньої програми.
Автозапуск событий заработал
Скачал, попробовал - работает. Спасибо!
Вопрос: Кнопка с автозапуском доступна оператору и он может отключить автозапуск или просто отжать кнопку.
Может стоит реализовать автозапуск через наличие внешнего файла? например, DigitalsStartUp.dsf:
есть файл - выполнить его после загрузки Digitals, нет - значит автозапуск не прописан.
При таком решении можно защитить файлы со скриптами, предоставив для операторов доступ только на чтение.
При перемещении точек маркированного объекта, совпадающие точки не выделенных объектов изменяются синхронно (кнопка “Синхронизация точек” нажата).
Вопрос: Почему функция @EventObject не возвращает все измененные объекты?
При перемещении точек маркированного объекта, совпадающие точки не выделенных объектов изменяются синхронно (кнопка “Синхронизация точек” нажата).
Вопрос: Почему функция @EventObject не возвращает все измененные объекты?
Ну, це
. Все просто. Активний (маркований) об’єкт один. От і маєм номер одного об’єкта.
Побільше вхідної інформації про редаговані об’єкти у скриптах обробки подій не завадить. Наприклад: функція@EventObject - а треба було б відповідно @EventObject.Point, що повертала б номер зміненої точки при події %Events.OnChange.
Варіанти вирішення питання:
-добавляти функції, які повертають необхідну інформацію, або
-добавляти список вхідних програмних (що формуються Digitals) параметрів $Parameters в обробщики подій, які б містили необхідну інформацію.
До теми: зручно буде мати функцію @Map.Object[N].Point[N].Synchronize >Номер об’єкта Номер точки|Номер об’єкта Номер точки|… Список: об’єкт і номер точки, об’єкт і номер точки будем мати, якщо точка є вузлом (співпадає з точкою інших об’єктів).
При изменении порядка отображения объектов на карте (команды “На задний план”, “На передний план”) в лог-файл ничего не записывается
.
И события молчат…
.
При изменении порядка отображения объектов на карте (команды “На задний план”, “На передний план”) в лог-файл ничего не записывается
.
И события молчат….
А для чого
. Не все зразу. По чуть-чуть
, помаленьку.
А для чого
. Не все зразу. По чуть-чуть
, помаленьку.
Если в карте есть перекрывающиеся объекты со сплошной заливкой, то изменяя порядок отображения объектов можно сильно исказить содержание.
А вот обнаружить такие различия, сравнивая архивные копии, дижиталс пока не может
. Если не так - поправьте.
Если в карте есть перекрывающиеся объекты со сплошной заливкой, то изменяя порядок отображения объектов можно сильно исказить содержание.
А вот обнаружить такие различия, сравнивая архивные копии, дижиталс пока не может. Если не так - поправьте.
От і добре, що тепер є %Events.OnShutdown, %Events.OnFileSave, %Events.OnFileOpen, в коді яких, можна прописати всі необхідні перестановки шарів на передній план та інше перед закриттям карти.
А скажіть будь ласка, чи получилось заборонити запис в файл *.tlb з текстом скрипта, і чи буде толк з такої заборони
. А як не дати користувачу прочитати текст скрипта ![]()
От і добре, що тепер є %Events.OnShutdown, %Events.OnFileSave, %Events.OnFileOpen, в коді яких, можна прописати всі необхідні перестановки шарів на передній план та інше перед закриттям карти.:
Эти события можно пока прописать на кнопку пользователя, хотелось бы в дижиталс. Тем не менее задача решаема.
А скажіть будь ласка, чи получилось заборонити запис в файл *.tlb з текстом скрипта, і чи буде толк з такої заборони
. А як не дати користувачу прочитати текст скрипта
Запрет записи в *.tlb файл не даёт результата. Дижиталс, при манипуляциями с кнопками, убивает прежний tlb-файл и создаёт новый, как я понял.
При чём ограничение доступа к tlb-файлу не мешает пользователю выключить вашу панель (запрет редактирования ged.ini я оставляю “суворым” администраторам). Запретить пользователям редактировать скрипты можно, предоставив доступ на чтение для *.tlb файлов, а из скриптов вызывать tlb-библиотеки, правда как защитить сами скрипты на кнопках и слоях пока не известно.
Если вам дОроги исходники скриптов или вы не хотите ими делиться с конкурентами, то закодируйте их любым кодировщиком. Для загрузки в дижиталс создайте внешнюю программу (загружающий скрипт, например: @Run MyExternalProgram.exe), которая будет вызывать декодировщика с вашим ключом и потом запускать через tcp-ip ваш скрипт на выполнение, например: %Library.Myscript. Не забыть только по завершению перезаписать Myscript.tlb другими данными и удалить. Вот. ![]()
