САПР на Lazarus

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: САПР на Lazarus

Сообщение alexey38 » 05.02.2012 18:11:05

zub писал(а):alexey38
>>Если Вы про http://wiki.freepascal.org/Pascal_Script, который от RemObjects, то я его использовал и мне понравилось.
да, про него.
>>Нечто подобное можно и для вашей задачи.
Можно и нужно. Он поддерживает record? object?
Примеры из поставки требуют хорошего напильника чтоб завестись под лазарем((


http://www.foxbase.ru/Delphi-components/remobjects-pascalscript.htm
http://goodbyamerica.sourceforge.net/PS01_rus.html
http://wiki.remobjects.com/wiki/Using_RemObjects_Pascal_Script
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: САПР на Lazarus

Сообщение zub » 06.02.2012 02:43:17

alexey38
Попробовал, элементарные примеры вроде работают. Object не поддерживается. Record поддерживается на половину, насколько понял запись можно определить в скрипте, но зарегистрировать запись определенную в программе - я не нашел как. Не понял как скрипты делятся на модули (unit), видимо никак.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение alexey38 » 06.02.2012 07:10:10

zub писал(а):alexey38
Попробовал, элементарные примеры вроде работают. Object не поддерживается. Record поддерживается на половину, насколько понял запись можно определить в скрипте, но зарегистрировать запись определенную в программе - я не нашел как. Не понял как скрипты делятся на модули (unit), видимо никак.


С классами внутри не пробовал. Внешние классы - как методы подключал. Записи из программы подключаются по переменным, т.е. как и любую другую переменную.
Модули - а зачем? Вы же в текст скриптовой программы добавляете вручную, и можете его формировать путем чтения хоть из 10 файлов.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: САПР на Lazarus

Сообщение zub » 06.02.2012 18:54:54

Модульности напрямую нет, но частично ее можно сэмулировать в OnUses. Мне в модульности интересно несколько другое - доступ к переменным по имени модуля. У меня сейчас есть небольшой самопальный скриптовый движек - из функций только присвоение значений переменным, рекордам, обжектам и элементарные арифметические действия. В программе к каждому объекту можно привязывать типизированные данные (по сути получается данные это переменные, объекты это юниты). Для некоторых действий я использую скрипты, например нумерация и наследование свойств электрических устройств от кабеля к которому устройство подключено, выглядит это примерно так:
Код: Выделить всё
uses cabel,device;
begin
        device.number:=cable.number;
        cable.number:=cable.number+1;
end.

этот скрипт выполняется для каждого устройства подключенного к кабелю, вместо модулей cabel и device подсовываются переменные устройства и кабеля, получается довольно удобно, нехотелось бы терять эту возможность.
>>Записи из программы подключаются по переменным
в смысле каждое поле записи как переменная? или запись опретеляется в скрипте и сопоставляется записи определенной в программе? как в этом случае PascalScript разруливает возможность не совпадения адресов полей изза директив выравнивания?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение alexey38 » 06.02.2012 20:31:14

zub писал(а):Для некоторых действий я использую скрипты, например нумерация и наследование свойств электрических устройств от кабеля к которому устройство подключено, выглядит это примерно так:
Код: Выделить всё
uses cabel,device;
begin
        device.number:=cable.number;
        cable.number:=cable.number+1;
end.

этот скрипт выполняется для каждого устройства подключенного к кабелю, вместо модулей cabel и device подсовываются переменные устройства и кабеля, получается довольно удобно, нехотелось бы терять эту возможность.
>>Записи из программы подключаются по переменным
в смысле каждое поле записи как переменная? или запись опретеляется в скрипте и сопоставляется записи определенной в программе? как в этом случае PascalScript разруливает возможность не совпадения адресов полей изза директив выравнивания?


Вне скрипта имеем класс или запись, а в скрипт передаем отдельные его поля как переменные (не как записи). Может быть возможностей больше, но я не знаю.
По вашему примеру, а чем будет отличаться если "device.number" заменить на "device_number"? Я, сам при использовании, введенный пользователь скрипт сильно модифицировал путем замены строк, перед его запуском на выполнение. Как раз это имен переменных касалось.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: САПР на Lazarus

Сообщение zub » 06.02.2012 20:49:03

>>а чем будет отличаться если "device.number" заменить на "device_number"
В принципе ничем, но это уже костыли какието - хочется что внутри, что снаружи иметь одни и теже сущности. С такими упрощениями сложные вещи не заскриптуешь.
Под linux x64 при компиляции простеньких скриптов работавших в windows ловлю SIGSEGV((
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение alexey38 » 07.02.2012 05:57:22

zub писал(а):>>а чем будет отличаться если "device.number" заменить на "device_number"
В принципе ничем, но это уже костыли какието - хочется что внутри, что снаружи иметь одни и теже сущности. С такими упрощениями сложные вещи не заскриптуешь.
Под linux x64 при компиляции простеньких скриптов работавших в windows ловлю SIGSEGV((


Я использую скрипты только тогда, когда их текст нужно писать юзеру и во время работы, либо если нужно иметь гибкую возможность писать формулы в реалтайме. Во всех остальных случаях, особенно при использовании FPC, будет проще писать на FPC, получать DLL и ее использовать. Будет и гибче, и надежнее и быстрее.

Поэтому я ни когда не ставил себе задачу писать на скриптах сильно много. У меня есть сложный проект, где используются специализированные мною разработанные скрипты (специальный синтаксис, но очень высокое быстродействие), которые глубоко привязаны к предметной области. С позиции предметной области у меня целая иерархия скриптовых классов, взаимно вызывающихся друг от друга. Тем самым моделируется некий технологический процесс.
Но я реализовал так, что отдельный скрипт очень мал, и решает конкретную задачу. Предметное взаимодействие организовано уже в основной программе. Получилось очень удачно. Во-первых, доступно пользователю, далекому от программирования, и ему не нужно грузиться архитектурой. Во-вторых, все работает как часы. Быстро, четко и с очень хорошей самодиагностикой. Даже отладчик скриптов доступен пользователям и у них получается в этом работать. Идеология им понятна - так как это их предметная область. И скрипт понятен, т.к. он короткий и простой, и результат скрипта простой.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: САПР на Lazarus

Сообщение zub » 07.02.2012 18:21:33

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

Добавлено спустя 3 часа 49 минут 29 секунд:
После ковыряний пришел к выводу что PascalScript не сможет заменить описаного выше взаимодействия "команд" через стек, буду потихоньку пытаться прикручивать оба варианта
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение alexey38 » 08.02.2012 05:14:52

PascalScript, как и сам Pascal делают как, как заложено в их идеологии. Любое отклонение - нужно писать. Я в своем проекте всю идеологию взаимодействия скриптов сделал в основной программе, там целая система иерархии классов и их взаимодействия. Система немного напоминает события в vcl/lcl на визуальных формах (только у меня задача не визуальная).
Предположим, что у вас есть задача перенумеровать проводники, так вот объект проводник или объект клемма, сама будет в нужный момент вызывать нужный скрипт формирующий наименования адресации. Первоначально у меня пришлось хорошо продумать, но в итоге получилось очень удачно. Получилось описать адекватную модель некой системы. Работает быстро и надежно. И главное пользователю все понятно, т.к. он не может перемудрить на уровне взаимодействия объектов.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: САПР на Lazarus

Сообщение zub » 08.02.2012 22:04:10

>>Первоначально у меня пришлось хорошо продумать, но в итоге получилось очень удачно. Получилось описать адекватную модель некой системы. Работает быстро и надежно.
>>И главное пользователю все понятно, т.к. он не может перемудрить на уровне взаимодействия объектов.
Это палка о 2х концах. С одной стороны не перемудрит, а с другой возможно не сможет сделать что хотел, если многое прошито в логике программы и корректировке не поддается
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение alexey38 » 09.02.2012 09:35:56

zub писал(а):Это палка о 2х концах. С одной стороны не перемудрит, а с другой возможно не сможет сделать что хотел, если многое прошито в логике программы и корректировке не поддается


Безусловно, что не все так просто. Только если основная программа на паскале, и скрипт на паскале, то трудоемкость на скрипте не будет проще, чем в основной программе.
Ведь основная программа для нормального программиста, это тот же скрипт, в смысле того, что не проблема по ходу править текст и перекомпилировать (если не рассматривать быстродействие, то какая разница компилятор или интерпретатор). В скрипты нужно выносить только то, что будет писать пользователь, которому компилятор не доступен. Но гибкость скриптов компенсируется малой функциональностью.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: САПР на Lazarus

Сообщение zub » 09.07.2012 18:00:03

Добавил небольшой пример использования движка в стороннемм приложении - http://svn.shamangrad.net/zcad/trunk/ca ... simplecad/. Показывает создание и отображение простых примитивов. Пока нужно совершать много "ненужных" действий и изза плохого разделения на модули к вам в приложение вкомпилится почти весь zcad))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение svk12 » 09.07.2012 18:42:39

А на какую версию FPC рассчитано?
svk12
постоялец
 
Сообщения: 407
Зарегистрирован: 09.06.2008 18:42:47

Re: САПР на Lazarus

Сообщение zub » 09.07.2012 20:23:33

я использую транковые fpc и lazarus. в лазаре 0.9.30 незнаю соберется или нет. В фпц 2.6 собирается, единственное в модуле OGLSpecFunc может понадобится закоментировать определение типа TViewPortArray - непомню когда его исключили из glu.pp
Пока в примере "используются" рантаймовые файлы zcad`а, такчто с свна лучше вытянуть всё, для гарантированной работы
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение svk12 » 10.07.2012 00:10:36

win64 не поддерживается?
svk12
постоялец
 
Сообщения: 407
Зарегистрирован: 09.06.2008 18:42:47

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

Рейтинг@Mail.ru