Extensible 3D (X3D)
Part 1: Architecture and base components

15 Text component

文本组件

--- X3D separator bar ---

cube 15.1 介绍

15.1.1 名称

这部分组件的名称是 "Text"。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。

15.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Text component(文本组件)。表 15.1 列出了这一条款的主要主题。

表 15.1 — 主体

cube 15.2 概念

15.2.1 文本语义

15.2.1.1 概述

Text(文本)在 X3D 中处理为几何体。当指定一个文本为将显示的文本时需要特殊的考虑。这一子条款描述了在 X3D 中使用 Text 节点指定文本值的方法。15.2.2 文本格式 中描述了文本格式。

15.2.1.2 外观

纹理按以下方式应用到文本上。纹理原点位于第一个字符的原点,字符的原点由对齐方(justification)决定。纹理在 S 和 T 方向上比例相同,用字体高度表示坐标单位 1。增长的 S 表示向右,增长的 T 表示向上。

12 Shape component 中指定了 Appearance、Material、纹理如何和光照的相作用。17 Lighting component 指定了 X3D 光照方程。

15.2.2 文本格式

15.2.2.1 介绍

文本版式和格式由很长的历史。此标准中也指定了 X3D 中用来支持不同语言和版式样式的技术。

15.2.2.2 字体和字形

字体属性由 family(字体)和 style(字形)域定义。浏览器应按以下描述的方式把指定的字体属性映射为一个适当的可用的字体。

family 域包含一个大小写敏感的 MFString 值,以按优先顺序指定了一个字体名称的序列。浏览器应在 MFString 值中寻找第一个所支持的字体表中匹配的字体名。如果没有字体名和支持的字体匹配,则应使用缺省的字体 "SERIF"。所有的浏览器至少应支持一个如 Times Roman 之类的 serif(笔画衬线)字体所用的 "SERIF"(缺省值);和一个如 Helvetica 之类的 sans-serif(无笔画衬线)字体所用的 "SANS" ;和一个如 Courier 之类的等宽字体所用的 "TYPEWRITER" 。空的 family 值和 ["SERIF"] 等同。任何的字体可以按以下范例中方式来指定:

    ["Lucida Sans Typewriter", "Lucida Sans", "Helvetica", "SANS"]

这个例子中,浏览器应先在运作浏览器的系统中查找字体 "Lucida Sans Typewriter",如果这个字体不可用,则浏览器将查找 "Lucida Sans"。如果这个字体也不可用,则浏览器将查找 "Helvetica"。如果这个字体也不可用,则浏览器将查找任何 sans-serif 字体。如果没有安装任何 sans-serif 字体,浏览器将使用任何的 serif 字体(缺省值)。如何指定合适的字体列表,以使字体在多数的操作系统环境中显示为期望的外观,将由创作者负责。然而,创作者应总考虑到所需的字体可能在客户系统上不可用,从而将使用浏览器选定的 "SERIF" 字体。

style(字形)域指定了一个一个大小写敏感的 SFString 值,此值可以为缺省的普通字形使用的 "PLAIN"(缺省值);粗体字形所用的 "BOLD";斜体字形所用的 "ITALIC";加粗斜体字形所用的 "BOLDITALIC"。空的 style 值 ("") 等同于 "PLAIN"。在所要求的字形不可用的情况下,将使用和所要求的字形最接近的可用字形。例如,一些字体指定包含 Demibold 字形而不是 Bold。在这种情况下,指定的 "BOLD" 将由浏览器使用 Demibold 作为最接近的替代字形。

15.2.2.3 方向和对齐方式

horizontalleftToRighttopToBottom 域指示了文本的方向。horizontal(水平)域指示了文本将水平地排列在其主方向上(horizontal = TRUE,缺省值)还是垂直地排列在其主方向上(horizontal = FALSE)。leftToRighttopToBottom 域指示文本排列的方向是在 版式主轴上(所有字符在一个字符串中)还是在次轴上(每个字符在每个独立字符串中)。哪一个域作为主方向和哪一个域作为次方向由 horizontal 域决定。注意指定的方向将覆盖由任何特定语言继承的模式。

对于水平文本(horizontal = TRUE),文本行中的字符,如果 leftToRightTRUE 时沿正 X 方向排列,如果 leftToRightFALSE 时沿负 X 方向排列。字符按其固有的宽度排列。每个字符行如果 topToBottomTRUE 时沿负 Y 方向排列,如果 topToBottomFALSE 时沿正 Y 方向排列。行将按 size × spacing 的间距排列。

