RU2321892C2 - Язык разметки и объектная модель для векторной графики - Google Patents

Язык разметки и объектная модель для векторной графики Download PDF

Info

Publication number
RU2321892C2
RU2321892C2 RU2003114531/09A RU2003114531A RU2321892C2 RU 2321892 C2 RU2321892 C2 RU 2321892C2 RU 2003114531/09 A RU2003114531/09 A RU 2003114531/09A RU 2003114531 A RU2003114531 A RU 2003114531A RU 2321892 C2 RU2321892 C2 RU 2321892C2
Authority
RU
Russia
Prior art keywords
visual
class
public
graphics
data
Prior art date
Application number
RU2003114531/09A
Other languages
English (en)
Other versions
RU2003114531A (ru
Inventor
Джозеф С. БЕДА (US)
Джозеф С. БЕДА
Кевин Т. ГАЛЛО (US)
Кевин Т. ГАЛЛО
Адам М. СМИТ (US)
Адам М. СМИТ
Гилман К. ВОНГ (US)
Гилман К. ВОНГ
Срирам СУБРАМАНИАН (US)
Срирам СУБРАМАНИАН
Original Assignee
Майкрософт Корпорейшн
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Майкрософт Корпорейшн filed Critical Майкрософт Корпорейшн
Publication of RU2003114531A publication Critical patent/RU2003114531A/ru
Application granted granted Critical
Publication of RU2321892C2 publication Critical patent/RU2321892C2/ru

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/60Editing figures and text; Combining figures or text
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)
  • Image Analysis (AREA)
  • Image Processing (AREA)

Abstract

Изобретение относится к вычислительной технике. Техническим результатом является обеспечение согласованного взаимодействия разработчиков компьютерной программы со структурой данных графа сцен для создания графики. Система содержит язык разметки, объектную модель графики, преобразователь типов, анализатор/транслятор, систему презентаторов, интерфейс прикладного программирования визуалов и интерфейс отображения. 26 з.п. ф-лы, 27 ил.

Description

