Нужно определять растояние между точками - можно ли реализовать такого рода функцию?
Я написала програмулинку, которая проверяет двойные точки и вертикальные вектора - а теперь нужно отыскивать находящиеся близко точки (в т.ч. числе вертикальные вектора имеющие небольшой наклон ) - функция генерализации в данном случае не очень помогает - есть точки, которые нужны - и их генерализация удаляет, а я - маркирую точки, которые “подозреваются” в очень близком месторасположении.
И ещё…
Как можно удалять ненужные точки из объекта - можно ли реализовать функцию удаления, вставки точек / в объект.
Для удаления ненужных точек как нельзя лучше подходит генерализация. Насчет добавления точек, непонятно, что должна делать функция? Имеется функция для вставки точек с заданным шагом в контур объекта (Правка>Добавить точки). Есть команда вставки точек в виде отдельных объектов (закладка Правка кнопка Добавить узлы).
Сложный анализ, если требуется проверка всех объектов карты и всех точек объектов лучше не выполнять в скрипте. Во-первых, такой скрипт будет тяжело написать, во-вторых работать он будет очень медленно.
Используйте внешнее приложение, получающее данные от Digitals через набор TCP команд. И функции геометрического анализа лучше используйте свои. Подобное уже создавали наши пользователи Volod написал GedTools Delphi + Digitals - #15 від IvanShubin.
А функцию нахождения расстояния между двумя точками на Делфи я вам дам Хотя идею с вертикальными векторами, честно говоря, не понял.
@Map.Object[$I].Point[$J].Add Point @Map.Object[$I].Point[$J].Add Number
Есть точки - которые после работы скрипта обозначены как “лишние”. Их нужно удалить. Или наоборот - добавить - но в автоматическом режиме.
Программка уже напсиана и работает - находит двойные точки и вертикальные вектора - 2 точки, имеющие одинаковые X и Y, но имеющие разные Z идущие подряд в одном линейном / полигональном объекте.
Мне надо послать из своей програмки в Дигиталс команду нажатия/отпускания клавиши.
стандартный KEYUP/KEYDOWN не работают. Немного пошаманив получилость что в Дигиталсе какието свои обработчики клавиатурных событий.
Подскажите пожалуйста что и в каком формате послать чтоб Дигиталс отреагировал на команду из вне.
Дело в том, что в создаваемый функцией @Map.NewObject новый объект, автоматом добавляется одна точка с нулевыми координатами. Иначе карта не примет объект не имеющий точек.
Поэтому первую точку добавлять уже не нужно.
Просто присвойте ей новое значение вызвав @Map.Object[N].Point[1] X Y Z.
Или, как вариант, после вызова @Map.NewObject обнулите количество точек объекта вызвав @Map.Object[N].Count 0.
Практически закончил. Есть какаято непонятная мне ошибка но работает как задумано.
Итак начнем
Запускаем Automator.exe
Жмем кнопку “старт” .
Запускается ловушка для клавиатуры.
И программа готова к использованию.
Если надо остановить то жмем “стоп” или просто закрываем программу.
Теперь что она делает. Кликая (быстро нажимая и опуская) клавишу Ctrl в дигиталсе будут автоматически менятся вкладки Сбор\Правка\Инфо. Ну или те которые отмечены галочкой в окне программы.
Теперь об ошибке: непонимаю почему - но при первом нажатии клавиши в активном Дигиталсе в программе происходит ошибка. Чтото с памятью становится. Оттрейсить в Делфе не получается - всё виснет. Но как только нажимается кнопочка ок на сообщении об ошибке всё начинает работать. Automator.zip (314 KB)
Уважаемые разработчики и форумчане! Подскажите пожалуйста как справиться со следующей задачей:
Есть большое количество обменных файлов, в которых забито одно решение но разное (например PZ = РС,08.09.1995,30,-). Сельский совет принимает уточняющее решение и теперь во всех эти файлах нужно перебить PZ (например PZ = РС|РС,08.09.1995|17.09.2009,30|45,-|-).
Как это можно сделать средствами скрипта? Если можно написать пример.
Просто тут, как я понял, необходимо перебирать символы, находить запятую, разбивать по частям, а потом снова сшивать. А как это сделать я не представляю.
Заранее спасибо за помощь и подсказки
С данной задачей на отлично справится утилита Funduc Search’n’Replace.
Search’n’Replace находит в множестве файлов вхождение строки(допускаются выражения) и заменяет на другую строку (выражения тоже допускаются).
Dmitry_Zolotar спасибо за подсказку. Но хочется использовать для этого Digitals. А вообще есть ли в Digitals функции для работы с символами? Т.е. работа со строкой есть, а вот с символами этой строки? И еще вопрос - как можно использовать в скриптах папку по умолчанию. В эту папку я скинул текстовые файлы и хотелось бы при ссылке на них упоминать только название, а не полные пути, которые пришлось бы переделывать при перенесении папки Digitals в другое место.
Осмелюсь вынести на общее обсуждение вот такую кнопочку, которая закрывает все открытые окна, не закрывая Диджиталс. Возможно никому она и не нужна - но мне очень нужна была. Тут раньше просили вроде бы такую - так вот - пробуйте.
$MC=@MapCount @if $mc=0 then @break нет открытых карт
$I=1
%Start @ActivateMap $I @CloseMap
$I=$I+1 @if $I<=$MC @Goto %Start
Отличная фуцнкция
Добавлю только, что в @CloseMap можно указать номер карты, так что необязательно делать ее активной:
$MC=@MapCount @if $mc=0 then @break нет открытых карт
$I=1
%Start @CloseMap $I
$I=$I+1 @if $I<=$MC @Goto %Start
По идее, так и работать должно быстрее, если окон много.
А еще с @CloseMap нужно быть осторожным, так как карта закрывается без запроса на сохранение даже если в ней были изменения. Если нужно закрытие с запросом, то лучше использовать @FileClose. Правда эта команда работает только с активной картой.