What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

[TEST. BETA] New GPS Editor tests

Need the Import function back, I used that a lot in the past, to make corrections to paths.
 
What's new:
  • Сompatibility
  • Import * .db3 (DB Merge)
  • Shortcuts in the plugin
  • Changed the network port GPS editor on 4590.
Use only "GPS Plugin"!Others do not work with the new editor.
 
What's new:
  • Сompatibility
  • Import * .db3 (DB Merge)
  • Shortcuts in the plugin
  • Changed the network port GPS editor on 4590.
Use only "GPS Plugin"!Others do not work with the new editor.
подвигал точки мышкой, решил сохранить, высветилось предупреждение "Constraint". Что за ограничение?
 
подвигал точки мышкой, решил сохранить, высветилось предупреждение "Constraint". Что за ограничение?
Если не секрет, то то пришлите базу, которую вы открыли, гарантирую анонимность. Я не играю в AA. Вообще нужно мне наверное анализ производить на ошибки старого редактора. В старом редакторе встречались баги, когда в таблице свзей start_point=end_point. У меня такое не прокатит. Из из редактора такое не сделать.
Думаю не лишним будет мне выложить тут структуру базы:
Code:
CREATE TABLE IF NOT EXISTS `point`( 
`id`         INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`x`          REAL,
`y`          REAL,
`z`          REAL,
`name`       VARCHAR UNIQUE,
`radius`     REAL    NOT NULL DEFAULT ( 0 ),
`temp_point` INTEGER NOT NULL DEFAULT ( 0 ) );

CREATE TABLE IF NOT EXISTS `link` (
`id`             INTEGER PRIMARY KEY AUTOINCREMENT,
`start_point_id` INTEGER NOT NULL,
`end_point_id`   INTEGER NOT NULL,
`one_way`        INTEGER NOT NULL DEFAULT ( 0 ),
`temp_link`      INTEGER NOT NULL DEFAULT ( 0 ),
FOREIGN KEY(`start_point_id`) REFERENCES `point`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(`end_point_id`) REFERENCES `point`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,  
CHECK  (`start_point_id`<>`end_point_id`));

CREATE TABLE IF NOT EXISTS `poly` (
`id`             INTEGER PRIMARY KEY AUTOINCREMENT,
`name`           VARCHAR UNIQUE,
`type`           INTEGER NOT NULL DEFAULT(0),
`zOrder`         INTEGER NOT NULL DEFAULT(0));

CREATE TABLE IF NOT EXISTS `polypoint`(
`id`             INTEGER PRIMARY KEY AUTOINCREMENT,
`poly_id`        INTEGER NOT NULL,
`point_id`       INTEGER NOT NULL,
FOREIGN KEY(`poly_id`) REFERENCES `poly`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(`point_id`) REFERENCES `point`(`id`) ON DELETE CASCADE ON UPDATE CASCADE);

CREATE UNIQUE INDEX `polyPointIdx` ON `polypoint` (`poly_id`,`point_id`);

Проверьте базу на это ограничение
Code:
CHECK  (`start_point_id`<>`end_point_id`));

UPDATE:
fix Constraint error
SQL Query:
Code:
DELETE FROM `link` WHERE `link`.`start_point_id`=`link`.`end_point_id`
Will be done automatically in the next update editor
 
Last edited:
Спасибо, вот теперь можно переходить на новый редактор, очень удобен в использовании и многофункционален!
 
I got d3 map with 2 unlinked paths, so i link them but when i try to save it's write " Constraint " what does it means and what i fail with?
 
I got d3 map with 2 unlinked paths, so i link them but when i try to save it's write " Constraint " what does it means and what i fail with?
You can open the database in any editor SQLite.
Check the database query:
Code:
SELECT `id` FROM `link` WHERE `link`.`start_point_id`=`link`.`end_point_id`
If the results will be -
Complete the removal of errors of database queries
Code:
DELETE FROM `link` WHERE `link`.`start_point_id`=`link`.`end_point_id`
If you do not you can do it yourself, send me a base in PM.
 
It seems that, the gps doesn't make it crash anymore, good, but send position doesnt show the position in the new editor. Is that possible ?
 
Добрый вечер. Да действительно это замечательный новый плагин который будет идеальной заменой его предшественника.
 
Спасибо! Буду дальше развивать проект.
По поводу движения по точкам в плагине. Там работы на 5 минут, а из-за этой функции я не могу полностью пока перейти на твой редактор. Добавь на форму листбокс и кнопку. По кнопке делай открытие db3 файла, в листбокс заноси все имена точке, которые не пустые, и все, потом можно на событие двойной клик добавить команду gps.GpsMove(listbox1.SelectedItem.ToString())
Функция очень полезная, а реализация делов на 5 минут. Прост овсегда после построения gps маршрута обязательно его нужно протестировать, причем несколько раз, а выполнять основной скрипт для этого не всегда удобно и очень долго.
 
По поводу движения по точкам в плагине. Там работы на 5 минут, а из-за этой функции я не могу полностью пока перейти на твой редактор. Добавь на форму листбокс и кнопку. По кнопке делай открытие db3 файла, в листбокс заноси все имена точке, которые не пустые, и все, потом можно на событие двойной клик добавить команду gps.GpsMove(listbox1.SelectedItem.ToString())
Функция очень полезная, а реализация делов на 5 минут. Просто всегда после построения gps маршрута обязательно его нужно протестировать, причем несколько раз, а выполнять основной скрипт для этого не всегда удобно и очень долго.
Я знаю =). Есть одна проблема: Редактор работает с базой в отсоединённом режиме.
Нужно сохранить базу, перед открытием в плагине. Нужно как то об этом сообщать пользователю, но по мне это не удобно.
Я хочу сделать немного другой вариант:
При нажатии на кнопку "загрузить базу" в плагине, плагин отправляет запрос редактору.
Редактор сохраняет базу во временный файл, и передаёт её в плагин.
Плагин загружает базу в GPS.
Тут появляется следующий момент:
В GPS нету метода, который выводит список именованных точек в массив.
Я просил Out'a добавить такой метод, но пока что такого метода нет.
Следовательно нужно прикреплять к плагину своё чтение базы, чтобы вывести список именованных точек. Не разумно как то.