Настоящее изобретение связано со следующими совместно рассматриваемыми заявками на патент США: 10/184,795, под названием «Система и способ многоуровневой обработки графики» [Multi-Level Graphics Processing system and Method], 10/184,796 под названием «Родовая параметризация для графа сцены» [Generic Parameterization for Scene Graph], 10/185,775 под названием «Интеллектуальная структура данных кэширования для графики прямого режима» [Intelligent Caching Data Structure for Immediate Mode Graphics], поданные 27 июня 2002г., и заявкой на патент США под названием «Интерфейсы визуалов и графов сцены» [Visual and Scene Graph Interfaces], (зарегистрирована у поверенного под №3470), поданной одновременно с ними. Права каждой связанной заявки принадлежат заявителю настоящей патентной заявки.
Область изобретения
Изобретение относится, в целом, к компьютерным системам и, в частности, к обработке графической и иной видеоинформации для отображения в компьютерных системах.
Предшествующий уровень техники
Традиционная модель прямого режима доступа к графике в компьютерных системах исчерпала свои возможности отчасти потому, что скорости памяти и шины отстают от усовершенствований в главных процессорах и/или графических процессорах. В целом, современная модель (например, WM_PAINT) для подготовки кадра требует обработки столь больших объемов данных, что частота регенерации оборудования оказывается недостаточной, когда требуются сложные графические эффекты. В результате, при попытках создать сложные графические эффекты с помощью традиционных графических моделей, вместо завершения изменений, которые приводят к ожидаемым визуальным эффектам в следующем кадре, изменения могут добавляться в разные кадры, приводя к нежелательным визуально-наблюдаемым результатам.
В вышеупомянутых заявках на патент США №№ 10/184,795, 10/184,796 и 10/185,775 описана новая модель для управления выводом графики. Эта новая модель обеспечивает ряд значительных усовершенствований в технологии обработки графики. Например, заявка США № 10/184,795, в основном, посвящена системе и способу многоуровневой обработки графики, в которой компонент более высокого уровня (например, операционной системы) берет на себя большой объем вычислений для построения графа сцены, обновления параметров анимации и обхода структур данных графа сцены, при относительно низкой скорости операций, передавая низкоуровневому компоненту упрощенные структуры данных и/или команды графики. Поскольку высокоуровневая обработка значительно упрощает данные, низкоуровневый компонент может работать на более высокой скорости (относительно высокоуровневого компонента), например, на скорости, которая соответствует частоте обновления кадров графической подсистемы, преобразуя данные в постоянные выходные данные для графической подсистемы. При использовании анимации низкоуровневая обработка позволяет вместо повторного рисования всей сцены с изменениями интерполировать интервалы параметров по мере необходимости, чтобы получать мгновенные значения, которые при визуализации обеспечивают слегка измененную сцену для каждого кадра, обеспечивая плавную анимацию.
В заявке США № 10/184,796 описан параметризованный граф сцены, который обеспечивает изменяемые (анимационные) значения и контейнеры параметризованного графа, благодаря которым программный код, предусматривающий вырисовывание графики (например, прикладная программа или компонент операционной системы), может избирательно изменять определенные аспекты описания графа сцены, оставляя другие аспекты без изменений. Программный код также может повторно использовать построенные ранее участки графа сцены, возможно, с другими параметрами. Очевидно, что возможность легко изменять внешний вид отображаемых предметов посредством параметризации и/или повторного использования существующих частей графа сцены обеспечивает существенное повышение общей эффективности обработки графики.
В заявке США № 10/185,775 в общем виде описаны структура данных кэширования и соответствующие механизмы сохранения визуальной информации посредством объектов и данных в графе сцены. Структура данных в целом связана с механизмами, которые интеллектуально управляют заполнением его визуальной информацией и ее использованием. Например, в отсутствие конкретных требований со стороны прикладной программы, большая часть информации, хранящейся в структуре данных, не имеет внешних ссылок на нее, что позволяет оптимизировать или иначе обрабатывать эту информацию. Очевидно, это обеспечивает эффективность и экономию ресурсов, например, данные в структуре данных кэша можно преобразовывать в другой формат, который является более компактным и/или уменьшает потребность в последующей повторной обработке, например растровый формат изображения или другой результат последующей обработки.
Хотя вышеупомянутые усовершенствования и обеспечивают существенные преимущества в технологии обработки графики, тем не менее необходим способ, позволяющий программам эффективно и просто использовать эту усовершенствованную модель графики и ее другие связанные с ней усовершенствования. Необходим универсальный и в то же время простой способ, позволяющий программам пользоваться многочисленными особенностями и возможностями обработки графики, предусмотренными усовершенствованной моделью графики, и, таким образом, эффективно выводить сложную графику.
Сущность изобретения
В принципе, настоящее изобретение предусматривает объектную модель элементов и язык разметки векторной графики для осуществления доступа к этой объектной модели элементов таким образом, чтобы разработчики программных кодов могли согласованно взаимодействовать со структурой данных графа сцены для создания графики. Язык разметки для векторной графики содержит формат взаимного обмена для выражения векторной графики через объектную модель элементов. При интерпретации разметка анализируется в данные, включающие в себя элементы в элементном дереве, которое транслируется в объекты структуры данных графа сцены. На уровне элементного дерева предусмотрены система свойств и система презентаторов, обеспечивающие широкие возможности программирования, в том числе характеристики наследования и обработку событий, облегчающие конструкторам сцен работу по конструированию, возможно, сложных сцен. В общем случае элементы векторной графики соответствуют элементам «форма» и другим элементам, в том числе элементам «изображение» и «видео», которые коррелируют с объектами графа сцены в объектной модели графа сцены. Свойства и другие ресурсы элементов векторной графики также коррелируют с аналогичными свойствами и ресурсами объектной модели графа сцены.
Таким образом, система векторной графики может программировать на уровне элементов, на котором каждая форма рисования представлена как элемент на том же уровне, что и остальные программируемые элементы в странице/экране, что позволяет взаимодействовать с системой презентаторов, событиями и свойствами. Система векторной графики также обеспечивает механизм программирования на уровне ресурсов, благодаря которому конструкторы сцен могут существенно урезать элементное дерево и систему презентаторов и программировать непосредственно на уровне API визуалов, который взаимодействует со структурой данных графа сцены. Это обеспечивает более эффективный и простой способ вывода соответствующего объекта, хотя и с частичной потерей программируемости на уровне элементов. В одной реализации при программировании заливки типа «кисть визуала» анализатор может напрямую вызывать уровень API с помощью данных уровня ресурсов для создания соответствующего объекта раскраски визуала (что также является корреляцией между объектной моделью элементов и объектной моделью графа сцены). В этой двухуровневой системе векторная графика уровня элементов анализируется (осуществляется разбор) в созданные элементы, которые подлежат дальнейшей трансляции в объекты, тогда как векторная графика уровня ресурсов анализируется и непосредственно сохраняется эффективным способом. В то же время элементы и часть элементного дерева могут ссылаться на созданные таким образом данные или объекты уровня ресурсов. Для этого элементы, в том числе элементы раскраски визуала, можно снабжать именами. Таким образом, конструктор сцены имеет возможность балансировать между эффективностью и программируемостью по мере необходимости.
Иерархия классов элементов включает в себя класс формы, класс изображения, класс видео и класс холста. Элементы класса формы включают в себя прямоугольник, полилинию, многоугольник, путь, линию и эллипс. Каждый элемент может включать в себя данные (свойства) заливки, данные обводки, данные отсечения, данные трансформации, данные эффекта фильтра и данные маски или быть связан с ними. Формы соответствуют геометрии (объектной модели графа сцены), рисуемой с унаследованными и каскадированными свойствами презентации, которые используются для построения пера и кисти, необходимых для рисования форм. Класс «изображение» является более специфичным, чем «форма», и может включать в себя больше растровых графических данных, а класс «видео» позволяет воспроизводить видео (или аналогичные мультимедиа) в отображаемом элементе. Класс «холста» может действовать как контейнер для форм, чтобы обеспечивать облегченность форм.
В одном варианте реализации код разметки интерпретируется анализатором/транслятором, который, в общем случае, добавляет элементы из уровня элементов к системе элементного дерева/свойств и присоединяет к этим элементам презентаторы. Затем система презентаторов берет элементное дерево с присоединенными презентаторами и транслирует данные в объекты (с помощью построителя) и обращается к уровню API визуалов, который взаимодействует с графом сцены и создает объекты графа сцены.
Язык разметки обеспечивает различные способы описания элемента, включая формат простой строки и сложную систему записи объекта (сложный синтаксис свойств). Применительно к формату простой строки анализатор/транслятор и/или система презентаторов использует преобразователь типов для преобразования строки в соответствующий объект API визуалов. Когда атрибут заливки слишком сложен, чтобы уместиться в одной строке, для описания набора свойств используется сложный синтаксис свойств, который может быть встроен в разметку. Поскольку уровень элементов и уровень API совместно используют одну и ту же модель визуализации, многие объекты являются одинаковыми, что обеспечивает высокую эффективность анализа/трансляции и другие преимущества. Экземпляр ресурса может также размещаться в другом месте (например, в разметке или файле) и допускает ссылку по имени. Таким образом, конструктор сцен может повторно использовать элемент элементного дерева в пределах сцены, в том числе элементы, описанные сложным синтаксисом свойств. Другие преимущества и достоинства явствуют из нижеследующего подробного описания, приведенного в сочетании с чертежами.
Краткое описание чертежей
Фиг.1 - блок-схема иллюстративной компьютерной системы, пригодной для реализации настоящего изобретения.
Фиг.2 - обобщенная блок-схема многоуровневой архитектуры графики, пригодной для реализации настоящего изобретения.
Фиг.3 - представление графа сцены, состоящего из визуалов и связанных с ними компонентов для обработки графа сцены, например, путем обхода графа сцены для обеспечения команд графики и других данных, в соответствии с аспектом настоящего изобретения.
Фиг.4 - представление графа сцены, состоящего из визуалов удостоверения, визуалов рисования и связанных с ними примитивов рисования, созданного в соответствии с аспектом настоящего изобретения.
Фиг.5 - представление класса визуалов объектной модели в соответствии с аспектом настоящего изобретения.
Фиг.6 - представление различных других объектов объектной модели в соответствии с аспектом настоящего изобретения.
Фиг.7 - диаграмма трансформации данных визуала в соответствии с аспектом настоящего изобретения.
Фиг. 8А и 8В - представления трансформаций данных визуала в геометрическом масштабе и неоднородном масштабе соответственно, в соответствии с аспектом настоящего изобретения.
Фиг. 9А-9С - блок-схемы объектов «визуал поверхности» и других визуалов и компонентов в соответствии с аспектом настоящего изобретения.
Фиг. 10А и 10В - диаграммы, представляющие объекты «визуал HWnd» в соответствии с аспектом настоящего изобретения.
Фиг.11 - диаграмма многослойного объекта «визуал» в соответствии с аспектом настоящего изобретения.
Фиг.12 - представление классов геометрии объектной модели в соответствии с аспектом настоящего изобретения.
Фиг.13 - представление структуры PathGeometry («геометрия пути») в соответствии с аспектом настоящего изобретения.
Фиг.14 - представление графа сцены, состоящего из визуалов и примитивов рисования, где показана иллюстративная графика, созданная примитивами, в соответствии с аспектом настоящего изобретения.
Фиг.15 - представление классов кисти объектной модели в соответствии с аспектом настоящего изобретения.
Фиг.16 - представление визуализированной графики, полученной из данных в объекте «кисть с линейным градиентом», в соответствии с аспектом настоящего изобретения.
Фиг.17 - представление визуализированной графики, полученной из данных в объекте «кисть с радиальным градиентом», в соответствии с аспектом настоящего изобретения.
Фиг.18 - представление визуализированной графики, полученной при различных значениях растяжения, в соответствии с аспектом настоящего изобретения.
Фиг.19 - представление визуализированной графики, получающейся в результате наличия различных значений элемента мозаичного изображения, в соответствии с аспектом настоящего изобретения.
Фиг.20 - последовательность операций, представляющая, в общем виде, логику для интерпретации визуала, в том числе объекта «кисть», позволяющую генерировать графику, в соответствии с аспектом настоящего изобретения.
Фиг.21 - представление сетки и трансформированной сетки, полученной из данных в объекте «кисть визуала», в соответствии с аспектом настоящего изобретения.
Фиг.22 - представление сетки и трансформированной сетки, визуализированная графика в которой нарисована из визуала, в соответствии с аспектом настоящего изобретения.
Фиг.23 - представление визуализированного объекта «кисть с девятиячеечной сеткой» в соответствии с аспектом настоящего изобретения.
Фиг.24 - представление классов трансформации объектной модели в соответствии с аспектом настоящего изобретения.
Фиг.25 - представление классов элемента в объектной модели элементов в соответствии с аспектом настоящего изобретения.
Фиг.26 - представление компонентов для интерпретации кода языка разметки для взаимодействия с уровнем API визуалов в соответствии с аспектом настоящего изобретения.
Фиг.27 - представление отсечения посредством пути геометрии в соответствии с аспектом настоящего изобретения.
Подробное описание
Иллюстративная операционная среда
На фиг.1 показан пример компьютерной среды 100, подходящей для реализации изобретения. Среда 100 вычислительной системы является только одним примером подходящей вычислительной среды и не накладывает никаких ограничений на объем использования или функции изобретения. Кроме того, вычислительную среду 100 не следует интерпретировать как имеющую какую-либо зависимость или необходимость, относящуюся к одному или комбинации компонентов, указанных в иллюстративной операционной среде 100.
Изобретение предусматривает многочисленные другие среды или конфигурации вычислительных систем общего назначения и специального назначения. Примеры общеизвестных вычислительных систем, сред и/или конфигураций, которые могут быть пригодны для реализации настоящего изобретения, включают в себя, но не исключительно, персональные компьютеры, компьютеры-серверы, карманные или портативные устройства, планшетные устройства, многопроцессорные системы, системы на базе микропроцессора, приставки, программируемую бытовую электронику, сетевые ПК, мини-компьютеры, главные компьютеры, распределенные вычислительные среды, включающие в себя любые из вышеперечисленных систем или устройств, и т.п.
Изобретение можно описывать в общем контексте выполняемых на компьютере инструкций, например программных модулей, выполняемых компьютером. В целом, программные модули включают в себя процедуры, программы, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют определенные абстрактные типы данных. Изобретение можно также осуществлять на практике в распределенных вычислительных средах, где задания выполняются удаленными обрабатывающими устройствами, подключенными посредством сети связи. В распределенной компьютерной среде, программные модули могут размещаться как на локальных, так и на удаленных компьютерных носителях информации, включая запоминающие устройства.
Согласно фиг.1 иллюстративная система, реализующая настоящее изобретение, включает в себя вычислительное устройство общего назначения в виде компьютера 110. Компоненты компьютера 110 могут включать в себя, но не только, процессор 120, системную память 130 и системную шину 121, которая подключает различные компоненты системы, в том числе системную память, к процессору 120. Системная шина 121 может относиться к любому из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, использующих любую из разнообразных шинных архитектур. В порядке примера, но не ограничения, такие архитектуры включают в себя шину, соответствующую промышленному стандарту архитектуры (ISA), шину, соответствующую стандарту микроканальной архитектуры (МСА), шину, соответствующую расширенному ISA (EISA), локальную шину, соответствующую стандарту Ассоциации по стандартам в области видеоэлектроники (VESA), и шину, соответствующую стандарту подключения периферийных компонентов (PCI) (именуемую также шиной расширения).
Компьютер 110 обычно включает в себя разнообразные компьютерно-считываемые носители. Считываемые компьютером носители могут представлять собой любые имеющиеся носители, к которым может обращаться компьютер 110, в том числе энергозависимые и энергонезависимые носители, сменные и стационарные носители. В порядке примера, но не ограничения, считываемые компьютером носители могут включать в себя компьютерные носители для хранения данных и среды передачи данных. Компьютерные носители для хранения данных включают в себя энергозависимые и энергонезависимые, сменные и стационарные носители, реализованные посредством любого метода или технологии хранения информации, например считываемых компьютером команд, структур данных, программных модулей или иных данных. Компьютерные носители для хранения данных включают в себя, помимо прочего, ОЗУ, ПЗУ, ЭППЗУ, флэш-память и другие запоминающие устройства, CD-ROM, цифровые универсальные диски (DVD) или иной оптический дисковый носитель данных, магнитные кассеты, магнитную ленту, магнитный дисковый носитель данных, или иные магнитные запоминающие устройства, или любой иной носитель, который можно использовать для хранения полезной информации и к которому может обращаться компьютер 110. Среды передачи данных обычно реализуют считываемые компьютером команды, структуры данных, программные модули или иные данные в виде сигнала, модулируемого данными, например, несущей волны или иного транспортного механизма, и включают в себя любые среды доставки информации. Термин «сигнал, модулируемый данными» означает сигнал, одну или несколько характеристик которого задают или изменяют определенным образом, кодируя в нем информацию. Среды передачи данных могут, например, помимо прочего, включать в себя проводные среды, например проводную сеть или прямое проводное соединение, и беспроводные среды, например акустические, РЧ (радиочастотные), инфракрасные и другие беспроводные среды. Понятие компьютерно-считываемого носителя охватывает также любые комбинации вышеперечисленных носителей.
Системная память 130 включает в себя компьютерные носители для хранения данных в виде энергозависимой и энергонезависимой памяти, например постоянного запоминающего устройства (ПЗУ) 131 и оперативного запоминающего устройства (ОЗУ) 132. Базовая система ввода/вывода (BIOS) 133, содержащая базовые процедуры, обеспечивающие перенос информации между элементами компьютера 110, например, при запуске, обычно хранится в ПЗУ 131. В ОЗУ 132 обычно хранятся данные и программные модули, подлежащие быстрому доступу со стороны процессора 120, или обрабатываемые им в данный момент. В порядке примера, но не ограничения, на фиг.1 показаны операционная система 134, прикладные программы 136, другие программные модули 137 и программные данные 138.
Компьютер 110 может также содержать другие сменные/стационарные, энергозависимые/энергонезависимые компьютерные носители для хранения данных. Исключительно в порядке примера, на фиг.1 показан жесткий диск 141, который позволяет считывать информацию со стационарного энергонезависимого магнитного носителя и записывать информацию на него, дисковод 151 для дискет, который считывает информацию со сменного энергонезависимого магнитного диска 152 или записывает информацию на него, и дисковод 155 для оптических дисков, который считывает информацию со сменного энергонезависимого оптического диска 156, например CD-ROM или иного оптического носителя, или записывает информацию на него. В иллюстративной операционной среде можно также использовать другие сменные/стационарные, энергозависимые/энергонезависимые компьютерные носители для хранения данных, например кассеты с магнитной лентой, карты флэш-памяти, цифровые универсальные диски, ленту для цифровой видеозаписи, полупроводниковое ОЗУ, полупроводниковое ПЗУ и т.д. Жесткий диск 141, как правило, подключен к системной шине 121 через интерфейс запоминающего устройства со стационарным носителем, например интерфейс 140, а дисковод 151 для дискет и дисковод 155 для оптических дисков, как правило, подключен к системной шине 121 через интерфейс запоминающего устройства со сменным носителем, например интерфейс 150.
Вышеупомянутые и изображенные на фиг.1 приводы и соответствующие компьютерные носители для хранения данных обеспечивают хранение компьютерно-считываемых команд, структур данных, программных модулей и других данных для компьютера 110. Например, согласно фиг.1 на жестком диске 141 хранится операционная система 144, прикладные программы 145, другие программные модули 146 и программные данные 147. Заметим, что эти компоненты могут быть идентичны операционной системе 134, прикладным программам 135, другим программным модулям 137 и программным данным 138 или отличны от них. Операционная система 144, прикладные программы 145, другие программные модули 146 и программные данные 147 обозначены другими позициями, поскольку они, как минимум, могут представлять собой разные копии. Пользователь может вводить команды и информацию в компьютер 110 через устройства ввода, например клавиатуру 162 и указательное устройство 161, в качестве которого может выступать мышь, шаровой манипулятор или сенсорная панель. Другие устройства ввода (не показаны) могут включать в себя микрофон, джойстик, игровой пульт, спутниковую тарелку, сканнер и т.д. Эти и другие устройства ввода обычно подключаются к процессору 120 через интерфейс 160 пользовательского ввода, подключенный к системной шине 121, но могут подключаться посредством других интерфейсов и шинных структур, например параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 191 или устройство отображения другого типа также подключено к системной шине 121 посредством интерфейса, например видеоинтерфейса 190. Монитор 191 также может быть объединен с сенсорной панелью 193 или подобным устройством, способным вводить оцифрованный входной сигнал, например рукописный текст, в компьютерную систему 110 через интерфейс, например интерфейс 192 сенсорного экрана. Заметим, что монитор и/или сенсорная панель могут быть физически соединены с корпусом, в котором размещается вычислительное устройство 110, например в персональном компьютере планшетного типа, где сенсорная панель 193, по существу, играет роль планшета 164. Кроме того, компьютеры, в частности вычислительное устройство 110, могут также содержать другие периферийные устройства вывода, например громкоговорители 197 или принтер 196, которые могут подключаться через интерфейс 195 периферийных устройств вывода.
Компьютер 110 может работать в сетевой или распределенной среде, используя логические линии связи с одним или несколькими удаленными компьютерами, например удаленным компьютером 180. Удаленный компьютер 180 может представлять собой персональный компьютер, сервер, маршрутизатор, сетевой ПК, равноправное устройство или другой общий узел сети и обычно содержит многие или все элементы, описанные выше в отношении компьютера 110, хотя на фиг.1 изображено только запоминающее устройство 181. Логические линии связи, обозначенные на фиг.1, включают в себя локальную вычислительную сеть (ЛС) 171 и глобальную сеть (ГС) 173, а также, возможно, и другие сети/шины. Такие сетевые среды широко распространены в жилых домах, учреждениях, учрежденческих компьютерных сетях, интранетах и в Интернете.
При использовании в сетевой среде ЛС компьютер 110 подключают к ЛС 171 посредством сетевого интерфейса или адаптера 170. При использовании в сетевой среде ГС компьютер 110 обычно содержит модем 172 или другое средство установления связи через ГС 173, например Интернет. Модем 172, который может быть внутренним или внешним, можно подключать к системной шине 121 через интерфейс 160 пользовательского ввода или посредством другого подходящего механизма. В сетевой среде программные модули, указанные применительно к компьютеру 110, или их фрагменты могут храниться в удаленном запоминающем устройстве. В порядке примера, но не в целях ограничения, на фиг.1 показано, что удаленные прикладные программы 185 хранятся в запоминающем устройстве 181. Очевидно, что, помимо сетевых линий связи, показанных в качестве примера, для установления линии связи между компьютерами можно использовать другие средства.
Архитектура графики
Согласно одному аспекту настоящего изобретения программный код, например приложение или компонент операционной системы, передает команды рисования и другую информацию (например, растровые изображения) графическим компонентам с целью визуализации графического выхода на системном дисплее. Для этого настоящее изобретение предусматривает язык разметки совместно с рядом элементов «форма» и других элементов, систему группирования и наложения и объединение с системой общих свойств в объектной модели, чтобы программы могли заполнять граф сцены структурами данных, примитивами (командами) рисования и другими данными, относящимися к графике. В результате обработки графа сцены получают графику (графическим изображениям), отображаемую на экране.
На фиг.2 в общем виде представлена многоуровневая архитектура 200, пригодная для реализации настоящего изобретения. Согласно фиг.2 можно разработать программный код 202 (например, прикладную программу или компонент операционной системы и пр.), позволяющий выводить графические данные одним или несколькими разными способами, в том числе посредством построения изображения 204, посредством элементов векторной графики 206 и/или посредством вызовов функции/метода, размещенной/ого непосредственно на уровне 212 программного интерфейса приложения (API) визуалов. Непосредственное взаимодействие с уровнем API дополнительно описано в вышеупомянутой совместно рассматриваемой патентной заявке под названием «Интерфейсы визуалов и графов сцены».
В общем случае построение изображения 204 обеспечивает программный код 202 механизмом загрузки, редактирования и сохранения изображений, например растровых изображений. Эти изображения могут быть использованы другими частями системы, и также имеется способ использования кода рисования примитива для непосредственного рисования изображения.
Согласно аспекту настоящего изобретения элементы векторной графики 206 обеспечивают другой способ рисования графики, согласованный с остатком объектной модели (описанный ниже). Элементы векторной графики 206 можно создавать с помощью языка разметки, который система 208 элементов/свойств и система 210 презентаторов обрабатывают, чтобы осуществить надлежащие вызовы уровню 212 API визуалов. Как описано ниже со ссылкой на фиг.26, в целом элементы 206 векторной графики анализируются в объекты объектной модели, из которой происходит рисование графа сцены, которые могут быть предоставлены графу сцены посредством уровня элементов с помощью системы 208 элементов/свойств и системы 210 презентаторов, или могут обеспечиваться более эффективным способом на уровне ресурсов, что также описано ниже.
В одном варианте реализации архитектура 200 уровня графики включает в себя высокоуровневую машину 214 наложения и анимации, которая включает в себя структуру данных 216 кэширования или иначе связана с ней. Структура данных 216 кэширования содержит граф сцены, содержащий иерархически-организованные объекты, управляемые согласно заданной объектной модели, описанной ниже. В целом, уровень 212 API визуалов обеспечивает программный код 202 (и систему 210 презентаторов) интерфейсом к структуре данных 216 кэширования, включающим в себя способность создавать объекты, открывать и закрывать объекты для передачи им данных и т.д. Другими словами, высокоуровневая машина 214 наложения и анимации предоставляет уровень 212 API унифицированных сред, с помощью которого разработчики могут выражать намерения в отношении графики и сред, чтобы отображать графическую информацию и обеспечивать нижележащую платформу достаточной информацией, чтобы платформа могла оптимизировать использование оборудования для программного кода. Например, нижележащая платформа будет отвечать за кэширование, согласование ресурсов и интеграцию сред.
В одном варианте реализации высокоуровневая машина 214 наложения и анимации передает поток команд и, возможно, другие данные (например, указатели на растровые изображения) быстрой, низкоуровневой машине 218 наложения и анимации. Используемые здесь термины «высокоуровневый» и «низкоуровневый» аналогичны тем, что используются в других вычислительных сценариях, где, в целом, чем ниже программный компонент относительно более высоких компонентов, тем ближе этот компонент к оборудованию. Так, например, графическая информация, отправленная с высокоуровневой машины 214 наложения и анимации, может быть принята на низкоуровневой машине 218 наложения и анимации, где информация используется для отправки графических данных на графическую подсистему 222, содержащую оборудование.
Высокоуровневая машина 214 наложения и анимации, совместно с программным кодом 202, строит граф сцены для представления сцены графики, обеспечиваемой программным кодом 202. Например, каждый предмет, подлежащий рисованию, можно загружать с помощью программ рисования, которые система может кэшировать в структуре данных 216 графа сцены. Как будет описано ниже, имеется несколько разных способов задавать эту структуру данных 216 и что рисовать. Далее, высокоуровневая машина 214 наложения и анимации объединяется с системами 220 хронирования и анимации для обеспечения декларативного (или другого) управления анимацией (например, интервалов анимации) и управления хронированием. Заметим, что система анимации позволяет передавать анимационные значения практически повсюду в системе, в том числе, например, на уровне 208 элемента/свойства, внутри уровня 212 API визуалов и в любых других ресурсах. Система хронирования представляется на уровнях элементов и визуалов.
Низкоуровневая машина 218 наложения и анимации управляет наложением, анимацией и визуализацией сцены, которая затем поступает на графическую подсистему 222. Низкоуровневая машина 218 компонует визуализации для сцен нескольких приложений и с помощью компонентов визуализации реализует фактическую визуализацию графики на экране. Заметим, однако, что временами может быть необходимо и/или выгодно осуществлять ту или иную визуализацию на более высоких уровнях. Например, хотя более низкие уровни обслуживают запросы от нескольких приложений, более высокие уровни обрабатываются на основе приложений, что позволяет посредством механизмов 204 построения изображения осуществлять времясберегающую или специализированную по приложениям визуализацию на более высоких уровнях и передавать ссылки на растровое изображение более низким уровням.
Объектная модель графа сцены
Согласно описанному ниже модель визуализации совместно используется высокоуровневыми, управляемыми элементами 206 векторной графики и низкоуровневыми объектами, созданными посредством уровня 212 API визуала, используемыми в структуре 216 данных графа сцены. Это обеспечивает значительную степень корреляции между высокоуровневыми элементами согласно настоящему изобретению и низкоуровневыми объектами. Ниже описана одна реализация объектной модели графа сцены.
На фиг. 3 и 4 показаны иллюстративные графы сцены 300 и 400 соответственно, базовый объект которых называется визуалом. В целом, визуал представляет собой объект, представляющий пользователю виртуальную поверхность и имеющий визуальное представление на экране дисплея. Согласно фиг.5 визуал базового класса обеспечивает базовые функции для визуалов других типов, т.е. класс 500 визуалов является абстрактным базовым классом, порождающим типы визуалов (например, 501-506).
Согласно фиг.3 визуал 302 верхнего уровня (корневой визуал) связан с объектом 304 «менеджер визуалов», который также имеет связь (например, посредством описателя) с окном 306 (HWnd) или аналогичным модулем, в котором графические данные выводятся для программного кода. Менеджер 304 визуалов управляет рисованием визуала верхнего уровня (и любых потомков этого визуала) в этом окне 306. На фиг.6 менеджер визуалов показан как один из ряда других объектов 620 в объектной модели описанной здесь графической системы.
Для рисования менеджер 304 визуалов обрабатывает (например, обходит или передает) граф сцены согласно расписанию, заданному диспетчером 308, и передает команды графики и другие данные низкоуровневому компоненту 218 (фиг.2) для его соответствующего окна 306, что в общих чертах описано в патентных заявках США №№ 10/184,795, 10/184,796 и 10/185,775. Обработка графа сцены обычно планируется диспетчером 308 на частоте, более низкой по сравнению с частотой обновления низкоуровневого компонента 218 и/или графической подсистемы 222. На фиг.3 показано несколько дочерних визуалов 310-315, организованных в иерархическом порядке под визуалом 302 верхнего уровня (корневым визуалом), некоторые из которых представлены как заполненные контекстами рисования 316, 317 (показанными в виде пунктирных прямоугольников, что выражает их временный характер) и связанные со списками 318 и 319 команд соответственно, содержащими, например, примитивы рисования и другие визуалы. Визуалы также могут содержать другую информацию свойств, что показано в нижеследующем иллюстративном классе визуалов:
Figure 00000002
Трансформация (преобразование), установленная свойством «трансформация», задает систему координат для подграфа визуала. Система координат до трансформации называется предтрансформационной системой координат, а после трансформации - посттрансформационной системой координат, т.е. визуал с трансформацией эквивалентен визуалу, имеющему узел трансформации в качестве родителя. На фиг.7 в общем виде представлен пример трансформации, идентифицирующий предтрансформационную и посттрансформационную системы координат по отношению к визуалу. Чтобы получить или установить трансформацию визуала, можно использовать свойство «трансформация» (Transform).
Заметим, что трансформации координат можно применять унифицированным способом ко всему, как в растровом изображении. Заметим, что это не означает, что трансформации всегда применяются к растровым изображениям, но на то, что визуализируется, трансформации влияют одинаково. Например, если пользователь рисует круг круглым пером шириной один дюйм и затем применяет масштабирование в направлении Х с коэффициентом два, то перо будет иметь ширину два дюйма слева направо и только один дюйм сверху вниз. Это иногда называют наложением или трансформацией растрового изображения (в отличие от скелетного или геометрического масштабирования, которое влияет только на геометрию). На фиг.8А представлена трансформация масштабирования, причем нетрансформированное изображение 800 показано слева, а трансформированное изображение 802 с неоднородным масштабированием показано справа. На фиг.8В представлена трансформация масштабирования, причем нетрансформированное изображение 800 показано слева, а трансформированное изображение 804 с геометрическим масштабированием показано справа.
В отношении координатной трансформации визуала, TransformToDescendant трансформирует точку из исходного визуала в дочерний визуал. Точка трансформируется из посттрансформационного координатного пространства исходного визуала в посттрансформационное координатное пространство дочернего визуала. TransformFromDescendant трансформирует точку из дочернего визуала вверх по родительской цепи в исходный визуал. Точка трансформируется из посттрансформационного координатного пространства дочернего визуала в посттрансформационное координатное пространство исходного визуала. Метод CalculateBounds возвращает прямоугольник границ содержимого визуала из посттрансформационного координатного пространства. Заметим, что может существовать альтернативная версия API, где допустимы более конкретные указания, например, как трансформация на визуале интерпретируется в ходе координатной трансформации. Например, можно учитывать или не учитывать трансформацию на исходном и дочернем визуале. Таким образом, эта альтернатива предусматривает четыре опции, например, координаты можно трансформировать из предтрансформационного пространства в предтрансформационное пространство, из предтрансформационного пространства в посттрансформационное пространство, из посттрансформационного пространства в предтрансформационное пространство и из посттрансформационного пространства в посттрансформационное пространство. Та же идея применяется к тестированию выбора, например, тестирование выбора может начинаться в предтрансформационном или посттрансформационном координатном пространстве, и результаты тестирования выбора могут быть в предтрансформационном или посттрансформационном координатном пространстве.
Свойство «отсечение» устанавливает (и получает) область отсечения визуала. В качестве области отсечения можно использовать любую «геометрию» (Geometry) (класс геометрии описан ниже со ссылкой на фиг.12), и область отсечения применяется в посттрансформационном координатном пространстве. В одной реализации установка по умолчанию для области отсечения равна null, т.е. отсечение отсутствует, что можно рассматривать как бесконечно большой прямоугольник отсечения от (-∞,-∞) до (+∞,+∞).
Свойство «непрозрачность» (Opacity) получает/устанавливает значение непрозрачности визуала, так что контент визуала смешивается на поверхности рисования в зависимости от значения непрозрачности и выбранного режима смешивания. Свойство «режим смешивания» (BlendMode) можно использовать для установления (или получения) используемого режима смешивания. Например, значение непрозрачности (альфа) можно задавать в пределах от 0.0 до 1.0, выбирая линейный относительно альфа режим смешивания, например Цвет = альфа * цвет изображения + (1.0 - альфа) * цвет фона). В визуал могут быть включены другие услуги, например свойства спецэффектов, например размывание, черно-белое изображение и т.д.
Различные услуги (включая трансформацию, непрозрачность, отсечение) можно помещать и извлекать на контексте рисования, и операции помещения/извлечения могут быть вложенными, если только вызов извлечения сочетается с вызовом помещения. Например, последовательность операций PushTransform(...); PushOpacity(...); PopTransform(...) является незаконной, поскольку прежде, чем вызывать PopTransform, нужно вызвать PopOpacity.
Метод PushTransform помещает (устанавливает, задает) трансформацию. Последующие операции рисования выполняются в отношении заданной трансформации. PopTransform извлекает трансформацию, заданную сочетающимся вызовом PushTransform:
void PushTransform(Transform transform);
void PushTransform(Matrix matrix);
void PopTransform().
Аналогично, метод PushOpacity помещает (задает) значение непрозрачности. Последующие операции рисования визуализируются на временной поверхности с заданным значением непрозрачности, после чего компонуются в сцену. PopOpacity извлекает непрозрачность, помещенную сочетающимся вызовом PushOpacity:
void PushOpacity(float opacity);
void PushOpacity(NumberAnimationBase opacity);
void PopOpacity().
Метод PushClip задает геометрию отсечения. Последующие операции рисования отсекаются до геометрии. Отсечение применяется в посттрансформационном пространстве. PopClip извлекает область отсечения, помещенную сочетающимся вызовом PushClip:
void PushClip(Geometry clip);
void PopClip().
Заметим, что операции помещения могут быть вложенными на любую глубину, если только операции извлечения сочетаются с помещением. Например, допустима следующая последовательность операций:
Figure 00000003
Тестирование выбора осуществляется в посттрансформационном координатном пространстве и возвращает идентификатор каждого визуала, тестируемого по выбору, который выбирают, например, путем регистрации щелчка пера или мыши. Альтернативная версия интерфейса допускает, чтобы тестирование выбора начиналось в предтрансформационном координатном пространстве относительно визуала, где начинается тестирования выбора. Выбираемые визуалы возвращаются в порядке справа налево и из глубины на поверхность. Тестированием выбора можно управлять с помощью различных флагов, включая HitTestable, который определяет, является ли визуал тестируемым по выбору (его значение по умолчанию - «истина»), и HitTestFinal, который определяет, останавливается ли тестирование выбора при выборе визуала, т.е. если визуал выбран и свойство HitTestFinal визуала имеет значение «истина», то тестирование выбора прекращается и возвращает результаты, собранные до этого момента (его значение по умолчанию - «ложь»). Еще одним флагом является HitTestIgnoreChildren, который определяет, следует ли рассматривать потомков визуала, когда тестирование выбора осуществляется на визуале (его значение по умолчанию - «ложь»).
Визуал-посредник (ProxiVisual) - это визуал, который можно добавлять в граф сцены более одного раза. Поскольку к любому визуалу, на который ссылается визуал-посредник, можно прийти от корня несколькими путями, услуги чтения (TransformToDescendant, TransformFromDescendant и HitTest) не работают через визуал-посредник. В сущности, имеется один канонический путь от каждого визуала к корню дерева визуалов, и этот путь не включает в себя визуалов-посредников.
Согласно фиг.5 в объектной модели заданы различные типы визуалов, в том числе визуалы-контейнеры (ContainerVisual) 501, визуалы рисования (DrawingVisual) 502, визуалы удостоверения (ValidationVisual) 503, визуалы поверхности (SufaceVisual) 504 и визуалы HWnd (HWndVisual) 505. В нижеследующей таблице приведены иллюстративные методы визуала рисования:
Figure 00000004
Визуал рисования является контейнером для графического контента (например, линий, текста, изображений и т.д.). Заметим, что визуал можно добавлять в визуал рисования, но в некоторых реализациях это недопустимо. Визуал рисования 502 содержит метод открытия (Open), который возвращает IDrawingContext, который можно использовать для заполнения визуала рисования, например, другими визуалами и примитивами рисования, что описано ниже. В одной реализации, по разным причинам также описанной ниже, визуал рисования можно открывать только один раз, чтобы заполнить его контекстом рисования; иными словами, такой визуал рисования является неизменяемым. После заполнения визуал рисования закрывается с использованием метода закрытия (Close), например, на контексте рисования. Заметим, что вызов открытия может очищать любые контенты (потомки) визуала, однако в одной альтернативной реализации предусмотрен метод присоединения (Append), позволяющий открывать текущий визуал с присоединением к этому визуалу. Другими словами, вызов OpenForAppend работает, как Open за исключением того, что текущий контент визуала рисования не очищается при открытии.
Ниже приведен пример, как контекст рисования используется для заполнения визуала:
ContainerVisual cv1 = new ContainerVisual();
DrawingVisual dv1 = new DrawingVisual();
//Открыть контекст рисования. Контекст будет автоматически
//закрыт при выходе из процедуры using. Это также приведет к
//замене любых контекстов, которые уже могли быть в dv1.
using (IDrawingContext dc = dv1.Open())
{
dc.DrawLine(new Pen(Brushes.Blue), new Point(...),
new Point(...));
}
//Добавить dv1 к совокупности потомков cv1
cv1.Children.Add(dv1);
//Добавить еще один произвольный визуал к cv1
cv1.Children.Add(someOtherVisual);
//Создать еще один визуал рисования
DrawingVisual dv2 = new DrawingVisual();
using (IDrawingContext dc = dv2.Open())
{
//Задание новой системы координат, где все вдвое больше.
dv.PushTransform(new Scale(2.0, 2.0));
//Рисование линии в системе координат с новым масштабом.
dc.DrawLine(new Pen(Brushes.Red), new Point(...),
new Point(...));
//Возврат к исходной системе координат.
dv.PopTransform();
dc.DrawLine(new Pen(Brushes.Green), new Point(...),
new Point(...));
}
//Добавить dv2 к совокупности потомков cv1.
Cv1.Children.Add(dv2);
В целом, визуал удостоверения (ValidationVisual) 503 концептуально аналогичен визуалу рисования за исключением того, что визуал удостоверения заполняется, когда система требует выполнения его заливки, а не когда программный код хочет заполнить его. Например, как описано в патентной заявке США № 10/185,775, высокоуровневая машина 214 наложения и анимации (фиг.2) может отменить данные графа сцены, когда требуются ресурсы, например, когда часть графа сцены не видна. Например, если некоторые части выходят за пределы экрана, отсекаются и т.д. Если отмененные данные потребуются в будущем, вызванный программный код 202 будет вызван повторно, чтобы повторно нарисовать (удостоверить) отмененный фрагмент графа сцены. Для этого один типичный сценарий использования предназначен для того, чтобы программный код подразделил визуал удостоверения и подменил метод OnValidate. Когда система вызывает метод OnValidate, ему передается контекст рисования, программа использует контекст рисования для повторного заполнения визуала удостоверения.
В нижеприведенном примере показан один способ реализации простого визуала удостоверения, например, рисующего линию определенного цвета. Цвет линии можно изменять, вызывая процедуру SetColor. Чтобы принудительно обновить визуал удостоверения, SetColor вызывает Invalidate, чтобы принудить графическую подсистему повторно удостоверить визуал удостоверения:
public class MyValidationVsiual: ValidationVisual
{
public override void OnValidate(IDrawingContext dc)
{
dc.DrawLine(m_color, ...);
}
public void SetColor(Color newColor)
{
m_color = color;
Invalidate(); //Принудительно перерисовать визуал
//удостоверения, чтобы отразить
//изменение цвета.
}
private Color m_color
}
Этот пример показывает, как использовать визуал удостоверения:
Figure 00000005
На фиг.4 представлен пример графа 400 сцены, в котором визуалы-контейнеры и визуалы рисования связаны в графе сцены и снабжены соответствующими данными в виде примитивов рисования, (например, в соответствующих контекстах рисования). Визуал-контейнер (ContainerVisual) является контейнером для визуалов, и визуалы-контейнеры могут быть вложены друг в друга. Потомками визуала-контейнера можно манипулировать с помощью «совокупности визуалов» (VisualCollection), возвращаемой свойством «потомки» (Children) визуала-контейнера. Порядок визуалов в совокупности визуалов определяет порядок визуализации визуалов, т.е. визуалы визуализируются от наименьшего индекса к наибольшему индексу с заднего плана к переднему плану (в порядке рисования). Например, при надлежащих параметрах с помощью трех визуалов рисования, представляющих красный, зеленый и синий прямоугольники иерархически под визуалом-контейнером, следующий код будет приводить к рисованию трех прямоугольников (со сдвигом вправо и вниз), красный прямоугольник на заднем плане, зеленый прямоугольник посередине и синий прямоугольник на переднем плане:
Figure 00000006
На фиг.5 показан еще один тип визуального объекта - визуал поверхности (SurfaceVisual) 504. В общем случае, согласно фиг.3, объект 315 SurfaceVisual связан с поверхностью, хранящейся в памяти, (растровым изображением) 322, к которой может обращаться программный код 202 (фиг.2). Программный код-клиент 202 может поддерживать собственную память поверхностей или может требовать, чтобы память выделялась объектом «поверхность».
Программный код 202 имеет опцию открывать визуал поверхности и получать контекст рисования 323, в который программный код 202 может записывать пиксельные данные 324 и пр. и непосредственно помещать эти пиксели на поверхность. Это отражено на фиг.3 пунктирной линией между объектом 322 «поверхность», контекстом рисования 323 (показанным в виде пунктирного прямоугольника, чтобы отразить его временный характер) и пиксельными данными 324.
Программный код 202 также имеет опцию создавать менеджер 330 визуалов поверхности и связывать подграф 332 визуалов с визуалом поверхности 315. Эта опция представлена на фиг.3 пунктирной линией между объектом 322 «поверхность» и менеджером 330 визуалов поверхности. Заметим, что подграф 332 визуалов также допускает вложение других визуалов поверхности, что также показано на фиг.3. Менеджер 330 визуалов поверхности (также показанный как тип другого объекта в наборе 620 на фиг.6) обходит подграф 332 визуалов для обновления растрового изображения 322 визуала поверхности. Далее, заметим, что этот обход планируется диспетчером 308 и для эффективности может управляться для регулировки частоты обновления этого растрового изображения 322. Менеджеру 330 визуалов поверхности не приходится обходить подграф 332 визуалов каждый раз и/или с той же частотой, с какой менеджер 302 визуалов верхнего уровня обходит остальной граф сцены. В отношении поверхностей, как описано ниже со ссылкой на фиг.9А-9С, в целом, настоящая модель графики позволяет накладывать ряд визуалов на поверхность, визуализировать в прямом режиме векторные и растровые примитивы в поверхность, накладывать поверхность на рабочий стол или на другую поверхность и управлять, какую поверхность в списке поверхностей использовать для наложения на нее или рисования на ней. Список поверхностей задают как совокупность из одной или нескольких поверхностей (т.е. кадров/буферов) физической (системной или видео) памяти, используемых для хранения композиций визуалов или графических рисунков, или и того и другого. Одну поверхность из списка поверхностей можно задать в качестве текущего буфера заднего плана, где выполняется рисование и/или наложение, и одну поверхность из списка поверхностей задают в качестве текущего первичного буфера или буфера переднего плана, который используется для наложения на другую цель визуализации.
Поверхности можно использовать по-разному. Например, на фиг.9А показано наложение на поверхность. Согласно фиг.9А, объект 900 «менеджер визуалов поверхности» связан со списком 902 поверхностей, который является целью визуализации для дерева 904 визуалов. В каждом цикле наложения визуалы накладываются на поверхность из списка поверхностей, которая в данный момент служит активным буфером заднего плана для списка поверхностей. Поверхность, на которую производится наложение, может включать в себя поверхность, находящуюся в распоряжении клиента/ высокоуровневой машины 214 наложения (фиг.2) для внутрипроцессных сценариев наложения, поверхность, находящуюся в распоряжении низкоуровневой машины 218 наложения для сценариев, где клиент не нуждается в битах, но низкоуровневая машина 218 наложения нуждается в них для наложения поверхности на другую цель визуализации или кросс-процессную поверхность, для сценариев, где клиент нуждается в доступе к битам поверхности, но низкоуровневая машина 218 наложения также нуждается в поверхности для других действий наложения.
Наложение осуществляется под управлением услуги хронирования, присоединенной к менеджеру визуалов. Одним примером услуги хронирования является ручной режим, пример использования которого приведен ниже:
//создать услугу ручного хронирования и присоединить менеджер
//визуалов
TimingService timingService =
new ManualTimingService(visualManager);
//наложить дерево визуалов на текущий буфер заднего плана
//поверхности
visualManager.Render();
foreach (Tick tick in timingService)
{
//перевести буфер заднего плана в следующий кадр поверхности
surfaceList.NextFrame();
//перевести время дерева визуалов
timingService/Tick(tick);
//наложить дерево визуалов на текущий буфер заднего плана
//поверхности
visualManager.Render();
}
Другой путь использования поверхности состоит в прямой визуализации на поверхности через контекст. Присоединив список поверхностей к визуалу (визуалу поверхности) можно осуществлять прямую визуализацию на поверхности из списка поверхностей, которая в данный момент служит активным буфером заднего плана для списка поверхностей. Эту визуализацию осуществляют, получая контекст рисования из визуала поверхности и выполняя на этом контексте команды рисования, согласно описанному выше. Заметим, что получение контекста рисования блокирует поверхность, не позволяя выполнять другие операции наложения на нее. Каждая команда рисования выполняется немедленно, и векторы и другие поверхности можно рисовать (смешивать) на поверхности. Однако другие визуалы нельзя нарисовать на поверхности, но зато можно наложить на поверхность, связав ее с менеджером визуалов, согласно описанному ранее (например, на фиг.9А).
//присоединить список поверхностей к визуалу
SurfaceVisual surfaceVisual = new SurfaceVisual(surfaceList);
//разрешить прямую визуализацию на поверхности
//буфера заднего плана (и блокировку)
BaseDrawingContext dc = surfaceVisual.Open();
//нарисовать линию (немедленно) в текущий буфер заднего плана
//поверхности
dc.DrawLine (pen, startPoint, endPoint);
//разблокировать поверхность - прямая визуализация выполнена
surfaceVisual.Close(dc);
Еще один способ использования поверхностей состоит в наложении поверхности на другую цель визуализации. Для этого, присоединив список поверхностей к визуалу поверхности, поверхность можно присоединить в качестве узла в дереве визуалов, и поверхность из списка поверхностей, которая в данный момент служит первичным буфером или буфером переднего плана, можно наложить на другую поверхность или на рабочий стол.
Это проиллюстрировано на фиг.9В и в нижеприведенном примере:
//присоединить список поверхностей к визуалу
SurfaceVisual surfaceVisual = new SurfaceVisual(surfaceList);
//Добавить визуал поверхности к дереву визуалов для наложения
//на другую цель визуализации
rootVisual.Add(surfaceVisual);
Непосредственное наложение на/с поверхность/и представлено на фиг.9С, где вышеописанные возможности объединены так, что наложение на поверхность буфера заднего плана из списка поверхностей и наложение из поверхности буфера переднего плана из списка поверхностей (например, на рабочий стол) осуществляются одновременно. Заметим, что, чтобы исключить нежелательный видеоэффект, так называемый разрыв изображения, список поверхностей должен содержать, по меньшей мере, две поверхности, поверхности буферов переднего и заднего плана. Поверхность, используемая согласно фиг.9С, скорее всего, находится в распоряжении низкоуровневой машины 218 или является кросс-процессной поверхностью для улучшения наложения, осуществляемого в низкоуровневой машине 218.
Поверхности строятся как независимые объекты, что указано в нижеприведенных примерах конструкторов:
public class Surface
{
//создать и выделить пустую поверхность без начальных данных
public Surface(int width,
int height,
int dpi,
PixelFormat pixelFormat,
SurfaceFlags flags)
//создать поверхность с использованием выделенной памяти
public Surface(int width,
int height,
int dpi,
PixelFormat pixelFormat,
IntPtr pixels, //управляемая память для
//поверхности
Int stride)
//создать из источника (т.е. клон)
public Surface(Surface sourceSurface,
SurfaceFlags flags)
//создать из файла или URL
public Surface(String filename,
SurfaceFlags flags)
//создать из потока
public Surface(System.IO.Stream stream,
SurfaceFlags flags)
//создать из HBITMAP (который нельзя выбрать в HDC)
public Surface(HBITMAP hbitmap, HPALETTE hPalette)
//создать из HICON
public Surface(HICON hicon)
//свойства только для чтения
public int Width {get; }
public int Dpi {get; }
public PixelFormat Format {get; }
public int Stride {get; }
public IntPtr Buffer {get; }
}
public class SurfaceList
{
//Создать список пустых поверхностей (без начальных данных).
public SurfaceList(int width,
int height,
int dpi,
PixelFormat pixelFormat,
int numSurfaces,
SurfaceFlags flags)
//Создать список поверхностей, который использует указанные
//поверхности. Все поверхности должны иметь одинаковые
//свойства (w, h, dpi, и т.д.)
public SurfaceList(Surface []surfaces)
//сменить буфер переднего плана на «первый в линии»
//буфер заднего плана
public Flip()
//перевести буфер заднего плана в следующую поверхность
public Next()
public int FrontBufferIndex {get; set;}
public int BackBufferIndex {get; set}
public Surface GetFrontBuffer()
public Surface GetBackBuffer()
public Surface GetSurface(int surfaceIndex)
}
После построения поверхность и/или список поверхностей можно присоединить к объекту «визуал поверхности» или к объекту «менеджер визуалов».
//Создать визуал поверхности
public SurfaceDrawingVisual(Surface surface)
public SurfaceDrawingVisual(SurfaceList surfaceList)
//Создать менеджер визуалов с целью визуализации «поверхность»
public VisualManager(Surface surface)
public VisualManager(SurfaceList surfaceList)
Далее, поверхность может получить данные от декодера и/или послать свои данные на кодер для записи в конкретном файловом формате. Поверхности могут также принимать/посылать данные с/на интерфейсов/ы эффектов. Поверхность можно строить для любого пиксельного формата из полного набора поддерживаемых типов формата поверхности. Однако допустимы некоторые настройки заданного пиксельного формата, например, если заданный пиксельный формат составляет менее 32 битов на пиксель, то формат можно довести до 32 битов на пиксель. Всякий раз, когда биты запрашиваются с поверхности в исходном формате, поверхность будет копироваться в буфер запрашиваемого пиксельного формата с использованием фильтра преобразования формата.
На фиг.5 показан еще один визуал, а именно визуал HWnd (HwndVisual) 505, который размещает дочерний объект HWnd Win32 в графе сцены. В частности, существующие программы по-прежнему работают с применением метода WM_PAINT (или подобного), который рисует в дочерний HWnd (или подобный объект) на основании имеющейся технологии графики. Для поддержки этих программ в новой модели обработки графики визуал HWnd допускает, чтобы HWnd содержался в графе сцены и перемещался по мере повторного размещения родительского визуала, что представлено на фиг.10А. Однако в результате ограничений, присущих существующим HWnd, при визуализации дочерний HWnd может располагаться только поверх других окон и не подлежит повороту или масштабированию в отличие от других вышеописанных визуалов. Возможно некоторое отсечение, показанное на фиг.10В, где пунктирные линии указывают отображаемый прямоугольник HWnd, отсекаемый в процессе относительного перемещения по отношению к его родительскому визуалу.
Допустимы и другие типы визуалов 506, и данная объектная модель допускает расширение, позволяющее другим развивать ее. Например, согласно фиг.11 многослойный визуал 1100 позволяет разработчику приложений отдельно управлять информацией в визуале посредством нескольких потоков данных, обеспечивая повышенную степень детализации управления по сравнению с визуалами, имеющими один поток данных. Заметим, что аналогичной степени детализации управления можно добиться, имея (например, три) отдельных дочерних визуала под одним родительским визуалом, однако для этого требуется, чтобы программный код работал с несколькими визуалами, что сложнее, чем работа с одним многослойным визуалом, имеющим указатели на множественные слои.
Например, согласно фиг.11 данные фона, данные контекста и данные границы содержатся в одном многослойном визуале, но отделены друг от друга посредством указания значения слоя, например 0, 1 или 2 соответственно. Слои можно вставлять, в том числе присоединять с любого конца, и/или удалять, причем порядок расположения слоев (например, слева направо, как показано) задает предполагаемый Z-порядок отображения. Заметим, что для безопасности дочерние контент и другие данные в многослойном визуале не должны быть перечислимыми.
Другие типы визуалов включают в себя визуалы-контейнеры и перенаправленные дочерние визуалы HWnd, в которых контент рисуется в растровое изображение и включается в состав визуала поверхности. Трехмерные визуалы обеспечивают связь между двухмерным и трехмерным мирами, например, с помощью двухмерного визуала, имеющего вид в трехмерный мир, можно создать вид, подобный тому, который дает видеокамера.
Многие из объектов «ресурс» являются неизменяемыми после создания, т.е. после того, как они созданы, их нельзя менять по различным причинам, включая вопросы упрощения организации поточной обработки, предотвращение повреждения другими и упрощение взаимодействия с элементами и API. Заметим, что это, в целом, упрощает систему. Однако следует заметить, что допустимо иметь систему, где такие объекты являются изменяемыми, но, например, требующими управления графом зависимости. Например, хотя возможно иметь систему, где такие объекты изменяемы, если программный код изменит отсечение, установленное на визуале, то визуал потребуется повторно визуализировать, для чего необходим механизм извещения/регистрации, например, если визуалу присваивают новое отсечение, то визуал регистрирует себя с отсечением для извещений (например, извещения об изменении отсечения). Таким образом, в одном варианте реализации в целях упрощения объекты «ресурс» являются неизменяемыми.
Эти объекты «ресурс» можно задавать с помощью конструктора, что является простым, обычным способом создания объекта, или с использованием сопровождающего объекта «построитель», что описано ниже. Например, чтобы создать SolidColorBrush (объекты «кисть» описаны ниже), можно использовать конструктор:
Brush MyBrush = new SolidColorBrush(Colors.Red).
Пользователь также может использовать статические элементы класса Brushes (кисти), чтобы получать набор заранее заданных цветов.
Поскольку неизменяемые объекты нельзя изменять, то, чтобы эффективно изменить объект, пользователю нужно создать новый объект и заменить старый объект новым. Для этого многие объекты «ресурс» в системе могут использовать шаблон построителя, в котором неизменяемые объекты создаются с помощью класса построителя, который является сопровождающим классом, допускающим изменения. Пользователь создает неизменяемый объект, чтобы отобразить набор параметров на построитель, создает новый построитель для этого объекта и инициализирует его из неизменяемого объекта. Затем пользователь изменяет построитель по мере необходимости. После этого пользователь может строить новый объект, изменяя построитель и повторно используя его для создания другого неизменяемого объекта. Заметим, что желательно иметь неизменяемые объекты с заданными свойствами и что неизменяемые объекты нельзя изменять, но лишь заменять, активизируя событие изменения свойства.
Таким образом, вместо того чтобы использовать конструктор для создания SolidColorBrush, как описано выше, можно использовать SolidColorBrushBuilder:
SolidColorBrushBuilder MyBuilder = new;
SolidColorBrushBuilder();
MyBuilder.Color = Colors.Red;
Brush MyBrush = MyBuilder.ToBrush().
Большинство объектов, которые принимают статические значения, могут также принимать объекты анимации. Например, на DrawingContext имеется замещение на DrawCircle, которая принимает PointAnimationBase для центра круга. Таким образом, пользователь может задавать богатую анимационную информацию на уровне примитивов. Для объектов «ресурс» существует совокупность анимации в дополнение к базовому значению. Они накладываются, за счет чего, если пользователь пожелает анимировать вышеприведенный пример, то пользователь, прежде чем построить кисть, сможет задать следующую иллюстративную строку:
MyBuilder.ColorAnimations.Add(new ColorAnimation(...)).
Заметим, что объект с параметрами анимации по-прежнему является неизменяемым, поскольку его параметры анимации являются статическими. Однако при обработке графа сцены (например, обходе) значение параметров анимации изменяется с течением времени, из-за чего появляются анимационные, нестатические данные.
Согласно вышеописанному визуалы можно рисовать, заполняя их контекстами рисования с помощью различных примитивов рисования, в том числе «геометрия» (Geometry), «данные изображения» (ImageData) и «видеоданные» (VideoData). Кроме того, имеется набор ресурсов и классов, которые совместно используются всей этой группой. Они включают в себя перья, кисти, геометрию, трансформации и эффекты. IDrawingContext представляет набор операций рисования, которые можно использовать для заполнения DrawingVisual (визуала рисования), ValidationVisual (визуала удостоверения). ISurfaceDrawingContext, основной интерфейс с контекстом IDrawing, можно использовать для заполнения SurfaceVisual (визуала поверхности). Иными словами, контекст рисования представляет набор операций рисования; для каждой операции рисования имеется два метода: один, который принимает в качестве аргументов константы, и другой, который принимает в качестве аргументов аниматоры. Метод DrawLine рисует линию с помощью заданного пера от начальной точки до конечной точки.
Figure 00000007
Метод DrawRoundedRectangle рисует сглаженный прямоугольник с помощью заданных кисти и пера; кисть и перо могут иметь значение null.
Figure 00000008
Метод DrawGeometry рисует путь с помощью заданных кисти и пера; кисть и перо могут иметь значение null.
Figure 00000009
Метод DrawRectangle рисует прямоугольник с помощью заданных кисти и пера; кисть и перо могут иметь значение null.
Figure 00000010
Метод DrawSurface рисует поверхность.
Figure 00000011
Геометрия (Geometry) - это тип класса (фиг.12), который задает скелет векторной графики, без обводки или заливки. Каждый объект «геометрия» является простой формой (LineGeometry (геометрия линии), EllipsGeometry (геометрия эллипса), RectangleGeometry (геометрия прямоугольника)), сложной единой формой (PathGeometry (геометрия пути)) или списком таких форм GeometryList (список геометрий) с заданной соединительной операцией (например, объединения, пересечения и т.д.).
Согласно фиг.13 геометрия пути PathGeometry представляет собой совокупность объектов «фигура» (Figure). В свою очередь, каждый объект «фигура» состоит из одного или нескольких объектов «сегмент» (Segment), которые фактически задают форму фигуры. Фигура является подразделом геометрии Geometry, который задает совокупность сегментов. Эта совокупность сегментов является последовательностью соединенных один за другим двухмерных объектов «сегмент». Фигура может представлять собой либо замкнутую форму с определенной областью, либо просто последовательностью соединенных сегментов, которые задают кривую, но не замкнутую область.
Залитую область геометрии пути PathGeometry задают, выбирая содержащиеся фигуры, у которых свойство «заливка» (Filled) имеет значение «истина», и применяя FillMode (режим заливки) для определения замкнутой области. Заметим, что FillMode перечислимого типа задает, как пересекающиеся области объектов «фигура», содержащихся в «геометрии», объединяются, образуя результирующую область «геометрии». Правило «чередования» позволяет определить, находится ли точка внутри холста. Для этого нужно мысленно провести луч из этой точки до бесконечности в любом направлении, а затем отметить места, где сегмент формы пересекает луч. Затем нужно начать отсчет с нуля и добавлять единицу всякий раз, когда сегмент пересекает луч слева направо, и вычитать единицу всякий раз, когда сегмент пути пересекает луч справа налево. Если подсчет пересечений даст результат, равный нулю, то точка находится вне пути. В противном случае она находится внутри. Правило «намотки» позволяет определить, находится ли точка на холсте внутри. Для этого нужно мысленно провести луч из этой точки до бесконечности в любом направлении и подсчитать число сегментов пути из данной формы, которые этот луч пересекает. Если это число нечетное, то точка находится внутри; если четное - то вне. Согласно фиг.14 при рисовании геометрии (например, прямоугольника) можно задавать кисть или перо, что описано ниже. Кроме того, объект «перо» также имеет объект «кисть». Объект «кисть» задает, как графически заливать плоскость, и имеется иерархия классов объектов «кисть». Это представлено на фиг.14 залитым прямоугольником 1402, который получается при обработке визуала, содержащего прямоугольник и команды и параметры кисти.
Согласно описанному ниже некоторые типы кистей (например, градиенты и девятиячеечные сетки) сами определяют свой размер. При использовании размер этих кистей получают из ограничивающего окна, например, когда GradientUnits/DestinationUnits для Brush задано равным ObjectBoundingBox, используют ограничивающее окно вырисовываемого примитива. Если эти свойства заданы равными UserSpaceOnUse, то используют координатное пространство.
Объект «перо» (Pen) поддерживается кистью совместно со свойствами Width, LineJoin, LineCap, MiterLimit, DashArray и DashOffset, что представлено в нижеприведенном примере:
Figure 00000012
Figure 00000013
Как отмечено выше, объектная модель графики, отвечающая настоящему изобретению, включает в себя объектную модель кисти, задачей которой, в общем случае, является покрытие плоскости пикселями. Примеры типов кистей представлены в иерархии, изображенной на фиг.15, и в базовом классе кисти включают в себя кисть чистого цвета (SolidColorBrush), градиентную кисть (GradientBrush), кисть изображения (ImageBrush), кисть визуала (VisualBrush) (которая может ссылаться на визуал) и кисть девятиячеечной сетки (NineGridBrush). Градиентная кисть включает в себя объекты «линейный градиент» (LinearGradient) и «радиальный градиент» (RadialGradient). Согласно вышеприведенному описанию объекты «кисть» являются неизменяемыми.
Figure 00000014
Ниже приведен пример класса построителя кисти (BrushBuilder):
Figure 00000015
Заметим, что объекты «кисть» при использовании могут распознавать, как они связаны с системой координат и/или как они связаны с ограничивающим окном формы, на которой они используются. В общем случае информацию, например размер, можно извлекать из объекта, на котором рисует кисть. В частности, многие типы кисти используют систему координат для задания некоторых своих параметров. Эту систему координат можно либо задавать как связанную с простым ограничивающим окном формы, к которой применяется кисть, либо ее можно связывать с координатным пространством, которое является активным во время использования кисти. Это известные режимы ObjectBoundingBox и UserSpaceOnUse соответственно.
Figure 00000016
Объект «кисть чистого цвета» (SolidColorBrush) заливает указанную плоскость чистым (сплошным) цветом. При наличии компонента «альфа» цвета он объединяется путем умножения с соответствующим атрибутом непрозрачности в базовом классе «кисть». Ниже приведен пример объекта SolidColorBrush:
Figure 00000017
Объекты «градиентная кисть» (GradientBrush) или просто градиенты обеспечивают градиентную заливку и вырисовываются путем задания ряда остановок градиента, которые задают цвета совместно с некоторого рода прогрессией. Градиент рисует, осуществляя линейные интерполяции между остановками градиента в цветовом пространстве RGB с гаммой 2.2; допустимыми альтернативами являются также интерполяция по другим гаммам или другим цветовым пространствам (HSB, CMYK и т.д.). Существует два типа объектов «градиент», а именно линейный и радиальный градиенты.
В целом, градиенты состоят из списка остановок градиента. Каждая из этих остановок градиента содержит цвет (со включенным значением альфа) и смещение. Если ни одной остановки градиента не задано, то кисть рисует чистым прозрачным черным цветом, как будто кисть вообще не задана. Если задана только одна остановка градиента, то кисть рисует чистым цветом, одним заданным цветом. Как и другие классы ресурсов, класс остановок градиента (пример в нижеприведенной таблице) является неизменяемым.
Figure 00000018
Имеется также класс совокупности, описанный в нижеприведенном примере:
Figure 00000019
Figure 00000020
Согласно нижеприведенной таблице GradientSpreadMethod задает, как должен быть нарисован градиент вне заданного вектора или пространства. Существует три значения, включая «площадка» (pad), в которой краевые цвета (первый и последний) используются для заливки остального пространства, «отражение» (reflect), в котором остановки повторно воспроизводятся в обратном порядке для заливки пространства, и «повтор» (repeat), в котором остановки повторяются в прямом порядке, пока пространство не будет залито:
Figure 00000021
На фиг.16 показаны примеры GradientSpreadMethod. Каждая форма имеет линейный градиент, идущий от белого к серому. Сплошная линия представляет вектор градиента.
LinearGradient задает кисть с линейным градиентом вдоль вектора. Отдельные остановки задают цветовые остановки вдоль этого вектора. Пример показан в нижеследующей таблице:
public class System.Windows.Media.LinearGradient: GradientBrush
{
//Задает градиент с помощью двух цветов и вектора градиента,
//указанных для заливки объекта, к которому применяется
//градиент. Предполагается, что свойство GradientUnits
//принимает значение ObjectBoundingBox
public LinearGradient(Color color1, Color color2,
Float angle);
public BrushMappingMode GradientUnits { get; }
public Transform GradientTransform { get; }
public GradientSpreadMethod SpreadMethod { get; }
//Вектор градиента
public Point VectorStart { get; }
public PointAnimationCollection VectorStartAnimations
{ get; }
public PointAnimationCollection VectorEndAnimations { get; }
//Остановки градиента
public GradientStopCollection GradientStops { get; }
}
public class System.Window.Media.LinearGradientBuilder:
GradientBrushBuilder
{
public LinearGradientBuilder();
public LinearGradientBuilder(Color color1, Color color2,
float angle);
public LinearGradientBuilder(LinearGradient lg);
//GradientUnits: по умолчанию - ObjectBoundingBox
public BrushMappingMode GradientUnits { get; set; }
//GradientTransform: по умолчанию - тождественное
//преобразование
public Transform GradientTransform { get; set; }
//SpreadMethod: по умолчанию - Pad
public GradientSpreadMethod SpreadMethod { get; set; }
//Вектор градиента
//Вектор по умолчанию равен (0,0) - (1,0)
public Point VectorStart { get; set; }
public PointAnimationCollectionBuilder VectorStartAnimations
{ get; set; }
public Point VectorEnd { get; set; }
public PointAnimationCollectionBuilder VectorEndAnimations
{ get; set; }
//Остановки градиента
public void AddStop(Color color, float offset);
public GradientStopCollectionBuilder GradientStops
{ get; set; }
}
RadialGradient имеет модель программирования, аналогичную линейному градиенту. Однако в то время, как линейный градиент задает вектор градиента с помощью начальной и конечной точек, радиальный градиент задает поведение градиента посредством окружности совместно с фокальной точкой. Окружность задает конечную точку градиента, т.е. остановка градиента на 1.0 задает цвет на окружности. Фокальная точка задает центр градиента. Остановка градиента на 0.0 задает цвет в фокальной точке.
На фиг.17 показан радиальный градиент от белого к серому. Внешняя окружность представляет окружность градиента, тогда как точка обозначает фокальную точку. В этом иллюстративном градиенте SpreadMethod задан равным Pad:
public class System.Windows.Media.RadilGradient: GradientBrush
{
//Задает градиент с помощью двух цветов.
//Предполагается, что свойство GradientUnits имеет значение
//ObjectBoundingBox, и центр в (0.5,0.5), радиус 0.5, и
//фокальная точка в (0.5,0.5)
public RadialGradient(Color color1, Color color2);
public BrushMappingMode GradientUnits { get; }
public Transform GradientTransform { get; }
public GradientSpreadMethod SpreadMethod { get; }
//Определение градиента
public Point CircleCenter { get; }
public PointAnimationCollection CircleCenterAnimations
{ get; }
public float CircleRadius { get; }
public FloatAnimationCollection CircleRadiusAnimations
{ get; }
public Point Focus { get; }
public PointAnimationCollection FocusAnimations { get; }
//Остановки градиента
public GradientStopCollection GradientStops { get; }
}
public class System.Window.Media.RadialGradientBuilder:
GradientBrushBuilder
{
public RadialGradientBuilder();
public RadialGradientBuilder(Color color1, Color color2);
public RadialGradientBuilder(RadialGradient rg);
//GradientUnits: по умолчанию - ObjectBoundingBox
public BrushMappingMode GradientUnits { get; set; }
//GradientTransform: по умолчанию - тождественное
//преобразование
public Transform GradientTransform { get; set; }
//SpreadMethod: по умолчанию - Pad
public GradientSpreadMethod SpreadMethod { get; set; }
//Определение градиента
public Point CircleCentre { get; set; }//По умолчанию:
//(0.5, 0.5)
public PointAnimationCollectionBuilder
CircleCenterAnimations { get; set;}
public float CircleRadius { get; set;}//По умолчанию: 0.5
public FloatAnimationCollectionBuilder
CircleRadiusAnimations { get; set;}
public Point Focus { get; set; } //По умолчанию: (0.5,0.5)
public PointAnimationCollectionBuilder
FocusAnimations { get; set; }
//Остановки градиента
public void AddStop(Color color, float offset);
public GradientStopCollectionBuilder GradientStops
{ get; set; }
}
Другой объект «кисть», представленный на фиг.15, - это объект «кисть визуала» (VisualBrush). В принципе, кисть визуала обеспечивает способ рисования визуала повторяющимся, мозаичным способом, наподобие заливки. Объекты раскраски визуала также обеспечивают механизм, позволяющий языку разметки непосредственно работать с уровнем API на уровне ресурсов, как описано ниже. В качестве примера такой заливки на фиг.14 представлена кисть визуала, ссылающаяся на визуал (и любые дочерние визуалы), который задает единичную круговую форму 1420, и заливает этой круговой формой прямоугольник 1422. Таким образом, объект «кисть визуала» может ссылаться на визуал, чтобы задавать, как должна рисовать эта кисть, что вводит тип множественного использования для визуалов. Таким образом, программа может использовать «метафайл» произвольной графики, чтобы заливать область с помощью кисти или пера. Поскольку это сжатый вид хранения и использования произвольной графики, он выступает в качестве ресурса графики. Ниже приведен пример объекта «кисть визуала»:
public class System.Windows.Media.VisualBrush: Brush
{
public VisualBrush (Visual v);
public BrushMappingMode DestinationUnits { get; }
public BrushMappingMode ContentUnits { get; }
public Transform Transform { get; }
public Rect ViewBox { get; }
public Stretch Stretch { get; }
public HorizontalAlign HorizontalAlign { get; }
public VerticalAlign VerticalAlign {get; }
public Point Origin { get; }
public PointAnimationCollection OriginAnimations { get; }
public Size Size { get; }
public SizeAnimationCollection SizeAnimations { get; }
//Визуал
public Visual Visual { get; }
}
public class System.Window.Media.VisualBrushBuilder:
BrushBuilder
{
public VisualBrushBuilder();
public VisualBrushBuilder(Visual v);
public VisualBrushBuilder(VisualBrush vb);
//DestinationUnits: по умолчанию - ObjectBoundingBox
public BrushMappingMode DestinationUnits { get; set; }
//ContentUnits: по умолчанию - ObjectBoundingBox
public BrushMappingMode ContentUnits { get; set; }
//Transform: по умолчанию - тождественное преобразование
public Transform Transform { get; set; }
//ViewBox: по умолчанию (0,0,0,0) - не установлено и
//проигнорировано
public Rect ViewBox { get; set; }
//Stretch: по умолчанию - None - и проигнорировано,
//потому что ViewBox не задано
public Stretch Stretch { get; set;}
//HorizontalAlign: по умолчанию - Center и проигнорировано
public HorizontalAlign HorizontalAlign { get; set; }
//VerticalAlign: по умолчанию - Center и проигнорировано
public VerticalAlign VerticalAlign {get; set;}
//Origin: по умолчанию (0,0)
public Point Origin { get; set; }
public PointAnimationCollectionBuilder OriginAnimations
{ get; set; }
//Size: по умолчанию (1,1)
public Size Size { get; set; }
public SizeAnimationCollectionBuilder SizeAnimations
{ get; set; }
//Visual: по умолчанию null - ничего не нарисовано
public Visual Visual { get; set; }
}
Контенты кисти визуала не имеют встроенных границ и эффективно описывают бесконечную плоскость. Эти контенты существуют в своем собственном координатном пространстве, и пространство, заливаемое кистью визуала, является локальным координатным пространством на время применения. Пространство контентов отображается в локальное пространство в зависимости от свойств «окно видимости» (ViewBox), «окно просмотра» (ViewPort), «выравнивание» (Alignment) и «растяжение» (Stretch). Окно видимости задано в пространстве контентов, и этот прямоугольник отображается в прямоугольник окна просмотра (заданный посредством свойств Origin (начало отсчета) и Size (размер)).
Окно просмотра задает место, где в конечном итоге будут нарисованы контенты, создавая базовый элемент мозаики для этой кисти. Если значение DestinationUnits равно UserSpaceOnUse, то свойства Origin и Size рассматривают в локальном пространстве на время применения. Если вместо этого значение DestinationUnits равно ObjectBoundingBox, то свойства Origin и Size рассматривают в координатном пространстве, где (0,0) это левый верхний угол ограничивающего окна объекта, визуализируемого кистью, а (1,1) это правый нижний угол того же окна. Например, рассмотрим заливаемый объект RectangleGeometry, нарисованный от (100,100) до (200,200). В этом примере, если DestinationUnits имеет значение ObjectBoundingBox, то Origin, равное (0,0), и Size, равное (1,1), будут описывать всю область контента. Если Size пусто, то эта «кисть» ничего не визуализирует.
Окно видимости ViewBox задают в пространстве контентов. Этот прямоугольник трансформируют, чтобы вписать его в окно просмотра, в соответствии со свойствами «выравнивание» и свойством «растяжение». Если «растяжение» равно «none», то контенты не подвергаются масштабированию. Если свойство «растяжение» имеет значение Fill (залито), то окно видимости масштабируют независимо в направлениях X и Y, чтобы придать ему такой же размер, как у окна просмотра. Если «растяжение» имеет значение Uniform или UniformToFill, то логика аналогична, но размеры X и Y масштабируют однородно, сохраняя форматное отношение контентов. Если «растяжение» имеет значение Uniform, то окно видимости масштабируют, чтобы придать ему более ограниченный размер, равный размеру окна просмотра. Если «растяжение» имеет значение UniformToFill, то окно видимости масштабируют, чтобы придать ему менее ограниченный размер, равный размеру окна просмотра. Другими словами, как Uniform, так и UniformToFill сохраняет форматное отношение, но Uniform гарантирует, что все окно видимости находится внутри окна просмотра (потенциально оставляя участки окна просмотра непокрытыми окном видимости), а UniformToFill гарантирует, что все окно просмотра заполнено окном видимости (потенциально заставляя участки окна видимости быть вне окна просмотра). Если окно видимости пусто, то никакое растяжение (Stretch) не применяется. Заметим, что выравнивание применяется даже в этом случае, и оно позиционирует «точечное» окно видимости.
На фиг.18 показаны представления единичного элемента 1800 мозаики в графике, визуализируемой при различных установках растяжения, в том числе элемент 1800 мозаики, где установлено растяжение, равное none (отсутствие). Элемент 1802 мозаики представляет растяжение, имеющее значение Uniform, элемент 1804 мозаики представляет растяжение, имеющее значение UniforfToFill, и элемент 1806 мозаики представляет растяжение, имеющее значение Fill.
Определив окно просмотра (на основании DestinationUnits) и определив размер окна видимости (на основании Stretch), нужно позиционировать окно видимости в окне просмотра. Если окно видимости имеет такой же размер, что и окно просмотра (если Stretch равно Fill, или если оно просто случайно оказалось с одним из трех других значений Stretch), то окно видимости позиционируется в начале отсчета, чтобы совпадать с окном просмотра. В противном случае применяются выравнивание по горизонтали и выравнивание по вертикали. На основании этих свойств окно видимости выравнивают в направлениях X и Y. Если «выравнивание по горизонтали» принимает значение Left, то левый край окна видимости совмещают с левым краем окна просмотра. Если это свойство принимает значение Center, то центр окна видимости совмещают с центром окна просмотра, а если Right, то совмещают правые края. Тот же процесс применяют для направления Y.
Если окно видимости равно (0,0,0,0), его считают неустановленным, в связи с чем рассматривают свойство ContentUnits. Если свойство ContentUnits принимает значение UserSpaceOnUse, то никакого масштабирования или смещения не производят и вырисовывают контенты в окне просмотра без какой-либо трансформации. Если ContentUnits принимает значение ObjectBoundingBox, то начало отсчета контента совмещают с началом отсчета окна просмотра и масштабируют контенты по ширине и высоте ограничивающего окна объекта.
При заливке пространства с помощью кисти визуала контенты отображаются в окно просмотра, как описано выше, и отсекаются по окну просмотра. Получается базовый элемент мозаики для заливки, а остальное пространство заливают в зависимости от значения TileMode кисти. Наконец, применяют трансформацию кисти, если таковая установлена, ее производят после всех других операций отображения, масштабирования, смещения и пр. Свойство TileMode перечислимого типа используют для описания, заливать ли и как заливать пространство кистью, с которым связано это свойство. Кисть, которую можно снабдить элементом мозаики, имеет заданный прямоугольник элемента мозаики, и этот элемент мозаики имеет базовое местоположение в заливаемом пространстве. Остальное пространство заливают в зависимости от значения TileMode. На фиг.19 показано представление иллюстративной графики с различными установками TileMode, включая «None» 1900, «Tile» 1902, «FlipX» 1904, «FlipY» 1906 и «FlipXY» 1908. Левый верхний элемент мозаики в различных иллюстративных графиках представляет собой базовый элемент мозаики.
На фиг.20 представлен процесс генерации пикселей для этой кисти. Заметим, что логика, описанная на фиг.20, является лишь одним возможным вариантом реализации логики, и следует понимать, что допустимы другие, в том числе более эффективные, варианты. Например, наверняка существуют более эффективные способы обработки данных, например, когда контент не вырисовывают при каждом повторе, причем элемент мозаики вырисовывают и кэшируют. Однако фиг.20 предоставляет простое описание.
В общем случае, всякий раз при вырисовке контентов шаблона, создают новую систему координат. Начало отсчета и смещение каждого представления задают посредством свойств Origin и Size, отфильтрованных посредством свойств DestinationUnits и Transform.
Систему координат задают на основании свойства DestinationUnits. Для этого, если на этапе 2000 определяют, что свойство DestinationUnits имеет значение UserSpaceOnUse, то на этапе 2002 текущую систему координат на момент использования кисти назначают начальной системой координат. Если же на этапе 2000 определяют, что это свойство имеет значение ObjectBoundingBox, то на этапе 2004 используют ограничивающее окно геометрии, к которой применяется эта кисть, чтобы задать новую систему координат, в которой левый верхний угол ограничивающего окна отображается на (0,0), и левый нижний угол ограничивающего окна отображается на (1,1). В любом случае на этапе 2006, к этой системе координат применяют свойство Transform, которое фактически задает сетку.
На фиг.21 представлена сетка кисти визуала, задаваемая для элементов мозаики в кисти визуала. Первый круг представляет собой простую сетку, а второй круг получен трансформацией перекоса (Skew) в направлении Х, равного 47.
На этапе 2008 в каждой ячейке сетки вырисовывают визуал, что показано на фиг.22, где визуал вырисовывает соответствующие данные. Если на этапе 2010 определяют, что окно видимости задано, то на этапе 2012 визуал умещают в ячейку сетки в соответствии с атрибутами ViewBox, Stretch, HorizontalAlign, VerticalAlign. Свойства DestinationUnits и Transform используют для применения правильной трансформации, чтобы центрировать визуал в ячейке сетки.
Если ViewBox не задано, на этапе 2014 устанавливают новую систему координат для нарисовки контента.
Систему координат задают таким образом, чтобы ее начало отсчета совпадало с началом отсчета (Origin) данной конкретной ячейки сетки, в которой производится рисование.
На этапе 2018 применяют отсечение на основании свойства Size, чтобы этот элемент мозаики не был нарисован вне границ ячейки. Origin и Size соответствующим образом модифицируют на основании свойства DestinationUnits.
Затем модифицируют систему координат на основании свойства SourceUnits. Для этого если на этапе 2020 определяют, что свойство SourceUnits имеет значение ObjectBoundingBox, то на этапе 2022 применяют соответствующую трансформацию масштабирования, в противном случае, если оно равно UserSpaceOnUse, никакой новой трансформации не применяют. На этапе 2024 применяют свойство Transform, и на этапе 2026 вырисовывают контент.
Заметим, что если какая-либо составляющая свойства «размер» равна нулю, то ничего не рисуют, и если растяжение имеет значение None, то трансформацию окна видимости (ViewBox) задают так, чтобы одна единица в новой системе координат была равна одной единице в старой системе координат. Трансформация, по существу, превращается в смещение, зависящее от атрибутов выравнивания и размера окна видимости. Как описано выше, на этапах 2010 и 2012 свойства «растяжение» и «выравнивание» применяют только тогда, когда задано окно видимости. Окно видимости задает новую систему координат для контентов, а «растяжение» помогает задать, как отображать эти контенты в окно видимости. Опции выравнивания выравнивают окно видимости, но не контенты. Таким образом, например, если окно видимости задано равным "0 0 10 10" и что-то нарисовано в (-10,-10) и выравнено по левому верхнему углу, то это изображение будет отсечено.
Согласно фиг.15 кисть изображения можно рассматривать как частный случай кисти визуала. Хотя программа может создавать визуал, помещать в него изображение и присоединять его к кисти визуала, API для этих операций будет громоздким. Ввиду отсутствия необходимой системы координат контента элементы свойств ViewBox и ContentUnits уже не применяются.
public class System.Windows.Meda.ImageBrush: Brush
{
public ImageBrush(ImageData image);
public BrushMappingMode DestinationUnits { get; }
public Transform Transform { get; }
public Stretch Stretch { get; }
public HorizontalAlign HorizontalAlign { get; }
public VerticalAlign VerticalAlign {get; }
public Point Origin { get; }
public PointAnimationCollection OriginAnimations { get; }
public Size Size { get; }
public SizeAnimationCollection SizeAnimations { get; }
public ImageData ImageData { get; }
}
public class System.Window.Media.ImageBrushBuilder:
BrushBuilder
{
public ImageBrushBuilder();
public ImageBrushBuilder(ImageData image);
public ImageBrushBuilder(ImageBrush ib);
//DestinationUnits: по умолчанию - ObjectBoundingBox
public BrushMappingMode DestinationUnits { get; set; }
//Transform: по умолчанию - тождественное преобразование
public Transform Transform { get; set; }
//Stretch: по умолчанию - None
public Stretch Stretch { get; set;}
//HorizontalAlign: по умолчанию Center
public HorizontalAlign HorizontalAlign { get; set; }
//VerticalAlign: по умолчанию Center
public VerticalAlign VerticalAlign {get; set;}
//Origin: по умолчанию (0,0)
public Point Origin { get; set; }
public PointAnimationCollectionBuilder OriginAnimations
{ get; set; }
//Size: по умолчанию (1,1)
public Size Size { get; set; }
public SizeAnimationCollectionBuilder SizeAnimations
{ get; set; }
//ImageData: по умолчанию - null - ничего не нарисовано
public ImageData ImageData { get; set; }
}
Кисть девятиячеечной сетки NineGridBrush во многом аналогична кисти изображения ImageBrush за исключением того, что изображение деформируется в зависимости от размера. В сущности, кисть девятиячеечной сетки можно рассматривать как специализированный тип растяжения, в котором определенные части изображения растягиваются, тогда как другие (например, границы) - нет. Таким образом, в то время как в зависимости от размера изображения в кисти изображения осуществляется простое масштабирование, кисть девятиячеечной сетки обеспечивает неоднородное масштабирование до нужного размера. Единицы для немасштабированных областей являются пользовательскими единицами при применении кисти, т.е. ContentUnits (если бы он существовал для девятиячеечной кисти) следовало бы задать равным UserUnitsOnUse. Свойство Transform кисти можно использовать эффективно. Заметим, что в элементы границы входят края изображения.
Например, на фиг.23 показано изображение девятиячеечной сетки, увеличиваемое от первого примера 2302 до второго примера 2304, с четырьмя типами областей. Согласно фиг.23, чтобы сохранить форму границы, области, помеченные «а», расширяют по горизонтали, области, помеченные «b», расширяют по вертикали, области, помеченные «с», расширяют по горизонтали и по вертикали, и области, помеченные «d», не изменяют по размеру.
Figure 00000022
Figure 00000023
Согласно описанному в общих чертах выше объектная модель графики, отвечающая настоящему изобретению, включает в себя объектную модель трансформации (Transform), которая включает в себя типы трансформаций, представленных в иерархии, показанной на фиг.24, под базовым классом «трансформация». Эти разные типы компонентов, которые осуществляют трансформацию, могут включать в себя «список трансформаций» (TransformList), «трансформация переноса» (TranslateTransform), «трансформация поворота» (RotateTransform), «трансформация масштабирования» (ScaleTransform), «трансформация перекоса» (SkewTransform) и «матричная трансформация» (MatrixTransform). Отдельные свойства можно анимировать, например, разработчик программ может анимировать свойство «угол» (Angle) трансформации поворота.
Матрицы для 2-мерных расчетов представлены в виде матрицы 3×3. Для нужных трансформаций требуется только шесть значений вместо полной матрицы 3×3. Они снабжены именами и заданы следующим образом:
Figure 00000024
Матрица, умножаемая на точку, трансформирует эту точку из новой системы координат к предыдущей системе координат:
Figure 00000025
Трансформации могут быть вложенными до любого уровня. Применение каждой новой трансформации эквивалентно умножению ее справа на матрицу текущей трансформации:
Figure 00000026
Большинство мест в API не принимают матрицу (Matrix) непосредственно, но вместо этого используют класс «трансформация», поддерживающий анимацию.
Figure 00000027
Figure 00000028
Язык разметки и объектная модель векторной графики
В соответствии с аспектом настоящего изобретения предусмотрены язык разметки и объектная модель элементов, которые позволяют пользовательским программам и инструментам взаимодействовать со структурой 216 данных графа сцены, не требуя конкретного знания деталей уровня 212 API (фиг.2). В целом, предусмотрен язык разметки векторной графики, который содержит формат обмена совместно с простым форматом авторской системы на основе разметки для выражения векторной графики посредством объектной модели элементов. С помощью этого языка можно программировать разметку (например, контент типа HTML или XML). Затем, чтобы построить граф сцены, разметку анализируют и транслируют в соответствующие объекты уровня API визуалов, которые были описаны выше. На этом более высоком операционном уровне предусмотрены элементное дерево, система свойств и система презентаторов, которые берут на себя наиболее громоздкую обработку, тем самым снабжая конструкторов сцен простыми средствами, позволяющими конструировать даже весьма сложные сцены.
В целом, система векторной графики обычно предусматривает набор элементов «форма» и других элементов, объединение с системой общих свойств, систему группирования и наложения и двухуровневый подход (на уровне элементов и уровне ресурсов), что позволяет пользователю программировать таким образом, чтобы удовлетворять требованиям гибкости и производительности. Согласно одному аспекту настоящего изобретения объектная модель элементов для работы с векторной графикой коррелирует с объектной моделью графа сцены. Другими словами, система векторной графики и уровень API визуалов совместно пользуются набором ресурсов на уровне объектной модели элементов, например, объект «кисть» используется при вырисовке на API визуалов и также является типом свойства заливки на «форме» (Shape). Таким образом, язык разметки не только имеет элементы, коррелирующие с объектами графа сцены, но также совместно с уровнем API визуалов пользуется рядом ресурсов примитивов (например, кистями, трансформациями и т.д.). Система векторной графики также предоставляет и расширяет анимационные возможности уровня API визуалов, подлежащего широкому совместному использованию между уровнями.
Кроме того, как описано ниже, система векторной графики может программировать на разных профилях, или уровнях, включая уровень элементов или уровень ресурсов. На уровне элементов каждая из форм рисования представлена элементом того же уровня, что и остальные программируемые элементы в странице/экране. Это значит, что формы в полной мере взаимодействуют с системой презентаторов, событиями и свойствами. На уровне ресурсов системы векторной графики действуют в чистом формате ресурса аналогично традиционному метафайлу графики. Уровень ресурсов эффективен, но имеет несколько ограниченную поддержку каскадированных свойств, обработки событий и программируемости с тонкой детализацией. Таким образом, конструктор сцены имеет возможность балансировать между эффективностью и программируемостью, по мере необходимости.
Согласно одному аспекту настоящего изобретения система векторной графики на уровне ресурсов также коррелирует (соотносится) с уровнем API визуалов в том, что разметка уровня ресурсов в одной из реализаций выражается в виде кисти визуала. При анализе разметки ресурса создают объект «визуал». Объект «визуал» устанавливают равным VisualBrush (кисть визуала), которая может использоваться формами, элементами управления и другими элементами на уровне элементов.
На фиг.25 представлена иерархия 2500 классов элементов. Классы объектной модели языка разметки, отвечающей настоящему изобретению, представлены прямоугольниками с тенью и включают в себя класс 2502 формы, класс 2504 изображения, класс 2506 видео и класс 2508 холста. Элементы класса формы включают в себя прямоугольник 2510, полилинию 2512, многоугольник 2514, путь 2516, линию 2518 и эллипс 2520. Заметим, что в некоторых реализациях элемент круг может не присутствовать, что указано пунктирным прямоугольником 2522 на фиг.25, однако здесь в целях различных примеров элемент 2522 «круг» будет описан. Каждый элемент может включать в себя данные (свойства) заливки, данные обводки, данные отсечения, данные трансформации, данные эффекта фильтра и данные маски или быть связанным с ними.
Как описано ниже, формы соответствуют геометрии, вырисовываемой с унаследованными и каскадированными свойствами презентации. Свойства презентации используют для построения пера и кисти, необходимых для рисования форм. В одной реализации формы являются полными презентаторами, как и другие элементы управления. Однако в других реализациях класс 2508 холста может быть предусмотрен как контейнер для форм, и формы можно рисовать только тогда, когда они находятся в элементе холста. Например, для обеспечения легкости форм можно не разрешать присоединять к формам презентаторы. Вместо этого холст имеет присоединенный презентатор и рисует формы. Элементы холста описаны ниже более подробно.
Также, как описано ниже, класс изображения является более специфическим, чем форма, и, например, может включать в себя данные границы, которые могут быть сложными. Например, границу можно задать посредством одного цвета сверху, другого цвета по бокам, возможно, различных заданных значений толщины и других свойств. Для изображения или аналогичного оконного элемента, например текста или видео, можно задавать позицию, размер, поворот и масштаб. Заметим, что элементы «изображение» и «видео» могут существовать и быть показаны вне элемента холста и также наследовать от оконного элемента, например получать фон, границы и поддержку набивки от этого элемента.
Элемент «видео» позволяет воспроизводить видео (или аналогичную мультимедийную информацию) в отображаемом элементе. Таким образом, система векторной графики обеспечивает интерфейс разметки для уровня API, который бесшовно согласуется с разными видами мультимедийной информации, включая текст, двухмерную графику, трехмерную графику, анимацию, видео, неподвижные изображения и аудио. Это позволяет конструкторам, привыкшим работать с одними средами, легко интегрировать другие среды в приложения и документы. Система векторной графики также позволяет анимировать мультимедийную информацию таким же образом, что и другие элементы, опять же дает возможность конструкторам использовать мультимедийную информацию, как другие элементы, не жертвуя при этом коренной внутренней уникальностью каждого отдельного типа сред. Например, конструктор может использовать одну и ту же схему имен для вращения, масштабирования, анимации, наложения и других эффектов в разных типах сред, что позволяет конструкторам легко создавать очень богатые приложения, а также позволяет встраивать в них очень эффективную реализацию визуализации и наложения.
На фиг.26 показана одна реализация, в которой код разметки 2602 интерпретируется анализатором/транслятором 2604. В общем случае, анализатор/транслятор 2604 добавляет элементы к дереву элементов / системе свойств 208 (также представленному на фиг.2) и присоединяет презентаторы к этим элементам. Система презентаторов 210 берет дерево элементов 210 с присоединенными презентаторами и транслирует данные в объекты и вызовы на уровень 212 API визуала. Заметим, что транслировать нужно не все элементы, а только те, к которым присоединены презентаторы. В общем случае, элемент - это объект на уровне элементов, который участвует в системе свойств, обработки событий и системе компоновки/презентации. Анализатор ищет тэги и решает, помогают ли эти тэги задавать элемент или объект ресурса. В частном случае кисти визуала, одни и те же тэги можно интерпретировать как элементы или также можно интерпретировать как объекты ресурсов, в зависимости от контекста, где эти тэги находятся, например в зависимости от того, находятся ли они в сложном синтаксисе свойства или нет.
Согласно одному аспекту настоящего изобретения язык разметки предусматривает различные пути описания ресурса, включая формат простой строки и сложную систему записи объекта. Для формата простой строки анализатор/транслятор 2604 использует преобразователь 2608 типов для преобразования строки в соответствующий объект API визуалов. Например, в нижеследующей строке разметки, значение свойства Fill можно преобразовывать в объект «кисть» посредством преобразователя 2608 типов:
<Circle CenterX="10" CenterY="10" Radius="5" Fill="Red" />
Очевидно, что преобразование такой встроенной строки тэговой разметки с помощью простых строк параметров в объект «кисть» является непосредственным и обеспечивает конструктору сцены простой способ добавлять форму и ее атрибуты к сцене.
Однако случается так, что атрибут заливки слишком сложен, чтобы уместиться в простую строку. В этом случае для задания этого свойства используют сложный синтаксис свойства. Например, нижеследующий сложный синтаксис свойства описывает заливку круга с помощью градиента, а не чистого цвета, задавая цвета на различных остановках градиента (которые могут принимать значения от 0 до 1):
Figure 00000029
Экземпляр ресурса может быть представлен не только встроенным в разметку, но также может размещаться в другом месте (например, в разметке или файле, который может быть локальным или на удаленной сети и надлежащим образом загружаться), на который ссылаются по имени (например, текстовому имени, ссылке или другому подходящему идентификатору). Таким образом, конструктор сцены может повторно использовать элемент из элементного дерева в разных местах сцены, в том числе элементы, описанные с помощью сложного синтаксиса свойств.
Анализатор оперирует разметкой в сложном синтаксисе свойств, обращаясь, при необходимости, к преобразователю 2608 типов, а также согласуя заданные параметры со свойствами объекта, тем самым упрощая работу конструктора сцены. Таким образом, анализатор не просто задает объекты, но также задает атрибуты на объектах. Заметим, что анализатор фактически предписывает построителю создавать объекты, поскольку объекты являются неизменяемыми.
Поскольку уровень элементов и уровень API совместно используют одну и ту же модель визуализации, многие объекты, по существу, совпадают. Это повышает эффективность анализа/трансляции, а также позволяет языкам программирования разных типов (например, языкам, подобным C#) легко преобразовывать разметку в свой собственный синтаксис и наоборот. Заметим, что, согласно фиг.26, другой такой язык 2610 программирования может добавлять элементы в дерево 208 элементов или может напрямую взаимодействовать с уровнем 212 API визуалов.
Согласно фиг.26 и в соответствии с аспектом настоящего изобретения одну и ту же разметку 2602 можно использовать для программирования на уровне элементов и на уровне ресурсов. Согласно вышеописанному уровень элементов обеспечивает конструктору сцены полную программируемость, доступ к системе свойств, которая обеспечивает наследование (например, особенности типа таблицы стилей) и обработку событий (например, посредством которой к элементу можно присоединять код для изменения его внешнего вида, позиции и т.д. в порядке реакции на событие пользовательского ввода). Однако настоящее изобретение также предусматривает механизм уровня ресурсов, посредством которого конструкторы сцен могут существенно урезать дерево элементов и систему презентаторов и программировать непосредственно на уровне API визуалов. Для многих типов статических форм, изображений и т.п., где не требуются особенности уровня элементов, это обеспечивает более эффективный и легкий способ вывода соответствующего объекта. Для этого анализатор распознает, когда присутствует заливка типа «кисть визуала», и напрямую вызывает уровень 212 API с помощью данных 2612 уровня ресурсов для создания объекта. Другими словами, как показано на фиг.22, элементный уровень векторной графики анализируется в созданные элементы, подлежащие дальнейшей трансляции в объекты, тогда как ресурсный уровень векторной графики анализируется и непосредственно сохраняется эффективным способом.
Например, нижеследующая разметка непосредственно выводится из объектной модели для объекта «линейный градиент» и заливает пространство вне окружности с помощью кисти визуала. Контенты этой кисти визуала задаются внутренней разметкой. Заметим, что этот синтаксис обычно используется для выражения различных кистей, трансформаций и анимаций:
Figure 00000030
Заметим, что, хотя эти объекты, залитые с помощью кисти визуала, эффективно сохраняются, на данные уровня ресурсов (или созданные с их помощью объекты) можно ссылаться посредством элементов и части дерева 208 элементов, что в общем виде представлено на фиг.26. Для этого эти ресурсы кисти визуала следует снабжать именами (например, посредством имени, ссылки или другого подходящего идентификатора) и обеспечивать возможность ссылаться на них, наподобие других ресурсов, описанных с помощью сложного синтаксиса свойств.
Возвращаясь к объяснению холста, упомянутого выше в связи с одной альтернативной реализацией, можно облегчать формы и, таким образом, требовать, чтобы они содержались в холсте. В этой альтернативной реализации при визуализации контента он визуализируется на бесконечный аппаратно-независимый холст, с которым связана система координат. Элемент «холст» может, таким образом, позиционировать контент согласно абсолютным координатам. Элемент «холст» может в необязательном порядке задавать окно просмотра, которое задает отсечение, трансформацию, предпочтительное форматное отношение и способ отображения окна просмотра в родительское пространство. Если никакого окна просмотра не установлено, то элемент «холст» задает только группирование примитивов рисования и может устанавливать трансформацию, непрозрачность и другие атрибуты наложения.
Ниже приведен пример разметки для образца холста:
Figure 00000031
Заметим, что в одной реализации, когда координаты заданы без единиц, их рассматривают как «логические пиксели» по 96 на дюйм, и в вышеприведенном примере линия будет иметь 200 пикселей в длину. Помимо координат, другие свойства включают в себя ширину, высоту, выравнивание по горизонтали и по вертикали и окно видимости (ViewBox) (типа Rect (прямоугольник); по умолчанию не задано или (0,0,0,0), т.е. никакого выравнивания не производится, и свойства растяжения и выравнивания игнорируются). Как описано выше в общих чертах со ссылкой на фиг.18-20, другие свойства включают в себя растяжение, которое, когда не задано, сохраняет исходный размер или может принимать значение 1) Fill, при котором форматное отношение не сохраняется, и контент масштабируется для заполнения границ, установленных посредством top/left/width/height (верх/лево/ширина/высота), 2) Uniform, предусматривающее однородное масштабирование, пока изображение не уместится в границах, установленных посредством top/left/width/height (верх/лево/ширина/высота), или 3) UniformToFill, предусматривающее однородное масштабирование для заполнения границ, установленных посредством top/left/width/height (верх/лево/ширина/высота), и, при необходимости, отсечения.
Для дальнейшей корреляции с низкоуровневой объектной моделью свойство трансформации устанавливает новую систему координат для потомков элемента, тогда как свойство «отсечение» ограничивает область, в пределах которой контент можно рисовать на холсте, причем путь отсечения по умолчанию задан как ограничивающее окно. Свойство ZIndex можно использовать для задания порядка визуализации вложенных элементов «холст» в панели.
Окно видимости (ViewBox) задает новую систему координат для контентов, например, переопределяя протяженность и начало отсчета окна просмотра (ViewPort). Растяжение помогает задавать, как эти контенты отображаются в окно просмотра. Значение атрибута ViewBox - это список из четырех «безразмерных» чисел <min-x>, <min-y>, <width> и <height>, например, разделенных пробелом и/или запятой, и относится к типу Rect. Значение типа Rect окна видимости задает прямоугольник в пользовательском пространстве, который отображается в ограничивающее окно. Оно действует так же, как вставка scaleX и scaleY. Свойство растяжения (в случае, когда опция отлична от none) обеспечивает дополнительное управление для сохранения форматного отношения графики. Дополнительная трансформация применяется к потомкам данного элемента для получения указанного эффекта.
В вышеприведенном примере эффективный результат прямоугольника в вышеприведенном образце разметки по каждому правилу растяжения будет иметь вид:
None - от (100,600) до (200,650)
Fill - от (100,100) до (900,700)
Uniform - от (100,?) до (900,?) - новая высота будет 400, и будет центрирован на основании HorizontalAlign и VerticalAlign.
UniformToFill - от (?,100) до (?,700) Новая ширина равна 1200, и опять же будет центрирован на основании HorizontalAlign и VerticalAlign.
При наличии трансформации на холсте, оно, по существу, применяется над (например, в дереве) отображением в окно видимости. Заметим, что это отображение будет растягивать любые элементы на холсте, например окна, текст и т.д., но не формы. Далее, заметим, что если задано окно видимости, то холст уже не подгоняет свой размер к своим контентам, но имеет заданный размер. Если также заданы y-ширина и y-высота, то свойства растяжения/выравнивания используют, чтобы уместить окно видимости в заданные ширину и высоту.
К каждому элементу в объектной модели можно применять атрибут 'Clip' (отсечение). На некоторых элементах, особенно формах, это представляется непосредственно как общее свойство исполнения языка, тогда как на других (например, большинстве элементов управления) это свойство устанавливается через DinamicProperty (динамическое свойство).
В общем случае, путь отсечения ограничивает область, в пределах которой можно рисовать контент, что, в целом, представлено на фиг.27, где кнопка показана в необрезанном виде 2702 и в виде 2704, в котором задан путь отсечения (пунктирная линия представляет путь отсечения). В принципе, любые пути рисования, лежащие за пределами области, ограниченной активным в данный момент путем отсечения, не рисуются. Путь отсечения можно рассматривать как маску, в которой те пиксели, которые находятся вне пути отсечения, являются черными со значением альфа, равным нулю, а те пиксели, которые находятся внутри пути отсечения, являются белыми со значением альфа, равным единице (за возможным исключением сглаживания вдоль ребра силуэта).
Путь отсечения задают посредством объекта «геометрия» либо встроенным, либо, чаще, в секции ресурсов. Путь отсечения используют и/или ссылаются на него с использованием свойства "Clip" на элементе, что показано в нижеприведенном примере:
Figure 00000032
Заметим, что анимация свойства «отсечение» аналогична анимации трансформаций:
Figure 00000033
Путь рисуют, задавая данные «геометрии» и свойства визуализации, например, Fill (заливка), Stroke (обводка) и StrokeWidth (ширина обводки) на элементе Path (путь). Ниже приведен пример разметки для пути:
Figure 00000034
Строка «данные» пути относится к типу Geometry. Более развернутый и полный способ задания нарисованного пути предусматривает использование сложного синтаксиса свойств, который описан выше. Разметка (например, как в нижеприведенном примере) поступает непосредственно в описанные выше классы построителя геометрии:
Figure 00000035
Строку данных пути также описывают, используя следующую систему записи для описания грамматики строки данных пути:
*: 0 или более
+: 1 или более
?: 0 или 1
(): группирование
|: отделяет альтернативы
двойные кавычки окружают буквы
Ниже показана информация строки данных пути, описанная с помощью этой системы записи (заметим, что в одной реализации здесь может быть задано FillMode вместо свойства на уровне элементов):
Figure 00000036
Figure 00000037
Figure 00000038
Figure 00000039
Элемент «изображение» (фиг.25) указывает, что контенты полного файла подлежат визуализации в данный прямоугольник в текущей пользовательской системе координат. Изображение (указанное тэгом изображения) может относится к файлам растрового изображения, например PNG или JPEG, или к файлам с типом MIME "image/wvg", что изложено в следующем примере:
Figure 00000040
В нижеследующей таблице представлена информация по некоторым иллюстративным свойствам для изображений:
Имя Тип Ч/ЧЗ Значение по умолчанию Описание
Top BoxUnit Координата верхнего края изображения
Left BoxUnit Координата левого края изображения
Width BoxUnit Ширина изображения
Height BoxUnit Высота изображения
Source ImageData Источник изображения
Dpi Float 96 (?) Конечное DPI, используемое для задания размера
HorizontalAlign enum {
Left (?),
Center (?),
Right (?)
}
Center
VerticalAlign enum {
Top (?),
Middle (?),
Bottom (?)
}
Middle
Stretch enum Stretch None None: сохраняет исходный размер
{
None,
Fill,
Uniform,
UniformToFill
Fill: форматное отношение не сохраняется, и контент масштабируется, чтобы заполнить границы, установленные посредством tlbh
}
Uniform: масштабирует размер однородно, пока изображение не уместится в границах, установленных посредством tlbh
UniformToFill: масштабирует размер однородно, чтобы заполнить границы, установленные посредством tlbh
ReadyState Enum {
MetaDataReady,
Loading,
Loaded
LoadError
}
LoadCounter Int Чтение Null Счетчик, увеличивающийся, когда ReadyState принимает значение Loading
Name Strung Изменяемый текст для изображения
Согласно описанному выше формы соответствуют геометрии, нарисованной с помощью унаследованных и каскадированных свойств презентации. В нижеследующих таблицах приведен пример свойств формы для элементов основных форм, описанных выше (прямоугольник, эллипс, линия, полилиния, многоугольник). Заметим, что эти основные формы могут иметь свойства окантовки, свойства заливки и при использовании в качестве путей отсечения иметь характеристики наследования и применяться как к уровню элементов, так и к уровню ресурсов:
Имя Тип Ч/ЧЗ Значение по умолчанию Описание
Fill Brush ЧЗ null Координата верхней стороны прямоугольника
FillOpacity Float ЧЗ 1.0 Координата левой стороны прямоугольника
Stroke Brush ЧЗ null Ширина прямоугольника
StrokeOpacity Float ЧЗ 1.0 Высота прямоугольника
StrokeWidth BoxUnit ЧЗ 1 пиксель Ширина обводки. 1 пиксель = 1/96 дюйма
FillRule enum {
EvenOdd,
NonZero
}
ЧЗ EvenOdd FillRule указывает на алгоритм, который нужно использовать для определения, какие части холста включены в форму.
StrokeLineCap enum {
Butt,
Round,
Square,
Diamond
}
ЧЗ Butt StrokeLineCap задает форму, которую нужно использовать на конце открытых подпутей, когда они обведены.
StrokeLineJoint enum {
Miter,
Round,
Bevel
}
ЧЗ Miter StrokeLineJoin задает форму, которую нужно использовать на углах путей (или других векторных форм), обведенных, когда они обведены.
StrokeMiterLimit Float ЧЗ 4.0 Предел отношения MiterLength к StrokeWidth. Значение должно быть >=1
StrokeDashArray PointList ЧЗ null StrokeDashArray управляет шаблоном штрихов и промежутков, используемых для шаблонов штрихов и промежутков, используемых для обводки путей. <dasharray> содержит список элементов <number>, разделенных пробелами или запятыми, которые задают длины перемежающихся штрихов и промежутков в пользовательских единицах. Если предусмотрено нечетное число значений, то список значений повторяется, чтобы обеспечить четное число значений. Таким образом, массив штрихов обводки: 5 3 2 эквивалентен массиву штрихов обводки: 5 3 2 5 3 2.
StrokeDashOffset Point ЧЗ StrokeDashOffset задает расстояние в шаблоне штрихов, чтобы начать штрих.
Transform Transform ЧЗ null Transform устанавливает новую систему координат для потомка элемента
Clip Geometry ЧЗ null Clip ограничивает область, к которой можно применять раскрашивание на холсте. По умолчанию, путь отсечения задают как ограничивающее окно.
Ниже приведен пример синтаксиса разметки для прямоугольника:
Figure 00000041
Прямоугольник имеет следующие свойства в объектной модели (заметим, что прямоугольники допускают чтение/запись, имеют значения по умолчанию, равные нулю, поддерживают наследование и применяются как к уровню элементов, так и к уровню объектов):
Имя Тип Описание
Top BoxUnit Координата верхней стороны прямоугольника
Left BoxUnit Координата левой стороны прямоугольника
Width BoxUnit Ширина прямоугольника
Height BoxUnit Высота прямоугольника
RadiusX BoxUnit Для скругленных прямоугольников радиус эллипса по оси Х, используемого для скругления углов прямоугольника. Если задан отрицательный радиус по оси Х, то используется абсолютная величина радиуса
RadiusY BoxUnit Для скругленных прямоугольников радиус эллипса по оси Y, используемого для скругления углов прямоугольника. Если задан отрицательный радиус по оси Y, то используется абсолютная величина радиуса
Ниже приведен пример синтаксиса разметки для круга:
Figure 00000042
Круг имеет следующие свойства в объектной модели (заметим, что круги допускают чтение/запись, имеют значения по умолчанию, равные нулю, поддерживают наследование и применяются как к уровню элементов, так и к уровню объектов):
Имя Тип Описание
CenterX BoxUnit Х-координата центра круга
CenterY BoxUnit Y-координата центра круга
Radius BoxUnit Радиус круга
Ниже приведен пример синтаксиса разметки для эллипса:
Figure 00000043
Эллипс имеет следующие свойства в объектной модели (заметим, что круги допускают чтение/запись, имеют значения по умолчанию, равные нулю, поддерживают наследование и применяются как к уровню элементов, так и к уровню объектов):
Имя Тип Описание
CenterX Coordinate Х-координата центра эллипса
CenterY Coordinate Y-координата центра эллипса
RadiusX Length Радиус эллипса по оси Х. Если задан отрицательный радиус по оси Х, то используется абсолютная величина радиуса.
RadiusY Length Радиус эллипса по оси Y. Если задан отрицательный радиус по оси Y, то используется абсолютная величина радиуса.
Ниже приведен пример синтаксиса разметки для линии:
Figure 00000044
Линия имеет следующие свойства в объектной модели (заметим, что линии допускают чтение/запись, имеют значения по умолчанию, равные нулю, поддерживают наследование и применяются как к уровню элементов, так и к уровню объектов):
Имя Тип Описание
X1 BoxUnit Координата по оси Х начала линии. Значение по умолчанию равно 0.
Y1 BoxUnit Координата по оси Y начала линии. Значение по умолчанию равно 0.
X2 BoxUnit Координата по оси Х конца линии. Значение по умолчанию равно 0.
Y2 BoxUnit Координата по оси Y конца линии. Значение по умолчанию равно 0.
'Poliline' (полилиния) задает набор соединенных прямолинейных отрезков. Обычно полилиния задает открытую форму.
Ниже приведен пример синтаксиса разметки для полилинии:
Figure 00000045
Полилиния имеет следующие свойства в объектной модели (заметим, что полилинии допускают чтение/запись, имеют значения по умолчанию, равные null, поддерживают наследование и применяются как к уровню элементов, так и к уровню объектов):
Имя Тип Описание
Points PointCollection Точки, образующие полилинию. Значения координат заданы в пользовательской системе координат.
Элемент «многоугольник» задает замкнутую форму, содержащую набор соединенных прямолинейных отрезков. Ниже приведен пример синтаксиса разметки для прямоугольника:
Figure 00000046
Многоугольник имеет следующие свойства в объектной модели (заметим, что многоугольники допускают чтение/запись, имеют значения по умолчанию, равные null, поддерживают наследование и применяются как к уровню элементов, так и к уровню объектов):
Имя Тип Описание
Points PointCollection Точки, образующие многоугольник. Значения координат заданы в пользовательской системе координат. Если предоставлено нечетное количество координат, то элемент задан с ошибкой.
Грамматика для задания точек в элементах «полилиния» и «многоугольник» описана с помощью следующей системы записи:
*: 0 или более
+: 1 или более
?: 0 или 1
(): группирование
|: отделяет альтернативы
двойные кавычки окружают буквы
Ниже описано задание точек в элементах «полилиния» и «многоугольник» с использованием вышеприведенной системы записи:
Figure 00000047
Figure 00000048
Заключение
Как можно видеть из вышеприведенного подробного описания, предусмотрена система, способ и элементная/объектная модель, которая обеспечивает программный код различными механизмами взаимодействия с графом сцены. Система, способ и объектная модель просты в использовании, но отличаются мощностью, гибкостью и расширяемостью.
Хотя изобретение допускает различные модификации и альтернативные конструкции, определенные проиллюстрированные элементы его осуществления показаны на чертежах и были подробно описаны выше. Однако следует понимать, что раскрытые частные формы не призваны ограничивать изобретение, но, напротив, изобретение охватывает все модификации, альтернативные конструкции и эквиваленты, отвечающие сущности и объему изобретения.

