Re[12]: О дизайне карандашей
От: vdimas Россия  
Дата: 21.12.05 10:30
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>vdimas wrote:

>> CS>Как-то это все подозрительно выглядит.
>> CS>Т.к. струйным нужен один тип "bitmap", лазерным нужно другой тип.
>> У струйников драйвер DC в память PC растерезит, а в лазерниках —
>> растерезит сам принтер в своей памяти.
C>Не все так просто — память у большинства принтеров не очень большая, так
C>что цветная картинка на полный A4 туда просто не влезла бы.

Угу, в этом и загвоздка. Те лазерники, которые растерезят именно в свою память иногда имеют проблемы с некоторыми картинками, если память не проапгрейдить.

(работал с лазерниками, которые выплевывают по 30 листов в минуту — эдакие печатные станки, они работают только со своей памятью)
Re[5]: О дизайне карандашей
От: vdimas Россия  
Дата: 21.12.05 12:01
Оценка:
Здравствуйте, McSeem2, Вы писали:

V>>Понимаешь, после выполнения операции MoveTo ты не можешь получить линию как объект. ТЫ получаешь ее растровое представление (в большинстве случаев, WMF — отдельный случай).


MS>А здесь речь идет не о библиотеке как таковой, а о модели данных. Грубо говоря (сильно утрированно!), XML DOM имеет к этому вопросу большее отношение, чем GDI+. Не надо все в одну кучу валить. Есть модель данных, например, Flash. Есть проигрыватель Flash. И никому не приходит в голову требовать от проигрывателя векторные примитивы. Вот GDI+ — это и есть некий такой проигрыватель. И он — векторный, что характерно. Так понятней?


Понятен взгляд на вещи. Непонятен вывод — он векторный. Там Влад правильно ниже про билдеры сказал. LineTo — это просто один из методов рисования, что он генерирует — не важно. Для WMF — это генерация команды LineTo, для BMP — генерация серии точек.

И насчет Flash. Ты легко можешь получить из ролика его составляющие, и векторные примитивы в т.ч. Кстати, тебя не смущает, что в Flash я тоже могу задавать цвет, толщину и прозрачность линий?


V>>Почему? У меня есть некий овал. На конкретной сцене я его повернул как угодно. Так к чему мне привязать это св-во?


MS>Начнем с вопроса — а зачем это "свойство" к чему-то привязывать? И почему поворот должен быть свойством? Вообще-то поворот — это операция.


Вообще-то, построение линии — это тоже операция. Ничего, если я предлагаю тебе представить отрезок как объект?

Я, кажется, допер до твоей точки зрения. У тебя такой взгляд на вещи, что графику надо рисовать только программно, так? У меня немного другое мнение, особенно, если это касается сложной графики, как в твоем примере. Программист должен предоставлять инструмент, а рисует пусть художник.
Ну а трансформация — это неотъемлемая часть процесса редактирования векторной сцены. Я не против для некоторых примитивов присвоить ей null (в терминах... неважно чего )


MS>Ну, во-первых, не надо путать модель данных (контейнер) с "рисовальщиком".


Кстати, правильное замечание, я тебе его уже который раз делаю, другими словами.
Но, даже пользуясь твоей терминологией — рисовальщики разные бывают. Какой-то из них пусть будет способен рисовать контейнеры и т.д. рекурсивно.

MS>Во-вторых, зачем надо запоминать ОПЕРАЦИИ? Чтобы Undo сделать?


Чтобы воспроизвести. Чтобы клонировать. Чтобы редактировать затем параметры последовательности, порождая другие. Это продолжение того вопроса — как генерить графику: полностью программно или же описательно, доступно редактору+художнику.

Кстати, в конвеере OpenGL есть похожая фича — запомнить последовательность операций, затем применить многократно. Чем не способ порождения твоих же конвееров?

MS>Ну так это еще более другая категория — категория редактирования данных.


Данные — слишком общее понятие. И набор операций тоже можно представить как данные. Просто это будет немного другой плеер. Вот кажется я нащупал точку разногласия. Ты выступаешь за "непосредственные" плееры, т.е. за алгоритмические. Получается, чтобы по-другому нарисовать ту же пресловутую кнопку мне нужен будет другой алгоритм. Мммм... не очень красиво...

