Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Визуальное программирование, Первоначальное проектирование 
:(
    Опции темы
JackyFox
Дата 22.6.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Поступило задание сделать программу, реализующую программирование одной хитрой штуковины.
Штуковина шибко хитрая, но программировать её будут киповцы на произвольном языке релейной логики. Причем программирование должно быть выполнено в графическом виде: блок-схема собирается их логических элементов. Потом уже внутрях всё это преобразуется в прошивку, ну, и заливается в контроллер.
Прошу совета, как лучше реализовать составление блок-схемы, чтобы потом не упереться рогом на середине разработки в какую-нибудь примитивную проблему, которая могла бы быть решена малой кровью при изначально ином подходе к реализации.
У меня пока видится в таком виде:

user posted image

Элементы из левой панели либо перетаскиваются на DrawGrid, либо встраиваются методом «щелкнул по картинке, щелкнул в нужное место по схеме». Каждой ячейке соответствует элемент матрицы, в который заносится код логического элемента для дальнейшей генерации программы для контроллера.

---------------------------
Та же картинка отдельно:

Это сообщение отредактировал(а) JackyFox - 24.6.2009, 16:51

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  dragprog.png 6,50 Kb
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
JackyFox
Дата 24.6.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Ваше молчание, товарищи, меня слегка настораживает.
Не знаю, что и думать: неужели я спросил полнейшую глупость?
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Lazin
Дата 24.6.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



у меня изображение не полностью отображается
PM MAIL Skype GTalk   Вверх
JackyFox
Дата 24.6.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Lazin, недавно такие глюки появились у Ipicture. 

К сожалению, не могу выложить на imageshack или tynipic - прокся на работе их режет.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
xvr
Дата 25.6.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Поищи GUI для програмирования каких нибудь PLC. Многие из них поддерживают LD как входной язык и у них должен быть какой то ввод. Можно посмотреть, как оно сделано и подчерпнуть какие нибудь идеи.

Спрашивать тут, как сделать граф. редактор для LD совершенно бесполезно, т.к. тут собрались люди, которые явно никогда в своей жизни не станут использовать LD для програмирования (если только под страхом смертной казни  smile ). Это надо спрашивать у ваших КИПовцов  smile 

PM MAIL   Вверх
JackyFox
Дата 25.6.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



xvr, LD - это не суть. Меня интересует, с какой стороны подойти к проектирование абстрактного графического редактора.
Я тут уже пораскинул... Вывод пока напрашивается один - надо юзать канву. За совет, в любом случае, спасибо.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Lazin
Дата 25.6.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



думаю нужно начинать с программы, которая разбирает IL код и зашивает его куда нужно, после чего нужно написать граф. оболочку, в которой можно будет редактировать LD схемы, затем эти схемы конвертирвоать в IL и так далее...
PM MAIL Skype GTalk   Вверх
JackyFox
Дата 26.6.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Lazin, совершенно согласен. Только единственное, я совершенно не представляю, как делаются графические редакторы, ориентированные на работу с блок-схемами.
Что-то позволяющее рисовать палочки и кружочки я по книжке Архангельского сумею сообразить, но вот как блок-схемы строить - фантазии не хватает.
Вот и прошу мастеров посоветовать может литературу какую или сходные проекты, подробное описанные в процессе реализации.

Это сообщение отредактировал(а) JackyFox - 26.6.2009, 14:23
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
JackyFox
Дата 26.6.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Откопал наработку одного Delphi программиста под названием Drawing Objects - Version 3.1.1

Наработка может вот так:
user posted image

Буду курить исходники.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
vikaz
Дата 26.6.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Привет! Может быть это тебе поможет?

http://www.tmssoftware.com/site/diagram.asp

Это сообщение отредактировал(а) vikaz - 26.6.2009, 14:42


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
JackyFox
Дата 26.6.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



vikaz, конечно, поможет! Спасибо! ;)
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
vikaz
Дата 26.6.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Как мне кажется, все зависит от того, насколько большими могут быть схемы. В том варианте, который предоставил ты, есть большой +, это простота разбивки всего проекта на простые части, т.к. там используется ячеечная системы. При работе с векторной графикой, я даже не могу представить, как научиться отслеживать, какие и как элементы соединены на листе!  smile 


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
JackyFox
Дата 26.6.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



vikaz, у меня пока идея следующая: ограничить свободное позиционирование объектов, сделать его дискретным, т.е. осуществлять привязку к своеобразной сетке (как виджеты на странице iGoogle, к примеру). Плюс должен существовать глобальный массив расположения всех элементов, чтобы ничего не потерялось.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
vikaz
Дата 27.6.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(JackyFox @  26.6.2009,  15:20 Найти цитируемый пост)
vikaz, у меня пока идея следующая: ограничить свободное позиционирование объектов, сделать его дискретным, т.е. осуществлять привязку к своеобразной сетке (как виджеты на странице iGoogle, к примеру). Плюс должен существовать глобальный массив расположения всех элементов, чтобы ничего не потерялось. 


Я думаю, что это самый здравая логика....для такого проекта. smile Но у нас есть еще эксперты на этом форуме, которые могут подсказать еще пару отличных выходов из сложной ситуации! smile


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Lazin
Дата 27.6.2009, 11:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Я думаю здесь нужна иерархия классов, что-товроде:

Код

class LDObject
{
public:
    //ф-я рисует объект на канве
    virtual void Draw ( TCanvas* ) = 0; 
    //ф-я проверяет, находится ли точка в пределах объекта
    virtual void ContainPoint( TPoint ) = 0;
....
};

далее, нужно как-то соединять объекты, соответственно, нам нужен интерфейс для реализации этой ф-ии, он может быть таким:

Код

//forward decl.
class LDObject;

class IOutputPoint
{
public:
 //ф-я возвращает координаты центра точки соединения
 virtual TPoint Center() = 0;
 //ф-я возвращает владельца узла (класс, реализующий этот интерфейс должен позаботиться о том, что-бы хранить указатель на владельца)
 LDObject* Owner() = 0;
};

class IInputPoint
{
public:
 //ф-я возвращает координаты центра точки соединения
 virtual TPoint Center() = 0;

 //ф-я соединяет один из выходов с входом
 virtual void Connect(IOutputPoint*) = 0;

 virtual LDObject* Owner() = 0;
};

в принципе можно унаследовать интерфейс IInputPoint от IOutputPoint и тогда, в определении класса IInputPoint было бы на два метода меньше, но это идеологически не верно smile 
соответственно нужно реализовать класс LDObject

Код

class LDObject
{
public:
    //ф-я рисует объект на канве
    virtual void Draw ( TCanvas* ) = 0; 
    //ф-я проверяет, находится ли точка в пределах объекта, нужно к примеру для того, что-бы определить, находится-ли указатель мыши над объектом или нет...
    virtual void ContainPoint( TPoint ) = 0;

    //ф-я возвращает количество входов элемента LD схемы
    virtual int InputCoutn() = 0;
    //ф-я возвращает вход с индексом i
    virtual IInputPoint* GetInput(int i) = 0;

    virtual int OutputCount() =0;
    virutal IOutputPoint* GetOutput(int i) = 0;
};

естественно, это просто небольшой набросок интерфейса приложения.. но общая идея должна быть понятна. Это самый простой и прямолинейный способ реализации, я считаю smile 
Объекты LDObject могут содержать множество входов и выходов, можно к любому входу подключить любой выход. В результате они должны образовать что-то вроде ациклического графа или дерева... Для генерации IL кода, нужно обойти все элементы дерева в определенном порядке. smile 
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.