Claims (27)

1. Система, реализованная на компьютере, в вычислительной среде для согласованного взаимодействия разработчиков компьютерной программы со структурой данных графа сцены для создания графики, причем упомянутая реализованная на компьютере система содержит
язык разметки, содержащий команды графики, причем команды графики содержат формат строки и представление объекта, при этом представление объекта содержит элементы графики из класса элементов графики;
объектную модель графики, содержащую класс элементов графики, причем класс элементов содержит класс формы, класс изображений, класс видео и класс холста, причем упомянутый класс элементов интегрирован с системой общих свойств;
преобразователь типов, выполненный с возможностью преобразовывать команды графики в формате строки в объект API визуалов,
анализатор/транслятор, причем
анализатор/транслятор выполнен с возможностью интерпретировать команды графики, причем команды графики содержат вызовы непосредственно кода, вызовы кода объектной модели, и при этом команды графики записаны с использованием упомянутого языка разметки; причем
анализатор/транслятор дополнительно выполнен с возможностью обращаться к преобразователю типов, который сконфигурирован преобразовывать команды графики в формате строки в объект API визуалов, причем
анализатор/транслятор дополнительно выполнен с возможностью интерпретировать код разметки и при интерпретации кода разметки добавлять элементы класса элементов графики к элементному дереву;
систему презентаторов, выполненную с возможностью транслировать элементные деревья графики в вызовы к интерфейсу прикладного программирования визуалов,
интерфейс прикладного программирования визуалов, выполненный с возможностью взаимодействия с системой презентаторов, взаимодействия с анализатором/транслятором, взаимодействия с вызовами непосредственно кода из языков программирования, причем
интерфейс прикладного программирования визуалов дополнительно выполнен с возможностью в ответ на запросы от системы презентаторов анализатора/транслятора создавать объекты в графе сцены, и
интерфейс отображения, выполненный с возможностью отображения графических объектов в графе сцены.
2. Система по п.1, отличающаяся тем, что элементы объектной модели элементов коррелируют с объектами объектной модели графа сцены.
3. Система по п.1, отличающаяся тем, что разметка включает в себя встроенный текст, содержащий строку, которая задает свойство элемента, и транслятор обменивается с преобразователем типов для преобразования упомянутой строки в свойство объекта.
4. Система по п.1, отличающаяся тем, что разметка содержит встроенный текст, содержащий синтаксис свойств, причем синтаксис свойств задает множество атрибутов объектов векторной графики.
5. Система по п.4, отличающаяся тем, что встроенный текст идентифицируется посредством ссылки, которая ссылается на другое место разметки.
6. Система по п.4, отличающаяся тем, что встроенный текст идентифицируется посредством ссылки, которая ссылается на файл.
7. Система по п.4, отличающаяся тем, что встроенный текст идентифицируется посредством ссылки, которая соответствует файлу, который можно загружать из удаленного пункта сети.
8. Система по п.1, отличающаяся тем, что разметка содержит встроенный текст, содержащий сложный синтаксис свойств, соответствующий графическому ресурсу.
9. Система по п.8, отличающаяся тем, что графический ресурс описывает объект «кисть визуала», транслятор обеспечивает данные уровня ресурсов для непосредственного обмена с уровнем интерфейса прикладного программирования визуалов для создания объекта раскраски визуала, соответствующего элементу, описанному сложным синтаксисом свойств.
10. Система по п.9, отличающаяся тем, что данные уровня ресурсов идентифицируются посредством ссылки, которая ссылается на другое место в разметке.
11. Система по п.9, отличающаяся тем, что данные уровня ресурсов идентифицируются посредством ссылки, которая ссылается на файл.
12. Система по п.9, отличающаяся тем, что данные уровня ресурсов идентифицируются посредством ссылки, которая ссылается на файл, который можно загружать из удаленного пункта сети.
13. Система по п.1, отличающаяся тем, что один из элементов объектной модели элементов включает в себя элемент «изображение».
14. Система по п.1, отличающаяся тем, что элемент «форма» класса форм включает в себя элемент «полилиния».
15. Система по п.1, отличающаяся тем, что элемент «форма» класса форм включает в себя элемент «многоугольник».
16. Система по п.1, отличающаяся тем, что элемент «форма» класса форм включает в себя элемент «путь».
17. Система по п.1, отличающаяся тем, что элемент «форма» класса форм включает в себя элемент «линия».
18. Система по п.1, отличающаяся тем, что элемент «форма» класса форм включает в себя элемент «эллипс».
19. Система по п.16, отличающаяся тем, что элемент «форма» класса форм включает в себя элемент «круг».
20. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные свойства «заливка».
21. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные свойства «обводка».
22. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные свойства «отсечение».
23. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные свойства «трансформация».
24. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные эффекта.
25. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные непрозрачности.
26. Система по п.1, отличающаяся тем, что элемент «форма» класса форм содержит данные режима смешивания.
27. Система по п.1, отличающаяся тем, что анализатор/транслятор запрашивает инициализацию по меньшей мере одного построителя для создания объектов.
RU2003114531/09A 2003-03-27 2003-05-16 Язык разметки и объектная модель для векторной графики RU2321892C2 (ru)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/401,717 US7486294B2 (en) 2003-03-27 2003-03-27 Vector graphics element-based model, application programming interface, and markup language
US10/401,717 2003-03-27

