在应用程序内创建和布局图形的方法、系统和计算机可读介质的制作方法

文档序号:6642775阅读:157来源:国知局
专利名称:在应用程序内创建和布局图形的方法、系统和计算机可读介质的制作方法
相关申请的参照本申请涉及2004年9月30日提交的名为“Editing The Text Of An ArbitraryGraphic Via A Hierachical List(通过分层列表编辑任意图形的文本)”的美国专利申请第______号,且与其同时提交,该申请转让给与本发明相同的受让人。以上专利申请通过引用明确地整体结合于此。
背景技术
现代软件应用程序,包括文字处理程序和专用绘图应用程序,使用户能够创建简单和复杂的图形。这些绘图程序允许用户使用可用文本注释的各种形状来创建图形。由这些应用程序创建的图形可以是独立的文档或结合到文本文档中。尽管存在现代绘图程序提供的优点,然而这些程序仍遭受妨碍典型用户对图形的创建和布局的若干缺点。
现代绘图程序的一个缺点是尽管它们可提供用于创建图形的工具,然而许多用户不知道这些现有工具,或者不知道如何有效地使用它们。结果,用户或者创建其自己的图形,或者不正确地使用图形工具,导致具有不对齐的形状以及应当具有相同字体大小而实际却没有的文本的图形。现代绘图程序的另一缺点是包含文本的形状不对添加的或增大的文本自动重新调整字体或扩展其尺寸,使得文本保持完全被封闭在形状中。现代绘图程序的又一缺点是它们提供严格的布局或完全不提供布局。没有布局的程序要求用户对每一形状手动定大小和定位,具有严格布局的程序不允许用户对形状的大小或位置做出任何改变或定制。
本发明的各实施例正是相对于这些和其它考虑事项而做出的。

发明内容
依照本发明,以上和其它问题由一种方法、装置和计算机可读介质来解决,它们用于基于将数据和关系变换成特定图形布局的一组约束在绘图应用程序内创建和布局图形。该方法包括接收定义数据以及在图形中表示的数据之间的关系的数据模型、接收定义要创建的图形的图形定义、通过将数据从数据模型映射到图形定义中的信息来生成布局树、依照图形定义中指定的约束值和约束规则来确定图形形状的大小和位置、以及使用来自布局树的信息来创建图形的形状列表。这些形状然后可由任何呈现应用程序来呈现,以获得最终的图形。
为将数据从数据模型映射到图形定义中的信息,该方法反复通过数据模型,并应用图形定义中指定的准则来对构造图形所需的每一形状确定算法、约束、约束规则和形状属性。这些数据集然后被添加到布局树,该布局树是图形结构的分层表示。
为确定图形形状的大小和位置,该方法访问图形定义中的算法、约束和约束规则。算法来自一组无限制的潜在算法,它们知道如何对形状定大小和定位以获得特定的图形布局,诸如在圆形路径中布局形状或在直线路径中布局形状。算法使用约束或起始值,以及约束规则或用于在一范围内改变那些起始值的指令,基于形状的数目、每一形状内文本的数量、以及其中将要布局形状的区域的尺寸,来确定形状的大小和位置。
本发明可被实现为计算机过程、计算系统、或诸如计算机程序产品或计算机可读介质等制品。计算机程序产品可以是计算机系统可读的、且编码用于执行计算机过程的指令的计算机程序的计算机存储介质。计算机程序产品也可以是计算系统可读的、且编码用于执行计算机过程的指令的计算机程序的载波上的传播信号。
阅读以下详细描述,并观察附图,表征本发明的这些和各种其它特征以及优点将变得显而易见。