И кстати, к твоим конвеерам тоже можно привязать данные. Для твоих "конвееров" данными будут являться их св-ва, например конвеер, генерирующий последовательность точек имеет как минимуму св-ва: {шаг, радиус}.

MS>И еще раз — что такое "графический примитив"?


Это некие объекты, составляющие некий базис. Возможно, я неверно применил однажды этот термин. Читать как "графический объект".

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

Т.е. это из области "что такое объект?". Примерно то же самое. Даже с агрегацией и инкапсуляцией.

Например, результатом работы твоего конвеера по рисованию пунктира является некое множество более простых элементов. В простейшем случае — это последовательность кривых или окружностей. Хотя, кто нам мешает генерировать вместо окружностей/отрезков последовательность вообще любых графических примитивов. Просто вместо набора св-в: {шаг, радиус} надо иметь набор: {шаг, трансформ}

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

И еще у нас разный взгляд на вещи в этом:

И чтобы выход трансформера можно было использовать идентичным образом как для рисования, так и для записи в файл.


Без дополнительных пояснений это понимается как запись в файл простейших команд типа LineTo даже при прорисовке сложных контейнеров. Правильно тебя понял? В общем, весьма неоптимальное и непригодное к "повторному применению" представление. Хотелось бы в файлах хранить модель в первозданном виде. А так... для описанного тобой есть WMF — тот же BMP, только в профиль (ничего, что сравнил векторное с растровым?)


MS>Короче говоря, я так и не понял, чего же ты хочешь сказать. Есть лекторы двух типов. После речи первого все думают "надо же какой он умный — ничего не понятно". После речи второго — "какой лектор дурак — мне все понятно!". Я стремлюсь, чтобы меня относили ко второй категории.


Я пока хотел понять причины, по которым ты пытался смешать в кучу векторное, растровое, данные и операции и уровень №0 — GDI.
Хотя, я немного разобрался. Твой взгляд на вещи таков, что графику надо генерировать только программно. Если ты настаиваешь на таком положении вещей, то мне нечего добавить, ибо незачем. Могу только сделать замечание о твоем стремлении сделать что-то узкоспециализированное по концепции (невзирая на "открытость" реализации).

Иначе — можно пообсуждать вопрос "гладкой" стыковки модели твоих конвееров и модели графических объектов типа DOM XML.
А так же попытаться разобраться, где здесь место плеерам и конвеерам, в расчете на некую универсальность. А так же постараться не забыть, что наиболее частоиспользуемые вещи должны делаться наиболее просто. И GDI/GDI+ этому вполне отвечает.

Заодно, я уверен, можно будет придти к интересному мнению: "ну и хрен с ней, с GDI/GDI+". Ибо, ну нафига тебе потратить кучу усилий на некое платформенно-зависимое решение? Мне представляется, что сформалировав свои плееры/конвееры тебе должно быть глубоко фиолетово, что лежит на самом низком уровне.
Re[3]: О дизайне карандашей
От: vdimas Россия  
Дата: 21.12.05 12:12
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Для реализации такой идеологии больше подходит функциональный стиль

CS>который проверен веками: PS/metafile со товарищи.

Кстати, PS — это не функциональный стиль, это нечто вроде Forth. Ты производишь не вычисления, а определяешь последовательности операций, которые затем используешь в других операциях и т.д. иерархически.

Metafile — немного по-другому.

CS>т.е. рисование состоит из цепочек атомарных и простых примитивов


В метафайле — да, в PS — нет. PS — это программа.

CS>Классов там нет — ибо нельзя описать то что ты еще не знаешь.


Там есть операции. И их можно описать для повторного применения. Что не так?

CS>В моем примере (и в примере Макса) Pen это в общем случае цепочка (или конвейер) неких рисовательных действий.


CS>Укладывать же сию неописуемую (буквально) сущность в прокрустово ложе классов — по меньшей мере ошибка.


Поясни выделенное. Почему я не могу алгоритм рисования + его параметры оформить в виде инстанса некоего объекта? Да оно само напрашивается именно на такое представление. Если ты представишь по-другому описанное (разделишь некий алгоритм/конвеер и набор его параметров), то это будет эмуляция того же ОО, ибо чаще всего некий алгоритм будет привязан к уникальной структуре собственных параметров.

Другими словами, можно я буду рассматривать алгоритмы/конвееры без параметров как некий очень частный случай?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.