在上一课中,我们研究了显示简单的字符串。 在这里,我们将讨论复合线的形成,包括偏差和分数。 我们将使用我们先前研究的
ksText方法
生成此类行。 严格来说,此方法并非旨在输出复杂的字符串。 尽管如此,在今天的课程中,我们将熟悉许多在复合线的形成中起关键作用的标志。

课程系列“使用KOMPAS-3D API的工作”的内容
- 基础知识
- 图纸设计
- 正确连接到KOMPAS
- 主题词
- 图形图元
- 以各种格式保存文档
- 了解设置
- 标题栏中更复杂的书写方法
- 读取字幕单元
- 特殊字符,包括字符串
- 简单文字标签
- 复合弦
尽管所描述的构造偏差和分数的方法没有记录,但正如我的实验所示,它们在现代版本的KOMPAS上正确工作(在15、16和17上进行了检查)。 但是此行为可能会在将来的版本中更改。
在以下课程中将介绍构造复合字符串的“正确”方法。
斜体,粗体和下划线
斜体,粗体和带下划线的样式由下表中显示的标志控制。 它们在头文件
ldefin2d.h中声明。

在
ksText方法中
,每个标志的作用仅限于调用此方法。 下面是一个程序示例,该示例演示了不同样式的线条的输出。
Document2D->ksText(100, 100, 0, 0, 0, 0 , SysAllocString(L" ")); Document2D->ksText(100, 90, 0, 0, 0, ITALIC_OFF , SysAllocString(L" ")); Document2D->ksText(100, 80, 0, 0, 0, BOLD_ON , SysAllocString(L" ")); Document2D->ksText(100, 70, 0, 0, 0, UNDERLINE_ON, SysAllocString(L" "));
为简单起见,此示例省略了负责创建和执行文档的代码(在上一课程中讨论了该主题)以及负责资源释放的代码(包括在调用
SysAllocString函数之后)。
请注意:默认情况下,KOMPAS以斜体显示文本。 因此,要取消
斜体,我们使用
ITALIC_OFF标志。 下图显示了该程序输出的行。

配对标志(例如
BOLD_ON和
BOLD_OFF )的同时使用不会影响字符串的显示。 如果未设置这些标志,则显示该内容。
上下偏差
上下偏差使用下表中所示的标志进行设置。

下面是一个程序示例,该示例演示了包含上下偏差的行的输出。
double x = 100.0; double y = 100.0; BSTR str = SysAllocString(L" "); long itext = Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str); x += Document2D->ksGetTextLengthFromReference(itext) + 2.0; str = SysAllocString(L" "); itext = Document2D->ksText(x, y, 0, 0, 0, UPPER_DEVIAT, str); SysFreeString(str); double dx1 = Document2D->ksGetTextLengthFromReference(itext); str = SysAllocString(L" "); itext = Document2D->ksText(x, y, 0, 0, 0, LOWER_DEVIAT, str); SysFreeString(str); double dx2 = Document2D->ksGetTextLengthFromReference(itext); x += max(dx1, dx2); str = SysAllocString(L" "); Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str);
在此示例中,每次我们重新计算所显示线的锚点的坐标以便知道将其输出到何处。 为此,请使用
上一课中介绍的
ksGetTextLengthFromReference方法。 请注意:仅重新计算水平坐标,垂直不改变。 KOMPAS本身确定所需的垂直线偏移。 下图显示了此程序生成的复合行。

分数
分数渲染由下表中列出的标志设置。

下面是一个程序示例,该示例演示了文本字符串中小数的输出。
double x = 100.0; double y = 100.0; BSTR str = SysAllocString(L" "); long itext = Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str); x += Document2D->ksGetTextLengthFromReference(itext) + 2.0; str = SysAllocString(L""); itext = Document2D->ksText(x, y, 0, 0, 0, NUMERATOR, str); SysFreeString(str); double dx1 = Document2D->ksGetTextLengthFromReference(itext); str = SysAllocString(L""); itext = Document2D->ksText(x, y, 0, 0, 0, DENOMINATOR, str); SysFreeString(str); double dx2 = Document2D->ksGetTextLengthFromReference(itext); x += max(dx1, dx2); str = SysAllocString(L" "); Document2D->ksText(x, y, 0, 0, 0, 0, str); SysFreeString(str);
容易注意到,该示例与上一个示例相似。 实际上,偏差和分数的输出仅在所使用的标志方面有所不同。 下图显示了程序的结果。
结论在本课程中,我们研究了
如何使用
ksText方法创建复合字符串。 这里描述的方法是未公开的,因此您不应在应用程序中使用它。 在以下课程中,我们将仔细研究记录的创建复合字符串的方法。 在这里,我们将需要今天遇到的旗帜。
要继续,请关注博客新闻。
Sergey Norseev博士,《在Delphi中进行COMPAS的应用程序开发》一书的作者。