Majianlord
New Member
- Joined
- Oct 18, 2014
- Messages
- 6
- Reaction score
- 0
Need the Import function back, I used that a lot in the past, to make corrections to paths.
подвигал точки мышкой, решил сохранить, высветилось предупреждение "Constraint". Что за ограничение?What's new:
Use only "GPS Plugin"!Others do not work with the new editor.
- Сompatibility
- Import * .db3 (DB Merge)
- Shortcuts in the plugin
- Changed the network port GPS editor on 4590.
Если не секрет, то то пришлите базу, которую вы открыли, гарантирую анонимность. Я не играю в AA. Вообще нужно мне наверное анализ производить на ошибки старого редактора. В старом редакторе встречались баги, когда в таблице свзей start_point=end_point. У меня такое не прокатит. Из из редактора такое не сделать.подвигал точки мышкой, решил сохранить, высветилось предупреждение "Constraint". Что за ограничение?
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`);
CHECK (`start_point_id`<>`end_point_id`));
DELETE FROM `link` WHERE `link`.`start_point_id`=`link`.`end_point_id`
You can open the database in any editor SQLite.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?
SELECT `id` FROM `link` WHERE `link`.`start_point_id`=`link`.`end_point_id`
DELETE FROM `link` WHERE `link`.`start_point_id`=`link`.`end_point_id`
По поводу движения по точкам в плагине. Там работы на 5 минут, а из-за этой функции я не могу полностью пока перейти на твой редактор. Добавь на форму листбокс и кнопку. По кнопке делай открытие db3 файла, в листбокс заноси все имена точке, которые не пустые, и все, потом можно на событие двойной клик добавить команду gps.GpsMove(listbox1.SelectedItem.ToString())Спасибо! Буду дальше развивать проект.
Я знаю =). Есть одна проблема: Редактор работает с базой в отсоединённом режиме.По поводу движения по точкам в плагине. Там работы на 5 минут, а из-за этой функции я не могу полностью пока перейти на твой редактор. Добавь на форму листбокс и кнопку. По кнопке делай открытие db3 файла, в листбокс заноси все имена точке, которые не пустые, и все, потом можно на событие двойной клик добавить команду gps.GpsMove(listbox1.SelectedItem.ToString())
Функция очень полезная, а реализация делов на 5 минут. Просто всегда после построения gps маршрута обязательно его нужно протестировать, причем несколько раз, а выполнять основной скрипт для этого не всегда удобно и очень долго.
У тебя точки автоматом не сохраняются после добавления их в редакторе?Я знаю =). Есть одна проблема: Редактор работает с базой в отсоединённом режиме.
Нужно сохранить базу, перед открытием в плагине. Нужно как то об этом сообщать пользователю, но по мне это не удобно.
Я хочу сделать немного другой вариант:
При нажатии на кнопку "загрузить базу" в плагине, плагин отправляет запрос редактору.
Редактор сохраняет базу во временный файл, и передаёт её в плагин.
Плагин загружает базу в GPS.
Тут появляется следующий момент:
В GPS нету метода, который выводит список именованных точек в массив.
Я просил Out'a добавить такой метод, но пока что такого метода нет.
Следовательно нужно прикреплять к плагину своё чтение базы, чтобы вывести список именованных точек. Не разумно как то.
Поэтому я жду Out'a, может быть добавит полезный метод. И не нужно будет людям в плагинах, типа TradeRunner или SmartTraderв своих маршрутных базах, указывать определённые имена точек, как указал разработчик плагина. Разработчику просто нужно будет сделать функционал, который позволит пользователю указать имена точек в комбобоксе. Удобно же?
Вот такие вот мысли. Может что предложите по лучше? Я не любитель костыльных решений.(Хотя без них никуда)
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 { }
}
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 обрамить.функция открытия файла
Ну уж не надо мне так детально. Я вообще то инженером-программистом баз данных работаю, если чтоСобственно сама функция чтения точек
var source = (from p in Overlay.Points
where p.Name != null && p.Name != ""
select p.Name).ToArray();
да, я таскаю с собой System.Data.SQlite. Именно поэтому я поднимал тему где то неделю назад, где задавал вопрос зачем запихивать стандартную либу в ArcheBuddy и криптовать её, если можно вынести её и дать доступ для всехДа. Не сохраняет. Сделал это для того, чтобы в будущем реализовать Undo/Rendo и не завязывать редактор на SQLite. Плюсом отсоединённого режима еще является производительность. Не нужно делать запросы, при каждом действии в редакторе.
По поводу имен точек....
OpenFileDialog лучше в using обрамить.
Ну уж не надо мне так детально. Я вообще то инженером-программистом баз данных работаю, если что![]()
У меня вопрос: Для того чтобы использовать классы пространства SQLite.... нужно ли с плагином таскать сборку System.Data.SQlite?
Или она от ArcheBuddy используется?
Update;
Я в редакторе вообще вот так именованные точки выбираю из слоя точек:
Code:var source = (from p in Overlay.Points where p.Name != null && p.Name != "" select p.Name).ToArray();
Я помню, но не помню чем закончилось. Да, это не дело. Нужно Out'а попросить добавить нужные методы.да, я таскаю с собой System.Data.SQlite. Именно поэтому я поднимал тему где то неделю назад, где задавал вопрос зачем запихивать стандартную либу в ArcheBuddy и криптовать её, если можно вынести её и дать доступ для всех