视件和场景图接口的制作方法

文档序号:6475138阅读:263来源:国知局

专利名称::视件和场景图接口的制作方法
技术领域
:本发明一般涉及计算机系统,尤其涉及对图形和其它视频信息的处理以在计算机系统上显示。
背景技术
:正在达到在计算机系统上访问图形的传统立即模式模型的极限,这部分是由于存储器和总线的速度不能跟上主处理器和/或图形处理器的前进。通常,用于准备帧的现有(例如,WM_PAINT)模型需要太多的数据处理,以当需要复杂图形效果时能跟上硬件的刷新速率。结果,当用常规的图形模型尝试复杂的图形效果时,不完成对下一帧及时导致感觉到视觉效果的变化,而是跨越不同的帧来添加变化,导致了可视且显著不合需要的结果。一种用于控制图形输出的新模型在美国专利申请序列号10/184,795、10/184,796、10/185,775、10/401,717、10/402,322和10/402,268中描述,这些申i青被转让给本发明的受让人,并通过引用结合于此。这个新的模型提供了图形处理技术中若干重大的改进。例如,美国序列号10/184,795通常针对一种多级图形处理系统和方法,其中较高级组件(例如,操作系统的组件)以相对低的操作速率执行构建场景图、更新动画参数和遍历该场景图的数据结构的计算密集型方面,以将简化的数据结构和/或图形命令传递给低级组件。因为高级处理极大地简化了数据,因此该低级组件能够以较快的速率(相对于高级组件),例如对应于图形子系统的帧刷新速率的速率来操作,以将数据处理成用于图形子系统的恒定输出输出。当使用动画时,不再必须重新画出变化的整个场景,而是低级处理可在必要时内插参数间隔以获得瞬时值,当该值被再现时它为每一帧提供微小改变的场景,从而提供了平滑的动画。美国序列号10/184,796描述了一种参数化的场景图,它提供多变的(动画)值和参数化的图形容器,使得要想绘制图形的程序代码(例如,应用程序或操作系统组件)能够选择性地改变该场景图描述的某些方面,而保持其它方面原封不动。该程序代码还能够以可能不同的参数来重新使用该场景图的已构建部分。如所能理解的,通过场景图的现有部分的参数化和/或重新使用来容易地改变所显示的项目的外观的能力提供了在整个图形处理效率方面的实际的增长。美国序列号10/185,775—般描述了用于通过场景图中的对象和数据来储存视觉信息的高速缓存数据结构和相关机制。该数据结构通常关联于智能地控制如何填充和使用其中的视觉信息的机制。例如,除非由应用程序特别地请求,否则存储在数据结构中的绝大部分信息不具有对它的外部引用,这允许信息被优化或处理。如可被理解的,这就提供了资源的效率和保存,例如,高速缓存数据结构中的数据能够被处理成为一种更简洁和/或减少对于随后的重复处理的需要的不同格式,如位图或其它的后处理结果。尽管上述改进提供了图形处理技术中的实际益处,然而仍然需要一种使程序能够以直接的方式来有效地使用这种改进的图形模型及其其它相关改进的方法。所需要的是一种更全面的直接模型,以使程序能够利用由该改进的图形模型提供的许多特征和图形处理能力,以及由此以有效的方式输出复杂的图形和音视频数据。发明概述简而言之,本发明提供一种对象模型,以及一种用于以允许程序代码开发者始终如一地与场景图数据结构接口来产生图形的方式来访问该对象模型的应用编程接口(API)。该模型中的基本对象和API集是一个视件,它向用户表示一种虚拟表面;该场景图由视件对象构建。这样的视件包括容器视件对象、保留视件对象、绘图视件对象和其它视件对象。视件本身能够束缚住资源对象,如裁剪对象、变换对象等等,并且某些类型的视件(如DrawingVisual(绘图视件)、RetainedVisual(保留视件))能够束缚住绘图指令列表,它们引用资源对象,如图像、画刷和/或渐变。场景图中的大部分资源对象一旦被创建就是不可变的,即,它们一旦被创建就不能被改变。对于开发者期望容易地改变的那些对象,可变性由可改变图案和实现提供,如在与本申请同时提交的、名为"ChangeableClassandPatterntoProvideSelectiveMutabilityinComputerProgrammingEnvironments(在计算机编程环境中提供选择性可变性的可修改类和图案)"的共同待决的美国专利申请中所描述的,该申请转让给本发明的受让人并通过引用结合于此。通过该应用编程接口,程序代码将诸如几何数据、图像数据、动画数据和其它数据等绘元书写到该视件。例如,程序代码将诸如画线指令、画几何结构指令、画位图指令等绘元书写到该视件中。这些绘图指令经常与类似描述如何画出路径的几何数据的复杂数据相结合,并且它们还可引用类似位图、视频等的资源。该代码还能够指定视件上的裁剪、不透明性和其它属性,并且提供了用于入栈和出栈变换、透明性和命中测试标识的方法。另外,视件可以参与命中测试。该程序代码还与视件接口以添加子视件,并因此构建起一个分层场景图。视件管理器处理(如,遍历或发送)该场景图以向更低级图形组件提供丰富的图形数据。容器视件提供子视件的集合,并且在一个实施例中,,仅仅是能够定义分层结构的视件。容器视件上的子视件的集合允许子视件的任意插入、移除和重新排序。绘图视件用向调用者返回绘图上下文(例如,对绘图上下文对象的引用)的打开调用来打开。通常,绘图上下文是一种临时助手对象,它用于填充视件。然后,程序代码使用该绘图上下文以向视件添加绘元。该打开调用可清除视件的内容(子视件),或者追加调用可用于打开一个视件以追加到当前视件。除了接收静态值作为绘图参数外,绘图上下文能够用动画对象来填充。保留视件以与绘制视件类似的方式操作,除了其绘图上下文是在系统请求它被填充时,而不是程序代码希望填充时来填充的。例如,如果在再现场景时需要一个特定视件的内容,系统将调用IRetainedVisual.Render来填充该视件的内容,从而替换已经在存储器中的任何内容。这样,不同的图元类型可使用绘图上下文而被绘制到一个视件中,包括几何结构、图像数据和视频数据。几何结构是一种类的类型,它定义矢量图骨架而没有描边或填充,如矩形。每个几何结构对象对应于简单形状(LineGeometry(线条几何形状)、EllipseGeometry(椭圆几何形状)、RectangleGeometry(矩形几何形状))、复杂的单一形状(PathGeometry(路径几何形状))、或者具有指定的组合操作(如,并、交等等)的这种形状的列表(GeometryList(几何形状列表))。这些对象形成类分层结构。还存在绘制频繁使用的结合结构类型的快捷方式,例如DrawRectangle(画矩形)方法。当绘制几何结构时,可指定画刷或笔。画刷对象定义如何图形地填充平面,并且存在画刷对象的类分层结构。笔也具在其上指定的画刷,它描述了如何填充描边区域。一种特定类型的画刷对象(Visua旧rush(视件画刷))能够引用视件来定义该画刷如何被绘制。绘图画刷使得能够用其它形状和画刷的组合来填充形状或者控件。当结合附图阅读以下详细描述时,可以清楚其它益处和优点,附图中附图的简要说明图1是表示可在其中结合本发明的示例性计算机系统的框图2是通常表示可在其中结合本发明的图形层体系结构的框图3是根据本发明的一个方面,用于诸如通过遍历场景图来处理场景图,以提供图形命令和其它数据的视件和关联组件的场景图的表示;图4是根据本发明的一个方面构造的确认视件、绘图视件和相关联的指令列表的场景图的表示;图5是根据本发明的一个方面的对象模型的视件类的表示;图6是根据本发明的一个方面的对象模型的各种其它对象的表示;图7是根据本发明的一个方面的变换类分层结构的表示;图8和9分别是根据本发明的一个方面的几何縮放和非均匀縮放中的视件数据的变换的表示。图10是根据本发明的一个方面的对象模型的几何结构类的表示;图11是根据本发明的一个方面的PathGeometry结构的表示;图12是根据本发明的一个方面,示出由图元产生的示例图形的视件和指令列表的场景图的表示;图13是根据本发明的一个方面的对象模型的画刷类。图14和15是根据本发明的一个方面从线性渐变画刷对象中的数据得出的再现图形的表示;图16是根据本发明的一个方面从径向渐变画刷对象中的数据得出的再现图形的表示;图17是根据本发明的一个方面的再现的九网格画刷对象;图18是根据本发明的一个方面从具有的各种拉伸值得出的再现图形的表示;图19是根据本发明的一个方面从具有的各种拼贴值得出的再现图形的表示;图20是根据本发明的一个方面从视件画刷对象中的数据得出的网格和变换的网格的表示;图21是根据本发明的一个方面,其中具有从视件绘制的再现图形的网格和变换的网格的表示。详细描述示纖漠脾着图1示出可在其中实现本发明的一个适当的计算系统环境100的例子。计算系统环境100仅仅是适当的计算机系统环境的例子,并且不意味着限制本发明使用范围和功能。也不应当将计算环境100解释为对在示例性操作环境100中示出的组件之一或其组合具有任何依赖或要求。本发明可操作于各种其它通用或专用计算系统环境或配置。适合于本发明使用的众所周知的计算系统、环境和/或配置的例子包括(但不局限于)个人计算机、服务器计算机、手提或膝上设备、图形输入板设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子产品、网络PC、小型计算机、大型计算机、包括以上系统或设备的任一个的分布式计算环境等等。本发明可以在例如由计算机执行的程序模块等计算机可执行指令的通用上下文中描述。通常,程序模块包括例程、程序、对象、组件、数据结构等等,它们完成特定的任务或者实现特定的抽象数据类型。本发明还可在分布式计算环境中实施,其中任务由通过通信网络连接的远程处理设备实现。在分布式计算环境中,程序模块可位于包括存储器储存设备的本地或远程计算机存储介质中。参照图1,用于实现本发明的一个示例性系统包括计算机110形式的通用计算设备。计算机110的组件可包括(但不局限于)处理单元120、系统存储器130、以及将包括系统存储器的各种系统组件耦合到处理单元120的系统总线121。系统总线121可以是若干种类的总线结构的任何一种,包括存储总线或存储控制器、外围总线、以及使用各种总线体系结构中的任一种的局部总线。作为例子,但不是限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线、加速图形端口(AGP)总线、以及外围部件互连(PCI)总线(也称为Mezzanine总线)。计算机110通常包括多种计算机可读介质。计算机可读介质能够何可以由计算机IIO访问的任何可用介质,并且包括易失的和非易失的介质、可移动的和不可移动的介质。作为例子,但非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的用于存储信息(如计算机可读指令、数据结构、程序模块或其它数据)的易失的和非易失的、可移动的和不可移动的介质。计算机存储介质包括,但不局限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它的磁存储设备,或者任何能够用来存储所要求的信息并可由计算机110访问的介质。通信介质通常在诸如载波或其它传输机制等已调制数据结构中包括计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传递介质。术语"已调制数据信号"意指一种以在信号中编码信息的方式设定或改变其一个或多个特征的信号。作为例子,但非限制,通信介质包括有线介质,如有线网络或直接连线连接,和无线介质,如声学、RF、红外和其它无线介质。任何上述的组合也应该被包括在计算机可读介质的范围之内。系统存储器130包括易失和/或非易失存储器格式的计算机储存介质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包含例如在启动时帮助在计算机110内的元件之间传输信息的基本例程,它通常存储在ROM131中。RAM132通常包含可由处理单元120直接访问和/或当前正由处理单元120操作的数据和/或程序模块。作为例子,但非限制,图l示出操作系统134、应用程序135、其它程序模块136和程序数据137。计算机110还可以包括其它可移动/非可移动、易失/非易失计算机储存介质。作为例子,图l示出对不可移动、非易失磁介质读取或写入的硬盘驱动器141;对可移动、非易失磁盘152读取或写入的磁盘驱动器151;以及对可移动、非易失光盘156(如CD-ROM或其它光学介质)读取或写入的光盘驱动器155。其它可用于示例性操作环境中的可移动/不可移动、易失/非易失计算机储存介质包括(但不局限于)磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器141通常通过不可移动存储器接口(如接口140)连接到系统总线121,磁盘驱动器151及光盘驱动器155通常通过可移动存储器接口(如接口150)连接到系统总线121。以上讨论并在图1中示出的驱动器及其相关联的计算机存储介质为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中硬盘驱动器141被示出为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以相同于或不同于操作系统134、应用程序135、其它程序模块136和程序数据137。操作系统144、应用程序145、其它程序模块146和程序数据147在此被给于不同的标号以至少说明它们是不同的副本。用户可通过输入设备,如图形输入板(电子数字化仪)164、话筒163、键盘162和定点设备161(通常指鼠标、轨迹球或触摸板)输入命令或信息到计算机110。其它输入设备(未示出)可包括操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这些和其它输入设备往往通过耦合到系统总线的用户输入接口160连接到处理单元120,但是也可以由其它接口和总线结构相连接,例如并行端口、游戏端口或者通用串行总线(USB)。监视器191或其它类型的显示设备也通过接口(例如视频接口190)连接到系统总线121。监视器191还可以与触摸屏面板193或类似物相集成,它们能够通过接口(如触摸屏接口192)将手写体等数字化输入输入到计算机系统IIO中。注意,监视器和/或触摸屏面板能够被物理地耦合到包含计算设备110的外壳,例如图形输入板类型个人计算机,其中触摸屏面板193本质上担当图形输入板164。另外,如计算设备110的计算机还可包括其它外围输出设备,例如扬声器195和打印机196,它们可通过输出外围接口194或类似物连接。计算机110可以在使用逻辑连接到一个或多个远程计算机(例如远程计算机180)的网络环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它普通网络节点,并且通常包括以上关于计算机110描述的很多或所有元件,虽然在图1中只示出了存储器存储设备181。在图1中描绘的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但是还可以包括其它网络。这种网络环境在办公室、企业范围计算机网络、内联网和因特网中普遍存在。当用在LAN网络环境中时,计算机110通过网络接口或适配器170连接到LAN171。当用在WAN网络环境中时,计算机110通常包括调制解调器172或者用于通过WAN173(例如因特网)建立通信的其它装置。调制解调器172可以是内置或者是外置的,可通过用户输入接口160或其它适当的机制连接到系统总线121。在网络化环境中,相对于计算机110描述的程序模块或其部分可以存储在远程存储器储存设备中。作为例子,但非限制,图1示出远程应用程序185驻留在存储器设备181中。应该理解,示出的网络连接只是示例,而在计算机之间建立通信链路的其它装置也可被使用。到场景图数据结构的接口-本发明的一个方面一般针对允许程序代码(例如应用程序或操作系统组件)把绘图指令或其它信息(如,图像位图)传递到图形组件,以在系统显示器上再现图形输出。为此,本发明例如以应用编程接口(API)的形式向对象模型提供了若干已定义的函数和方法,它们使程序能够用数据结构、绘元(命令)和其它图形相关数据来填充场景图。在处理时,场景图形导致图形被显示在屏幕上。图2表示其中可实现本发明的概括、分的体系层结构200。如在图2中所示,根据本发明的一个方面,程序代码202(例如,应用程序或操作系统等)可以用一种或多种不同的方式被开发以输出图形数据,这些方式包括通过成像204、通过矢量图形元素206、和/或通过直接放置在视件应用编程接口(API)层212中的函数/方法调用。通常,成像204向程序代码202提供用于装载、编辑和保存图像(如位图)的机制。如下所述,这些图像可由该系统的其它部分所使用,并且还有一种使用图元绘图代码来直接绘制到图像上的方法。矢量图形元素206提供绘制图形的另一种方法,它与对象模型(以下描述)的剩余部分相一致。矢量图形元素206可通过标记语言来创建,元素/属性系统208和布局系统210解释该标记语言以对视件API层212作出适当的调用。矢量图形元素206以及元素/属性系统208和布局系统210—起,在美国专利申请序列号10/401,717中描述。在一个实现中,图形层体系结构200包括一高级排版和动画引擎214,它包括或者关联于高速缓存数据结构216。该高速缓存数据结构216包含一个含分层地排列的对象的场景图,对象将如下所述根据定义的对象模型来管理。通常,视件API层212向程序代码202(和该布局系统210)提供到高速缓存数据结构216的接口,包括创建对象、打开和关闭对象以向它们提供数据等的能力。换言之,该高级排版和动画引擎214展示一个统一的媒体API层212,开发人员可以通过它表达关于图形和媒体的意图来显示图形信息,并且提供一个具有足够信息的低层平台,使得该平台能够为程序代码优化硬件的使用。例如,该低层平台将负责高速缓存、资源协商和媒体集成。在一个实现中,高级排版和动画引擎214向快速、低级排版和动画引擎218传递指令流和可能的其它数据(例如指向位图的指针)。如在此所使用的,术语"高级"和"低级"类似于在其它的计算情况中使用的术语,通常,软件组件相对于较高级组件越低级,则组件越靠近硬件。由此,例如,从高级排版和动画引擎214发送的图形信息可在低级排版和动画引擎218处接收,在此该信息被用来发送图形数据到包括硬件222的图形子系统。高级排版和动画引擎214与程序代码202结合来构建表示由程序代码202提供的图形场景的场景图。例如,每个要绘制的项目可以用绘图指令装载,系统能够将该指令高速缓存在场景图数据结构216中。如在以下将要描述,有若干种不同的方法来指定这个数据结构216以及将绘制什么。此外,高级排版和动画引擎214与定时和动画系统220集成,以提供声明性(或其它)动画控制(如,动画间隔)和定时控制。注意,该动画系统允许动画值本质上被传递到系统的任何地方,包括,例如,在元素属性级208、在视件API层212的内部、以及在任何其它资源之中。定时系统在元素和视件级上被展示。低级排版和动画引擎218管理场景的排版、动画和再现,该场景然后被提供给图形子系统222。低级引擎218排版多个应用场合的场景的再现,并且用再现组件实现对图形对屏幕的实际再现。然而,注意,某些再现在较高级上发生有时是必要和/或更有利的。例如,当较低层服务向多个应用中请求时,较高层在每一应用程序的基础上例示,由此可通过成像机制204在较高级上执行费时或应用专用的再现,并且将对位图的引用传递到该较层。根据本发明的一个方面,视件应用编程接口(API)提供一对象集,它根据本发明的一个方面定义视件树。视件树表示一种数据结构,它能够由图形系统再现到介质(屏幕、打印机或表面)。当再现时,视件树中的数据是观察者见到的"场景"。视件对象(或简称视件)包含并管理构成绘制的场景的其它图形对象,如几何结构、图元、画刷、色彩渐变和动画。虽然本发明还提供使用更熟悉的对象和属性系统对较高级抽象上的绘制和再现服务的访问,并且通过标记语言(代号"XAML")提供标记级上的矢量图形对象,但是期望对于绘图功能的更大控制的开发者对于视件API,比他们能够使用属性系统或标记来容易地实现具有最大的兴趣。图3和4分别示出示例场景图300和400,包括被称为视件的基本对象。视件对象,或简单地为视件,是诸如线条、文本和图像等图形内容的容器。如在图5中视件类的对象继承中所表示的,存在若干种不同的视件对象,包括ContainerVisual(容器视件),它是不直接包含图形内容,但包含子DrawingVisual(绘图视件)对象的视件。子DrawingVisual对象对象被添加到ContainerVisual,而不是添加到其它DrawingVisual对象。这允许开发者在对个别视件对象进行修改和设定属性,而无需重新创建然后重新再现整个绘图上下文,同时还允许在容器对象上对裁剪和变换属性的访问。ContainerVisual对象能够被嵌套。DrawingVisual是能够包含图形内容的视件。该视件展示若干绘图方法。DrawingVisual的子对象在基于零的、z阶空间中组织。RetainedVisual(保留视件)是引入能用于绘图的"保留指令流"的视件。在较简单的方面,RetainedVisual允许开发者保留视件的内容,并且仅仅当需要时才重画它。这就可能如同DrawingVisual—样,,通过调用RenderOpen(再现打开)并使用返回DrawingContext(绘图上下文)用于绘图,来命令式地使用RetainedVisual。RetainedVisual提供确认回叫功能和InvalidateVisual(使视件无效)方法。为了使用确认功能,用户在RetainedVisual或从中导出的类上实现IretainedRender接口。返回到图5,还有另一个视件是HwndVisual(Hwnd视件)505,它是主存传统的Microsoft\\^32@控件或窗口,作为场景图的视件场景内部的子视件的视件。尤其是,传统程序将仍然通过WM—PAINT方法(或类似方法)操作,该方法基于现有的图形技术绘制到子HWnd(或类似视件)。为了在新的图形处理模型中支持这样的程序,HwndVisual允许Hwnd被包含在场景图中,并且当父视件被重定位时被移动。其它类型的视件也是切实可行的,例如三维(3D)视件,它启用了二维和三维世界之间的连接,例如,照相机类型的视图通过二维视件可以使视图成为三维世界。如图3所示,视件管理器304包含将视件树连接到介质的对象。视件管理器在视件数据结构(根视件302)和向其再现数据的目标之间建立一保留的连接,从而提供了跟踪这两者之间不同的可能性。视件管理器304接收窗口消息,并提供用于将绘图坐标中的点变换到设备坐标的方法,反之亦然。一种典型的应用可以是通过以如前述美国专利申请序列号10/401,717中所描述的"XAML"定义布局,并还通过以C衬旨定某些绘图操作来绘制图形。开发者可以建立形状元素,或者使用带图元的几何结构来绘制几何结构。在以下的脚本中,该代码演示了在视件(Visual)中绘制一个椭圆,该视件构成画布的基础privatevoidCreateAndShowMainWindow()mainWindow=newMSAva:Lon,Windows.Window();:CanvasmyCanvas=newCanvas()7mainWindow.Children.Add(myCanvas)Ellipseel=newEllipse()7el.Fill=Brushes.Blueel*Stroke=BrushesBlack,'el,StrokeThickness=newLength(10)el.CenterX-newLength(100)el,CenterY=newLength(75),.el.RadiusX=newLength(50)7el.RadiusY=newLength(50)myCanvas,Children,Add(el)mainWindowShow()/使用该视件API,开发者能够替代地直接绘制到视件中(否则将通过布局元素来访问)。为再现DrawingVisual对象的内容,应用程序通常在DrawingVisual上调用RenderOpen方法。RenderOpen返回DrawingContext,应用程序能够以DrawingContext执行绘图操作。为了清除视件的内容,应用程序在DrawingContext上调用Close(关闭)。在应用程序调用Close之后,DrawingContext不再能被使用。以下代码使用了几何结构对象而不是椭圆形状绘制一个椭圆(和前述例子相同的椭圆)至UDrawingVisual中。该例子创建一个DrawingVisual、获取该DrawingVisual的DrawingContext、并调用该DrawingContext的DrawGeometry(画几何结构)方法来绘制该椭圆。注意,必须把视件添加到该顶级对象(在此情况中是窗口)的视件树中。<table>tableseeoriginaldocumentpage18</column></row><table>以下例子通过向ContainerVisual添加类似的椭圆进一步在先前例子之上构建;注意,为了清晰性这个例子是冗长的。使用ContainerVisual能够帮助组织场景对象,并允许开发者将在其上执行击中测试或确认的视件对象(RetainedVisual对象)从普通的绘图内容中隔离,并且最小化不必要的内容重绘制。<formula>formulaseeoriginaldocumentpage19</formula>DrawingCoritextmyDrawingContext=myDrawingVisual.RenderOpen(》SolidColorBrushmySolidColorBrush=newSolidColorBrush()/mySolidColorBrush.Color=Colors.VioletPenmyPen=newPen(Brushes,Black,10)EllipseGeometryaGeometry=newEllipseGeometry(newPoint(100,75),50,50)myDrawingContextDrawGeometry(mySolidColorBrush,myPen,aGeometry)myDrawingContextClose()/DrawingContextmyDrawingContext一l=niyDrawingVisual一lRenderOpen()mySolidColorBrush*Color=Colors,Red'-PenmyPenl=newPen(Brushes,Orange,10)-EllipseGeometryaGeometryl=newEllipseGeometry(newPoint(100,175),50,50)7myDrawingContext一l,DrawGeometry(mySolidColorBrush,myPenl,aGeometryl)myDrawingContext一lClose()7DrawingContextmyDrawingContext一2=myDrawingVisual一2-RenderOpen()mySolidColorBrush.Color=Colors,Yellow;PenmyPen2=newPen(BrushesBlue,10)7EllipseGeometryaGeometry2=newEllipseGeometry(newPoint(100,275),50,50),-myDrawingContext一2DrawGeometry(mySolidColorBmsh,myPen2,aGeometry2)myDrawingContext一2Close(》j//向容器视件的视件集合添加绘图视件myContainerChildren,Add(ray[rawingVisual)myContainer.Children,Add(myC'rawingVisual—l)myContainer.Children,Add(my['rawingVisual_2)//向窗口添加容器视件((IVisual)mainWindow)Children.Add(myContainer)RetainedVisual类似于DrawingVisual,但是允许视件内容的选择性重绘制。正如它的名字所暗示的,该RetainedVisual能够保留内容,以在介质上多次出现。它还提供回叫和确认的功能。这个功能能够通过向开发者提供对内容的重新再现的更大的控制来帮助进行再现的执行。在基本的级别上,用户能够创建和使用非常类似于DrawingVisual的RetainedVisual;即,用户能够调用RenderOpen和获得DrawingContext。换言之,用户能够在RetainedVisual上实现IretainedRender接口。通过如此做,用户确保图形系统将使用在RenderBounds(再现边界)属性中的值集合,作为要在IRetainedVisual.Render调用处再现的内容的边界。当再现场景时,图形系统将检查任何子视件。如果RenderBounds属性的值指出,在再现场景时需要一个特定视件的内容,则系统将调用IRetainedVisual.Render来填充该视件的内容,替换已经在存储器中的任何内容。应用程序还能够直接调用InvalidateVisual以从视件中清洗(flush)内容。如果应用程序没有在RetainedVisual上实现IretainedRender,则对InvalidateVisual的任何调用将抛出异常。以下代码示例在RetainedVisual上实现IRetainedRender并且绘制到其中的类。publicclassRectangle:RetainedVi:sual,IRetainedRenderpublicRectangle(Colorcolor,Rectrect):base()m一color=colorm一rect=rect,.RenderBourids=rect;publicvoidSetColor(Colorcolor)m一color=color,'InvalidateVisual()zpublicvoidRender(DrawingContextctx){-ctx.DrawRectangle(newSolidColorBrushm—color),null,m一rect)7该视件API和本发明的图形系统的余下部分一样,是受管的API,并且利用受管代码的典型特征,包括强类型和无用信息收集。它还利用了用于再现的硬件加速能力。为了便于开发者用已经存在的非受管应用程序进行工作,该视件API在当前图形系统和基于Microsoft百^(103@图形设备接口(001)的再现服务之间提供了有限的互操作性。这种互操作性允许开发者使用Hwnd视件对象在知晓视件的应用程序中主存基于GDI的窗口、编写基于本发明的绘图和再现的控件和主题(theming),但是仍然在传统的GDI应用程序中工作、并且修改基于GDIHWND的应用程序以利用该新的再现特征,包括硬件加速和色彩模型。HwndVisual允许在知晓视件的应用程序中主存Win32内容。如在图5中所示,HwndVisual从ContainerVisual继承。注意,不可能在同一HwndVisual中混合GDI和该新的绘图模型。相反,这个视件可能对于有限范围的传统控件更加有用。以下例子演示在HwndVisual中创建控件并把它添加到视件树中。//导入¥11132资源并为控件定义变量_〃创建控件<table>tableseeoriginaldocumentpage23</column></row><table>〃为控件创建HwndVisual并将其添加到先前定义的集合<table>tableseeoriginaldocumentpage23</column></row><table>对于其它对象,一旦主存在视件中,可以向控件应用变换和其它属性改变。<table>tableseeoriginaldocumentpage23</column></row><table>如在图3中所示,顶级(或根)视件302连接到视件管理器对象304,它也具有与窗口(HWnd)306或在其中为程序代码输出图形数据的类似单元的关系(如,通过句柄)。视件管理器304管理顶级视件(和该视件的任何子视件)到该窗口306的绘制。图6示出VisualManager(视件管理器)为在此描述的图形系统的对象模型中的一组对象600之一。为了绘图,视件管理器304如由分派器308调度的处理(例如,遍历或发送)场景图,并且提供图形指令和其它数据给低级组件218(图2)用于其对应的窗口306,如在前述美国专利申请中所概括描述的。场景图处理正常地由分派器308以相对于低级组件218和/或图形子系统222的刷新速率更慢的速率来调度。图3示出若干子视件310-314,它们被分层地安排在顶级(根)视件302之下,其中某些被表示为通过分别具有相关联指令列表318和319的绘图上下文316、317(示出为虚线框,表示它们的临时特性)填充,例如包含指令列表和其它视件。视件还可以包含其它属性信息。通常,基本视件类上的大多数访问通过Ivisual接口到来,并且视件从DependencyObject(依赖对象)导出,如图5所示。指令列表可以包括对ImageData(图像数据)的引用以及其它绘元。该ImageData然后能够通过从其上脱去绘图上下文,或者通过具有SurfaceVisualRenderer(表面视件再现器)(或者命名为ImageDataVisualRenderer(图像数据视件呈现器))来直接改变/更新。视件通过提供裁剪、不透明属性和能够被设定和/或通过获取方法读取的可能的其它属性来提供服务。另外,视件具有控制它如何参与命中测试的标志。Show(显示)属性用来显示/隐藏视件,例如,当该属性为假时该视件不可见,否则该视件可见。此外,这些对象(不管是视件API层或者元素层的视件)存在于一分层结构中。坐标系统通过该分层结构向下继承。按此方式,父视件能够将坐标变换入栈,该坐标变换修改再现途径并且应用于父视件的子组件。对视件的变换是在到该视件的连接上的。换言之,它通过父视件的IVisual接口上的[GetlSet]ChildTransform来设定。注意,该坐标变换可以用统一的方式应用于每样东西,就像它在位图中一样。注意,这并不意味着变换始终应用于位图,但是获得再现的内容同样地受变换的影响。作为例子,如果用户用一英寸宽的圆形笔画一个圆,并且然后向该圆应用应用X方向上的縮放比例2,该笔将在左侧和右侧是2英寸宽,而在顶部和地步仅l英寸宽。这有时被称为是排版或位图变换(与仅影响几何结构的骨架或几何结构縮放相反)。图8是比例縮放变换的一种表示,在左边出现的是非变换的图像800,而在右边出现的是具有非均匀比例縮放的变换的图像802。图9是比例縮放变换的一种表示,在左边出现的是非变换的图像800,而在右边出现的是具有几何结构比例縮放的变换的图像904。对于视件的坐标变换,TransformToDescendant(变换到子孙)将一个点从参考视件变换到子孙视件。该点从参考视件的后变换坐标空间变换到子孙视件的后变换坐标空间。TransformFromDescendant(从子孙变换)将一个点从子孙视件沿父链向上变换到参考视件。该点从子孙视件的后变换坐标空间变换到参考视件的后变换坐标空间。用户可以得到到和自后代以及自和到任意视件的矩阵。有可用于确定视件内容的边界框的两个属性可用即DescendantBounds(子孙边界),它是子孙的边界框;以及ContentBounds(内容边界),它是内容的边界。对这些应用并操作提供总边界。裁剪属性设定(和获得)视件的裁剪区域。任何几何结构(该几何结构类在图10中示出)能够用作裁剪区域,并且该裁剪区域被应用在后变换坐标空间中。在一个实现中,裁剪区域的默认设定是空,即没有裁剪,它能够被认为是从(-~,-oo)到(+co,+o的无限大的裁剪矩形。不透明属性获得/设定视件的不透明值,从而视件的内容可基于该不透明值和所选择的混合模式在绘图表面上被混合。BlendMode(混合模式)属性能够被用于设定(或获得)所使用的混合模式。例如,不透明性(a)值可被设定在0.0到1.0之间,其线性a混合被设置为模式,例如,颜色=a*前景色+(1.0-a)*背景色。其它服务,例如特殊效果属性,可以包括在视件中,如模糊、单色等。各种服务(包括变换、不透明性和裁剪)能够在绘图上下文上入栈和出栈,并且入栈/出栈操作能够被嵌套,只要对于每个入栈调用都有一个适当的出栈调用。PushTransform(变换入栈)方法将变换入栈。对于入桟的变换,执行随后的绘图操作。出栈调用将由匹配的PushTransform调用所入栈的变换出栈voidPushTransform(Transformtransform);voidPushTransform(Matrixmatrix);voidPop();.类似地,PushOpacity(不透明性入栈)方法将不透明值入栈。最后的绘图操作以指定的不透明值在一临时表面上被再现,并且然后合成到场景中。Pop()将由匹配的PushOpacity调用入栈的不透明值出栈voidPushOpacity(floatopacity);voidPushOpacity(FloatAnimationopacity);voidPop();.PushClip(裁剪入栈)方法将剪裁几何结构入桟。随后的绘图操作是裁剪到几何结构。该裁剪被应用在后变换空间中。P叩()将由匹配的PushClip调用入栈的剪裁区域出栈voidPushClip(Geometryclip);voidPop0;。注意,入栈操作能够被随意地嵌套,只要出栈操作匹配于一个入栈。例如,以下是有效的__PushTransform(...);DrawLine")'PushClip()'-DrawLine(..-),.Pop();PushTransform(.),DrawRectPop();Pop()代理视件(ProxyVisual)是可被不止一次地添加到场景图中的视件,例如在容器视件之下。由于由代理视件弓I用的任一视件可以由从根开始的多条路径达到,因此读服务(TransformToDescendent、TransformFromDescendent和HitTest)不做完代理视件。本质上,存在从任一视件到视件树的根的规范路径,并且这条路径并不包括任何ProxyVisuals。图4示出一个示例场景图400,其中容器视件和绘图视件(以及其它视件)在场景图中相关,并且具有指令列表形式的相关联的数据(如,在对应的绘图上下文中)。容器视件是用于视件的容器,并且容器视件能够被相互嵌套。容器视件的子视件能够通过容器视件所实现的IVisual接口上的方法来操纵。视件集合(VisualCollection)中视件的次序确定了该按什么次序再现视件,艮卩,视件从最低索引到最高索引、从后到前(绘制的次序)被再现。如上所述,视件可通过用各种绘元,包括Geometry(几何结构)、ImageSource(图像源)和MediaData(媒体数据)填充其绘图上下文而被画出。此外,存在一组通过这个完整的栈来共享的资源和类。这包括Pens(笔)、Brushes(画刷)、Geometry(几何结构)、Transforms(变换)禾卩Effects(效果)。DrawingContext抽象类展示可用于填充DrawingVisual(绘图视件)、ValidationVisual(确认视件)、ImageData(图像数据)等的一组绘图操作。换言之,绘图上下文抽象类展示一组绘图操作;对于每个绘图操作存在两个方法,其一取常数作为自变量,而另一个取动画器(animator)作为自变量。Geometry(几何结构)是一种类型的类(图10),它定义一个矢量图骨架而没有描边或填充。每个几何结构对象是简单形状(LineGeometry(线条几何结构)、EllipseGeometry(椭圆几何结构)、RectangleGeometry(矩形几何结构))、复杂的单一形状(PathGeometry(路径几何结构))、或者具有指定的组合操作(如,并、交和其它)的这种形状GeometryCollection(几何结构集合)的列表。这些对象形成如图io所示的类分层结构。如在图11中所示,PathGeometry是一个Figure(图形)对象的集合。进而,每个Figure对象由一个或多个Segment(图段)对象组成,它实际地定义该图形的形状。图形是定义图段集合的集合结构的子段。该图段集合是2维Segment对象的单个连接的序列。图形能够是具有定义区域的闭合形状,或者仅仅是定义曲线,而没有包围的区域的图段的连接序列。如图12所示,当画几何结构(如,矩形)时,如以下所描述的可指定画刷或笔。此外,笔对象还具有画刷对象。画刷对象定义如何图形地填充一个平面,并且有画刷对象的类分层结构。这由被填充的矩形1202在图12中表示,当包括矩形的和画刷指令及参数的视件被处理时得到该矩形。Pen(笔)对象连同如以下将描述的Width(宽度)、LineJoin(线连接)、LineCap(线帽)、MiterLimit(斜角限制)、DashArray(虚线阵列)和DashOffset(虚线偏移)等属性被束缚到Brush(画刷)。如在以下还将描述的那样,某些类型的画刷(如渐变和九网格)自己定大小。当使用时,这些画刷的大小从边界框获取,例如当画刷的GradientUnits(渐变单位)/DestinationUnits(目标单位)被设定为RelativeToBoundingBox(相对于边界框)时,使用正在被绘制的图元的边界框。如果这些属性被设定为Absolute(绝对),那么使用坐标空间。本发明的图形对象模型包括一Brush对象模型,它通常针对用像素覆盖平面的概念。画刷类型的示例在图13的分层结构中示出,并且在Brush基类之下,包括GradientBrush(渐变画刷)、NineGridBrush(九网格画刷)、SolidColorBrush(纯色画刷)和TileBrush(拼贴画刷)。GradientBrush包括LinearGradient(线性渐变)和RadialGradient(径向渐变)对象。DrawingBrush(绘图画刷)和ImageBrush(图像画刷)从TileBrush中导出。该类的另一种排列是切实可行的,例如从TileBrush导出的可以是ImageBrush(图像画刷)、VisudBrush(视件画刷)、VideoBrush(视频画刷)、NineGridBrush(九网格画刷)和DrawingBrush(绘图画刷)。注意,Brush对象可以识别在它们被使用时如何相关于坐标系统,和/或它们如何相关于使用它们的形状的边界框。通常,诸如大小等信息可以从在其上绘制画刷的对象来推断。尤其是,很多画刷类型使用坐标系统来指定其某些参数。这个坐标系统能够相对于向其应用画刷的形状的简单边界框来定义,或者它能够相对于在使用画刷时候为活动的坐标空间。这些分别被称为RelativeToBoundingBox(相对于边界框)模式和Absolute(绝对)模式。SolidColorBrush对象以纯色填充所标识的平面。如果有该颜色的a分量,则它按照一种乘法模式与Brush基类中对应的不透明性属性组合。以下提出SolidColorBrush对象的一个例子publicsealedclassSystem-Windows.MediaSolidColorBrush~:Brush<formula>formulaseeoriginaldocumentpage29</formula>括的(X值)和偏移。如果没有指定的渐变停点,则画刷作为纯透明黑色来绘制,就像完全不存在指定的画刷一样。如果只指定了一个渐变停点,则画刷作为具有一种指定色彩的纯色来绘制。和其它资源类一样,渐变停点类(示例在以下表中)从可改变类导出,并且因此是选择性地可变的,如在标题为"ChangeableClassandPatterntoProvideSelectiveMutabilityinComputerProgrammingEnvironments(在计算机编程环境中提供选择性的易变性的可改变类和图案)"的美国专利申请中所描述的。渐变通过指定一组渐变停点来绘制。这些渐变停点指定沿某一类行进的颜色。当前支持两种类型的渐变,即线性和径向渐变。渐变通过在指定的色彩空间中的渐变停点之间完成内插来绘制。渐变由渐变停点列表组成。这些渐变停点的每一个包含色彩(具有包括的a值)和偏移。如果没有指定的渐变停点,则画刷作为透明色来绘制(就像完全不存在指定的画刷一样)。如果只指定了一个渐变停点,则画刷以具有一种指定色彩的纯色来绘制。考虑带有范围0-l中的偏移(0.0…1.0)的任何渐变停点,最大停点在范围(-。,O.O]中,而最小停点在[1.0,+叫中。如果所考虑的该组停点包括在范围0到1之外的停点,则在0(和/或l)处导出一个隐含的停点,它表示在这个停点处出现的内插的色彩。同样,如果两个或多个停点在同一偏移处设置,则在该偏移处发生硬转移(hardtransition)(而不是内插)。添加停点的次序确定在该偏移处的行为;要添加的第一个停点是在该偏移之前的有效色彩,要设置的最后一个停点是该偏移之后的有效色彩,在该偏移处的任何其它停点被忽略。该类是类似于其它资源类的Changeable(可改变)。<table>tableseeoriginaldocumentpage31</column></row><table><table>tableseeoriginaldocumentpage31</column></row><table>与SolidColorBrush—样,这在动画集合中具有嵌套的Changeables。GradientSpreadMethod(渐变展开方法)枚举指定了渐变如何被绘制到指定的矢量或空间之外。存在三种可能的值,包括Pad(衬填),其中端点色彩(第一个和最后一个)用于填充剩余的空间;Reflect(反射),其中停点按照相反的次序重复地重放以填满空间;以及Repeat(重复),其中停点按次序重复直到空间被填满。该类型的属性的默认值是Pad:publicenumSystem.Windows.Media.GradientSpreadMethodPad,Reflect,Repeat图14和15提供某些GradientSpreadMethod例子,(虽然是按灰度级而不是按彩色)。每个形状具有从白色到灰色的线性渐变。实线表示渐变矢量。通常,LinearGradientBrush(线性渐变画刷)用于以线性渐变填充区域。线性渐变定义了沿一条线的渐变。该线的端点由线性渐变的StartPoint(起点)和EndPoint(终点)属性定义。默认地,线性渐变的StartPoint是(O,0),填充该区域的左上角,且它的EndPoint是(l,1),填充该区域的右下角。如在图15中所示,使用默认值,所得的渐变中的色彩沿对角线内插。从渐变的起点和终点形成的黑色线被添加于此,以加亮渐变的内插路径。ColorlnterpolationMode(色彩内插模式)枚举定义渐变中的色彩的内插方式。两个选项是PhysicaUyLinearGammalO(物理线性伽玛10)和PerceptuallyLinearGamma22(感知线性伽玛22)。publicenumColorlnterpolationMode//色彩在伽玛l.O空间中内插PhysicallyliinearGammalO,//色彩在伽玛2.2空间中内插PerceptuallyliinearGamma22这是一个抽象基类。publicabstractclassSystem.Windows;.Media.GradientBrushrBrushinternalGradientBrush()publicnewGradientBrushCopy(),'〃隐藏Changeable.Copy()〃默认是、、PerceptuallyLinearGamma22"publicColor工nterpolationModeColorlnterpolationMode{get,'.set,'}〃默认是RelativeToBoundingBoxpublicBrushMappingModeMappingbtode{get;set7}〃默认是PadpublicGradientSpreadMethodSpreadMethod{get,'set,'//渐变停点publicvoidAddStop(Colorcolor,doubleoffset);publicGradientStopCollectionGradientStops{get7set;}//ColorlnterpolationModepublicColorlnterpolationModeColorlivterpolationMode{get;set,'}如上所述在Changeables—节中所描述的,GradientBrush是对于Changeables的复杂类型,因为它的GradientStops(渐变停点)属性本身保持Changeables。这意味着GradientBrush需要实现所保护的方法MakeUnchangeableCore()(制作不可改变核心)和PropagateEventHandler()(传播事件处理器)、以及Changeable子类实现的CloneCore()(克隆核心)。它还可以选择实现ValidateObjectState()(确认对象状态),例如,如果存构成集合的GradientStops的无效组合。LinearGradient指定了沿一个矢量的线性渐变画刷。个别停点指定沿该矢量的色彩停点。__publicsealedclassSystem,Windows.Media.LinearGiradient:GradientBrushpublicLinearGradient()〃初始化成透明//设置具有两种颜色以及指定<formula>formulaseeoriginaldocumentpage35</formula>LinearGradient。如果使用了"LinearGradient"版本,则分别指定起点和终点。如果使用"HorizontalGradient"(水平渐变),起点被设置为O,O,而终点设置为l,O。如果使用了"VerticalGradient,,(垂直渐变),则起点被设置为0,0,而终点设置为0,1。在这些情况下,使用默认的MappingMode(映射模式),它是RelativeToBoundingBox(相对于边界框)。径向渐变在编程模型中类似于线性渐变。然而,线性渐变具有起点和终点来定义渐变矢量,而径向渐变具有圆与焦点来定义渐变行为。圆定义了渐变的终点一换言之,l.O处的渐变停点定义了圆的圆周上的色彩。焦点定义了渐变的中心。o.o处的渐变停点定义了焦点处的色彩。图16表示(按灰度级)从白到灰的径向渐变。外部的圆表示渐变圆,而实心点表示焦点。该渐变将SpreadMethod(扩展方法)设为Pad。_<table>tableseeoriginaldocumentpage36</column></row><table>//以及中心(0.5;0.5),半径O.5和焦点(0.5,0.5)publicRadialGradient(Colorcol()rl,Colorcolor2)publicnewRadialGradientCopy(:',.//隐藏ChangeableCopy()getz〃默认是0.5,0.5[Animation("CenterAnimations")]publicPointCenter{get,'set,.}publicPointAnirtiationCollectionCenterAnimations{set,.}get〃默认是0.5[Animation("RadiusXAnimations")publicdoubleRadiusX{get;set;publicDoubleAnimationCollectioii:set,.}RadiusXAnimations{get//默认是0.5[Animation("RadiusYAnimations"):publicdoubleRadiusY{get,,se1:;publicDoubleAnimationCollectioii'set,'}RadiusYAnimations{〃默认是0.5,0.5[Animation("FocusAnimations")]publicPointFocus{get,'set;j'publicPointAnimationCollectionFocusAniraations{get,,set,'}对于RadialGradient的标记允许用分别在偏移0和1处的两个色彩停点指定RadialGradient。使用累犬认的MappingMode,它是RelativeToBoundingBox,具有默认的半径0.5。radial-gradient-brush:、、RadialGradient"corama-wspcolorcomma-wspcolorTileBrush是一个抽象基类,它包含描述拼贴的逻辑拼贴应当填充区域的手段。TileBrush的子类包含内容,并在逻辑上定义了填充无限大平面的方法。Stretch(拉伸)枚举用于描述如何将视框(ViewBox)(源坐标空间)映射到视见区(ViewPort)(目标坐标空间)。这用于TUeBrush中publicenumSystem.WindowsStretch//保留原始大小None,//高宽比未保持,视框填充视见区Fill,//高宽比被保持,视框均匀地尽可能大地缩放//使得宽度和高度都适合视见区Uniform,//宽高比被保持,视框均匀地尽可能小地縮放//使得整个视见区由视框填充UniforniToFill图18提供拉伸的例子。在这些例子中,该内容是上/左对齐的。TileMode(拼贴模式)枚举用于描述空间是否和如何被拼贴填充。TileBrush定义基础拼贴(由视见区指定)在何处。空间的剩余部分基于TileMode值来填充。publicenumSystem.Windows.Media,TileMode//不要拼贴一仅绘制基本拼贴,//剩余区域保持透明None,//基础拼贴模式一绘制基本拼贴,并且通过重复//基本拼贴使得一个拼贴的右边缘与下一个的//左边缘碰撞,并类似地从上到下,来填充剩余区域Tile,//与拼贴相同,但是水平地翻转替换列。//该基本拼贴未变换地绘制DFlipX,//与拼贴相同,但是垂直地翻转替换行。//该基本拼贴未变换地绘制FlipY,//FlipX和FlipY的组合。该拼贴未变换地绘制。FlipXY图19提供拼贴模式的例子。在每个例子中,该最左上角拼贴是基本拼贴。这些例子表示无(None)、拼贴(Tile)、X翻转(FlipX)、Y翻转(FlipY)和XY翻转(FlipXY)。VerticalAlignment(垂直对齐)枚举用于描述内容如何在容器内被垂直地定位<formula>formulaseeoriginaldocumentpage40</formula><table>tableseeoriginaldocumentpage41</column></row><table>TileBrush的内容并没有内在边界,并且有效地描述了一个无限平面。这些内容存在于其自己的坐标空间中,并且由TileBrush填充的空间在应用时是本地坐标空间。内容空间基于ViewBox、ViewPort、Alignments(对齐)和Stretch(拉伸)属性被映射到本地空间。视框在内容空间中指定,并且该矩形被映射到视见区矩形。视见区定义了最终绘制内容的位置,从而创建了用于该画刷的基本拼贴。如果ViewPortUnits(视见区单位)的值Absolute(绝对),则ViewPort的值在应用时被认为是在本地空间中。相反,如果ViewPortUnits的值是RelativeToBoundingBox(相对于边界框),那么ViewPort的值被认为是在坐标空间中,其中0,0是被绘制的对象的边界框的左上角,而U是同一边界框的右下角。例如,考虑一个正被填充的矩形几何结构,它从100,100画到200,200。那么,如果ViewPortUnits是Absolute,贝U(100,100,100,100)的ViewPort将描述整个内容区域。如果ViewPortUnits是RelativeToBoundingBox,贝lj(0,0,1,1)的ViewPort将描述整个内容空间。如果Viewport的Size(大小)为空,并且Stretch不是None(无),则该画刷不再现任何东西。视框在内容空间中指定。这个矩形如由Alignment属性和Stretch属性所确定的被变换,以适合视见区。如果Stretch是None,则没有比例縮放被应用到该内容。如果Stretch是Fill(填充),那么该视框在X和Y两个方向被独立地比例縮放成与视见区相同的大小。如果Stretch是Uniform(均匀)或UniformToFill(均匀填充),则逻辑是类似的,但是X和Y维度被均匀地按比例縮放,保持内容的高宽比。如果Stretch是Uniform,则视框被按比例縮放成具有等于视见区的大小的更约束的尺寸。如果Stretch是UniformToFill,则视框被按比例縮放成具有等于视见区的大小的较不约束的尺寸。考虑这一点的另一种方式是Uniform和UniformToFill两者都保持高宽比,但是Uniform确保整个视框在视见区中(潜在地保持视见区的各部分未被视框覆盖),而UniformToFill确保整个视见区由视框填充(潜在地导致视框的各部分在视见区的外面)。如果视框的区域为空,那么将不应用Stretch。Alignment仍将发生,并且它将定位"点"视框。一旦确定了视见区(基于ViewPortUnits)并确定了视框的目标大小(基于Stretch),则该视框需要在视见区中定位。如果视框与视见区大小相同(如果Stretch是Fill,或者如果它恰巧其它三个Stretch值之一一起出现),则在原点处定位该视框,使得与视见区相同。如果不是,则考虑HorizontalAlignment(水平对齐)和VerticalAlignment(垂直对齐)。基于这些属性,视框在X和Y两个维度上对齐。如果HorizontalAlignment是Left(左),则视框被定位视见区的左边缘。如果它是Center(居中),则视框的中心将被定位在视见区的中心,并且如果是Right(右),则右边缘将符合。该处理对Y维度重复。如果视框是Empty(空),它被认为是未设置。如果它未设置,则考虑ContentUnits(内容单位)。如果ContentUnits是Absolute,则无比例縮放或偏移发生,并且内容无变换地被绘制到视见区中。如果ContentUnits是RdativeToBoundingBox,则内容原点与视见区原点对齐,并且该内容按照对象的边界框的宽度和高度比例縮放。当用拼贴画刷填充空间时,内容如上所述地被映射到视见区,并且裁剪到视见区。这形成了用于填充的基本拼贴,并且该空间的剩余部分基于画刷的拼贴模式来填充。如果被设置,则应用画刷的变换,它在其它映射、比例縮放、偏移等等之后发生。Visua旧rush是其内容由视件指定的TileBrush。画刷能够用于创建复杂的图案,或者它能够用于绘制该场景的其它部分的内容非额外的副本。publicsealedclassSystem.Windows.Media.VisualBrush:TileBrushpublicVisualBrush(》z〃初始化为透明publicVisualBrush(Visualv)publicnewVisualBrushCopy(),-//隐藏TileBrushCopy()//视件一默认为空(透明画刷)publicVisualVisual{get,'set/}ImageBrush(图像画刷)是具有由ImageData(图像数据)指定的内容的TileBrush。该画刷能够用于以图像填充空间。publicsealedclassSystem,Windows*MediaIitiageBrush:TileBrushpublicImageBrush(),.〃初始化成透明内容//设置图像,将ViewBox设为(0,0,宽度,高度)//并将Stretch设为Fillpublic工mageBrush(ImageDataimage)publicnewImageBrushCopy(),.//隐藏TileBrushCopy()//默认为空publicImageDataImageData{gel:,'set,-}//默认为真//如果这为真,则ViewBox属性将被覆盖//并且有效地设置为图像的本机大小publicboolSizeViewBoxToContenl:{get,'set,.}VideoBrush(视频画刷)是具有由VideoData(视频数据)指定的内容的TileBrush。该画刷能够用于视频填充空间。publicsealedclassSystem.Windows.Media■VideoBrush:TileBrushpublicVideoBrush()〃初始化成透明内容〃设置图像,将ViewBox.设为(O,O,宽度,高度)//并将Stretch设为FillpublicVideoBrush(VideoDatavideo),.publicnewVideoBrushCopy()'.〃隐藏TileBrush-Copy()//默认为空publicVideoDataVideoData{ge.匕'-set'-}〃默认为真//如果这为真,则ViewBox属性将被覆盖//并且有效地设为视频的本机大小publicboolSizeViewBoxToConten仁{get7set/}NineGridBrush(九网格画刷)是始终以其内容图像填充对象边界框的画刷,并且图像拉伸并不纯粹通过视件比例縮放来实现。图像源由四根边框分割成9个矩形(因此名称为九网格)。在这9个区域的每一个中的图像的内容在0、l或2个维度上按比例縮放,直到它们填满该对象的边界框。在其中每个部分被比例縮放的维度能够在这个图示中看到..图17表示九网格的概念,它从第一实例1702扩大到第二实例1704,具有四种显示该九网格的类型,它们由上、左、下和右边框定义。在每个网格方块中的箭头表示维度,这些内容将在这些维度中被拉伸以满足视见区的大小。除了以上图示的九网格区域之外,有一个可任选的"第十"网格。这采取附加图像的形式,它以视见区为中心,并且不被比例縮放。这能够用来在按钮的中心放置形状等等。这个"第十网格"被称为浮雕(glyph),并且由GlyphlmageData(浮雕图像数据)属性展示publicsealedclassSystem*Windows*Media*NineGiridBr:ush'BrushpublicNineGridBrush(ImageDataimageData,intLeftBorder,intRightB'〕rder,intTopBorder,intBottom]3order)7publicNineGridBrush(ImageData:LmageData,intIieftBo::dei:,intRightBozrde:r,intTopBor(ier,intBottomBorder,ImageDataglyphlmage)/publicnewNineGridBrushCopy();://隐藏BrushCopy()//默认为空publicImageDataImageData{get,'set,'}//默认为OpublicintLeftBorder{get,set;}〃默认为OpublicintRightBorder{get-S€f}〃默认为OpublicintTopBorder{getset;}//默认为OpublicintBottomBorder{get/set,-}//默认为空public工mageDataGlyphImageData{get,'set7}注意,边框成员按图像像素从图像边缘开始计算在内。Pen(笔)是釆用画刷和描述如何对空间/几何结构描边的其它参数的对象。在概念上,笔描述了如何从几何结构创建描边区域。基于几何结构的边缘、笔的浓度、PenLineJoin(笔线连接)、PenLineCap(笔线帽)等等,创建新区域。一旦该区域被创建,它将用画刷来填充。<formula>formulaseeoriginaldocumentpage47</formula>publicPenLineCapStartLineCap{get,,set,.}〃默认为FlatpublicPenLineCapEndliineCap{get,,set,.}〃默认为FlatpublicPenDashCapDashCap{get,'set/}〃默认为MiterpublicPenliineJoinLineJoin{get,'set,-}〃默认为iopublicdoubleMiterLimit{get7set,'}//默认为空publicBrushB上u。丄i{get,-set}〃默认为l.O[Animations(ThicknessAnimations)]publicdoubleThickness{get7se"}publicDoubleAnimationCollectionThicknessAnimations{get,'set,'}PenLineCap确定如何绘制描边线的端点publicenumSystem.Windows,MediaPe11I1ineCap//这实际上没有线帽//线在线的最后一点处被弄成方形Flat,//线帽为直径等于线宽的半圆Round,//虚线线帽三角形Triangle,//线帽为边宽等于线宽,以端点为中心的正方形SquarePenLineCap确定如何绘制虚线、描边的线中的每个虚线的端点:publicenumSystem.Windows.Media.Pe:nDashCap//这实际上没有虚线线帽//线在线的最后一点处被弄成方形Flat,//虚线线帽为直径等于线宽的半圆Round,//线帽为三角形TrianglePenLineJoin确定当对线描边时如何绘制接合点publicenum'System.Windows.Media.PenliineJoin{//在相交线的外边缘的交点创建锐角Miter,//类似于Miter,但是角是圆的Round,//斜接合,这产生对顶角BevelDashArrays(虚线阵列)类包括静态属性,它提供对公共的、众所周知的虚线式样的访问。__publicsealedSystem.Windows.Media.DashArrays//实虚线阵列(没有虚线)publicstaticDoubleCollectionSolid{get,.}//Dash-3开1闭publicstaticDoubleCollectionDs.sh{get,.}〃Dot-l开l闭publicstaticDoubleCollectionDot{get,.}〃DashDot-3开1闭,l开l闭publicstaticDoubleCollectionDashDot{get,.}〃DashDotDot-3开1闭,l开l闭,l开l闭publicstaticDoubleCollectionDashDotDot{get,'}在图13中表示的另一画刷对象是VisualBrush(视件画刷)对象。Visua氾rush是其内容由视件指定的TileBrush。该画刷能够用于创建复杂的图案,或者它能够用于绘制该场景的其它部分的内容的额外的副本。publicsealedclassSystem.Windows.Media.VisualBrush:TileBrushpublicVisualBrush();〃初始化成透明publicVisualBrush(Visualv)publicnewVisualBrushCopy(),'//隐藏TileBrush-Copy()//视件一默认为空(透明画刷)publicVisualVisual{get,,set;.'}}在概念上,VisualBrush提供一种令视件按重复的拼贴风格绘制作为填充的方式。这由引用一个视件(以及任一子视件)的视件画刷在图12中表示,所引用的视件指定一个单一圆形状1220,该圆形状填充矩形1222。这样,VisualBrush对象可引用视件来定义如何绘制该画刷,它引入一种视件的多用途。按这种方式,程序可使用任意的图形"图元文件"来通过画刷或笔填充区域。由于这是一种用于存储和使用任意图形的压縮形式,它服务图形资源。在一个实现中,VisualBrush的内容并没有内在的边界,并且有效地描述了一个无限的平面。这些内容存在于其自己的坐标空间中,并且正被VisualBrush填充的空间在应用时是本地坐标空间。内容空间基于ViewBox、ViewPort、Alignments和Stretch属性而被映射到本地空间。视框在内容空间中被指定,并且这个矩形被映射到视见区(如通过Origin(原点)和Size(大小)属性指定的)矩形。视见区定义了最终绘制内容的位置,由此创建了用于该画刷的基本拼贴。如果DestinationUnits的值是UserSpaceOnUse(使用中的用户空间),则Origin和Size属性在应用时被认为是在本地空间中。相反,如果DestinationUnits的值是ObjectBoundingBox(对象边界框),则Origin和Size的值被认为是在坐标空间中,其中0,0是被绘制的对象的边界框的左上角,而l,l是同一边界的右下角。例如,考虑一个正被填充的RectangleGeometry,它从100,100绘制到200,200。在这样的一个例子中,如果DestinationUnits是UserSpaceOnUse,贝lj100,100的Origin和100,100的Size将描述该整个内容区域。如果DestinationUnits是ObjectBoundingBox,则0,0的Origin和1,1的Size将描述整个内容区域。如果Size是空,则该画刷不再现任何东西。视框在内容空间中指定。这个矩形如由Alignment属性和Stretch属性所确定的变换以适合视见区。如果Stretch是None,则不向内容应用比例縮放。如果Stretch是Fill,那么视框在X和Y两个维度上被独立地比例縮放成与视见区相同的大小。如果Stretch是UniformUniformToFill,则逻辑是类似的,但是X和Y维度被均匀地比例縮放,从而保持了内容的高宽比。如果Stretch是Uniform,则视框被比例縮放成具有等于视见区的大小的更约束的尺寸。如果Stretch是UniformToFill,则视框被比例縮放成具有等于视见区的大小的较不约束的尺寸。换言之,Uniform和UniformToFill两者都保持了宽高比,但是Uniform确保整个视框是在视见区中(潜在地保留视见区的各部分未被视框覆盖),而UniformToFill确保整个视见区由视框填充(潜在地导致视见区的各部分在视框外面)。如果ViewBox为空,那么将不应用拉伸。注意,对齐仍将发生,并且它将定位"点"视框。图18提供以各种拉伸设置再现的图形的单个拼贴1800的表示,包括当拉伸被设置为"无"的拼贴1800。拼贴1802是当该拉伸被设置为"Uniform"时的表示,拼贴1804是当拉伸被设置为"UniformToFill"时的表示,拼贴1806是当该拉伸被设置为"Fill"时的表示。一旦确定了视见区(基于DestinationUnits),并且确定了视框的大小(基于Stretch),则视框需要被定位在视见区中。如果视框与视见区大小相同(如果Stretch是Fill,或者如果它恰巧与其它三个Stretch值之一一起出现),那么视框被定位在原点,使得与视见区相同。否则,考虑HorizontalAlignment和VerticalAlignment。基于这些属性,视框在X和Y两个维度上定位。如果HorizontalAlignment是Left,则视框的左边缘被定位在视见区的左边缘。如果它是Center,则视框的中心被定位在视见区的中心,并且如果是Right,则右边缘将符合。该处理对Y维度重复。如果视框是(O,0,0,0),它被认为是未设置,由此考虑ContentUnits。如果ContentUnits是UserSpaceOnUse,则无比例縮放或偏移发生,并且该内容无变换地绘制到视框中。如果ContentUnits是RelativeToBoundingBox,那么内容原点与视见区原点对齐,并且内容按照对象的边界框的宽度和高度来比例縮放。当用VisualBrush填充空间时,内容如上所述地被映射到视见区中,并且裁剪到视框。这形成了用于填充的基本拼贴,并且该空间的剩余部分基于画刷的TileMode来填充。最后,如果设置,则应用画刷的变换一它在所有其它映射、比例縮放、偏移等等之后发生。TileMode枚举用于描述空间是否和如何用其画刷来填充。能够被拼贴的画刷定义了拼贴矩形,并且该拼贴在被填充的空间中的基本位置。该空间的剩余部分基于TileMode值来填充。图19提供带有各种拼贴模式设定的示例图形的表示,包括"无(None)"1900、"拼贴(Tile)"1092、"X翻转(FlipX)"1904、"Y翻转(FlipY)"1906和"XY翻转(FlipXY)"1908。在各种示例图形中的最左上角拼贴组成基本拼贴。图20表示为视件画刷中的拼贴所定义的视件画刷网格。第一个圆是一个简单的网格,而第二个圆具有在x方向上带有47的偏斜的变换。图21示出它正用图像来填充。回到图13,图像画刷从拼贴画刷导出,并且由此能够被拼贴。除了图像基于大小来扭曲之外,NineGridBrush非常类似于ImageBrush。本质上,NineGridBrush可被认为是一种自定义类型的拉伸,其中图像的某些部分拉伸,而其它(如,边框)不拉伸。这样,尽管ImageBrush中图像的大小导致一个简单的比例縮放,NineGridBrush将产生达所需大小的非均匀比例縮放。当应用画刷时,非比例縮放区域的单位是用户单位,这意味着ContentUnits(如果它对于NineGridBrush存在)将被设置为UserUnitsOnUse。Brush的Transform属性能够被有效地使用。注意,边框成员从图像的边缘开始计算在内。如以上概括描述的,本发明的图形对象模型包括一个变换对象模型,它包括在图7的分层结构中表示的变换类型,在Transform基类之下。构成变换的这些不同类型的组件可包括TransformList(变换列表)、TranslateTransform(平移变换)、RotateTransform(旋转变换)、ScaleTransform(比例縮放变换)、SkewTransform(偏斜变换)和MatrixTransform(矩阵变换)。个别的属性能够被制成动画,如,程序开发者能够将RotateTransform的Angle(角度)属性制成动画。用于2D计算的矩阵被表示成一个3X3的矩阵。对于需要的变换,仅仅需要6个值,而不是一个完整的3X3矩阵。这些被如下所述地命名和定义。m00m010m10mil0m20m211当一个矩阵乘以一个点时,它把该点从新的坐标系统变换到原先的坐标系统:■mOOm010yoWCoordSysljm002m012(T■mOO,ynewCoonlSy,ml02mll20mlO,mil,0=1]m202m2121m2(^1y。U!CoordSy该API中的大部分地方并不直接采用矩阵,而是相反使用Transform类,它支持动画。53publicstructSystem.Windows.Media.K:atrix//构造和设置publicMatrix();〃默认为身份publicMatrix(doublem00,doublemOl,doublemlO,doublemil,doublem20,doubleiu21),.〃身份publicstaticreadonlyMatrixIdentity,-publicvoidSetldentity()publicboolIsldent;ity{get,.}publicstaticMatrixoperator*(Matrixmatrixl,Matrixmatrix2)publicstaticPointoperator*(Matrixmatrix,Pointpoint),'//这些函数用指定的变换矩阵重新初始化当前矩阵publicvoidSetTranslation(doubledx,doubledy)7publicvoidSetTranslation(Sizeoffset)7publicvoidSetRotation(doubleangle),.//度publicvoidSetRotation(doubleangle,Pointcenter)〃度publicvoidSetRotationRadians(doubleangle)publicvoidSetRotationRadians(doubleangle,Pointcenter)publicvoidSetScaling(doublesx,doublesy)7publicvoidSetScaling(doublesx,doublesy.Pointcenter)publicvoidSetSkewX(doubleangle),-//度publicvoidSetSkewY(doubleangle),-//度publicvoidSetSkewXRadians(doubleangle),'publicvoidSetSkewYRadians(doubleangle)//这些函数将当前矩阵与指定的变换后乘publicvoidApplyTranslation(doubledx,doubledy)publicvoidApplyTranslation(SizeoffApply)publicvoidApplyRotation(doubleangle),-//度publicvoidApplyRotation(doubleangle,Pointcenter)//度publicvoidApplyRotationRadian(doubleangle)'*publicvoidApplyRotationRadian(doubleangle,Pointcenter)publicvoidApplyScaling(doublesx,doublesy)publicvoidApplyScaling(doublesx,doublesy,Pointcenter)publicvoidApplySkewX(doubleangle)'-//度publicvoidApplySkewY(doubleangle)'*//度publicvoidApplySkewXRadians(doubleangle)publicvoidApplySkewYRadians(doubleangle)'-publicvoidApplyMatrix(Matrixmatrix),'//有关求逆的一些函数publicdoubleDeterminant{get;}publicboolIs工nvertible{get,*}publicvoidInvert(),//如果!lslnvertable抛出ArgumentExceptionpublicstaticMatrixInvert(Matrixmatrix),.//个别成员publicdoubleM00{getset,*publicdoubleM01{get/set/publicdoubleM10{get7setpublicdoubleMil{get;set,'publicdoubleM20{get^setpublicdoubleM21get.set/结论如从之前的详细描述所见,在此提供了一种系统、方法和对象模型,它们向程序代码提供了与场景图形接口的能力。该系统、方法和对象模型的使用是直截了当的,而且是强有力的、灵活的和可扩展的。虽然本发明易受各种修改和替换构造的影响,然而某些示出的实施例在附图中示出并在上文中详细描述。然而,应该理解,这并不打算将本发明限于所揭示的具体形式,而是相反,本发明覆盖落入本发明的精神和范围之内的所有修改、替换构造等效技术方案。权利要求1.在计算环境中,一种方法,包括,通过一对象的接口接收一函数调用,一对象模型的对象关联于一场景图;通过使所述场景图中的数据被修改来响应于所述函数调用。2.如权利要求l所述的方法,其特征在于,使所述场景图中数据被修改包含使一视件类的一新实例被初始化。3.如权利要求2所述的方法,其特征在于,使所述场景图中的数据被修改包含调用将变换与所述场景图中的一视件对象相关联的代码。4.如权利要求l所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将一绘图视件放置到所述场景图中的代码。5.如权利要求4所述的方法,其特征在于,还包括使一绘图上下文被返回,所述绘图上下文提供一种用于再现到所述绘图视件的机制。6.如权利要求2所述的方法,其特征在于,使所述场景图形中的数据被修改包含调用将画刷数据与所述场景图中的一视件对象相关联的代码。7.如权利要求6所述的方法,其特征在于,所述画刷数据包括接收对应于纯色的数据。8.如权利要求6所述的方法,其特征在于,接收画刷数据包括接收对应于线性渐变画刷和包含至少一个停点的停点集合的数据。9.如权利要求6所述的方法,其特征在于,接收画刷数据包括接收对应于径向渐变画刷的数据。10.如权利要求6所述的方法,其特征在于,接收画刷数据包括接收对应于图像的数据。11.如权利要求10所述的方法,其特征在于,还包括通过对应于应用于图像的图像效果的接口接收一函数调用。12.如权利要求1所述的方法,其特征在于,还包括接收关联于所述函数调用的笔数据,并且其中,使所述场景图中的数据被修改包含调用定义形状的轮廓的笔函数。13.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用表示所述场景图形数据结构中的椭圆的代码。14.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用表示所述场景图形数据结构中的矩形的代码。15.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用表示所述场景图数据结构中的路径的代码。16.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用表示所述场景图数据结构中的线的代码。17.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用与对所述场景图数据结构中的视件进行命中测试相关的代码。18.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用变换所述场景图数据结构中的视件的坐标的代码。19.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用计算所述场景图数据结构中的视件的边界框的代码。20.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将视件对象放置在所述场景图数据结构中的代码。21.如权利要求1所述的方法,其特征在于,还包括调用一视件管理器,以向再现目标再现至少一个视件对象的树。22.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将容器对象放置在所述场景图数据结构中的代码,所述容器对象被配置成包含至少一个视件对象。23.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将图像数据放置到所述场景图数据结构中的代码。24.如权利要求23所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将关联于所述图像数据的图像效果对象放置到所述场景图数据结构中的代码。25.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将对应于文本的数据放置到所述场景图数据结构中的代码。26.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用响应于所述函数调用提供一绘图上下文的代码。27.如权利要求26所述的方法,其特征在于,所述功能调用对应于一保留视件,并且所述方法还包括回叫,使得所述保留视件的绘图上下文被返回到所述场景图数据结构。28.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将三维视件放置到所述场景图数据结构中的代码。29.如权利要求28所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将二维表面映射到所述三维视件的代码。30.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将动画数据放置到所述场景图数据结构中的代码。31.如权利要求30所述的方法,其特征在于,还包含将对应于所述动画数据的时间线信息传递到一排版引擎。32.如权利要求31所述的方法,其特征在于,所述排版引擎基于所述时间线内插图形数据,以对与所述场景图数据结构中的对象相对应的输出进行动画制作。33.如权利要求1所述的方法,其特征在于,通过一接口接收函数调用包括接收标记,并且其中,使所述场景图数据结构中的数据被修改包括将所述标记语法分析成对一对象的接口的调用。34.如权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用将对应于音频和/或视频数据的对象放置到所述场景图数据结构中的代码。35.权利要求1所述的方法,其特征在于,使所述场景图数据结构中的数据被修改包含调用改变所述场景图数据结构中的对象的一可变值的代码。36.在计算环境中,一种系统,包括一场景图数据结构,它包含能够被再现成能被查看的集成输出的数据;以及一对象模型,它包括能够被包含在所述场景图数据结构中的视件对象和其它数据。37.如权利要求36所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将视件对象的树放置到所述场景图数据结构中。38.如权利要求37所述的系统,其特征在于,还包括一视件管理器,当被调用时,它向再现目标再现所述视件对象的树。39.如权利要求37所述的系统,其特征在于,所述视件对象的树被包含在一视件集合对象中。40.如权利要求26所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将所述视件对象放置到所述场景图数据结构中。41.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一画刷关联于所述视件对象。42.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一几何结构关联于所述视件对象。43.如权利要求42所述的系统,其特征在于,所述几何结构包括包含下列的集合中的至少一个椭圆几何结构、矩形几何结构、直线几何结构和路径几何结构。44.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一变换关联于所述视件对象。45.如权利要求44所述的系统,其特征在于,所述变换包括一旋转变换,用于改变所述对象的感知角度。46.如权利要求44所述的系统,其特征在于,所述变换包括一比例縮放变换,用于改变所述视件对象的感知大小。47.如权利要求44所述的系统,其特征在于,所述变换包括一平移变换,用于改变所述视件对象的感知位置。48.如权利要求44所述的系统,其特征在于,所述变换包括一偏斜变换,用于改变所述视件对象的感知偏斜。49.如权利要求44所述的系统,其特征在于,还包括关联于所述变换的动画信息,并且其中,所述动画信息使关联于所述变换的变换数据随时间而改变,从而随时间对所述视件对象的变换制作动画。50.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一色彩关联于所述视件对象。51.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将渐变数据关联于所述视件对象。52.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一拼贴画刷关联于所述视件对象。53.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一图像关联于所述视件对象。54.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将三维数据关联于所述视件对象。55.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一包含绘元的绘图关联于所述视件对象。56.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将音频和/或视频媒体关联于所述视件对象。57.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一图像效果关联于所述视件对象。58.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一笔关联于所述视件对象,来描述如何勾画形状。59.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以获得关联于所述视件对象的绘图上下文。60.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将命中测试数据关联于所述视件对象。61.如权利要求40所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以将一矩形关联于所述视件对象。62.如权利要求61所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以描述应如何拉伸一源矩形以适合一相应于所述视件对象的目标矩形。63.如权利要求61所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以描述应如何在对应于所述视件对象的容器内如何垂直定位内容。64.如权利要求61所述的系统,其特征在于,所述对象模型的对象的至少一个函数被调用,以描述应如何在对应于所述视件对象的容器内水平定位内容。全文摘要一种在应用编程接口(API)和对象模型中实现的方法和系统允许程序代码开发者以一致的方式与场景图数据结构接口来输出图形。通过该接口,程序代码书写绘元,如几何结构、图像数据、动画数据和其它数据到表示绘图表面的视件,包括确认视件对象、绘图视件对象和表面视件对象。该代码还能够指定视件上的变换、裁剪和不透明属性,并且向其它视件添加子视件以构建一分层场景图。一视件管理器遍历该场景图以向低级图形组件提供丰富的图形数据。文档编号G06F3/14GK101421761SQ200480001671公开日2009年4月29日申请日期2004年7月28日优先权日2003年10月23日发明者A·M·史密斯,D·B·柯蒂斯,E·S·范登贝格,G·A·斯奈德,J·S·蓓达,K·T·加洛申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1