Publications (2)

Publication Number Publication Date
RU2003114531A RU2003114531A (ru) 2004-12-10
RU2321892C2 true RU2321892C2 (ru) 2008-04-10

Family

ID=23588917

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2003114531/09A RU2321892C2 (ru) 2003-03-27 2003-05-16 Язык разметки и объектная модель для векторной графики

Country Status (27)

Country Link
US (1) US7486294B2 (ru)
EP (1) EP1462998B1 (ru)
JP (1) JP4290477B2 (ru)
KR (1) KR100996738B1 (ru)
CN (1) CN1534476B (ru)
AT (1) ATE403198T1 (ru)
AU (1) AU2003204007B2 (ru)
BR (1) BR0302004A (ru)
CA (1) CA2428471C (ru)
CO (1) CO5460278A1 (ru)
DE (1) DE60322505D1 (ru)
EC (1) ECSP034609A (ru)
GT (1) GT200300184A (ru)
HK (1) HK1066311A1 (ru)
HR (1) HRP20030389B1 (ru)
HU (1) HUP0301289A3 (ru)
IL (1) IL155881A (ru)
MX (1) MXPA03004410A (ru)
MY (1) MY143630A (ru)
NO (1) NO328434B1 (ru)
NZ (1) NZ525857A (ru)
RO (1) RO123609B1 (ru)
RU (1) RU2321892C2 (ru)
SG (1) SG127696A1 (ru)
TR (1) TR200300696A2 (ru)
TW (1) TWI336042B (ru)
ZA (1) ZA200303553B (ru)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2538335C2 (ru) * 2009-02-17 2015-01-10 Конинклейке Филипс Электроникс Н.В. Объединение данных 3d изображения и графических данных
RU2541876C2 (ru) * 2009-04-30 2015-02-20 Майкрософт Корпорейшн Оптимизация производительности платформы визуализации данных
RU2554069C2 (ru) * 2010-06-03 2015-06-27 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Смоделированное видео с дополнительными точками обзора и повышенной разрешающей способностью для камер наблюдения за движением транспорта
US9250926B2 (en) 2009-04-30 2016-02-02 Microsoft Technology Licensing, Llc Platform extensibility framework
RU2608468C2 (ru) * 2011-07-20 2017-01-18 Функе Диджитал Тв Гайд Гмбх Легкая двумерная навигация базы данных видео
US10261529B2 (en) 2006-09-13 2019-04-16 Savant Systems, Llc Configuring a system of components using graphical programming environment having a zone map

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7619633B2 (en) 2002-06-27 2009-11-17 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
US7511718B2 (en) * 2003-10-23 2009-03-31 Microsoft Corporation Media integration layer
US7219340B2 (en) * 2003-10-23 2007-05-15 Microsoft Corporation Changeable class and pattern to provide selective mutability in computer programming environments
US7475061B2 (en) * 2004-01-15 2009-01-06 Microsoft Corporation Image-based document indexing and retrieval
US7729538B2 (en) * 2004-08-26 2010-06-01 Microsoft Corporation Spatial recognition and grouping of text and graphics
US7574048B2 (en) * 2004-09-03 2009-08-11 Microsoft Corporation Freeform digital ink annotation recognition
US7603624B2 (en) * 2004-10-21 2009-10-13 Microsoft Corporation System and method for styling content in a graphical user interface control
US8631347B2 (en) * 2004-11-15 2014-01-14 Microsoft Corporation Electronic document style matrix
US7570816B2 (en) * 2005-03-31 2009-08-04 Microsoft Corporation Systems and methods for detecting text
US7526129B2 (en) * 2005-06-23 2009-04-28 Microsoft Corporation Lifting ink annotations from paper
RU2005124030A (ru) * 2005-07-28 2007-02-10 Александр Михайлович Юров (RU) Способ визуальной адресации команд в дереве
WO2007016457A2 (en) 2005-07-29 2007-02-08 Bender Gary T Apparatuses, methods and systems for a composite multimedia content generator
US20070061349A1 (en) * 2005-09-15 2007-03-15 Microsoft Corporation Hierarchically describing shapes
US20070061351A1 (en) * 2005-09-13 2007-03-15 Microsoft Corporation Shape object text
US8001526B2 (en) * 2005-09-15 2011-08-16 Microsoft Corporation Hierarchical property storage
KR20070047463A (ko) * 2005-11-02 2007-05-07 삼성전자주식회사 장면 기반의 벡터 에니메이션 생성 장치
CN100428243C (zh) * 2005-12-14 2008-10-22 国际商业机器公司 用于在模型上实现动作的方法和系统
US9153125B2 (en) * 2005-12-20 2015-10-06 Savant Systems, Llc Programmable multimedia controller with programmable services
KR100735971B1 (ko) * 2006-01-17 2007-07-06 엘지전자 주식회사 홈 네트워크에서의 원격 화면 제어 방법
US7616203B1 (en) * 2006-01-20 2009-11-10 Adobe Systems Incorporated Assigning attributes to regions across frames
US7657340B2 (en) * 2006-01-31 2010-02-02 Dragon & Phoenix Software, Inc. System, apparatus and method for facilitating pattern-based clothing design activities
US7657341B2 (en) 2006-01-31 2010-02-02 Dragon & Phoenix Software, Inc. System, apparatus and method for facilitating pattern-based clothing design activities
US7460710B2 (en) * 2006-03-29 2008-12-02 Amazon Technologies, Inc. Converting digital images containing text to token-based files for rendering
US7962895B2 (en) * 2006-07-20 2011-06-14 Oracle America, Inc. Language for binding scalable vector graphics elements to java classes
US8130226B2 (en) * 2006-08-04 2012-03-06 Apple Inc. Framework for graphics animation and compositing operations
US9019300B2 (en) * 2006-08-04 2015-04-28 Apple Inc. Framework for graphics animation and compositing operations
FR2907574B1 (fr) * 2006-10-20 2009-01-16 Streamezzo Sa Procede de description de scene multimedia comprenant au moins une zone de rognage rectangulaire alignee sur des frontieres de pixels.
US7614003B2 (en) * 2006-10-23 2009-11-03 Adobe Systems Incorporated Rendering hypertext markup language content
US8490117B1 (en) 2006-10-23 2013-07-16 Adobe Systems Incorporated Bridging script engines
US8020089B1 (en) 2006-10-23 2011-09-13 Adobe Systems Incorporated Rendering hypertext markup language content
US8234392B2 (en) 2006-11-17 2012-07-31 Apple Inc. Methods and apparatuses for providing a hardware accelerated web engine
KR100803947B1 (ko) * 2006-12-01 2008-02-15 주식회사 코아로직 오픈 벡터그래픽 응용 프로그램 인터페이스 변환 장치와방법, 모바일 단말기, 및 그 방법이 기록된 기록매체
US20080158254A1 (en) * 2006-12-29 2008-07-03 Hong Jiang Using supplementary information of bounding boxes in multi-layer video composition
JP5010000B2 (ja) 2007-03-15 2012-08-29 ジーブイビービー ホールディングス エス.エイ.アール.エル. シーングラフ中のパラメータのアクセス性および制御のための方法およびシステム
US20080266288A1 (en) * 2007-04-27 2008-10-30 Identitymine Inc. ElementSnapshot Control
US7876336B2 (en) * 2007-07-02 2011-01-25 Autodesk, Inc. Scale-dependent rendering of natural media styles
US20090079744A1 (en) * 2007-09-21 2009-03-26 Microsoft Corporation Animating objects using a declarative animation scheme
JP2009129127A (ja) * 2007-11-22 2009-06-11 Fujitsu Ltd プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体
US20090193067A1 (en) * 2008-01-30 2009-07-30 Microsoft Corporation Server-based recalculation of vector graphics
US8760472B2 (en) * 2008-04-01 2014-06-24 Apple Inc. Pixel transforms
US8612485B2 (en) * 2008-08-11 2013-12-17 Sony Corporation Deferred 3-D scenegraph processing
US8314951B2 (en) 2008-09-26 2012-11-20 Kyocera Document Solutions Inc. Image processing apparatus, and computer-readable recording medium
JP5094667B2 (ja) * 2008-09-30 2012-12-12 京セラドキュメントソリューションズ株式会社 画像処理装置、画像処理方法及び画像処理プログラム
JP5007291B2 (ja) * 2008-09-30 2012-08-22 京セラドキュメントソリューションズ株式会社 画像処理装置、画像処理方法及び画像処理プログラム
JP5008714B2 (ja) 2009-12-15 2012-08-22 三菱電機株式会社 画像生成装置及び画像生成方法
JP5512449B2 (ja) * 2010-07-28 2014-06-04 富士フイルム株式会社 ページ記述データ処理装置、方法及びプログラム並びに印刷物生産方法
CN102054280B (zh) * 2010-11-29 2013-06-12 广东威创视讯科技股份有限公司 快速生成矢量图的方法及装置
CN102289834B (zh) * 2011-08-30 2013-06-12 北京瑞信在线系统技术有限公司 一种微动画编辑器及其编辑方法
US9563971B2 (en) 2011-09-09 2017-02-07 Microsoft Technology Licensing, Llc Composition system thread
US8756348B2 (en) 2011-09-14 2014-06-17 Barco N.V. Electronic tool and methods for meetings
EP3826300A1 (en) * 2011-09-14 2021-05-26 Barco N.V. Electronic tool and methods for meetings
US11258676B2 (en) 2011-09-14 2022-02-22 Barco N.V. Electronic tool and methods for meetings
WO2013037980A2 (en) 2011-09-14 2013-03-21 Barco N.V. Electronic tool and methods with audio for meetings
CN102662963A (zh) * 2012-03-08 2012-09-12 北京神州数码思特奇信息技术股份有限公司 一种元设施扩展方法及模块
US20130278607A1 (en) * 2012-04-20 2013-10-24 A Thinking Ape Technologies Systems and Methods for Displaying Animations on a Mobile Device
US20140300611A1 (en) * 2013-03-15 2014-10-09 Trigger Happy, Ltd. Web and native code environment modular player and modular rendering system
US20140357357A1 (en) 2013-05-30 2014-12-04 Microsoft Corporation Game bundle package
US9323514B2 (en) 2013-05-30 2016-04-26 Microsoft Technology Licensing, Llc Resource package indexing
US9766870B2 (en) 2013-05-30 2017-09-19 Microsoft Technology Licensing, Llc Bundle package generation
KR101527775B1 (ko) * 2013-07-11 2015-06-16 정은숙 Ifc 파일 고속 처리 시스템 및 방법
CN104572050A (zh) * 2013-10-18 2015-04-29 镇江鼎拓科技信息有限公司 一种基于saas的出版物平台图形生成方法
KR102140294B1 (ko) * 2014-01-16 2020-07-31 삼성전자주식회사 전자 장치의 광고 방법 및 그 전자 장치
US10423652B2 (en) * 2016-08-08 2019-09-24 Baidu Usa Llc Knowledge graph entity reconciler
US10455188B2 (en) 2016-11-18 2019-10-22 Microsoft Technology Licensing, Llc Correlating UI with CPU stacks for profiling sessions
JP6855348B2 (ja) * 2017-07-31 2021-04-07 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびダウンロード処理方法
CN109117051B (zh) * 2018-09-05 2021-05-11 广州视源电子科技股份有限公司 思维导图的展示方法、装置、设备及存储介质
US10839249B2 (en) * 2019-03-08 2020-11-17 International Business Machines Corporation Methods and systems for analyzing images utilizing scene graphs
CN110213265B (zh) * 2019-05-29 2021-05-28 腾讯科技(深圳)有限公司 图像获取方法、装置、服务器及存储介质
CN110297932B (zh) * 2019-06-28 2021-07-23 北京金山安全软件有限公司 确定矢量图中封闭图形的最大内接圆的方法、装置及电子设备
CN110427142A (zh) * 2019-07-29 2019-11-08 成都科鸿智信科技有限公司 一种基于Html5 canvas标签制作的特种设备监管平台用画图工具
US11176314B2 (en) * 2019-09-19 2021-11-16 Sap Se XML schema description code generator
US20220134222A1 (en) * 2020-11-03 2022-05-05 Nvidia Corporation Delta propagation in cloud-centric platforms for collaboration and connectivity
DE102022103909A1 (de) 2022-02-18 2022-07-14 FEV Europe GmbH Datenstruktur zum testen autonom fahrender kraftfahrzeuge
CN115309313A (zh) * 2022-08-09 2022-11-08 盈帜科技(常州)有限公司 一种二维场景海量矢量数据显示方法及设备