对于垂直文本(horizontal = FALSE),文本行中的字符,如果 topToBottomTRUE 时沿负 Y 方向排列,如果 topToBottomFALSE 时沿正 Y 方向排列。字符按其固有的宽度排列。每个字符行如果如果 leftToRightTRUE 时沿正 X 方向排列,如果 leftToRightFALSE 时沿负 X 方向排列。行将按 size × spacing 的间距排列。

justify 域决定了文本版式顶边和对象坐标系原点的对齐方式。justify 域为一个可以包含两个值的 MFString。第一个值指定了沿主轴的对齐方式,第二个值指定了沿次轴的对齐方式,其中主轴次轴由 horizontal 域决定。空 justify 值("")等同于缺省值。如果指定次轴对齐方式的字符串没有被指定,则其缺省值为 "FIRST"。因此,justify 值 ""、"BEGIN"、["BEGIN" "FIRST"] 都是等效的。

主对齐方式在 horizontalTRUE 时沿 X 轴,在 horizontalFALSE 时沿 Y 轴。次对齐方式在 horizontalTRUE 时沿 Y 轴,horizontal FALSE 时沿 X 轴。justify 域可用的枚举值为 "FIRST", "BEGIN", "MIDDLE", "END"。对于主对齐方式,根据其枚举值,每一个文本行将分别定位。对于次对齐方式,包括所有文本行的版块将根据其枚举值定位。表 15.2-15.5 描述了根据文本的哪一部分位于原点来决定的对齐行为。

Table 15.2 — Major Alignment, horizontal = TRUE

justify Enumerant leftToRight = TRUE leftToRight = FALSE
 FIRST  Left edge of each line  Right edge of each line
 BEGIN  Left edge of each line  Right edge of each line
 MIDDLE  Centred about X-axis  Centred about X-axis
 END  Right edge of each line  Left edge of each line

Table 15.3 — Major Alignment, horizontal = FALSE

justify Enumerant topToBottom = TRUE topToBottom = FALSE
 FIRST  Top edge of each line  Bottom edge of each line
 BEGIN  Top edge of each line  Bottom edge of each line
 MIDDLE  Centred about Y-axis  Centre about Y-axis
 END  Bottom edge of each line  Top edge of each line

Table 15.4 — Minor Alignment, horizontal = TRUE

justify Enumerant topToBottom = TRUE topToBottom = FALSE
FIRST Baseline of first line Baseline of first line
 BEGIN  Top edge of first line  Bottom edge of first line
MIDDLE Centred about Y-axis Centred about Y-axis
END Bottom edge of last line Top edge of last line

Table 15.5 — Minor Alignment, horizontal = FALSE

justify Enumerant leftToRight = TRUE leftToRight = FALSE
FIRST Left edge of first line Right edge of first line
BEGIN Left edge of first line Right edge of first line
MIDDLE Centred about X-axis Centred about X-axis
END Right edge of last line Left edge of last line

缺省的次对齐方式为 "FIRST"。这是 horizontalTRUE 时的一种次对齐方式的特殊情况。文本从位于 Y 轴的基线开始。在其它情况下,"FIRST" 等同于 "BEGIN"。在 表 15.6 和表 15.7 中,每一个彩色十字指示了 X 轴和 Y 轴相对文本的位置。附图 15.1 描述了表 15.6 和表 15.7 中使用的符号。

Key for Tables 14.6 and 14.7

Figure 15.1 — Key for Tables 15.6 and 15.7

Table 15.6 — horizontal = TRUE

horizontal = TRUE

Table 15.6 — horizontal = FALSE

horizontal = FALSE

15.2.2.4 Language

language 域以语言和国家的形式指定了文本字符串上下文中使用的语言。语言和国家都使用 2.[RFC3066] 中定义的语言标签来指定,这可以是指定地区(使用 2.[I3166] 中指定的三字符编码),或按 2.[RFC3066] 指定一个语言(使用 2.[I639] 中指定的双字符编码)和地区(使用 2.[I3166] 中指定的三字符编码)的子标签结构。语言标签包含一个到八个字符。注意语言标签中使用的字符为 Basic Latin alphabet(基本拉丁字母表)中的 UTF-8 编码的单字节字符。