图1是示出在本发明的各实施例中使用且由各实施例提供的计算机系统的计算机系统体系结构图,图2是依照本发明的各实施例,用于在图1的计算机系统中的绘图应用程序内创建和布局图形的各组件的框图,图3是依照本发明的各实施例的说明性布局树的框图,图4是依照本发明的各实施例用于生成布局树的说明性图形定义的一部分的框图,以及图5是依照本发明的一个实施例,由图1的计算机系统中的绘图应用程序执行的、用于创建和布局图形的说明性例程。
具体实施例方式
现在参考附图,将描述本发明的各方面,附图中,相同的标号表示相同的元素。具体地,图1和对应的讨论旨在提供其中可实现本发明的各实施例的合适的计算环境的简要概括描述。尽管将在结合运行在个人计算机上的操作系统上的应用程序执行的程序模块的一般上下文中描述本发明,然而本领域的技术人员将认识到,本发明也可结合其它类型的计算机系统和程序模块来实现。
一般而言,程序模块包括例程、程序、组件、数据结构以及其它类型的结构,它们执行特定的任务或实现特定的抽象数据类型。此外,本领域的技术人员将理解,本发明可以用其它计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、小型机、大型机等等。本发明也可在分布式计算环境中实施,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
现在参考图1,将描述在本发明的各实施例中使用的计算机2的说明性计算机体系结构。图1所示的计算机体系结构示出了常规台式或膝上计算机,包括中央处理单元5(“CPU”)、系统存储器7(包括随机存取存储器9(“RAM”)和只读存储器(“ROM”)11)、以及将存储器耦合至CPU5的系统总线12。包含例如在启动时有助于在计算机内的元件之间传输信息的基本例程的基本输入/输出系统储存在ROM11中。计算机2还包括大容量存储设备14,用于储存操作系统16、应用程序以及其它程序模块,这些将在下文详细描述。
大容量存储设备14通过连接至总线12的大容量存储控制器(未示出)连接到CPU5。大容量存储设备14及其相关联的计算机可读介质为计算机2提供了非易失性存储。尽管此处包含的计算机可读介质的描述指的是大容量存储设备,如硬盘或CD-ROM驱动器,然而本领域的技术人员应当理解,计算机可读介质可以是可由计算机2访问的任何可用介质。
作为示例而非局限,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它固态存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机2访问的任一其它介质。
依照本发明的各实施例,计算机2可以使用通过诸如因特网等网络18到远程计算机的逻辑连接在网络化环境中操作。计算机2可以通过连接到总线12的网络接口单元20连接到网络18。应当理解,网络接口单元20也可用于连接到其它类型的网络和远程计算机系统。计算机2也可包括输入/输出控制器22,用于接收和处理来自包括键盘、鼠标或电子触针(图1中未示出)的多个其它设备的输入。类似地,输入/输出控制器22可向显示屏幕、打印机或其它类型的输出设备提供输出。
如上所述,多个程序模块和数据文件可储存在计算机2的大容量存储设备14和RAM9中,包括适用于控制网络化个人计算机的操作的操作系统16,如来自华盛顿州雷蒙德市微软公司的WINDOWS XP操作系统。大容量存储设备14和RAM9也可储存一个或多个程序模块。具体地,大容量存储设备14和RAM9可储存绘图应用程序10。绘图应用程序10可用于提供用于诸如图形24等图形的创建和布局的功能。依照本发明的一个实施例,绘图应用程序10包括来自微软公司的OFFICE应用程序套件,包括WORD、EXCEL和POWERPOINT应用程序。现在参考图2,依照本发明的各实施例,示出了在绘图应用程序10内创建和布局图形时使用的各种组件的框图。各种组件包括数据模型30、图形定义40、布局树50、算法60以及形状列表70。在本发明的各实施例中,绘图应用程序10在图形定义40中读取关于图形的创建和布局的指令。可以理解,在本发明的一个实施例中,数据模型30和图形定义文件40可被储存为计算机系统2中可由绘图应用程序10访问的各个文件。
数据模型30包括节点、关系、文本和包含用于构造图形24的内容的属性的集合。图形定义40是描述如何创建特定图形布局的数据的集合。在本发明的各实施例中,图形定义40可以依照可扩展标记语言(“XML”)来格式化。如本领域的技术人员所理解的,XML是一种用于传递数据的标准格式。在XML数据格式中,使用模式来提供具有控制所传递的数据的类型和结构的一组语法和数据类型的XML数据。XML数据格式对本领域的技术人员是公知的,并且因此不在此详细讨论。由图形定义40描述的图形的各方面包括对每一布局节点使用的布局算法名称、算法参数、约束、以及用于构造布局树的约束规则、形状几何结构和样式属性的默认值、图形分类数据以及样本数据模型。
约束是由布局算法用于创建图形的条件。约束的一个示例是用于形状宽度的值。可以理解,约束可包括数字值或布尔值。数字约束可指定特定数字值(例如,宽度=1英寸)。数字约束也可通过使用引用来引用其它约束值来计算其值(例如,高度=宽度×0.75)。布尔约束可包括迫使集合中的所有节点对另一约束具有同一值的等式约束,并可包括其中一个约束值基于另一约束值而收限制的不等式约束(例如,形状的宽度需要小于或大于另一形状的高度)。约束可以在布局节点之间传播,以在绘图元素之间实施等式(例如,所有的正常节点具有相同的字体大小)或不等式(例如,过渡节点的宽度应当<=正常节点的宽度)。约束可通过将共享的传播程序附加到向其它布局节点传播其状态的约束来传播。可以理解,约束和约束规则都可以根据传播约束在其它节点上更新。约束规则是对于如果一组约束不能被布局算法满足则如何修改该组约束的描述。例如,约束可指定字体大小必须是14磅,但是约束规则可指定字体大小可减小到最小8磅。图形定义40将在下文参考图4更详细讨论。
布局树34是呈现元素或布局节点的集合。布局节点是布局树中表示形成图形24的元素的一个形状或形状组的节点。布局节点可任选地被链接到数据模型30的节点。布局树34储存关于将组成图形的形状的数据,包括各自的几何结构、属性、文本拟合以及形状放置。
绘图应用程序10通过将来自数据模型的数据映射到图形定义中的图形布局信息以构造布局节点,并将算法、约束和约束规则与这些布局节点相关联,来构造布局树。它然后在构造用于在绘图画布上呈现图形24的形状列表50之前使用该算法、约束和约束规则来确定形状尺寸、文本拟合和形状放置。布局节点将在下文更详细讨论。布局树34将在下文参考图3更详细讨论。
现在参考图3,依照本发明的各实施例,示出了布局树34的一个实例的框图。应当理解,图3所示的布局树是说明性的,且该布局树可以更大或更小,取决于图形的数据量以及如何定义图形布局。布局树34包括在布局图形24时要使用的布局节点的分层排列。在本例中,布局节点表示要包含该图形的总页面区域一页面节点62。页面节点62的子节点(或第二层节点)包括图形节点64、标题节点66以及标注节点67。图形节点64的子节点包括第一层节点68、第二层节点70以及第三层节点72,它们表示构成图的图形,并映射回数据模型元素。第三层节点也具有子节点74(点A)和76(点B),它们表示可视形状并且也映射回数据模型元素。
现在参考图4,依照本发明的各实施例,示出了图形定义40的一部分的框图。如图4所示,图形定义的实现基于定义图形24的布局的XML模式。该XML模式包括LayoutNode(布局节点)标签47,它具有子标签,包括定义用于由布局节点布局图形的算法类型(即,pyramid)的Algorithm(算法)标签、用于定义可由布局节点在图形中使用的形状(即,trapezoid)的Shapes(形状)标签48、以及用于定义约束的Constraints(约束)标签49。
现在参考图5,将描述说明性例程500,它示出了由绘图应用程序10执行的、用于创建和布局图形的过程。当阅读此处所给出的例程的讨论时,应当理解,本发明的各实施例的逻辑操作被实现为(1)运行在计算机系统上的计算机实现的动作或程序模块的序列,和/或(2)计算系统内互连的机器逻辑电路或电路模块。实现是取决于实现本发明的计算系统的性能要求的选择问题。因此,图5所示且构成此处描述的本发明的实施例的逻辑操作以不同的方式被称为操作、结构设备、动作或模块。本领域的技术人员可以认识到,这些操作、结构设备、动作和模块可以用软件、固件、专用数字逻辑以及其任一组合来实现,而不脱离如所附权利要求书中所述的本发明的精神和范围。
现在参考图5,例程500在操作510开始,其中绘图应用程序10接收定义要在创建的图形中表示的数据和数据关系的数据模型。可以理解,依照图形定义中指定的模式,数据和数据关系确定了由布局框架生成的布局树34中每一布局节点的类型和数目。
例程500从操作510继续到操作520,其中绘图应用程序10接收图形定义,它描述了将来自数据模型的数据映射到指定算法、参数、约束、约束规则和形状属性的布局节点的一种可能性。可以理解,图形定义40可以作为储存在计算机2中的单独文件,诸如XML文件来检索。以此方式,提供了对新图形定义的开发的支持,该新图形定义可由用户添加,使得它们可由绘图应用程序10来读取。可创建和检索新图形定义,而不会改变布局框架,从而允许扩展绘图应用程序可布局的一组图形。
图形定义提供了用于应用算法、参数、约束和约束条件的模式。如此处所定义的,算法是用于对形状和文本定位和定大小的布局例程。例如,一种算法可在直线路径上布局形状,而另一种算法可在圆形路径上布局图形。可以理解,算法可采用参数来确定各种放置选项。例如,直线算法具有关于方向和方位的参数,它们可通过绘图应用程序10中的各种绘图工具命令来控制。例如,可在绘图应用程序10中提供用于改变布局算法的参数之一来改变图形的方位(例如,从左到右与从右到左)或旋转图形的工具。算法也可对布局框架是外部的,并可被添加来扩展可在不改变布局框架的情况下创建的图形的范围。
例程500从操作520继续到操作530,其中绘图应用程序10从所接收的数据模型和所接收的图形定义生成布局树。具体地,绘图应用程序10“走查”数据模型30中的节点,并依照图形定义(也可由XML模式定义)将来自数据模型的节点和关系映射到特定的形状和默认的样式属性(例如,格式化和文本属性)。如以上参考图2所讨论的,布局树34包括关于将组成图形的形状的数据,包括各自的几何结构、属性、文本拟合以及形状放置。可以理解,布局树是通过反复通过数据模型30并基于图形定义中所定义的模式创建布局节点来创建的。迭代程序提供了用于通过指示如何读取数据模型中的元素并将其映射到布局节点模式来构造布局树的指令。
例程500从操作530继续到操作540,其中绘图应用程序10使用来自图形定义的算法、参数、约束和约束规则对布局树中的布局节点确定形状的大小和位置。例程500从操作540继续到操作550,其中绘图应用程序10基于约束值确定要呈现的图形是否拟合绘图画布上的布局空间。
如果在操作550,要呈现的图形不拟合绘图画布上的布局空间,则例程500继续到操作560,其中绘图应用程序10使用约束规则修改约束值来将图形拟合到布局空间中。具体地,布局树34中的布局节点可包括一组有序约束规则,绘图应用程序10可利用该组规则来改变约束值,以试图在布局空间内成功地布局图形。依照本发明的各实施例,绘图应用程序10连续地尝试每一规则,仅当当前规则不允许图形在布局空间内拟合时才移到下一规则。可以理解,一旦应用程序10完成了穿过规则列表,它将自动访问一回退(fallback)规则列表,该回退规则列表通过将形状和字体大小收缩到非常小的尺寸、截断文本、或不将形状放置在布局空间中,来迫使绘图元素在绘图画布上的布局空间中拟合。
应当理解,上述图形元素包括形状以及拟合在形状内的文本。由此,绘图应用程序10也可在操作550确定是否有任何文本不拟合在绘图画布上的布局空间中的形状内。可以理解,文本约束规则以及其它规则也可被包括在布局节点的约束规则列表中,以确定应用各种技术来拟合文本的顺序。这些技术可包括增大形状的尺寸或改变文本拟合约束(例如,调整边距和字体大小)。文本算法与其中数据模型中存在数据的布局树的布局节点相关联。其它规则可包括用于确定两个图形元素之间的间距量的算法。还可以理解,其它规则可使用用于确定两个图形元素之间的间距量、图形元素的相对位置等的算法。
如果在操作550,要呈现的图形不拟合绘图画布上的布局空间,则例程500分支到操作570,其中,绘图应用程序10基于在操作540中确定的布局树数据为要创建的图形创建形状列表。一旦映射了来自数据模型30的节点以及与特定形状或形状属性的关系,则可在绘图画布上呈现该形状列表。例程500然后结束。
基于以上内容,应当理解,本发明的各实施例包括用于管理电子文档中的特定类型内容的方法、装置和计算机可读介质。以上说明书、示例和数据提供了对本发明的组成部分的制造和使用的完整描述。由于可以在不脱离本发明的精神和范围的情况下做出本发明的许多实施例,因此本发明归于所附权利要求书。
权利要求
1.一种用于在应用程序内创建和布局图形的方法,包括接收数据模型,所述数据模型定义了要在所述图形中表示的一组数据和数据关系,接收图形定义,所述图形定义描述了来自所述数据模型的数据到布局节点、算法、参数、约束、约束规则和形状属性的映射,以及使用与所述布局节点相关联的算法、参数、约束、约束规则和形状属性,对所述图形中的形状确定形状大小和位置。
2.如权利要求1所述的方法,其特征在于,所述图形定义指定了用于将所述数据模型中的元素映射到所述布局节点以及与所述布局节点相关联的一组算法、参数、约束和约束规则的迭代程序。
3.如权利要求1所述的方法,其特征在于,还包括指定多个外部图形定义,其中,所述多个外部图形定义的每一个指定了生成特定图形所需的信息,所述信息包括附加映射条件、算法、参数、约束、约束规则和形状属性。
4.如权利要求1所述的方法,其特征在于,还包括指定多个外部算法,其中,所述多个外部算法的每一个指定了为获得特定图形结构的形状布局,并且其中,所述外部算法的每一个由图形定义引用。
5.如权利要求1所述的方法,其特征在于,所述图形中的形状的形状大小和位置是由所述算法组中的算法使用对应布局节点中的约束和约束规则来定义的。
6.如权利要求1所述的方法,其特征在于,所述约束包括用于指定由所述算法使用的值的数字约束,并且其中,所述数字约束包括特定值。
7.如权利要求6所述的方法,其特征在于,所述数字约束是由对其它约束值的引用导出的。
8.如权利要求1所述的方法,其特征在于,所述约束值依照一组约束规则来修改以对所述布局节点定大小和定位。
9.如权利要求1所述的方法,其特征在于,所述约束包括用于指定值跨形状的等式和不等式的布尔约束,并且其中,数字约束值被传播到由所述布尔约束指定的形状。
10.如权利要求1所述的方法,其特征在于,多个布局节点彼此传递约束值,以使能够使用所述约束来对所述布局节点定大小和定位。
11.如权利要求1所述的方法,其特征在于,所述图形定义是以标记语言来书写的。
12.如权利要求9所述的方法,其特征在于,所述标记语言是可扩展标记语言(XML)。
13.一种用于在绘图应用程序中创建和布局图形的系统,包括用于执行接收数据模型的程序代码的客户机计算机,所述数据模型定义了要在所述图形中表示的一组数据和数据关系,接收图形定义,所述图形定义描述了来自所述数据模型的数据到布局节点、算法、参数、约束、约束规则和形状属性的映射,以及使用与所述布局节点相关联的算法、参数、约束、约束规则和形状属性,对所述图形中的形状确定形状大小和位置。
14.如权利要求13所述的系统,其特征在于,所述图形定义指定了用于将所述数据模型中的元素映射到所述布局节点以及与所述布局节点相关联的一组算法、参数、约束和约束规则的迭代程序。
15.如权利要求13所述的系统,其特征在于,所述程序代码还用于指定多个外部图形定义,其中,所述多个外部图形定义的每一个指定了生成特定图形所需的信息,所述信息包括附加映射条件、算法、参数、约束、约束规则和形状属性。
16.如权利要求13所述的系统,其特征在于,所述程序代码还用于指定多个外部算法,其中,所述多个外部算法的每一个指定了为获得特定的图形结构的形状布局,并且其中,所述外部算法的每一个由图形定义引用。
17.如权利要求13所述的系统,其特征在于,所述图形中的形状的形状大小和位置是由所述算法组中的算法使用对应的布局节点中的约束和约束规则来定义的。
18.如权利要求13所述的系统,其特征在于,所述约束包括用于指定由所述算法使用的值的数字约束,并且其中,所述数字约束包括特定值。
19.如权利要求18所述的系统,其特征在于,所述数字约束是由对其它约束值的引用导出的。
20.如权利要求13所述的系统,其特征在于,所述约束值依照所述约束规则来修改以对所述布局节点定大小和定位。
21.如权利要求13所述的系统,其特征在于,所述约束包括用于指定值跨形状的等式和不等式的布尔约束,并且其中,所述数字约束值被传播到由所述布尔约束指定的形状。
22.如权利要求13所述的系统,其特征在于,多个布局节点彼此传递约束值,以使能够使用所述约束对所述布局节点定大小和定位。
23.如权利要求13所述的系统,其特征在于,所述图形定义是以标记语言来书写的。
24.如权利要求23所述的系统,其特征在于,所述标记语言是可扩展标记语言(XML)。
25.一种其上储存有计算机可执行指令的计算机可读介质,当所述指令由计算机执行时,将使所述计算机执行一种用于在应用程序内创建和布局图形的方法,所述方法包括接收数据模型,所述数据模型定义了要在所述图形中表示的一组数据和数据关系,接收图形定义,所述图形定义描述了来自所述模型的数据到布局节点、算法、参数、约束、约束规则和形状属性的映射,以及使用与所述布局节点相关联的算法、参数、约束、约束规则和形状属性,对所述图形中的形状确定形状大小和位置。
26.如权利要求25所述的计算机可读介质,其特征在于,所述图形定义指定了用于将所述数据模型中的元素映射到所述布局节点以及与所述布局节点相关联的一组算法、参数、约束和约束规则的迭代程序。
27.如权利要求25所述的计算机可读介质,其特征在于,还包括指定多个外部图形定义,其中,所述多个外部图形定义的每一个指定了生成特定图形所需的信息,所述信息包括附加映射条件、算法、参数、约束、约束规则和形状属性。
28.如权利要求25所述的计算机可读介质,其特征在于,还包括指定多个外部算法,其中,所述多个外部算法的每一个指定了为获得特定图形结构的图形布局,并且其中,所述外部算法的每一个由图形定义引用。
29.如权利要求25所述的计算机可读介质,其特征在于,所述图形中的形状的形状大小和位置是由所述算法组中的算法使用对应的布局节点中的约束和约束规则来定义的。
30.如权利要求25所述的计算机可读介质,其特征在于,所述约束包括用于指定由所述算法使用的数字约束,并且其中,所述数字约束包括特定值。
31.如权利要求30所述的计算机可读介质,其特征在于,所述数字约束是由对其它约束值的引用导出的。
32.如权利要求25所述的计算机可读介质,其特征在于,所述约束值依照一组约束规则来修改,以对所述布局节点定大小和定位。
33.如权利要求25所述的计算机可读介质,其特征在于,所述约束包括用于指定值跨形状的等式和不等式的布尔约束,并且其中,所述数字约束值被传播到由所述布尔约束指定的形状。
34.如权利要求25所述的计算机可读介质,其特征在于,多个布局节点彼此传递约束值,以使能够使用所述约束来对所述布局节点定大小和定位。
35.如权利要求25所述的计算机可读介质,其特征在于,所述图形定义是以标记语言来书写的。
36.如权利要求35所述的计算机可读介质,其特征在于,所述标记语言是可扩展标记语言(XML)。
全文摘要
提供了一种用于在绘图应用程序内创建和布局图形的方法、装置和计算机可读介质。该方法包括接收定义要在图形中表示的一组数据和数据关系的模型;接收描述来自数据模型的数据到一组算法、算法参数、约束、约束规则和形状属性的映射的图形定义;使用来自图形定义的该组算法、约束和约束规则对布局节点确定形状大小和位置;以及对该图形创建形状和形状属性列表,包括大小和位置。该方法还包括基于该组约束值确定图形是否将给定布局拟合到特定区域中,并且如果图形不拟合特定区域,则使用约束规则来修改该组约束值。
文档编号G06F17/30GK1755623SQ20051009965
公开日2006年4月5日 申请日期2005年8月30日 优先权日2004年9月30日
发明者J·L·肖尔, S·T·韦尔斯, M·科特勒, T·C·昂得希尔, S·A·舍曼, I·伯科 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1