Family Cites Families (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4209852A (en) * 1974-11-11 1980-06-24 Hyatt Gilbert P Signal processing and memory arrangement
AU647086B2 (en) 1990-01-30 1994-03-17 Johnson Service Company Networked facilities management system
US5509115A (en) 1990-08-08 1996-04-16 Peerless Systems Corporation Method and apparatus for displaying a page with graphics information on a continuous synchronous raster output device
US5261041A (en) * 1990-12-28 1993-11-09 Apple Computer, Inc. Computer controlled animation system based on definitional animated objects and methods of manipulating same
US5852449A (en) * 1992-01-27 1998-12-22 Scientific And Engineering Software Apparatus for and method of displaying running of modeled system designs
AU4279893A (en) 1992-04-10 1993-11-18 Avid Technology, Inc. A method and apparatus for representing and editing multimedia compositions
US5987627A (en) 1992-05-13 1999-11-16 Rawlings, Iii; Joseph H. Methods and apparatus for high-speed mass storage access in a computer system
US5500933A (en) * 1993-04-28 1996-03-19 Canon Information Systems, Inc. Display system which displays motion video objects combined with other visual objects
DE69405388T2 (de) * 1993-05-10 1998-03-19 Taligent Inc Multimedia synchronisationssystem
US5555368A (en) * 1993-12-30 1996-09-10 Taligent Object-oriented multi-tasking view framework
US5912666A (en) * 1994-08-23 1999-06-15 Object Technology Licensing Corp. Object-oriented global cursor tool
US5745761A (en) 1994-12-15 1998-04-28 International Business Machines Corporation Advanced graphics driver architecture with extension capability
US5986667A (en) * 1994-12-22 1999-11-16 Apple Computer, Inc. Mechanism for rendering scenes using an object drawing subsystem
US5727141A (en) 1995-05-05 1998-03-10 Apple Computer, Inc. Method and apparatus for identifying user-selectable regions within multiple display frames
US5790130A (en) 1995-06-08 1998-08-04 Hewlett-Packard Company Texel cache interrupt daemon for virtual memory management of texture maps
US5930810A (en) * 1995-08-09 1999-07-27 Taylor Corporation Printing system with pre-defined user modifiable forms and local and remote printing
US5986675A (en) * 1996-05-24 1999-11-16 Microsoft Corporation System and method for animating an object in three-dimensional space using a two-dimensional input device
US5936632A (en) 1996-07-26 1999-08-10 Hewlett-Packard Co. Method for fast downloading of textures to accelerated graphics hardware and the elimination of extra software copies of texels
AU4334197A (en) * 1996-09-09 1998-03-26 Design Intelligence, Inc. Automatic layout and formatting of content for a design in medium
US6275857B1 (en) * 1996-10-30 2001-08-14 Microsoft Corporation System and method for freeing shared resources in a computer system
US5920325A (en) * 1996-11-20 1999-07-06 International Business Machines Corporation Prioritization of background display during animation
US6137499A (en) * 1997-03-07 2000-10-24 Silicon Graphics, Inc. Method, system, and computer program product for visualizing data using partial hierarchies
US6195694B1 (en) * 1997-03-13 2001-02-27 International Business Machines Corporation Server for reconfiguring control of a subset of devices on one or more kiosks
JP4726097B2 (ja) * 1997-04-07 2011-07-20 エイ・ティ・アンド・ティ・コーポレーション 適応制御を行うことができるmpegコード化オーディオ・ビジュアル対象物をインターフェースで連結するためのシステムおよび方法
US6160907A (en) 1997-04-07 2000-12-12 Synapix, Inc. Iterative three-dimensional process for creating finished media content
US6215495B1 (en) * 1997-05-30 2001-04-10 Silicon Graphics, Inc. Platform independent application program interface for interactive 3D scene management
US5924098A (en) 1997-06-30 1999-07-13 Sun Microsystems, Inc. Method and apparatus for managing a linked-list data structure
US6377263B1 (en) * 1997-07-07 2002-04-23 Aesthetic Solutions Intelligent software components for virtual worlds
US6314470B1 (en) * 1997-07-25 2001-11-06 Hewlett Packard Company System and method for asynchronously accessing a graphics system for graphics application evaluation and control
US6154215A (en) * 1997-08-01 2000-11-28 Silicon Graphics, Inc. Method and apparatus for maintaining multiple representations of a same scene in computer generated graphics
US6654931B1 (en) 1998-01-27 2003-11-25 At&T Corp. Systems and methods for playing, browsing and interacting with MPEG-4 coded audio-visual objects
US6272650B1 (en) * 1998-02-03 2001-08-07 Amazing Media, Inc. System and method for disambiguating scene graph loads
US6243856B1 (en) * 1998-02-03 2001-06-05 Amazing Media, Inc. System and method for encoding a scene graph
US6075532A (en) * 1998-03-23 2000-06-13 Microsoft Corporation Efficient redrawing of animated windows
US6266053B1 (en) * 1998-04-03 2001-07-24 Synapix, Inc. Time inheritance scene graph for representation of media content
US6570578B1 (en) 1998-04-03 2003-05-27 Avid Technology, Inc. System for automatic generation of selective partial renderings of complex scenes
US6237092B1 (en) * 1998-05-05 2001-05-22 International Business Machines Corp. Client-server system with central application management allowing an administrator to configure user and group contexts during application configuration without relaunching the application
US6631403B1 (en) 1998-05-11 2003-10-07 At&T Corp. Architecture and application programming interfaces for Java-enabled MPEG-4 (MPEG-J) systems
EP1090505A1 (en) * 1998-06-26 2001-04-11 General Instrument Corporation Terminal for composing and presenting mpeg-4 video programs
US6731314B1 (en) * 1998-08-17 2004-05-04 Muse Corporation Network-based three-dimensional multiple-user shared environment apparatus and method
US6487565B1 (en) * 1998-12-29 2002-11-26 Microsoft Corporation Updating animated images represented by scene graphs
US6411297B1 (en) * 1999-03-03 2002-06-25 Discreet Logic Inc. Generating image data
US6714201B1 (en) * 1999-04-14 2004-03-30 3D Open Motion, Llc Apparatuses, methods, computer programming, and propagated signals for modeling motion in computer applications
US6986101B2 (en) * 1999-05-06 2006-01-10 International Business Machines Corporation Method and apparatus for converting programs and source code files written in a programming language to equivalent markup language files
US6707456B1 (en) * 1999-08-03 2004-03-16 Sony Corporation Declarative markup for scoring multiple time-based assets and events within a scene composition system
US7184038B2 (en) * 1999-09-24 2007-02-27 Sun Microsystems, Inc. Using render bin parallelism for rendering scene graph based graphics data
US6765571B2 (en) * 1999-09-24 2004-07-20 Sun Microsystems, Inc. Using a master controller to manage threads and resources for scene-based rendering
US6538656B1 (en) * 1999-11-09 2003-03-25 Broadcom Corporation Video and graphics system with a data transport processor
US7546577B2 (en) * 1999-12-06 2009-06-09 Axiomatic Design Software, Inc. Method and apparatus for producing software
US7102651B1 (en) 1999-12-22 2006-09-05 Adobe Systems Incorporated Hierarchical 2-D color compositing with blending mode and opacity controls at all levels
US7103581B1 (en) 2000-01-13 2006-09-05 Hewlett-Packard Development Company, L.P. System and method for pricing print jobs
US6833840B2 (en) 2000-02-14 2004-12-21 Optibase Ltd PROTO implementation in MPEG-4
JP2001273520A (ja) * 2000-03-23 2001-10-05 Famotik Ltd マルチメディアドキュメント統合表示システム
US6751655B1 (en) * 2000-04-18 2004-06-15 Sun Microsystems, Inc. Method and apparatus for transport of scenegraph information across a network
US6990653B1 (en) * 2000-05-18 2006-01-24 Microsoft Corporation Server-side code generation from a dynamic web page content file
US6717599B1 (en) * 2000-06-29 2004-04-06 Microsoft Corporation Method, system, and computer program product for implementing derivative operators with graphics hardware
US20020019844A1 (en) 2000-07-06 2002-02-14 Kurowski Scott J. Method and system for network-distributed computing
WO2002013002A2 (en) * 2000-08-04 2002-02-14 Intrinsic Graphics, Inc. Development of graphics hardware and software
US6675230B1 (en) * 2000-08-22 2004-01-06 International Business Machines Corporation Method, system, and program for embedding a user interface object in another user interface object
US6910044B2 (en) * 2000-09-20 2005-06-21 Sap Aktiengesellschaft Method and apparatus for structuring, maintaining, and using families of data
US20020078255A1 (en) * 2000-10-17 2002-06-20 Shankar Narayan Pluggable instantiable distributed objects
US6636211B2 (en) * 2000-12-15 2003-10-21 Dassault Systemes CAD/CAM feature tree with manipulatable 3D miniatures
US6732109B2 (en) * 2001-01-31 2004-05-04 The Eon Company Method and system for transferring information between a user interface and a database over a global information network
WO2002076058A2 (en) * 2001-03-21 2002-09-26 Research In Motion Limited Method and apparatus for providing content to media devices
FR2825556A1 (fr) * 2001-05-31 2002-12-06 Koninkl Philips Electronics Nv Generation d'une description dans un langage de balisage d'une structure d'un contenu multimedia
US7069503B2 (en) * 2001-06-04 2006-06-27 Murata Kikai Kabushiki Kaisha Device and program for structured document generation data structure of structural document
US7305011B2 (en) * 2001-06-14 2007-12-04 International Business Machines Corporation Periodic broadcast and location of evolving media content with application to seminar and stroke media
US7203692B2 (en) 2001-07-16 2007-04-10 Sony Corporation Transcoding between content data and description data
US7064766B2 (en) * 2001-10-18 2006-06-20 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
US6919891B2 (en) * 2001-10-18 2005-07-19 Microsoft Corporation Generic parameterization for a scene graph
US7161599B2 (en) * 2001-10-18 2007-01-09 Microsoft Corporation Multiple-level graphics processing system and method
JP4297784B2 (ja) 2001-10-23 2009-07-15 サムスン エレクトロニクス カンパニー リミテッド マークアップ文書とavデータとが記録された情報保存媒体、その記録方法、再生方法及び再生装置
US7055092B2 (en) * 2001-12-05 2006-05-30 Canon Kabushiki Kaisha Directory for multi-page SVG document
US20030110297A1 (en) * 2001-12-12 2003-06-12 Tabatabai Ali J. Transforming multimedia data for delivery to multiple heterogeneous devices
US20040110490A1 (en) * 2001-12-20 2004-06-10 Steele Jay D. Method and apparatus for providing content to media devices
KR100453225B1 (ko) * 2001-12-26 2004-10-15 한국전자통신연구원 3차원 가상 현실 구현을 위한 클라이언트 시스템과 이를이용한 가상 현실 구현 방법
US7076332B2 (en) * 2002-01-18 2006-07-11 National Instruments Corporation System and method for invoking execution of a sequence of operations that includes motion control, machine vision, and data acquisition (DAQ) functionality
AU2003202131A1 (en) * 2002-02-04 2003-09-02 Mobileaware Technologies Limited Document transformation
US20030210267A1 (en) 2002-05-13 2003-11-13 Kylberg Robert Lee Systems and methods for providing asynchronous client rendering in a graphical user interface (GUI) environment
WO2004008316A2 (en) * 2002-07-11 2004-01-22 Raytheon Company System and method for asynchronous storage and playback of a system state
WO2004008303A2 (en) * 2002-07-12 2004-01-22 Raytheon Company Scene graph based display for desktop applications
US20040216139A1 (en) * 2002-08-21 2004-10-28 Rhoda Merlin A. System controlling test/measurement devices on a network using markup language documents and methods thereof
US7240346B2 (en) * 2002-11-13 2007-07-03 Microsoft Corporation Method and system for accessing drawing resources
US7466315B2 (en) * 2003-03-27 2008-12-16 Microsoft Corporation Visual and scene graph interfaces
US7088374B2 (en) * 2003-03-27 2006-08-08 Microsoft Corporation System and method for managing visual structure, timing, and animation in a graphics processing system
US7126606B2 (en) * 2003-03-27 2006-10-24 Microsoft Corporation Visual and scene graph interfaces
US7412455B2 (en) * 2003-04-30 2008-08-12 Dillon David M Software framework that facilitates design and implementation of database applications
US8051389B2 (en) * 2003-08-26 2011-11-01 Hewlett-Packard Development Company, L.P. Methods of displaying resources of overlapping but separate hierarchies
US7012606B2 (en) * 2003-10-23 2006-03-14 Microsoft Corporation System and method for a unified composition engine in a graphics processing system

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261529B2 (en) 2006-09-13 2019-04-16 Savant Systems, Llc Configuring a system of components using graphical programming environment having a zone map
US10962996B2 (en) 2006-09-13 2021-03-30 Savant Systems, Inc. Configuring a system of components using graphical programming environment
RU2538335C2 (ru) * 2009-02-17 2015-01-10 Конинклейке Филипс Электроникс Н.В. Объединение данных 3d изображения и графических данных
RU2541876C2 (ru) * 2009-04-30 2015-02-20 Майкрософт Корпорейшн Оптимизация производительности платформы визуализации данных
US9250926B2 (en) 2009-04-30 2016-02-02 Microsoft Technology Licensing, Llc Platform extensibility framework
RU2554069C2 (ru) * 2010-06-03 2015-06-27 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Смоделированное видео с дополнительными точками обзора и повышенной разрешающей способностью для камер наблюдения за движением транспорта
RU2608468C2 (ru) * 2011-07-20 2017-01-18 Функе Диджитал Тв Гайд Гмбх Легкая двумерная навигация базы данных видео

Also Published As

Publication number Publication date
TWI336042B (en) 2011-01-11
HU0301289D0 (en) 2003-07-28
EP1462998A3 (en) 2005-12-07
CA2428471A1 (en) 2004-09-27
IL155881A (en) 2008-11-03
KR100996738B1 (ko) 2010-11-25
JP4290477B2 (ja) 2009-07-08
HRP20030389A2 (en) 2005-04-30
JP2004295857A (ja) 2004-10-21
TR200300696A2 (tr) 2004-10-21
AU2003204007B2 (en) 2009-09-17
HRP20030389B1 (en) 2009-06-30
GT200300184A (es) 2006-04-21
CN1534476B (zh) 2010-05-26
MXPA03004410A (es) 2004-09-29
AU2003204007A1 (en) 2004-10-14
ECSP034609A (es) 2004-10-26
ZA200303553B (en) 2004-04-22
US20040189667A1 (en) 2004-09-30
NO328434B1 (no) 2010-02-15
HUP0301289A2 (hu) 2004-10-28
CO5460278A1 (es) 2004-11-30
MY143630A (en) 2011-06-15
NZ525857A (en) 2005-06-24
DE60322505D1 (de) 2008-09-11
KR20040086042A (ko) 2004-10-08
EP1462998A2 (en) 2004-09-29
HK1066311A1 (en) 2005-03-18
CA2428471C (en) 2012-09-04
US7486294B2 (en) 2009-02-03
SG127696A1 (en) 2006-12-29
ATE403198T1 (de) 2008-08-15
HUP0301289A3 (en) 2011-04-28
NO20032205D0 (no) 2003-05-15
RO123609B1 (ro) 2014-07-30
BR0302004A (pt) 2004-11-03
CN1534476A (zh) 2004-10-06
EP1462998B1 (en) 2008-07-30
IL155881A0 (en) 2003-12-23
NO20032205L (no) 2004-09-28
TW200419376A (en) 2004-10-01

Similar Documents

Publication Publication Date Title
RU2321892C2 (ru) Язык разметки и объектная модель для векторной графики
RU2324229C2 (ru) Визуальный и пространственный графические интерфейсы
JP4796500B2 (ja) ベクトルグラフィックスのためのマークアップ言語およびオブジェクトモデル
JP4796499B2 (ja) 映像およびシーングラフインターフェイス
AU2004279179A1 (en) Visual and scene graph interfaces

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20080517

NF4A Reinstatement of patent

Effective date: 20090920

MM4A The patent is invalid due to non-payment of fees

Effective date: 20130517