| | | | |
Библиотека EasyCAD library, или контейнер визуальных объектов для практикующих | Полный текст материала
Другие публикации автора: Юрий Спектор
Цитата или краткий комментарий: «... По своей сути, библиотека представляет собой набор классов, как законченных (для использования), так и базовых (для наследования), предназначенных для разработки приложений работающих с векторной графикой, таких как редакторы диаграмм и различные системы автоматизированного проектирования (САПР или CAD, англ. Computer-Aided Design). Предполагается, что программист, который будет использовать эту библиотеку, сможет максимально сосредоточиться на решении своей конкретной прикладной задачи, не тратя времени на разработку абстрактного "движка". ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
[GDI, рисование на канве] [Создание собственных компонент]
Отслеживать это обсуждение
Всего сообщений: 1025-11-2015 06:58Подскажите где можно скачать документацию для easycad |
|
03-12-2010 13:14сообщение от автора материала Это компонент, унаследованный от TCustomControl, довольно сложный, не все там сводится к "рисованию на канве".
Вот его иерархия:
TCustomControl->TECADScrollingControl->TECADObjectInspector, где
TECADScrollingControl и TECADObjectInspector - классы, реализованные в библиотеке.
Он выполняет много задач, от получения списка параметров объекта, доступных для отображения/редактирования, подбора для этих свойств соответствующих редакторов (эдит, список, диалог и т.д.) до непосредственно отображения всего этого на экране. Каждая задача отдельно настраивается - какие параметры и каким образом отображать/редактировать - решает программист. |
|
03-12-2010 06:30Ins, подскажите как Вы сделали инспектор объектов.
Нарисовали на канве? Или это какой-то сторонний компонент?
Расскажите пожалуйста, пару слов об его реализации. |
|
20-09-2010 12:12сообщение от автора материала Есть ещё несколько замечаний и предложений – готов пообщаться, например, почтой.
Конечно, email есть на сайте |
|
29-08-2010 14:37Ещё раз спасибо за проделанную работу (первый раз спасибо – за предыдущую статью :))!
Возможно я когда-нибудь всерьёз займусь написанием программы для составления схем для одного из волнующих меня вопросов... И Ваш вариант пока мне нравится больше других. Именно серьезностью подхода к задаче и абстракции самих данных от способов их представления пользователю. Плагины тоже в плюс. Правда Ваш дизайнер пока ещё "сыроват" с точки зрения юзабилити конечного пользователя...
Чтобы хотелось увидеть в будущем (в дизайнере):
- наклон объектов
- преобразование объектов в многоугольник/набор линий
- свойство: при изменении размеров влево и/или вверх – разрешать изменять, а не ограничивать минимальную ширину и высоту объектов
- вращение – разрешить перемещать центр вращения
- свойство: поворачивать объекты как в последних версиях Visio (не через отдельное состояние, а над центром вращения возводится отрезок за границы объекта, хватаясь за вершину которого, объект можно поворачивать)
- задавать произвольные размеры «холста» (либо бесконечные размеры), при этом при печати делать разбивку холста на несколько листов (во время дизайна – отображать границы листов)... к примеру так, как это делается в Power Designer’е
Замечания:
- ломаные линии и произвольные многоугольники – при их создании фигура не "фиксируется", т.е. её нельзя ни покрутить, не по масштабировать (зато можно свободно двигать промежуточные точки). Сейчас, чтобы покрутить произвольный многоугольник, его надо сначала объединить с другой фигурой, затем, покрутив, разъединить обратно...
- линейки дизайнера не отображают текущее положение курсора.
Ещё бы хотелось сравнить (визуально) способы отрисовки (я так понял, что сейчас визуализировать можно через GDI, GDI+ и DirectX, было бы здорово, если бы в демо проекте можно было переключаться между этими способами).
Есть ещё несколько замечаний и предложений – готов пообщаться, например, почтой.
|
|
05-07-2010 14:45сообщение от автора материала Действительно вызов DestroyCursors здесь необязателен, поскольку индексы курсоров больше нуля, они будут уничтожены автоматически в деструкторе объекта Screen. Видимо эти строки остались с тех времен, когда индексы были отрицательными, этот код писался по аналогии со стандартным юнитом IMouse.pas |
|
03-07-2010 16:15Здравствуйте, Ins!
изучаю исходники, выложенные на sourceforge.net. В модуле ECADDiagramControls есть такие строки:
const
IDC_ROTATE = 'ROTATE';
IDC_SHEAR = 'SHEAR';
IDC_VERTEXDRAG = 'VERTEXDRAG';
IDC_AREACROSS = 'AREACROSS';
IDC_ADD = 'ADD';
cCursor: array[0..4] of TIdentMapEntry = (
(Value: crRotate; Name: IDC_ROTATE),
(Value: crShear; Name: IDC_SHEAR),
(Value: crVertexDrag; Name: IDC_VERTEXDRAG),
(Value: crAreaCross; Name: IDC_AREACROSS),
(Value: crAdd; Name: IDC_ADD)
);
procedure LoadCursors;
var
i: Integer;
begin
for i := Low(cCursor) to High(cCursor) do
Screen.Cursors[cCursor[i].Value] := LoadCursor(HInstance, PChar(cCursor[i].Name));
end;
procedure DestroyCursors;
var
i: Integer;
begin
for i := Low(cCursor) to High(cCursor) do
Screen.Cursors[cCursor[i].Value] := 0;
end;
initialization
LoadCursors;
finalization
DestroyCursors;
Не совсем понимаю зачем при финализации модуля всем зарезервированным курсорам приваиваются нули.
Судя по исходникам VCL, список всех курсоров у объекта Screen представляет собой связный список и при уничтожении Screen происходит корректное освобождение всех ресурсов. |
|
21-05-2010 02:26сообщение от автора материала А планируется ли релизация операций отмены-повтора? Вещь очень нужная.
В простейшем случае, это можно реализовать сохраняя в истории полное состояние документа. Более эффективное решение, в котором бы сохранялась минимальная информация для отмены/возврата - да, планируется :) |
|
18-05-2010 10:55 Да, сильно отличается от первоначального варианта... :-) Автору - моя благодарность и пожелание всяческой удачи!! |
|
18-05-2010 01:28А планируется ли релизация операций отмены-повтора? Вещь очень нужная.
Ну а в общем, как мне кажется, в этой библиотеке есть все, что нужно тому кто собирается заниматься разработкой какой-либо системы с использованием визуального проектирования.
|
|
|
|