RFC 3066(2.[RFC3066])、ISO/IEC 10646 (2.[I10646-1])、ISO/IEC 639(2.[I639])、ISO 3166(2.[I3166])的信息见 2 Normative references

15.3 抽象类型

15.3.1 X3DFontStyleNode

X3DFontStyleNode : X3DNode { 
  SFNode [in,out] metadata NULL [X3DMetadataObject]
}

此抽象类型为所有 FontStyle 节点的基本节点类型。

15.4 节点参考

15.4.1 FontStyle

FontStyle : X3DFontStyleNode {
  SFNode   [in,out] metadata    NULL    [X3DMetadataObject]
  MFString []       family      "SERIF"
  SFBool   []       horizontal  TRUE
  MFString []       justify     "BEGIN" ["BEGIN"|"END"|"FIRST"|"MIDDLE"|""]
  SFString []       language    ""
  SFBool   []       leftToRight TRUE
  SFFloat  []       size        1.0     (0,∞)
  SFFloat  []       spacing     1.0     [0,∞)
  SFString []       style       "PLAIN" ["PLAIN"|"BOLD"|"ITALIC"|"BOLDITALIC"|""]
  SFBool   []       topToBottom TRUE
}

FontStyle 节点定义了 Text 节点的尺寸(size)、字体(family)、字形(style)(见 15.2.2 文本格式),以及文本字符串的方向和非英语文本的语言规格用的渲染技术。Text 节点的描述见 Text

size 域指定了 Text 节点将被渲染的字符在局部坐标系中的标高,也影响相邻文本行的间距。size 域的值应大于 0。

spacing 域决定了相邻文本行的行距。每个文本行的基线在相应方向上(基于以下描述的其它域)之间的距离为 spacing × size sizespacing 域的效果在 附图 15.2 中描述(spacing 大于 1.0)。spacing 域的值应为非负数。

Text size and spacing fields

附图 15.2 — 文本 size 域和 spacing

15.4.2 Text

Text : X3DGeometryNode {
  SFNode   [in,out] fontStyle NULL  [X3FontSyleNode]
  MFFloat  [in,out] length    []    [0,∞)
  SFFloat  [in,out] maxExtent 0.0   [0,∞)
  SFNode   [in,out] metadata  NULL  [X3DMetadataObject]
  MFString [in,out] string    []
  SFBool   []       solid     FALSE
}

Text 节点指定了一个位于局部坐标系 Z=0 平面的双面的平面文本字符串对象,并根据其 fontStyle 域定位(见 15.4.1 FontStyle)。Text 节点可以包括多个由 UTF-8 编码的文本字符串,UTF-8 编码按照 ISO 10646-1:1993 中的规定(见 2.[I10646-1])。文本字符串 存储的顺序就是按 FontStyle 节点中参数定义生成的文本模式的顺序。

文本字符串被包含在 string 域中。fontStyle 域包含了一个 FontStyle 节点,指定了字体的尺寸、字体、字形、字符串的方向,以及指定语言所用的渲染技术。

当最长字符串在局部坐标系中的测量长度长于 maxExtent 域限制的范围,则文本字符串将被限制和压缩。如果最长字符串短于 maxExtent,则将不会有压缩。对于水平文本(FontStyle 节点中:horizontal=TRUE)最大范围在水平方向上测量,对于垂直文本(FontStyle 节点中:horizontal=FALSE)最大范围在垂直方向上测量。maxExtent 域的值应大于或等于 0。

length(长度)域包含一个 MFFloat 值以指定局部坐标系中每个文本字符串的长度。如果字符串过短,它将被拉伸(或通过缩放或通过添加字符之间的空格)。如果字符串过长,它将被压缩(或通过缩放或通过缩减字符之间的空格)。如果缺少长度值(例如有四个字符串而只有三个长度值),缺少的值将被认为是 0。length 域的值应大于或等于 0。

maxExtentlength 域都指定为 0 时表示字符串可以为任意长度。

11.2.3 Common geometry fields 提供了 solid 域的完整描述。

cube 15.5 支持级别

Text 组件提供 表 15.8 中规定的一个支持级别(levels)。

表 15.8 — Text 组件支持级别

级别
Level
必备条件 节点/特性 支持

1

Core 1
Grouping 1
Shape 1
Rendering 1
X3DFontStyleNode(抽象) n/a
FontStyle 所有域完全支持
Text 所有域完全支持

--- X3D separator bar ---

Site Meter