使用KOMPAS-3D API→第12课→复合线

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




课程系列“使用KOMPAS-3D API的工作”的内容


  1. 基础知识
  2. 图纸设计
  3. 正确连接到KOMPAS
  4. 主题词
  5. 图形图元
  6. 以各种格式保存文档
  7. 了解设置
  8. 标题栏中更复杂的书写方法
  9. 读取字幕单元
  10. 特殊字符,包括字符串
  11. 简单文字标签
  12. 复合弦

尽管所描述的构造偏差和分数的方法没有记录,但正如我的实验所示,它们在现代版本的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_ONBOLD_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的应用程序开发》一书的作者。

Source: https://habr.com/ru/post/zh-CN424509/


All Articles