Поэтому я жду Out'a, может быть добавит полезный метод. И не нужно будет людям в плагинах, типа TradeRunner или SmartTrader :) в своих маршрутных базах, указывать определённые имена точек, как указал разработчик плагина. Разработчику просто нужно будет сделать функционал, который позволит пользователю указать имена точек в комбобоксе. Удобно же?

Вот такие вот мысли. Может что предложите по лучше? Я не любитель костыльных решений.(Хотя без них никуда :cool:)
 
Я знаю =). Есть одна проблема: Редактор работает с базой в отсоединённом режиме.
Нужно сохранить базу, перед открытием в плагине. Нужно как то об этом сообщать пользователю, но по мне это не удобно.
Я хочу сделать немного другой вариант:
При нажатии на кнопку "загрузить базу" в плагине, плагин отправляет запрос редактору.
Редактор сохраняет базу во временный файл, и передаёт её в плагин.
Плагин загружает базу в GPS.
Тут появляется следующий момент:
В GPS нету метода, который выводит список именованных точек в массив.
Я просил Out'a добавить такой метод, но пока что такого метода нет.
Следовательно нужно прикреплять к плагину своё чтение базы, чтобы вывести список именованных точек. Не разумно как то.

Поэтому я жду Out'a, может быть добавит полезный метод. И не нужно будет людям в плагинах, типа TradeRunner или SmartTrader :) в своих маршрутных базах, указывать определённые имена точек, как указал разработчик плагина. Разработчику просто нужно будет сделать функционал, который позволит пользователю указать имена точек в комбобоксе. Удобно же?

Вот такие вот мысли. Может что предложите по лучше? Я не любитель костыльных решений.(Хотя без них никуда :cool:)
У тебя точки автоматом не сохраняются после добавления их в редакторе?

По поводу имен точек....
функция открытия файла
Code:
private void btnOpen_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog dialog = new OpenFileDialog();
                dialog.Filter = "File base GPS|*.db3";
                dialog.Title = "Select base GPS file";
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    str = dialog.FileName;
                    refreshGps();
                    
                }
            }
            catch { }
        }

Собственно сама функция чтения точек
Code:
public void refreshGps()
        {
            if (str != "")
            {
                listGPS.Items.Clear();
                btnOpen.Enabled = false;
                SQLiteConnection connection =
                    new SQLiteConnection(string.Format("Data Source={0};", str));
                connection.Open();
                SQLiteCommand command = new SQLiteCommand("SELECT * FROM 'point' ORDER BY name;", connection);
                SQLiteDataReader reader = command.ExecuteReader();
                foreach (DbDataRecord record in reader)
                {
                    string name = record["name"].ToString();
                    if (name != "")
                        listGPS.Items.Add(name);
                }
                btnStart.Enabled = true;
                btnOpen.Enabled = true;
            }
        }
 
У тебя точки автоматом не сохраняются после добавления их в редакторе?
Да. Не сохраняет. Сделал это для того, чтобы в будущем реализовать Undo/Rendo и не завязывать редактор на SQLite. Плюсом отсоединённого режима еще является производительность. Не нужно делать запросы, при каждом действии в редакторе.

По поводу имен точек....
функция открытия файла
OpenFileDialog лучше в using обрамить.
Собственно сама функция чтения точек
Ну уж не надо мне так детально. Я вообще то инженером-программистом баз данных работаю, если что :cool:
У меня вопрос: Для того чтобы использовать классы пространства SQLite.... нужно ли с плагином таскать сборку System.Data.SQlite?
Или она от ArcheBuddy используется?

Update;
Я в редакторе вообще вот так именованные точки выбираю из слоя точек:
Code:
var source = (from p in Overlay.Points
                    where p.Name != null && p.Name != ""
                    select p.Name).ToArray();
 
Last edited:
Да. Не сохраняет. Сделал это для того, чтобы в будущем реализовать Undo/Rendo и не завязывать редактор на SQLite. Плюсом отсоединённого режима еще является производительность. Не нужно делать запросы, при каждом действии в редакторе.

По поводу имен точек....

OpenFileDialog лучше в using обрамить.

Ну уж не надо мне так детально. Я вообще то инженером-программистом баз данных работаю, если что :cool:
У меня вопрос: Для того чтобы использовать классы пространства SQLite.... нужно ли с плагином таскать сборку System.Data.SQlite?
Или она от ArcheBuddy используется?

Update;
Я в редакторе вообще вот так именованные точки выбираю из слоя точек:
Code:
var source = (from p in Overlay.Points
                    where p.Name != null && p.Name != ""
                    select p.Name).ToArray();
да, я таскаю с собой System.Data.SQlite. Именно поэтому я поднимал тему где то неделю назад, где задавал вопрос зачем запихивать стандартную либу в ArcheBuddy и криптовать её, если можно вынести её и дать доступ для всех
 
да, я таскаю с собой System.Data.SQlite. Именно поэтому я поднимал тему где то неделю назад, где задавал вопрос зачем запихивать стандартную либу в ArcheBuddy и криптовать её, если можно вынести её и дать доступ для всех
Я помню, но не помню чем закончилось. Да, это не дело. Нужно Out'а попросить добавить нужные методы.

UPDATE
Отписался в ПМ Out'у.
 
Last edited:
Back
Top