|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
>>Другое дело что было бы свободное время, можно было бы попробовать сделать универсальную прогу для создания расчетных схем и просмотра результатов...
Мое свободное время уходит на ковыряние в "движке" зкада, такчто могу только помогать в этом нелегком деле)) >>Пока ничего добавлять не надо, я сейчас под автокадом работаю... Я не тороплюсь чтото добавить, по большому счету меня всё устраивает как есть. Но прекрасно понимаю что делая для себя в итоге хорошего будет мало - с себя взятки гладки - правильность и красота приносится в жерту скорости и простоте((. Например сплошь и рядом в в зкаде одни и теже вещи делаются разными способами - сейчас я думаю так лучше, год назад думал по другому, а 2 года назад вообще не думал)) Нужно все перерабатывать-стандартизовывать и описывать. Пожалуй попробую тут спросить совета: Одна из частей зкада менеджер команд, самый простой способ расширения возможностей программы - написание новой команды и регистрация их в менеджере, тогда она становится доступной для пользователя из интерфейса. В простейшем случае (без интерактивности) команда это просто функция которой передается выполнение в момент ввода ее имени пользователем в комстроку или нажатия соответствующей кнопки интерфейса. Регистрация такой команды происходит с помощью процедуры: Код:
name-имя команды SA,DA-соответственно атрибуты разрешения и запрещения выполнения команды например команда SelectAll - выбор всех примитивов в чертеже регистрируется так: Код:
Пока для атрибутов разрешения\запрещения определена только константа Код:
Это все для минимизации внутренних проверок внутри команд, какие еще ситуации тут стоит предусмотреть? Также думаю при регистрации надо добавить атрибут "прозрачного выполнения" - например при черчении полилинии вызов команды UNDO не должен отменять команду черчения, только последний сегмент полилинии, а вызов команды LINE должен отменить черчение полилинии и чертить линию. Возможно стоит при регистрации также указать какие действия выполнять по завершению команды, например отменить выбор примитивов или оставить их выбранными для следующей команды, перерисовать чертеж или нет ----- добавлено через ~24 ч. ----- Еще более интересная ситуация с "интерактивными" командами, когда требуется указание координат мышкой. Сейчас это классы со своими обработчиками OnMouseClick, OnKeyPress и т.п. Очень сложно и громоздко, собственно по этому и сделано всего несколько команд черчения. Гораздо удобнее это иметь в виде: Код:
Но с этой GetPoint большая проблема - видимо придется внутри нее крутить свой цикл обработки сообщений помимо Application.Run и неочень понятно как быть если пользователь во время ее выполнения захочет потыкать в другие элементы управления - последовательность выполнения нарушится. Также неясно как в этом случае быть с резиновыми примитивами, которые тянутя за мышкой, если для примера выше еще можно выкрутится Код:
|
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
GetPoint реализовать получилось, ближайшее время сделаю модуль с несколькими хорошо документироваными командами для интерактивного черчения
----- добавлено через ~11 ч. ----- добавил обещаный модуль http://svn.shamangrad.net/zcad/trunk...ndsexample.pas команда создания выровненного размера, пока без "резиновости" |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
Интерфейс "интерактивности" устаканился.
Код:
Get3DPointInteractive - тоже самое, но с "резиновыми" возможностями. при перемещении мышки будет вызываться подпрограмма указанная в параметре InteractiveProc, ей будет переданы координаты мыши, состояние левой кнопки и PInteractiveData который может указывать на любые пользовательские данные, например на примитив который надо тянуть за мышкой. InteractiveProc должна быть объявлена так: Код:
например если в Get3DPointInteractive передать такую процедуру Код:
По сути это получились теже классы с onMouseMove и onMouseClick, но реализованные в процедурах. Проще "резиновость" имхо не сделать |
|||
![]() |
|
||||
КМД Регистрация: 26.03.2013
Я ЖЫВУ В РОССИИ.
Сообщений: 511
![]() |
вот здесь в сорцах есть крутая программка, предел возможностей любителя-одиночки...
http://www.cs.technion.ac.il/~gershon/GuIrit/ |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
Pum-purum
Пишу в Lazarus, это IDE для freepascal. То что нужно и ссылки где взять - перечислены в первом посте. Помочь можно, даже нужно - написанием чего либо, тестиванием или просто высказав пожеланья-замечания hexD Да, по видео - чтото серъезное. Но сырцы я ненашел, и не совсем в тему - 3D моделирования я не касаюсь Последний раз редактировалось zamtmn, 30.11.2013 в 11:55. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,537
|
|
|||
![]() |
|
||||
КМД Регистрация: 26.03.2013
Я ЖЫВУ В РОССИИ.
Сообщений: 511
![]() |
студенты и серъезный движок вещи несовместимые ) я.т.д., там профессор шибко вумный, и имхо это его детище...но ктож его знает...особенно впечатляют возможности различных интерактивных(гуй) трансформаций, поковыряв гуй поглубже не стану называть его фантиком, тоже чья то немалая работа...жаль что на лысом С,(а не на асме ))) ), но как грится для случая энтузиазма - то что доктор прописал...
|
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
>>Я имел ввиду вставку блоков из внешних файлов с помощью диалогового окна или хотя бы через ком. строку
Это можно, даже можно сказать тоже есть - в пустой чертеж теже ОПСные извещатели вставляются из внешних файлов. Вот предпросмотр вставляемых блоков пока хз с какой стороны подходить |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
переделал "примерную" команду создания выровненного размера - добавил "резиновость"
http://svn.shamangrad.net/zcad/trunk...ndsexample.pas Сейчас надо аналогичную Get3DPoint процедуру для выбора примитивов |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
825 ревизия
+черчение выровненных и повернутых размеров +комбобокс текущего размерного стиля +черчение дуг +опции для черчения окружностей (не связанные с выбором примитивов) зы. Приму помощь в виде написания окон редактирования стилей текста и стилей размеров, там ничего сложного - чистое формошлепство. Если кто хочет освоить Lazarus - самое то ![]() |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
Добавил возможность "декорирования" параметров в инспекторе, Т.е. теперь при клике на строчке слоя открывается не вложенное поддерево с параметрами этого слоя, а комбобокс с определенными в чертеже слоями. Но это уже не автоматическая генерация содержимого инспектора и требует дополнительных усилий. Осталось решить вопрос по привязке к параметрам инспектора отдельных окон редактирования этих параметров и получится конфетка а не инспектор))
|
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
Смех смехом, а инспектор штука нужная - благодаря ему можно забивать на бесконечное написание гуя. Собственно програмистов делфи\лазаря и не любят за это - обычно у них программы начинаются с формошлепства и весь код размазан по куче обработчиков onЧетоТам.
В краце как работает: при старте зкада парсится файл rtl\system.pas - там лежат все описания типов которые в дальнейшем доступны в инспекторе объектов. Описания на паскале и просто выдраны из исходников. Сначала я делал это руками, но потом написал небольшую утилитку - utils\typeexporter.exe, она проверяет все файлы исходников зкада отмеченные в utils\filelist.txt и экспортирует помеченные описания типов в rtl\system.pas. т.е. я например определяю какуюто структуру данных в программе: Код:
Код:
в описании доступны некоторые модификаторы для инспектора, они оформляются в виде коментариев в коде: (*'какоето имя'*) - более понятное пользователю имя параметра, без него параметр называется также как в программе (*oi_readonly*) - запрет редактирования параметра пользователем в инспекторе (*hidden_in_objinsp*) - не отображать параметр в инспекторе Кто считает что в зкадном инспекторе отображается много лишнего - это я просто забыл/лень поставить (*hidden_in_objinsp*) в соответствующем месте Offtop: Товарищи офтоперы, отныне флуд и офтопик в теме разрешается только в обмен на чтото полезное, т.е. хочешь пофлудить - сначала (ну или потом) ченить закомить или подкинь идейку)). По курсу один офтопик пост на одно чтото полезное ![]() Последний раз редактировалось zamtmn, 16.12.2013 в 09:38. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,559
![]() |
>>Осталось решить вопрос по привязке к параметрам инспектора отдельных окон редактирования этих параметров и получится конфетка а не инспектор))
Выхожу из запоя)) - завершил "причесывание" инспектора. Теперь к любым типам данных в инспекторе можно привязать "быстый редактор" в виде кнопочки рядом со значением - он будет вызван при нажатии этой кнопочки (наподобии как до этого было сделано с boolean), и внешнюю процедуру отображения этого значения - т.е. теперь в инспекторе могут быть картинки толщин или типов линий и т.п., а не только сухие цифры/тексты. В предидущей теме было замечание про "неинтуитивность" настройки привязок - стало всё интуитивно, осталось нарисовать форму этого редактора)) |
|||
![]() |