@itwin/core-common 5.1.0-dev.9 → 5.2.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/lib/cjs/BackgroundMapSettings.d.ts +2 -2
  3. package/lib/cjs/BackgroundMapSettings.js.map +1 -1
  4. package/lib/cjs/ChangesetProps.d.ts +28 -0
  5. package/lib/cjs/ChangesetProps.d.ts.map +1 -1
  6. package/lib/cjs/ChangesetProps.js.map +1 -1
  7. package/lib/cjs/ClipStyle.d.ts +1 -1
  8. package/lib/cjs/ClipStyle.d.ts.map +1 -1
  9. package/lib/cjs/ClipStyle.js.map +1 -1
  10. package/lib/cjs/CommonLoggerCategory.d.ts +2 -0
  11. package/lib/cjs/CommonLoggerCategory.d.ts.map +1 -1
  12. package/lib/cjs/CommonLoggerCategory.js +2 -0
  13. package/lib/cjs/CommonLoggerCategory.js.map +1 -1
  14. package/lib/cjs/ConcurrentQuery.d.ts +8 -23
  15. package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
  16. package/lib/cjs/ConcurrentQuery.js +1 -11
  17. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  18. package/lib/cjs/ContextRealityModel.d.ts +8 -8
  19. package/lib/cjs/ContextRealityModel.js +8 -8
  20. package/lib/cjs/ContextRealityModel.js.map +1 -1
  21. package/lib/cjs/ElementProps.d.ts +64 -54
  22. package/lib/cjs/ElementProps.d.ts.map +1 -1
  23. package/lib/cjs/ElementProps.js +6 -6
  24. package/lib/cjs/ElementProps.js.map +1 -1
  25. package/lib/cjs/EntityProps.d.ts +10 -10
  26. package/lib/cjs/EntityProps.d.ts.map +1 -1
  27. package/lib/cjs/EntityProps.js +4 -2
  28. package/lib/cjs/EntityProps.js.map +1 -1
  29. package/lib/cjs/Fonts.d.ts +2 -2
  30. package/lib/cjs/Fonts.js +1 -1
  31. package/lib/cjs/Fonts.js.map +1 -1
  32. package/lib/cjs/GeoCoordinateServices.d.ts +1 -1
  33. package/lib/cjs/GeoCoordinateServices.js +1 -1
  34. package/lib/cjs/GeoCoordinateServices.js.map +1 -1
  35. package/lib/cjs/GeometryParams.d.ts +3 -1
  36. package/lib/cjs/GeometryParams.d.ts.map +1 -1
  37. package/lib/cjs/GeometryParams.js +3 -1
  38. package/lib/cjs/GeometryParams.js.map +1 -1
  39. package/lib/cjs/GraphicParams.d.ts +1 -0
  40. package/lib/cjs/GraphicParams.d.ts.map +1 -1
  41. package/lib/cjs/GraphicParams.js +1 -0
  42. package/lib/cjs/GraphicParams.js.map +1 -1
  43. package/lib/cjs/IModel.d.ts +3 -3
  44. package/lib/cjs/IModel.js.map +1 -1
  45. package/lib/cjs/ITwinCoreErrors.d.ts +1 -1
  46. package/lib/cjs/ITwinCoreErrors.d.ts.map +1 -1
  47. package/lib/cjs/ITwinCoreErrors.js.map +1 -1
  48. package/lib/cjs/MassProperties.d.ts +2 -2
  49. package/lib/cjs/MassProperties.js.map +1 -1
  50. package/lib/cjs/MaterialProps.d.ts +6 -3
  51. package/lib/cjs/MaterialProps.d.ts.map +1 -1
  52. package/lib/cjs/MaterialProps.js.map +1 -1
  53. package/lib/cjs/RenderSchedule.d.ts +14 -0
  54. package/lib/cjs/RenderSchedule.d.ts.map +1 -1
  55. package/lib/cjs/RenderSchedule.js +4 -0
  56. package/lib/cjs/RenderSchedule.js.map +1 -1
  57. package/lib/cjs/RenderTexture.d.ts +1 -1
  58. package/lib/cjs/RenderTexture.d.ts.map +1 -1
  59. package/lib/cjs/RenderTexture.js.map +1 -1
  60. package/lib/cjs/TerrainSettings.d.ts +1 -1
  61. package/lib/cjs/TerrainSettings.d.ts.map +1 -1
  62. package/lib/cjs/TerrainSettings.js.map +1 -1
  63. package/lib/cjs/annotation/TextAnnotation.d.ts +78 -2
  64. package/lib/cjs/annotation/TextAnnotation.d.ts.map +1 -1
  65. package/lib/cjs/annotation/TextAnnotation.js +63 -10
  66. package/lib/cjs/annotation/TextAnnotation.js.map +1 -1
  67. package/lib/cjs/annotation/TextBlock.d.ts +179 -44
  68. package/lib/cjs/annotation/TextBlock.d.ts.map +1 -1
  69. package/lib/cjs/annotation/TextBlock.js +210 -57
  70. package/lib/cjs/annotation/TextBlock.js.map +1 -1
  71. package/lib/cjs/annotation/TextBlockGeometryProps.d.ts +1 -1
  72. package/lib/cjs/annotation/TextBlockGeometryProps.js.map +1 -1
  73. package/lib/cjs/annotation/TextBlockLayoutResult.d.ts +1 -1
  74. package/lib/cjs/annotation/TextBlockLayoutResult.d.ts.map +1 -1
  75. package/lib/cjs/annotation/TextBlockLayoutResult.js.map +1 -1
  76. package/lib/cjs/annotation/TextStyle.d.ts +115 -34
  77. package/lib/cjs/annotation/TextStyle.d.ts.map +1 -1
  78. package/lib/cjs/annotation/TextStyle.js +118 -37
  79. package/lib/cjs/annotation/TextStyle.js.map +1 -1
  80. package/lib/cjs/geometry/AdditionalTransform.d.ts +4 -0
  81. package/lib/cjs/geometry/AdditionalTransform.d.ts.map +1 -1
  82. package/lib/cjs/geometry/AdditionalTransform.js +9 -0
  83. package/lib/cjs/geometry/AdditionalTransform.js.map +1 -1
  84. package/lib/cjs/geometry/ElementGeometry.d.ts +1 -1
  85. package/lib/cjs/geometry/ElementGeometry.d.ts.map +1 -1
  86. package/lib/cjs/geometry/ElementGeometry.js +2 -2
  87. package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
  88. package/lib/cjs/internal/BackendTypes.d.ts +3 -3
  89. package/lib/cjs/internal/BackendTypes.d.ts.map +1 -1
  90. package/lib/cjs/internal/BackendTypes.js.map +1 -1
  91. package/lib/cjs/internal/RenderMesh.d.ts +19 -5
  92. package/lib/cjs/internal/RenderMesh.d.ts.map +1 -1
  93. package/lib/cjs/internal/RenderMesh.js +11 -8
  94. package/lib/cjs/internal/RenderMesh.js.map +1 -1
  95. package/lib/cjs/internal/cross-package.d.ts +1 -1
  96. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  97. package/lib/cjs/internal/cross-package.js.map +1 -1
  98. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts +1 -1
  99. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  100. package/lib/cjs/rpc/IModelReadRpcInterface.js +1 -1
  101. package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
  102. package/lib/cjs/rpc/SnapshotIModelRpcInterface.d.ts +4 -4
  103. package/lib/cjs/rpc/SnapshotIModelRpcInterface.js +4 -4
  104. package/lib/cjs/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  105. package/lib/cjs/rpc/core/RpcConstants.d.ts +6 -6
  106. package/lib/cjs/rpc/core/RpcConstants.d.ts.map +1 -1
  107. package/lib/cjs/rpc/core/RpcConstants.js +6 -6
  108. package/lib/cjs/rpc/core/RpcConstants.js.map +1 -1
  109. package/lib/cjs/rpc/web/OpenAPI.d.ts +1 -1
  110. package/lib/cjs/rpc/web/OpenAPI.js.map +1 -1
  111. package/lib/cjs/rpc/web/WebAppRpcLogging.js.map +1 -1
  112. package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts +2 -2
  113. package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
  114. package/lib/cjs/tile/IModelTileIO.d.ts +2 -2
  115. package/lib/cjs/tile/IModelTileIO.js +2 -2
  116. package/lib/cjs/tile/IModelTileIO.js.map +1 -1
  117. package/lib/cjs/tile/TileMetadata.d.ts +6 -2
  118. package/lib/cjs/tile/TileMetadata.d.ts.map +1 -1
  119. package/lib/cjs/tile/TileMetadata.js +10 -4
  120. package/lib/cjs/tile/TileMetadata.js.map +1 -1
  121. package/lib/esm/BackgroundMapSettings.d.ts +2 -2
  122. package/lib/esm/BackgroundMapSettings.js.map +1 -1
  123. package/lib/esm/ChangesetProps.d.ts +28 -0
  124. package/lib/esm/ChangesetProps.d.ts.map +1 -1
  125. package/lib/esm/ChangesetProps.js.map +1 -1
  126. package/lib/esm/ClipStyle.d.ts +1 -1
  127. package/lib/esm/ClipStyle.d.ts.map +1 -1
  128. package/lib/esm/ClipStyle.js.map +1 -1
  129. package/lib/esm/CommonLoggerCategory.d.ts +2 -0
  130. package/lib/esm/CommonLoggerCategory.d.ts.map +1 -1
  131. package/lib/esm/CommonLoggerCategory.js +2 -0
  132. package/lib/esm/CommonLoggerCategory.js.map +1 -1
  133. package/lib/esm/ConcurrentQuery.d.ts +8 -23
  134. package/lib/esm/ConcurrentQuery.d.ts.map +1 -1
  135. package/lib/esm/ConcurrentQuery.js +1 -11
  136. package/lib/esm/ConcurrentQuery.js.map +1 -1
  137. package/lib/esm/ContextRealityModel.d.ts +8 -8
  138. package/lib/esm/ContextRealityModel.js +8 -8
  139. package/lib/esm/ContextRealityModel.js.map +1 -1
  140. package/lib/esm/ElementProps.d.ts +64 -54
  141. package/lib/esm/ElementProps.d.ts.map +1 -1
  142. package/lib/esm/ElementProps.js +6 -6
  143. package/lib/esm/ElementProps.js.map +1 -1
  144. package/lib/esm/EntityProps.d.ts +10 -10
  145. package/lib/esm/EntityProps.d.ts.map +1 -1
  146. package/lib/esm/EntityProps.js +4 -2
  147. package/lib/esm/EntityProps.js.map +1 -1
  148. package/lib/esm/Fonts.d.ts +2 -2
  149. package/lib/esm/Fonts.js +1 -1
  150. package/lib/esm/Fonts.js.map +1 -1
  151. package/lib/esm/GeoCoordinateServices.d.ts +1 -1
  152. package/lib/esm/GeoCoordinateServices.js +1 -1
  153. package/lib/esm/GeoCoordinateServices.js.map +1 -1
  154. package/lib/esm/GeometryParams.d.ts +3 -1
  155. package/lib/esm/GeometryParams.d.ts.map +1 -1
  156. package/lib/esm/GeometryParams.js +3 -1
  157. package/lib/esm/GeometryParams.js.map +1 -1
  158. package/lib/esm/GraphicParams.d.ts +1 -0
  159. package/lib/esm/GraphicParams.d.ts.map +1 -1
  160. package/lib/esm/GraphicParams.js +1 -0
  161. package/lib/esm/GraphicParams.js.map +1 -1
  162. package/lib/esm/IModel.d.ts +3 -3
  163. package/lib/esm/IModel.js.map +1 -1
  164. package/lib/esm/ITwinCoreErrors.d.ts +1 -1
  165. package/lib/esm/ITwinCoreErrors.d.ts.map +1 -1
  166. package/lib/esm/ITwinCoreErrors.js.map +1 -1
  167. package/lib/esm/MassProperties.d.ts +2 -2
  168. package/lib/esm/MassProperties.js.map +1 -1
  169. package/lib/esm/MaterialProps.d.ts +6 -3
  170. package/lib/esm/MaterialProps.d.ts.map +1 -1
  171. package/lib/esm/MaterialProps.js.map +1 -1
  172. package/lib/esm/RenderSchedule.d.ts +14 -0
  173. package/lib/esm/RenderSchedule.d.ts.map +1 -1
  174. package/lib/esm/RenderSchedule.js +4 -0
  175. package/lib/esm/RenderSchedule.js.map +1 -1
  176. package/lib/esm/RenderTexture.d.ts +1 -1
  177. package/lib/esm/RenderTexture.d.ts.map +1 -1
  178. package/lib/esm/RenderTexture.js.map +1 -1
  179. package/lib/esm/TerrainSettings.d.ts +1 -1
  180. package/lib/esm/TerrainSettings.d.ts.map +1 -1
  181. package/lib/esm/TerrainSettings.js.map +1 -1
  182. package/lib/esm/annotation/TextAnnotation.d.ts +78 -2
  183. package/lib/esm/annotation/TextAnnotation.d.ts.map +1 -1
  184. package/lib/esm/annotation/TextAnnotation.js +63 -10
  185. package/lib/esm/annotation/TextAnnotation.js.map +1 -1
  186. package/lib/esm/annotation/TextBlock.d.ts +179 -44
  187. package/lib/esm/annotation/TextBlock.d.ts.map +1 -1
  188. package/lib/esm/annotation/TextBlock.js +207 -56
  189. package/lib/esm/annotation/TextBlock.js.map +1 -1
  190. package/lib/esm/annotation/TextBlockGeometryProps.d.ts +1 -1
  191. package/lib/esm/annotation/TextBlockGeometryProps.js.map +1 -1
  192. package/lib/esm/annotation/TextBlockLayoutResult.d.ts +1 -1
  193. package/lib/esm/annotation/TextBlockLayoutResult.d.ts.map +1 -1
  194. package/lib/esm/annotation/TextBlockLayoutResult.js.map +1 -1
  195. package/lib/esm/annotation/TextStyle.d.ts +115 -34
  196. package/lib/esm/annotation/TextStyle.d.ts.map +1 -1
  197. package/lib/esm/annotation/TextStyle.js +116 -34
  198. package/lib/esm/annotation/TextStyle.js.map +1 -1
  199. package/lib/esm/geometry/AdditionalTransform.d.ts +4 -0
  200. package/lib/esm/geometry/AdditionalTransform.d.ts.map +1 -1
  201. package/lib/esm/geometry/AdditionalTransform.js +10 -1
  202. package/lib/esm/geometry/AdditionalTransform.js.map +1 -1
  203. package/lib/esm/geometry/ElementGeometry.d.ts +1 -1
  204. package/lib/esm/geometry/ElementGeometry.d.ts.map +1 -1
  205. package/lib/esm/geometry/ElementGeometry.js +2 -2
  206. package/lib/esm/geometry/ElementGeometry.js.map +1 -1
  207. package/lib/esm/internal/BackendTypes.d.ts +3 -3
  208. package/lib/esm/internal/BackendTypes.d.ts.map +1 -1
  209. package/lib/esm/internal/BackendTypes.js.map +1 -1
  210. package/lib/esm/internal/RenderMesh.d.ts +19 -5
  211. package/lib/esm/internal/RenderMesh.d.ts.map +1 -1
  212. package/lib/esm/internal/RenderMesh.js +11 -8
  213. package/lib/esm/internal/RenderMesh.js.map +1 -1
  214. package/lib/esm/internal/cross-package.d.ts +1 -1
  215. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  216. package/lib/esm/internal/cross-package.js.map +1 -1
  217. package/lib/esm/rpc/IModelReadRpcInterface.d.ts +1 -1
  218. package/lib/esm/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  219. package/lib/esm/rpc/IModelReadRpcInterface.js +1 -1
  220. package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
  221. package/lib/esm/rpc/SnapshotIModelRpcInterface.d.ts +4 -4
  222. package/lib/esm/rpc/SnapshotIModelRpcInterface.js +4 -4
  223. package/lib/esm/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  224. package/lib/esm/rpc/core/RpcConstants.d.ts +6 -6
  225. package/lib/esm/rpc/core/RpcConstants.d.ts.map +1 -1
  226. package/lib/esm/rpc/core/RpcConstants.js +6 -6
  227. package/lib/esm/rpc/core/RpcConstants.js.map +1 -1
  228. package/lib/esm/rpc/web/OpenAPI.d.ts +1 -1
  229. package/lib/esm/rpc/web/OpenAPI.js.map +1 -1
  230. package/lib/esm/rpc/web/WebAppRpcLogging.js.map +1 -1
  231. package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts +2 -2
  232. package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
  233. package/lib/esm/tile/IModelTileIO.d.ts +2 -2
  234. package/lib/esm/tile/IModelTileIO.js +2 -2
  235. package/lib/esm/tile/IModelTileIO.js.map +1 -1
  236. package/lib/esm/tile/TileMetadata.d.ts +6 -2
  237. package/lib/esm/tile/TileMetadata.d.ts.map +1 -1
  238. package/lib/esm/tile/TileMetadata.js +10 -4
  239. package/lib/esm/tile/TileMetadata.js.map +1 -1
  240. package/package.json +9 -8
@@ -1,7 +1,23 @@
1
1
  /** @packageDocumentation
2
2
  * @module Annotation
3
3
  */
4
+ import { DeepReadonlyObject, DeepRequiredObject } from "@itwin/core-bentley";
4
5
  import { ColorDefProps } from "../ColorDef";
6
+ /** Set of predefined shapes that can be computed and drawn around the margins of a [[TextBlock]]
7
+ * @beta
8
+ */
9
+ export declare const textAnnotationFrameShapes: readonly ["none", "line", "rectangle", "circle", "equilateralTriangle", "diamond", "square", "pentagon", "hexagon", "octagon", "capsule", "roundedRectangle"];
10
+ /** Describes a predefined shape that can be computed and drawn around the margins of a [[TextBlock]]
11
+ * @beta
12
+ */
13
+ export type TextAnnotationFrameShape = typeof textAnnotationFrameShapes[number];
14
+ /**
15
+ * Describes what color to use when filling the frame around a [[TextBlock]].
16
+ * If `background` is specified, [[GeometryParams.BackgroundFill]] will be set to `BackgroundFill.Outline`.
17
+ * If `none` is specified, no fill will be applied.
18
+ * @beta
19
+ */
20
+ export type TextAnnotationFillColor = TextStyleColor | "background" | "none";
5
21
  /** Specifies how to separate the numerator and denominator of a [[FractionRun]], by either a horizontal or diagonal bar.
6
22
  * @see [[TextStyleSettingsProps.stackedFractionType]] and [[TextStyleSettings.stackedFractionType]].
7
23
  * @beta
@@ -13,7 +29,53 @@ export type StackedFractionType = "horizontal" | "diagonal";
13
29
  * @beta
14
30
  */
15
31
  export type TextStyleColor = ColorDefProps | "subcategory";
16
- /** Serves both as the JSON representation of a [[TextStyleSettings]], and a way for a [[TextBlockComponent]] to selectively override aspects of a [[TextStyle]]'s properties.
32
+ /**
33
+ * Describes how to draw the frame around a [[TextAnnotation]].
34
+ * The frame can be a simple line, a filled shape, or both.
35
+ * If only a subset of properties are specified, the others will be set to their default value.
36
+ * @beta
37
+ */
38
+ export interface TextFrameStyleProps {
39
+ /** Shape of the frame. Default: "none" */
40
+ shape?: TextAnnotationFrameShape;
41
+ /** The color to fill the shape of the text frame. This fill is applied using [[FillDisplay.Blanking]]. Default: "none" */
42
+ fill?: TextAnnotationFillColor;
43
+ /** The color of the text frame's outline. Default: black */
44
+ border?: TextStyleColor;
45
+ /** This will be used to set the [[GeometryParams.weight]] property of the frame (in pixels). Default: 1px */
46
+ borderWeight?: number;
47
+ }
48
+ /** Properties describing the appearance of [[TextAnnotationLeader]] in a [[TextAnnotation]].
49
+ * Used when producing geometry for [[TextAnnotation]].
50
+ * @beta
51
+ */
52
+ export interface TextLeaderStyleProps {
53
+ /** The color of the leader.
54
+ * If `inherit` is specified, the [[TextAnnotationLeader]] will use the color specified in the parent [[TextStyleSettings]]`.
55
+ * Default: "inherit".
56
+ */
57
+ color?: TextStyleColor | "inherit";
58
+ /** Whether to use an elbow in the leader.
59
+ * Default: false
60
+ */
61
+ wantElbow?: boolean;
62
+ /** Multiplier used to compute length of the elbow in the leader.
63
+ * The elbowLength is computed in meters as elbowLength * [[lineHeight]].
64
+ * Default: 1.0
65
+ */
66
+ elbowLength?: number;
67
+ /** Multiplier to compute height of the leader terminator.
68
+ * The terminator height is computed in meters as terminatorHeight * [[lineHeight]].
69
+ * Default: 1.0
70
+ */
71
+ terminatorHeightFactor?: number;
72
+ /** Multiplier to compute width of the leader terminator.
73
+ * The terminator width is computed in meters as terminatorWidth * [[lineHeight]].
74
+ * Default: 1.0
75
+ */
76
+ terminatorWidthFactor?: number;
77
+ }
78
+ /** Serves both as the JSON representation of a [[TextStyleSettings]], and a way for a [[TextBlockComponent]] to selectively override aspects of a [AnnotationTextStyle]($backend)'s properties.
17
79
  * @beta
18
80
  */
19
81
  export interface TextStyleSettingsProps {
@@ -21,12 +83,12 @@ export interface TextStyleSettingsProps {
21
83
  * Default: "subcategory".
22
84
  */
23
85
  color?: TextStyleColor;
24
- /** The name of a font stored in a [Workspace]($backend), used to draw the contents of a [[TextRun]].
86
+ /** The name of a font stored in an iModel, used to draw the contents of a [[TextRun]].
25
87
  * Default: "" (an invalid font name).
26
88
  */
27
89
  fontName?: string;
28
90
  /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.
29
- * For example, the height and offset from baseline of a subscript [[TextRun]] are compuated as lineHeight * [[subScriptScale]] and
91
+ * For example, the height and offset from baseline of a subscript [[TextRun]] are computed as lineHeight * [[subScriptScale]] and
30
92
  * lineHeight * [[subScriptOffsetFactor]], respectively.
31
93
  * Default: 1.0. */
32
94
  lineHeight?: number;
@@ -80,9 +142,25 @@ export interface TextStyleSettingsProps {
80
142
  * Default: 1.0
81
143
  */
82
144
  widthFactor?: number;
145
+ /** Properties describing appearance of leaders in a [[TextAnnotation]]
146
+ * Used when producing geometry for [[TextAnnotation]]
147
+ * Default: {color:"subcategory", wantElbow:"false",elbowLength:1, terminatorWidthFactor:1, terminatorHeightFactor:1}.
148
+ */
149
+ leader?: TextLeaderStyleProps;
150
+ /** The size (in meters) used to calculate the tab stops in a run.
151
+ * These are equally spaced from the left edge of the TextBlock.
152
+ * Default: 4 meters.
153
+ */
154
+ tabInterval?: number;
155
+ /**
156
+ * A description of the frame around the text annotation.
157
+ * Used when producing geometry for [[TextAnnotation]]s.
158
+ * Default: {shape: "none", fill: "none", border: black, borderWeight: 1} for no frame.
159
+ */
160
+ frame?: TextFrameStyleProps;
83
161
  }
84
162
  /** A description of the formatting to be applied to a [[TextBlockComponent]].
85
- * Named instances of these settings can be stored as [[TextStyle]]s in a [Workspace]($backend).
163
+ * Named instances of these settings can be stored as [AnnotationTextStyle]($backend)s in an iModel.
86
164
  * @note This is an immutable type. Use [[clone]] to create a modified copy.
87
165
  * @see [[TextStyleSettingsProps]] for documentation of each of the settings.
88
166
  * @beta
@@ -90,11 +168,11 @@ export interface TextStyleSettingsProps {
90
168
  export declare class TextStyleSettings {
91
169
  /** The color of the text. */
92
170
  readonly color: TextStyleColor;
93
- /** The name of a font stored in a [Workspace]($backend), used to draw the contents of a [[TextRun]].
171
+ /** The name of a font stored in an iModel, used to draw the contents of a [[TextRun]].
94
172
  */
95
173
  readonly fontName: string;
96
174
  /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.
97
- * For example, the height and offset from baseline of a subscript [[TextRun]] are compuated as lineHeight * [[subScriptScale]] and
175
+ * For example, the height and offset from baseline of a subscript [[TextRun]] are computed as lineHeight * [[subScriptScale]] and
98
176
  * lineHeight * [[subScriptOffsetFactor]], respectively.
99
177
  */
100
178
  readonly lineHeight: number;
@@ -132,42 +210,45 @@ export declare class TextStyleSettings {
132
210
  readonly superScriptScale: number;
133
211
  /** Multiplier used to compute the width of each glyph, relative to [[lineHeight]]. */
134
212
  readonly widthFactor: number;
135
- /** A fully-populated JSON representation of the default settings. */
136
- static defaultProps: Readonly<Required<TextStyleSettingsProps>>;
213
+ /** Properties describing appearance of leaders in a [[TextAnnotation]].
214
+ * Used when producing geometry for [[TextAnnotation]].
215
+ */
216
+ readonly leader: Readonly<Required<TextLeaderStyleProps>>;
217
+ /** The size (in meters) used to calculate the tab stops in a run.
218
+ * These are equally spaced from the left edge of the TextBlock. Default is 4 meters.
219
+ */
220
+ readonly tabInterval: number;
221
+ /** The frame settings of the [[TextAnnotation]]. */
222
+ readonly frame: Readonly<Required<TextFrameStyleProps>>;
223
+ /** A fully-populated JSON representation of the default settings. A real `fontName` must be provided before use. */
224
+ static defaultProps: DeepReadonlyObject<DeepRequiredObject<TextStyleSettingsProps>>;
137
225
  /** Settings initialized to all default values. */
138
226
  static defaults: TextStyleSettings;
139
227
  private constructor();
140
228
  /** Create a copy of these settings, modified according to the properties defined by `alteredProps`. */
141
229
  clone(alteredProps?: TextStyleSettingsProps): TextStyleSettings;
230
+ /** Creates a deep copy of the `TextStyleSettingsProps`. */
231
+ static cloneProps(props: TextStyleSettingsProps): TextStyleSettingsProps;
142
232
  /** Create settings from their JSON representation. */
143
233
  static fromJSON(props?: TextStyleSettingsProps): TextStyleSettings;
144
234
  toJSON(): TextStyleSettingsProps;
235
+ /** Compare two [[TextLeaderStyleProps]] for equality.
236
+ * @param other The other leader style properties to compare against.
237
+ * @returns true if the two leader styles are equal, false otherwise.
238
+ */
239
+ leaderEquals(other: TextLeaderStyleProps): boolean;
240
+ frameEquals(other: TextFrameStyleProps): boolean;
145
241
  equals(other: TextStyleSettings): boolean;
146
- }
147
- /** The JSON representation of a [[TextStyle]].
148
- * @beta
149
- */
150
- export interface TextStyleProps {
151
- /** The name of the style. */
152
- name: string;
153
- /** The settings defined for the style. Any omitted properties will use their default values, as described by [[TextStyleSettingsProps]]. */
154
- settings?: TextStyleSettingsProps;
155
- }
156
- /** A named, immutable [[TextStyleSettings]] stored in a [Workspace]($backend).
157
- * @see [[TextBlockComponent.styleName]] to define the text style for a component of a [[TextBlock]].
158
- * @note This is an immutable type. Use [[clone]] to create a modified copy.
159
- * @beta
160
- */
161
- export declare class TextStyle {
162
- readonly name: string;
163
- readonly settings: TextStyleSettings;
164
- private constructor();
165
- /** Create a style from its JSON representation. */
166
- static fromJSON(json: TextStyleProps): TextStyle;
167
- /** Create a new style. */
168
- static create(name: string, settings: TextStyleSettings): TextStyle;
169
- /** Create a copy of this style with the same name, and settings modified according to the properties defined by `alteredSettings`. */
170
- clone(alteredSettings: TextStyleSettingsProps): TextStyle;
171
- equals(other: TextStyle): boolean;
242
+ /**
243
+ * Returns a list of validation errors for this instance.
244
+ *
245
+ * A TextStyleSettings object may contain values that are invalid in all contexts.
246
+ * If this method returns any error strings, using the settings will likely result in rendering failures or runtime exceptions.
247
+ *
248
+ * This method only checks for universally invalid values. Additional domain-specific validation may be required depending on the context in which these settings are used.
249
+ *
250
+ * @returns An array of error strings describing the invalid values, or an empty array if the settings are valid.
251
+ */
252
+ getValidationErrors(): string[];
172
253
  }
173
254
  //# sourceMappingURL=TextStyle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextStyle.d.ts","sourceRoot":"","sources":["../../../src/annotation/TextStyle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextStyle.d.ts","sourceRoot":"","sources":["../../../src/annotation/TextStyle.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,25 @@
5
5
  /** @packageDocumentation
6
6
  * @module Annotation
7
7
  */
8
+ import { ColorDef } from "../ColorDef";
9
+ /** Set of predefined shapes that can be computed and drawn around the margins of a [[TextBlock]]
10
+ * @beta
11
+ */
12
+ export const textAnnotationFrameShapes = ["none", "line", "rectangle", "circle", "equilateralTriangle", "diamond", "square", "pentagon", "hexagon", "octagon", "capsule", "roundedRectangle"];
13
+ ;
14
+ function deepFreeze(obj) {
15
+ if (obj === null || typeof obj !== "object" || Object.isFrozen(obj))
16
+ return;
17
+ Object.getOwnPropertyNames(obj).forEach((prop) => {
18
+ const value = obj[prop];
19
+ if (value && typeof value === "object") {
20
+ deepFreeze(value);
21
+ }
22
+ });
23
+ Object.freeze(obj);
24
+ }
8
25
  /** A description of the formatting to be applied to a [[TextBlockComponent]].
9
- * Named instances of these settings can be stored as [[TextStyle]]s in a [Workspace]($backend).
26
+ * Named instances of these settings can be stored as [AnnotationTextStyle]($backend)s in an iModel.
10
27
  * @note This is an immutable type. Use [[clone]] to create a modified copy.
11
28
  * @see [[TextStyleSettingsProps]] for documentation of each of the settings.
12
29
  * @beta
@@ -14,11 +31,11 @@
14
31
  export class TextStyleSettings {
15
32
  /** The color of the text. */
16
33
  color;
17
- /** The name of a font stored in a [Workspace]($backend), used to draw the contents of a [[TextRun]].
34
+ /** The name of a font stored in an iModel, used to draw the contents of a [[TextRun]].
18
35
  */
19
36
  fontName;
20
37
  /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.
21
- * For example, the height and offset from baseline of a subscript [[TextRun]] are compuated as lineHeight * [[subScriptScale]] and
38
+ * For example, the height and offset from baseline of a subscript [[TextRun]] are computed as lineHeight * [[subScriptScale]] and
22
39
  * lineHeight * [[subScriptOffsetFactor]], respectively.
23
40
  */
24
41
  lineHeight;
@@ -56,7 +73,17 @@ export class TextStyleSettings {
56
73
  superScriptScale;
57
74
  /** Multiplier used to compute the width of each glyph, relative to [[lineHeight]]. */
58
75
  widthFactor;
59
- /** A fully-populated JSON representation of the default settings. */
76
+ /** Properties describing appearance of leaders in a [[TextAnnotation]].
77
+ * Used when producing geometry for [[TextAnnotation]].
78
+ */
79
+ leader;
80
+ /** The size (in meters) used to calculate the tab stops in a run.
81
+ * These are equally spaced from the left edge of the TextBlock. Default is 4 meters.
82
+ */
83
+ tabInterval;
84
+ /** The frame settings of the [[TextAnnotation]]. */
85
+ frame;
86
+ /** A fully-populated JSON representation of the default settings. A real `fontName` must be provided before use. */
60
87
  static defaultProps = {
61
88
  color: "subcategory",
62
89
  fontName: "",
@@ -72,6 +99,20 @@ export class TextStyleSettings {
72
99
  superScriptOffsetFactor: 0.5,
73
100
  superScriptScale: 2 / 3,
74
101
  widthFactor: 1,
102
+ leader: {
103
+ color: "inherit",
104
+ wantElbow: false,
105
+ elbowLength: 1.0,
106
+ terminatorHeightFactor: 1.0,
107
+ terminatorWidthFactor: 1.0,
108
+ },
109
+ tabInterval: 4,
110
+ frame: {
111
+ shape: "none",
112
+ fill: "none",
113
+ border: ColorDef.black.toJSON(),
114
+ borderWeight: 1,
115
+ },
75
116
  };
76
117
  /** Settings initialized to all default values. */
77
118
  static defaults = new TextStyleSettings({});
@@ -93,11 +134,39 @@ export class TextStyleSettings {
93
134
  this.superScriptOffsetFactor = props.superScriptOffsetFactor ?? defaults.superScriptOffsetFactor;
94
135
  this.superScriptScale = props.superScriptScale ?? defaults.superScriptScale;
95
136
  this.widthFactor = props.widthFactor ?? defaults.widthFactor;
137
+ const leader = {
138
+ color: props.leader?.color ?? defaults.leader.color,
139
+ wantElbow: props.leader?.wantElbow ?? defaults.leader.wantElbow,
140
+ elbowLength: props.leader?.elbowLength ?? defaults.leader.elbowLength,
141
+ terminatorHeightFactor: props.leader?.terminatorHeightFactor ?? defaults.leader.terminatorHeightFactor,
142
+ terminatorWidthFactor: props.leader?.terminatorWidthFactor ?? defaults.leader.terminatorWidthFactor,
143
+ };
144
+ this.leader = Object.freeze(leader);
145
+ this.tabInterval = props.tabInterval ?? defaults.tabInterval;
146
+ const frame = {
147
+ shape: props.frame?.shape ?? defaults.frame.shape,
148
+ fill: props.frame?.fill ?? defaults.frame.fill,
149
+ border: props.frame?.border ?? defaults.frame.border,
150
+ borderWeight: props.frame?.borderWeight ?? defaults.frame.borderWeight,
151
+ };
152
+ // Cast to indicate to TypeScript that the frame properties are all defined
153
+ this.frame = Object.freeze(frame);
96
154
  }
97
155
  /** Create a copy of these settings, modified according to the properties defined by `alteredProps`. */
98
156
  clone(alteredProps) {
99
157
  return alteredProps ? new TextStyleSettings(alteredProps, this) : this;
100
158
  }
159
+ /** Creates a deep copy of the `TextStyleSettingsProps`. */
160
+ static cloneProps(props) {
161
+ const copy = { ...props };
162
+ if (props.leader) {
163
+ copy.leader = { ...props.leader };
164
+ }
165
+ if (props.frame) {
166
+ copy.frame = { ...props.frame };
167
+ }
168
+ return copy;
169
+ }
101
170
  /** Create settings from their JSON representation. */
102
171
  static fromJSON(props) {
103
172
  return props ? new TextStyleSettings(props) : TextStyleSettings.defaults;
@@ -105,43 +174,56 @@ export class TextStyleSettings {
105
174
  toJSON() {
106
175
  return { ...this };
107
176
  }
177
+ /** Compare two [[TextLeaderStyleProps]] for equality.
178
+ * @param other The other leader style properties to compare against.
179
+ * @returns true if the two leader styles are equal, false otherwise.
180
+ */
181
+ leaderEquals(other) {
182
+ return this.leader.color === other.color && this.leader.wantElbow === other.wantElbow
183
+ && this.leader.elbowLength === other.elbowLength && this.leader.terminatorHeightFactor === other.terminatorHeightFactor
184
+ && this.leader.terminatorWidthFactor === other.terminatorWidthFactor;
185
+ }
186
+ frameEquals(other) {
187
+ return this.frame?.shape === other.shape
188
+ && this.frame?.fill === other.fill
189
+ && this.frame?.border === other.border
190
+ && this.frame?.borderWeight === other.borderWeight;
191
+ }
108
192
  equals(other) {
109
193
  return this.color === other.color && this.fontName === other.fontName
110
194
  && this.lineHeight === other.lineHeight && this.lineSpacingFactor === other.lineSpacingFactor && this.widthFactor === other.widthFactor
111
195
  && this.isBold === other.isBold && this.isItalic === other.isItalic && this.isUnderlined === other.isUnderlined
112
196
  && this.stackedFractionType === other.stackedFractionType && this.stackedFractionScale === other.stackedFractionScale
113
197
  && this.subScriptOffsetFactor === other.subScriptOffsetFactor && this.subScriptScale === other.subScriptScale
114
- && this.superScriptOffsetFactor === other.superScriptOffsetFactor && this.superScriptScale === other.superScriptScale;
115
- }
116
- }
117
- Object.freeze(TextStyleSettings.defaultProps);
118
- Object.freeze(TextStyleSettings.defaults);
119
- /** A named, immutable [[TextStyleSettings]] stored in a [Workspace]($backend).
120
- * @see [[TextBlockComponent.styleName]] to define the text style for a component of a [[TextBlock]].
121
- * @note This is an immutable type. Use [[clone]] to create a modified copy.
122
- * @beta
123
- */
124
- export class TextStyle {
125
- name;
126
- settings;
127
- constructor(name, settings) {
128
- this.name = name;
129
- this.settings = settings;
130
- }
131
- /** Create a style from its JSON representation. */
132
- static fromJSON(json) {
133
- return TextStyle.create(json.name, TextStyleSettings.fromJSON(json.settings));
134
- }
135
- /** Create a new style. */
136
- static create(name, settings) {
137
- return new TextStyle(name, settings);
198
+ && this.superScriptOffsetFactor === other.superScriptOffsetFactor && this.superScriptScale === other.superScriptScale
199
+ && this.tabInterval === other.tabInterval
200
+ && this.leaderEquals(other.leader)
201
+ && this.frameEquals(other.frame);
138
202
  }
139
- /** Create a copy of this style with the same name, and settings modified according to the properties defined by `alteredSettings`. */
140
- clone(alteredSettings) {
141
- return TextStyle.create(this.name, this.settings.clone(alteredSettings));
142
- }
143
- equals(other) {
144
- return this.name === other.name && this.settings.equals(other.settings);
203
+ /**
204
+ * Returns a list of validation errors for this instance.
205
+ *
206
+ * A TextStyleSettings object may contain values that are invalid in all contexts.
207
+ * If this method returns any error strings, using the settings will likely result in rendering failures or runtime exceptions.
208
+ *
209
+ * This method only checks for universally invalid values. Additional domain-specific validation may be required depending on the context in which these settings are used.
210
+ *
211
+ * @returns An array of error strings describing the invalid values, or an empty array if the settings are valid.
212
+ */
213
+ getValidationErrors() {
214
+ const errorMessages = [];
215
+ if (this.fontName.trim() === "") {
216
+ errorMessages.push("fontName must be provided");
217
+ }
218
+ if (this.lineHeight <= 0) {
219
+ errorMessages.push("lineHeight must be greater than 0");
220
+ }
221
+ if (this.stackedFractionScale <= 0) {
222
+ errorMessages.push("stackedFractionScale must be greater than 0");
223
+ }
224
+ return errorMessages;
145
225
  }
146
226
  }
227
+ deepFreeze(TextStyleSettings.defaultProps);
228
+ deepFreeze(TextStyleSettings.defaults);
147
229
  //# sourceMappingURL=TextStyle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextStyle.js","sourceRoot":"","sources":["../../../src/annotation/TextStyle.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Annotation\n */\n\nimport { ColorDefProps } from \"../ColorDef\";\n\n/** Specifies how to separate the numerator and denominator of a [[FractionRun]], by either a horizontal or diagonal bar.\n * @see [[TextStyleSettingsProps.stackedFractionType]] and [[TextStyleSettings.stackedFractionType]].\n * @beta\n */\nexport type StackedFractionType = \"horizontal\" | \"diagonal\";\n\n/** Describes the color in which to draw the text in a [[TextRun]].\n * \"subcategory\" indicates that the text should be drawn using the color of the [SubCategory]($backend) specified by the [GeometryStream]($docs/learning/common/GeometryStream.md) hosting the\n * text.\n * @beta\n */\nexport type TextStyleColor = ColorDefProps | \"subcategory\";\n\n/** Serves both as the JSON representation of a [[TextStyleSettings]], and a way for a [[TextBlockComponent]] to selectively override aspects of a [[TextStyle]]'s properties.\n * @beta\n */\nexport interface TextStyleSettingsProps {\n /** The color of the text.\n * Default: \"subcategory\".\n */\n color?: TextStyleColor;\n /** The name of a font stored in a [Workspace]($backend), used to draw the contents of a [[TextRun]].\n * Default: \"\" (an invalid font name).\n */\n fontName?: string;\n /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.\n * For example, the height and offset from baseline of a subscript [[TextRun]] are compuated as lineHeight * [[subScriptScale]] and\n * lineHeight * [[subScriptOffsetFactor]], respectively.\n * Default: 1.0. */\n lineHeight?: number;\n /** Multiplier used to compute the vertical distance between two lines of text.\n * The distance is computed in meters as lineSpacingFactor * [[lineHeight]].\n * Default: 0.5.\n */\n lineSpacingFactor?: number;\n /** Specifies whether the content of a [[TextRun]] should be rendered **bold**.\n * Default: false.\n */\n isBold?: boolean;\n /** Specifies whether the content of a [[TextRun]] should be rendered in *italics*.\n * Default: false.\n */\n isItalic?: boolean;\n /** Specifies whether the content of a [[TextRun]] should be underlined.\n * Default: false.\n */\n isUnderlined?: boolean;\n /** Multiplier used to compute the height of both the numerator and denominator of a [[FractionRun]].\n * The height is computed in meters as stackedFractionScale * [[lineHeight]].\n * Default: 0.7.\n */\n stackedFractionScale?: number;\n /** Specifies how to separate the numerator and denominator of a [[FractionRun]].\n * Default: \"horizontal\".\n */\n stackedFractionType?: StackedFractionType;\n /** Multiplier used to compute the vertical offset from the baseline for a subscript [[TextRun]].\n * The offset is computed in meters as subScriptOffsetFactor * [[lineHeight]].\n * Default: -0.15.\n */\n subScriptOffsetFactor?: number;\n /** Multiplier used to compute the height of a subscript [[TextRun]].\n * The height is computed as subScriptScale * [[lineHeight]].\n * Default: 2/3\n */\n subScriptScale?: number;\n /** Multiplier used to compute the vertical offset from the baseline for a super [[TextRun]].\n * The offset is computed in meters as superScriptOffsetFactor * [[lineHeight]].\n * Default: -0.5.\n */\n superScriptOffsetFactor?: number;\n /** Multiplier used to compute the height of a superscript [[TextRun]].\n * The height is computed as superScriptScale * [[lineHeight]].\n * Default: 2/3\n */\n superScriptScale?: number;\n /** A scale applied to the width of each glyph.\n * Default: 1.0\n */\n widthFactor?: number;\n}\n\n/** A description of the formatting to be applied to a [[TextBlockComponent]].\n * Named instances of these settings can be stored as [[TextStyle]]s in a [Workspace]($backend).\n * @note This is an immutable type. Use [[clone]] to create a modified copy.\n * @see [[TextStyleSettingsProps]] for documentation of each of the settings.\n * @beta\n */\nexport class TextStyleSettings {\n /** The color of the text. */\n public readonly color: TextStyleColor;\n /** The name of a font stored in a [Workspace]($backend), used to draw the contents of a [[TextRun]].\n */\n public readonly fontName: string;\n /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.\n * For example, the height and offset from baseline of a subscript [[TextRun]] are compuated as lineHeight * [[subScriptScale]] and\n * lineHeight * [[subScriptOffsetFactor]], respectively.\n */\n public readonly lineHeight: number;\n /** Multiplier used to compute the vertical distance between two lines of text.\n * The distance is computed in meters as lineSpacingFactor * [[lineHeight]].\n */\n public readonly lineSpacingFactor: number;\n /** Specifies whether the content of a [[TextRun]] should be rendered **bold**. */\n public readonly isBold: boolean;\n /** Specifies whether the content of a [[TextRun]] should be rendered in *italics*. */\n public readonly isItalic: boolean;\n /** Specifies whether the content of a [[TextRun]] should be underlined. */\n public readonly isUnderlined: boolean;\n /** Multiplier used to compute the height of both the numerator and denominator of a [[FractionRun]].\n * The height is computed in meters as stackedFractionScale * [[lineHeight]].\n */\n public readonly stackedFractionScale: number;\n /** Specifies how to separate the numerator and denominator of a [[FractionRun]]. */\n public readonly stackedFractionType: StackedFractionType;\n /** Multiplier used to compute the vertical offset from the baseline for a subscript [[TextRun]].\n * The offset is computed in meters as subScriptOffsetFactor * [[lineHeight]].\n */\n public readonly subScriptOffsetFactor: number;\n /** Multiplier used to compute the height of a subscript [[TextRun]].\n * The height is computed as subScriptScale * [[lineHeight]].\n */\n public readonly subScriptScale: number;\n /** Multiplier used to compute the vertical offset from the baseline for a super [[TextRun]].\n * The offset is computed in meters as superScriptOffsetFactor * [[lineHeight]].\n */\n public readonly superScriptOffsetFactor: number;\n /** Multiplier used to compute the height of a superscript [[TextRun]].\n * The height is computed as superScriptScale * [[lineHeight]].\n */\n public readonly superScriptScale: number;\n /** Multiplier used to compute the width of each glyph, relative to [[lineHeight]]. */\n public readonly widthFactor: number;\n\n /** A fully-populated JSON representation of the default settings. */\n public static defaultProps: Readonly<Required<TextStyleSettingsProps>> = {\n color: \"subcategory\",\n fontName: \"\",\n lineHeight: 1,\n lineSpacingFactor: 0.5,\n isBold: false,\n isItalic: false,\n isUnderlined: false,\n stackedFractionScale: 0.7,\n stackedFractionType: \"horizontal\",\n subScriptOffsetFactor: -0.15,\n subScriptScale: 2 / 3,\n superScriptOffsetFactor: 0.5,\n superScriptScale: 2 / 3,\n widthFactor: 1,\n };\n\n /** Settings initialized to all default values. */\n public static defaults: TextStyleSettings = new TextStyleSettings({ });\n\n private constructor(props: TextStyleSettingsProps, defaults?: Required<TextStyleSettingsProps>) {\n if (!defaults) {\n defaults = TextStyleSettings.defaultProps;\n }\n\n this.color = props.color ?? defaults.color;\n this.fontName = props.fontName ?? defaults.fontName;\n this.lineHeight = props.lineHeight ?? defaults.lineHeight;\n this.lineSpacingFactor = props.lineSpacingFactor ?? defaults.lineSpacingFactor;\n this.isBold = props.isBold ?? defaults.isBold;\n this.isItalic = props.isItalic ?? defaults.isItalic;\n this.isUnderlined = props.isUnderlined ?? defaults.isUnderlined;\n this.stackedFractionScale = props.stackedFractionScale ?? defaults.stackedFractionScale;\n this.stackedFractionType = props.stackedFractionType ?? defaults.stackedFractionType;\n this.subScriptOffsetFactor = props.subScriptOffsetFactor ?? defaults.subScriptOffsetFactor;\n this.subScriptScale = props.subScriptScale ?? defaults.subScriptScale;\n this.superScriptOffsetFactor = props.superScriptOffsetFactor ?? defaults.superScriptOffsetFactor;\n this.superScriptScale = props.superScriptScale ?? defaults.superScriptScale;\n this.widthFactor = props.widthFactor ?? defaults.widthFactor;\n }\n\n /** Create a copy of these settings, modified according to the properties defined by `alteredProps`. */\n public clone(alteredProps?: TextStyleSettingsProps): TextStyleSettings {\n return alteredProps ? new TextStyleSettings(alteredProps, this) : this;\n }\n\n /** Create settings from their JSON representation. */\n public static fromJSON(props?: TextStyleSettingsProps): TextStyleSettings {\n return props ? new TextStyleSettings(props) : TextStyleSettings.defaults;\n }\n\n public toJSON(): TextStyleSettingsProps {\n return { ...this };\n }\n\n public equals(other: TextStyleSettings): boolean {\n return this.color === other.color && this.fontName === other.fontName\n && this.lineHeight === other.lineHeight && this.lineSpacingFactor === other.lineSpacingFactor && this.widthFactor === other.widthFactor\n && this.isBold === other.isBold && this.isItalic === other.isItalic && this.isUnderlined === other.isUnderlined\n && this.stackedFractionType === other.stackedFractionType && this.stackedFractionScale === other.stackedFractionScale\n && this.subScriptOffsetFactor === other.subScriptOffsetFactor && this.subScriptScale === other.subScriptScale\n && this.superScriptOffsetFactor === other.superScriptOffsetFactor && this.superScriptScale === other.superScriptScale;\n }\n}\n\nObject.freeze(TextStyleSettings.defaultProps);\nObject.freeze(TextStyleSettings.defaults);\n\n/** The JSON representation of a [[TextStyle]].\n * @beta\n */\nexport interface TextStyleProps {\n /** The name of the style. */\n name: string;\n /** The settings defined for the style. Any omitted properties will use their default values, as described by [[TextStyleSettingsProps]]. */\n settings?: TextStyleSettingsProps;\n}\n\n/** A named, immutable [[TextStyleSettings]] stored in a [Workspace]($backend).\n * @see [[TextBlockComponent.styleName]] to define the text style for a component of a [[TextBlock]].\n * @note This is an immutable type. Use [[clone]] to create a modified copy.\n * @beta\n */\nexport class TextStyle {\n public readonly name: string;\n public readonly settings: TextStyleSettings;\n\n private constructor(name: string, settings: TextStyleSettings) {\n this.name = name;\n this.settings = settings;\n }\n\n /** Create a style from its JSON representation. */\n public static fromJSON(json: TextStyleProps): TextStyle {\n return TextStyle.create(json.name, TextStyleSettings.fromJSON(json.settings));\n }\n\n /** Create a new style. */\n public static create(name: string, settings: TextStyleSettings): TextStyle {\n return new TextStyle(name, settings);\n }\n\n /** Create a copy of this style with the same name, and settings modified according to the properties defined by `alteredSettings`. */\n public clone(alteredSettings: TextStyleSettingsProps): TextStyle {\n return TextStyle.create(this.name, this.settings.clone(alteredSettings));\n }\n\n public equals(other: TextStyle): boolean {\n return this.name === other.name && this.settings.equals(other.settings);\n }\n}\n\n"]}
1
+ {"version":3,"file":"TextStyle.js","sourceRoot":"","sources":["../../../src/annotation/TextStyle.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Annotation\n */\n\nimport { DeepReadonlyObject, DeepRequiredObject } from \"@itwin/core-bentley\";\nimport { ColorDef, ColorDefProps } from \"../ColorDef\";\n\n/** Set of predefined shapes that can be computed and drawn around the margins of a [[TextBlock]]\n * @beta\n*/\nexport const textAnnotationFrameShapes = [\"none\", \"line\", \"rectangle\", \"circle\", \"equilateralTriangle\", \"diamond\", \"square\", \"pentagon\", \"hexagon\", \"octagon\", \"capsule\", \"roundedRectangle\"] as const;\n\n/** Describes a predefined shape that can be computed and drawn around the margins of a [[TextBlock]]\n * @beta\n*/\nexport type TextAnnotationFrameShape = typeof textAnnotationFrameShapes[number];\n\n/**\n * Describes what color to use when filling the frame around a [[TextBlock]].\n * If `background` is specified, [[GeometryParams.BackgroundFill]] will be set to `BackgroundFill.Outline`.\n * If `none` is specified, no fill will be applied.\n * @beta\n */\nexport type TextAnnotationFillColor = TextStyleColor | \"background\" | \"none\";\n\n/** Specifies how to separate the numerator and denominator of a [[FractionRun]], by either a horizontal or diagonal bar.\n * @see [[TextStyleSettingsProps.stackedFractionType]] and [[TextStyleSettings.stackedFractionType]].\n * @beta\n */\nexport type StackedFractionType = \"horizontal\" | \"diagonal\";\n\n/** Describes the color in which to draw the text in a [[TextRun]].\n * \"subcategory\" indicates that the text should be drawn using the color of the [SubCategory]($backend) specified by the [GeometryStream]($docs/learning/common/GeometryStream.md) hosting the\n * text.\n * @beta\n */\nexport type TextStyleColor = ColorDefProps | \"subcategory\";\n\n/**\n * Describes how to draw the frame around a [[TextAnnotation]].\n * The frame can be a simple line, a filled shape, or both.\n * If only a subset of properties are specified, the others will be set to their default value.\n * @beta\n */\nexport interface TextFrameStyleProps {\n /** Shape of the frame. Default: \"none\" */\n shape?: TextAnnotationFrameShape;\n /** The color to fill the shape of the text frame. This fill is applied using [[FillDisplay.Blanking]]. Default: \"none\" */\n fill?: TextAnnotationFillColor;\n /** The color of the text frame's outline. Default: black */\n border?: TextStyleColor;\n /** This will be used to set the [[GeometryParams.weight]] property of the frame (in pixels). Default: 1px */\n borderWeight?: number;\n};\n\n/** Properties describing the appearance of [[TextAnnotationLeader]] in a [[TextAnnotation]].\n * Used when producing geometry for [[TextAnnotation]].\n * @beta\n */\nexport interface TextLeaderStyleProps {\n /** The color of the leader.\n * If `inherit` is specified, the [[TextAnnotationLeader]] will use the color specified in the parent [[TextStyleSettings]]`.\n * Default: \"inherit\".\n */\n color?: TextStyleColor | \"inherit\";\n /** Whether to use an elbow in the leader.\n * Default: false\n */\n wantElbow?: boolean;\n /** Multiplier used to compute length of the elbow in the leader.\n * The elbowLength is computed in meters as elbowLength * [[lineHeight]].\n * Default: 1.0\n */\n elbowLength?: number;\n /** Multiplier to compute height of the leader terminator.\n * The terminator height is computed in meters as terminatorHeight * [[lineHeight]].\n * Default: 1.0\n */\n terminatorHeightFactor?: number;\n /** Multiplier to compute width of the leader terminator.\n * The terminator width is computed in meters as terminatorWidth * [[lineHeight]].\n * Default: 1.0\n */\n terminatorWidthFactor?: number;\n}\n\n/** Serves both as the JSON representation of a [[TextStyleSettings]], and a way for a [[TextBlockComponent]] to selectively override aspects of a [AnnotationTextStyle]($backend)'s properties.\n * @beta\n */\nexport interface TextStyleSettingsProps {\n /** The color of the text.\n * Default: \"subcategory\".\n */\n color?: TextStyleColor;\n /** The name of a font stored in an iModel, used to draw the contents of a [[TextRun]].\n * Default: \"\" (an invalid font name).\n */\n fontName?: string;\n /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.\n * For example, the height and offset from baseline of a subscript [[TextRun]] are computed as lineHeight * [[subScriptScale]] and\n * lineHeight * [[subScriptOffsetFactor]], respectively.\n * Default: 1.0. */\n lineHeight?: number;\n /** Multiplier used to compute the vertical distance between two lines of text.\n * The distance is computed in meters as lineSpacingFactor * [[lineHeight]].\n * Default: 0.5.\n */\n lineSpacingFactor?: number;\n /** Specifies whether the content of a [[TextRun]] should be rendered **bold**.\n * Default: false.\n */\n isBold?: boolean;\n /** Specifies whether the content of a [[TextRun]] should be rendered in *italics*.\n * Default: false.\n */\n isItalic?: boolean;\n /** Specifies whether the content of a [[TextRun]] should be underlined.\n * Default: false.\n */\n isUnderlined?: boolean;\n /** Multiplier used to compute the height of both the numerator and denominator of a [[FractionRun]].\n * The height is computed in meters as stackedFractionScale * [[lineHeight]].\n * Default: 0.7.\n */\n stackedFractionScale?: number;\n /** Specifies how to separate the numerator and denominator of a [[FractionRun]].\n * Default: \"horizontal\".\n */\n stackedFractionType?: StackedFractionType;\n /** Multiplier used to compute the vertical offset from the baseline for a subscript [[TextRun]].\n * The offset is computed in meters as subScriptOffsetFactor * [[lineHeight]].\n * Default: -0.15.\n */\n subScriptOffsetFactor?: number;\n /** Multiplier used to compute the height of a subscript [[TextRun]].\n * The height is computed as subScriptScale * [[lineHeight]].\n * Default: 2/3\n */\n subScriptScale?: number;\n /** Multiplier used to compute the vertical offset from the baseline for a super [[TextRun]].\n * The offset is computed in meters as superScriptOffsetFactor * [[lineHeight]].\n * Default: -0.5.\n */\n superScriptOffsetFactor?: number;\n /** Multiplier used to compute the height of a superscript [[TextRun]].\n * The height is computed as superScriptScale * [[lineHeight]].\n * Default: 2/3\n */\n superScriptScale?: number;\n /** A scale applied to the width of each glyph.\n * Default: 1.0\n */\n widthFactor?: number;\n\n /** Properties describing appearance of leaders in a [[TextAnnotation]]\n * Used when producing geometry for [[TextAnnotation]]\n * Default: {color:\"subcategory\", wantElbow:\"false\",elbowLength:1, terminatorWidthFactor:1, terminatorHeightFactor:1}.\n */\n leader?: TextLeaderStyleProps;\n /** The size (in meters) used to calculate the tab stops in a run.\n * These are equally spaced from the left edge of the TextBlock.\n * Default: 4 meters.\n */\n tabInterval?: number;\n /**\n * A description of the frame around the text annotation.\n * Used when producing geometry for [[TextAnnotation]]s.\n * Default: {shape: \"none\", fill: \"none\", border: black, borderWeight: 1} for no frame.\n */\n frame?: TextFrameStyleProps;\n}\n\nfunction deepFreeze<T>(obj: T) {\n if (obj === null || typeof obj !== \"object\" || Object.isFrozen(obj))\n return;\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n const value = (obj as any)[prop];\n if (value && typeof value === \"object\") {\n deepFreeze(value);\n }\n });\n Object.freeze(obj);\n}\n\n/** A description of the formatting to be applied to a [[TextBlockComponent]].\n * Named instances of these settings can be stored as [AnnotationTextStyle]($backend)s in an iModel.\n * @note This is an immutable type. Use [[clone]] to create a modified copy.\n * @see [[TextStyleSettingsProps]] for documentation of each of the settings.\n * @beta\n */\nexport class TextStyleSettings {\n /** The color of the text. */\n public readonly color: TextStyleColor;\n /** The name of a font stored in an iModel, used to draw the contents of a [[TextRun]].\n */\n public readonly fontName: string;\n /** The height each line of text, in meters. Many other settings use the line height as the basis for computing their own values.\n * For example, the height and offset from baseline of a subscript [[TextRun]] are computed as lineHeight * [[subScriptScale]] and\n * lineHeight * [[subScriptOffsetFactor]], respectively.\n */\n public readonly lineHeight: number;\n /** Multiplier used to compute the vertical distance between two lines of text.\n * The distance is computed in meters as lineSpacingFactor * [[lineHeight]].\n */\n public readonly lineSpacingFactor: number;\n /** Specifies whether the content of a [[TextRun]] should be rendered **bold**. */\n public readonly isBold: boolean;\n /** Specifies whether the content of a [[TextRun]] should be rendered in *italics*. */\n public readonly isItalic: boolean;\n /** Specifies whether the content of a [[TextRun]] should be underlined. */\n public readonly isUnderlined: boolean;\n /** Multiplier used to compute the height of both the numerator and denominator of a [[FractionRun]].\n * The height is computed in meters as stackedFractionScale * [[lineHeight]].\n */\n public readonly stackedFractionScale: number;\n /** Specifies how to separate the numerator and denominator of a [[FractionRun]]. */\n public readonly stackedFractionType: StackedFractionType;\n /** Multiplier used to compute the vertical offset from the baseline for a subscript [[TextRun]].\n * The offset is computed in meters as subScriptOffsetFactor * [[lineHeight]].\n */\n public readonly subScriptOffsetFactor: number;\n /** Multiplier used to compute the height of a subscript [[TextRun]].\n * The height is computed as subScriptScale * [[lineHeight]].\n */\n public readonly subScriptScale: number;\n /** Multiplier used to compute the vertical offset from the baseline for a super [[TextRun]].\n * The offset is computed in meters as superScriptOffsetFactor * [[lineHeight]].\n */\n public readonly superScriptOffsetFactor: number;\n /** Multiplier used to compute the height of a superscript [[TextRun]].\n * The height is computed as superScriptScale * [[lineHeight]].\n */\n public readonly superScriptScale: number;\n /** Multiplier used to compute the width of each glyph, relative to [[lineHeight]]. */\n public readonly widthFactor: number;\n /** Properties describing appearance of leaders in a [[TextAnnotation]].\n * Used when producing geometry for [[TextAnnotation]].\n */\n public readonly leader: Readonly<Required<TextLeaderStyleProps>>;\n /** The size (in meters) used to calculate the tab stops in a run.\n * These are equally spaced from the left edge of the TextBlock. Default is 4 meters.\n */\n public readonly tabInterval: number;\n /** The frame settings of the [[TextAnnotation]]. */\n public readonly frame: Readonly<Required<TextFrameStyleProps>>;\n\n /** A fully-populated JSON representation of the default settings. A real `fontName` must be provided before use. */\n public static defaultProps: DeepReadonlyObject<DeepRequiredObject<TextStyleSettingsProps>> = {\n color: \"subcategory\",\n fontName: \"\",\n lineHeight: 1,\n lineSpacingFactor: 0.5,\n isBold: false,\n isItalic: false,\n isUnderlined: false,\n stackedFractionScale: 0.7,\n stackedFractionType: \"horizontal\",\n subScriptOffsetFactor: -0.15,\n subScriptScale: 2 / 3,\n superScriptOffsetFactor: 0.5,\n superScriptScale: 2 / 3,\n widthFactor: 1,\n leader: {\n color: \"inherit\",\n wantElbow: false,\n elbowLength: 1.0,\n terminatorHeightFactor: 1.0,\n terminatorWidthFactor: 1.0,\n },\n tabInterval: 4,\n frame: {\n shape: \"none\",\n fill: \"none\",\n border: ColorDef.black.toJSON(),\n borderWeight: 1,\n },\n };\n\n /** Settings initialized to all default values. */\n public static defaults: TextStyleSettings = new TextStyleSettings({});\n\n private constructor(props: TextStyleSettingsProps, defaults?: Required<TextStyleSettingsProps>) {\n if (!defaults) {\n defaults = TextStyleSettings.defaultProps;\n }\n\n this.color = props.color ?? defaults.color;\n this.fontName = props.fontName ?? defaults.fontName;\n this.lineHeight = props.lineHeight ?? defaults.lineHeight;\n this.lineSpacingFactor = props.lineSpacingFactor ?? defaults.lineSpacingFactor;\n this.isBold = props.isBold ?? defaults.isBold;\n this.isItalic = props.isItalic ?? defaults.isItalic;\n this.isUnderlined = props.isUnderlined ?? defaults.isUnderlined;\n this.stackedFractionScale = props.stackedFractionScale ?? defaults.stackedFractionScale;\n this.stackedFractionType = props.stackedFractionType ?? defaults.stackedFractionType;\n this.subScriptOffsetFactor = props.subScriptOffsetFactor ?? defaults.subScriptOffsetFactor;\n this.subScriptScale = props.subScriptScale ?? defaults.subScriptScale;\n this.superScriptOffsetFactor = props.superScriptOffsetFactor ?? defaults.superScriptOffsetFactor;\n this.superScriptScale = props.superScriptScale ?? defaults.superScriptScale;\n this.widthFactor = props.widthFactor ?? defaults.widthFactor;\n const leader = {\n color: props.leader?.color ?? defaults.leader.color,\n wantElbow: props.leader?.wantElbow ?? defaults.leader.wantElbow,\n elbowLength: props.leader?.elbowLength ?? defaults.leader.elbowLength,\n terminatorHeightFactor: props.leader?.terminatorHeightFactor ?? defaults.leader.terminatorHeightFactor,\n terminatorWidthFactor: props.leader?.terminatorWidthFactor ?? defaults.leader.terminatorWidthFactor,\n }\n this.leader = Object.freeze(leader) as Readonly<Required<TextLeaderStyleProps>>;\n this.tabInterval = props.tabInterval ?? defaults.tabInterval;\n const frame = {\n shape: props.frame?.shape ?? defaults.frame.shape,\n fill: props.frame?.fill ?? defaults.frame.fill,\n border: props.frame?.border ?? defaults.frame.border,\n borderWeight: props.frame?.borderWeight ?? defaults.frame.borderWeight,\n };\n // Cast to indicate to TypeScript that the frame properties are all defined\n this.frame = Object.freeze(frame) as Readonly<Required<TextFrameStyleProps>>;\n }\n\n /** Create a copy of these settings, modified according to the properties defined by `alteredProps`. */\n public clone(alteredProps?: TextStyleSettingsProps): TextStyleSettings {\n return alteredProps ? new TextStyleSettings(alteredProps, this) : this;\n }\n\n /** Creates a deep copy of the `TextStyleSettingsProps`. */\n public static cloneProps(props: TextStyleSettingsProps): TextStyleSettingsProps {\n const copy = { ...props };\n if (props.leader) {\n copy.leader = { ...props.leader };\n }\n if (props.frame) {\n copy.frame = { ...props.frame };\n }\n return copy;\n }\n\n /** Create settings from their JSON representation. */\n public static fromJSON(props?: TextStyleSettingsProps): TextStyleSettings {\n return props ? new TextStyleSettings(props) : TextStyleSettings.defaults;\n }\n\n public toJSON(): TextStyleSettingsProps {\n return { ...this };\n }\n\n /** Compare two [[TextLeaderStyleProps]] for equality.\n * @param other The other leader style properties to compare against.\n * @returns true if the two leader styles are equal, false otherwise.\n */\n public leaderEquals(other: TextLeaderStyleProps): boolean {\n return this.leader.color === other.color && this.leader.wantElbow === other.wantElbow\n && this.leader.elbowLength === other.elbowLength && this.leader.terminatorHeightFactor === other.terminatorHeightFactor\n && this.leader.terminatorWidthFactor === other.terminatorWidthFactor;\n }\n\n public frameEquals(other: TextFrameStyleProps): boolean {\n return this.frame?.shape === other.shape\n && this.frame?.fill === other.fill\n && this.frame?.border === other.border\n && this.frame?.borderWeight === other.borderWeight;\n }\n\n public equals(other: TextStyleSettings): boolean {\n return this.color === other.color && this.fontName === other.fontName\n && this.lineHeight === other.lineHeight && this.lineSpacingFactor === other.lineSpacingFactor && this.widthFactor === other.widthFactor\n && this.isBold === other.isBold && this.isItalic === other.isItalic && this.isUnderlined === other.isUnderlined\n && this.stackedFractionType === other.stackedFractionType && this.stackedFractionScale === other.stackedFractionScale\n && this.subScriptOffsetFactor === other.subScriptOffsetFactor && this.subScriptScale === other.subScriptScale\n && this.superScriptOffsetFactor === other.superScriptOffsetFactor && this.superScriptScale === other.superScriptScale\n && this.tabInterval === other.tabInterval\n && this.leaderEquals(other.leader)\n && this.frameEquals(other.frame)\n }\n\n /**\n * Returns a list of validation errors for this instance.\n *\n * A TextStyleSettings object may contain values that are invalid in all contexts.\n * If this method returns any error strings, using the settings will likely result in rendering failures or runtime exceptions.\n *\n * This method only checks for universally invalid values. Additional domain-specific validation may be required depending on the context in which these settings are used.\n *\n * @returns An array of error strings describing the invalid values, or an empty array if the settings are valid.\n */\n public getValidationErrors(): string[] {\n const errorMessages: string[] = [];\n if (this.fontName.trim() === \"\") {\n errorMessages.push(\"fontName must be provided\");\n }\n\n if (this.lineHeight <= 0) {\n errorMessages.push(\"lineHeight must be greater than 0\");\n }\n\n if (this.stackedFractionScale <= 0) {\n errorMessages.push(\"stackedFractionScale must be greater than 0\");\n }\n\n return errorMessages;\n }\n}\n\ndeepFreeze(TextStyleSettings.defaultProps);\ndeepFreeze(TextStyleSettings.defaults);"]}
@@ -1,6 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module Geometry
3
3
  */
4
+ import { Transform } from "@itwin/core-geometry";
4
5
  /** An affine transformation with an additional Z Offset.
5
6
  * The equations are:
6
7
  * given a = scale * cos(rotation) and b = scale * sin(rotation)
@@ -53,6 +54,9 @@ export declare class Helmert2DWithZOffset implements Helmert2DWithZOffsetProps {
53
54
  /** Compares two Helmert2DWithZOffset objects applying a minuscule tolerance.
54
55
  * @public */
55
56
  equals(other: Helmert2DWithZOffset): boolean;
57
+ /** Convert Helmert2DWithZOffset object into Transfrom object
58
+ * @public */
59
+ convertHelmertToTransform(): Transform;
56
60
  }
57
61
  /** Additional Transform definition
58
62
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalTransform.d.ts","sourceRoot":"","sources":["../../../src/geometry/AdditionalTransform.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;;;;;;;GAQG;AACH,MAAM,WAAW,yBAAyB;IACxC,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,yBAAyB;IACpE,6BAA6B;IACtB,YAAY,EAAG,MAAM,CAAC;IAC7B,6BAA6B;IACtB,YAAY,EAAG,MAAM,CAAC;IAC7B,wCAAwC;IACjC,YAAY,EAAG,MAAM,CAAC;IAC7B,oEAAoE;IAC7D,MAAM,EAAG,MAAM,CAAC;IACvB,iFAAiF;IAC1E,KAAK,EAAG,MAAM,CAAC;gBAEV,IAAI,CAAC,EAAE,yBAAyB;IAU5C;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,GAAG,oBAAoB;IAI7E;iBACa;IACN,MAAM,IAAI,yBAAyB;IAI1C;kBACc;IACP,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO;CAOpD;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;CAClD;AAED;;;;;EAKE;AACF,qBAAa,mBAAoB,YAAW,wBAAwB;IAElE,gFAAgF;IAChF,SAAgB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;gBAEzC,IAAI,CAAC,EAAE,wBAAwB;IAKlD;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,GAAG,mBAAmB;IAI3E;iBACa;IACN,MAAM,IAAI,wBAAwB;IAIzC;kBACc;IACP,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;CASnD"}
1
+ {"version":3,"file":"AdditionalTransform.d.ts","sourceRoot":"","sources":["../../../src/geometry/AdditionalTransform.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAwC,SAAS,EAAY,MAAM,sBAAsB,CAAC;AAEjG;;;;;;;;GAQG;AACH,MAAM,WAAW,yBAAyB;IACxC,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,yBAAyB;IACpE,6BAA6B;IACtB,YAAY,EAAG,MAAM,CAAC;IAC7B,6BAA6B;IACtB,YAAY,EAAG,MAAM,CAAC;IAC7B,wCAAwC;IACjC,YAAY,EAAG,MAAM,CAAC;IAC7B,oEAAoE;IAC7D,MAAM,EAAG,MAAM,CAAC;IACvB,iFAAiF;IAC1E,KAAK,EAAG,MAAM,CAAC;gBAEV,IAAI,CAAC,EAAE,yBAAyB;IAU5C;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,GAAG,oBAAoB;IAI7E;iBACa;IACN,MAAM,IAAI,yBAAyB;IAI1C;kBACc;IACP,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO;IAQnD;iBACa;IACN,yBAAyB,IAAI,SAAS;CAe9C;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;CAClD;AAED;;;;;EAKE;AACF,qBAAa,mBAAoB,YAAW,wBAAwB;IAElE,gFAAgF;IAChF,SAAgB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;gBAEzC,IAAI,CAAC,EAAE,wBAAwB;IAKlD;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,GAAG,mBAAmB;IAI3E;iBACa;IACN,MAAM,IAAI,wBAAwB;IAIzC;kBACc;IACP,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;CASnD"}
@@ -6,7 +6,7 @@
6
6
  * @module Geometry
7
7
  */
8
8
  // cspell:ignore Helmert
9
- import { Geometry } from "@itwin/core-geometry";
9
+ import { Angle, AxisIndex, Geometry, Matrix3d, Transform, Vector3d } from "@itwin/core-geometry";
10
10
  /** An affine transformation with an additional Z Offset.
11
11
  * The equations are:
12
12
  * given a = scale * cos(rotation) and b = scale * sin(rotation)
@@ -56,6 +56,15 @@ export class Helmert2DWithZOffset {
56
56
  Math.abs(this.rotDeg - other.rotDeg) < Geometry.smallAngleDegrees &&
57
57
  Math.abs(this.scale - other.scale) < Geometry.smallFraction);
58
58
  }
59
+ /** Convert Helmert2DWithZOffset object into Transfrom object
60
+ * @public */
61
+ convertHelmertToTransform() {
62
+ const rotationXY = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, Angle.createDegrees(this?.rotDeg));
63
+ rotationXY.scaleColumnsInPlace(this.scale, this.scale, 1.0);
64
+ const translation = Vector3d.create(this.translationX, this.translationY, this.translationZ);
65
+ const helmertTransform = Transform.createRefs(translation, rotationXY);
66
+ return helmertTransform;
67
+ }
59
68
  }
60
69
  /** Additional Transform implementation.
61
70
  * An additional transform is a transformation that can apply to either the horizontal or vertical coordinates of a
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalTransform.js","sourceRoot":"","sources":["../../../src/geometry/AdditionalTransform.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Geometry\n */\n// cspell:ignore Helmert\n\nimport { Geometry } from \"@itwin/core-geometry\";\n\n/** An affine transformation with an additional Z Offset.\n * The equations are:\n * given a = scale * cos(rotation) and b = scale * sin(rotation)\n * X = a * x - b * y + translationX\n * Y = b * x + a * y + translationY\n * Z = z + translationZ\n * @public\n * @extensions\n */\nexport interface Helmert2DWithZOffsetProps {\n /** The X post translation */\n translationX: number;\n /** The Y post-translation */\n translationY: number;\n /** The Z post-translation or Z offset*/\n translationZ: number;\n /** The rotation in the trigonometric (CCW) direction in degrees. */\n rotDeg: number;\n /** The scale. This scale applies to both X and Y axises. Does not apply to Z. */\n scale: number;\n}\n\n/** An affine transformation with an additional Z Offset.\n * The equations are:\n * given a = scale * cos(rotation) and b = scale * sin(rotation)\n * X = a * x - b * y + translationX\n * Y = b * x + a * y + translationY\n * Z = z + translationZ\n *\n * Note that the class only implements the definition and not the operation.\n * @public\n */\nexport class Helmert2DWithZOffset implements Helmert2DWithZOffsetProps {\n /** The X post translation */\n public translationX!: number;\n /** The Y post-translation */\n public translationY!: number;\n /** The Z post-translation or Z offset*/\n public translationZ!: number;\n /** The rotation in the trigonometric (CCW) direction in degrees. */\n public rotDeg!: number;\n /** The scale. This scale applies to both X and Y axises. Does not apply to Z. */\n public scale!: number;\n\n constructor(data?: Helmert2DWithZOffsetProps) {\n if (data) {\n this.translationX = data.translationX;\n this.translationY = data.translationY;\n this.translationZ = data.translationZ;\n this.rotDeg = data.rotDeg;\n this.scale = data.scale;\n }\n }\n\n /** Creates an Helmert Transform from JSON representation.\n * @public */\n public static fromJSON(data: Helmert2DWithZOffsetProps): Helmert2DWithZOffset {\n return new Helmert2DWithZOffset(data);\n }\n\n /** Creates a JSON from the Helmert Transform definition\n * @public */\n public toJSON(): Helmert2DWithZOffsetProps {\n return { translationX: this.translationX, translationY: this.translationY, translationZ: this.translationZ, rotDeg: this.rotDeg, scale: this.scale };\n }\n\n /** Compares two Helmert2DWithZOffset objects applying a minuscule tolerance.\n * @public */\n public equals(other: Helmert2DWithZOffset): boolean {\n return (Math.abs(this.translationX - other.translationX) < Geometry.smallMetricDistance &&\n Math.abs(this.translationY - other.translationY) < Geometry.smallMetricDistance &&\n Math.abs(this.translationZ - other.translationZ) < Geometry.smallMetricDistance &&\n Math.abs(this.rotDeg - other.rotDeg) < Geometry.smallAngleDegrees &&\n Math.abs(this.scale - other.scale) < Geometry.smallFraction);\n }\n}\n\n/** Additional Transform definition\n * @public\n * @extensions\n */\nexport interface AdditionalTransformProps {\n /** The properties of a 2D Helmert transform with Z offset if one is defined. */\n helmert2DWithZOffset?: Helmert2DWithZOffsetProps;\n}\n\n/** Additional Transform implementation.\n * An additional transform is a transformation that can apply to either the horizontal or vertical coordinates of a\n * geographic CRS. The transformation is applied after the latitude/longitude have been projected thus the process\n * is applied to the result Cartesian coordinates of the projection process.\n * @public\n*/\nexport class AdditionalTransform implements AdditionalTransformProps {\n\n /** The properties of a 2D Helmert transform with Z offset if one is defined. */\n public readonly helmert2DWithZOffset?: Helmert2DWithZOffset;\n\n public constructor(data?: AdditionalTransformProps) {\n if (data)\n this.helmert2DWithZOffset = data.helmert2DWithZOffset ? Helmert2DWithZOffset.fromJSON(data.helmert2DWithZOffset) : undefined;\n }\n\n /** Creates an Additional Transform from JSON representation.\n * @public */\n public static fromJSON(data: AdditionalTransformProps): AdditionalTransform {\n return new AdditionalTransform(data);\n }\n\n /** Creates a JSON from the Additional Transform definition\n * @public */\n public toJSON(): AdditionalTransformProps {\n return { helmert2DWithZOffset: this.helmert2DWithZOffset };\n }\n\n /** Compares two additional transforms applying a minuscule tolerance to comparing numbers.\n * @public */\n public equals(other: AdditionalTransform): boolean {\n if ((this.helmert2DWithZOffset === undefined) !== (other.helmert2DWithZOffset === undefined))\n return false;\n\n if (this.helmert2DWithZOffset && !this.helmert2DWithZOffset.equals(other.helmert2DWithZOffset!))\n return false;\n\n return true;\n }\n}\n\n"]}
1
+ {"version":3,"file":"AdditionalTransform.js","sourceRoot":"","sources":["../../../src/geometry/AdditionalTransform.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Geometry\n */\n// cspell:ignore Helmert\n\nimport { Angle, AxisIndex, Geometry, Matrix3d, Transform, Vector3d } from \"@itwin/core-geometry\";\n\n/** An affine transformation with an additional Z Offset.\n * The equations are:\n * given a = scale * cos(rotation) and b = scale * sin(rotation)\n * X = a * x - b * y + translationX\n * Y = b * x + a * y + translationY\n * Z = z + translationZ\n * @public\n * @extensions\n */\nexport interface Helmert2DWithZOffsetProps {\n /** The X post translation */\n translationX: number;\n /** The Y post-translation */\n translationY: number;\n /** The Z post-translation or Z offset*/\n translationZ: number;\n /** The rotation in the trigonometric (CCW) direction in degrees. */\n rotDeg: number;\n /** The scale. This scale applies to both X and Y axises. Does not apply to Z. */\n scale: number;\n}\n\n/** An affine transformation with an additional Z Offset.\n * The equations are:\n * given a = scale * cos(rotation) and b = scale * sin(rotation)\n * X = a * x - b * y + translationX\n * Y = b * x + a * y + translationY\n * Z = z + translationZ\n *\n * Note that the class only implements the definition and not the operation.\n * @public\n */\nexport class Helmert2DWithZOffset implements Helmert2DWithZOffsetProps {\n /** The X post translation */\n public translationX!: number;\n /** The Y post-translation */\n public translationY!: number;\n /** The Z post-translation or Z offset*/\n public translationZ!: number;\n /** The rotation in the trigonometric (CCW) direction in degrees. */\n public rotDeg!: number;\n /** The scale. This scale applies to both X and Y axises. Does not apply to Z. */\n public scale!: number;\n\n constructor(data?: Helmert2DWithZOffsetProps) {\n if (data) {\n this.translationX = data.translationX;\n this.translationY = data.translationY;\n this.translationZ = data.translationZ;\n this.rotDeg = data.rotDeg;\n this.scale = data.scale;\n }\n }\n\n /** Creates an Helmert Transform from JSON representation.\n * @public */\n public static fromJSON(data: Helmert2DWithZOffsetProps): Helmert2DWithZOffset {\n return new Helmert2DWithZOffset(data);\n }\n\n /** Creates a JSON from the Helmert Transform definition\n * @public */\n public toJSON(): Helmert2DWithZOffsetProps {\n return { translationX: this.translationX, translationY: this.translationY, translationZ: this.translationZ, rotDeg: this.rotDeg, scale: this.scale };\n }\n\n /** Compares two Helmert2DWithZOffset objects applying a minuscule tolerance.\n * @public */\n public equals(other: Helmert2DWithZOffset): boolean {\n return (Math.abs(this.translationX - other.translationX) < Geometry.smallMetricDistance &&\n Math.abs(this.translationY - other.translationY) < Geometry.smallMetricDistance &&\n Math.abs(this.translationZ - other.translationZ) < Geometry.smallMetricDistance &&\n Math.abs(this.rotDeg - other.rotDeg) < Geometry.smallAngleDegrees &&\n Math.abs(this.scale - other.scale) < Geometry.smallFraction);\n }\n\n /** Convert Helmert2DWithZOffset object into Transfrom object\n * @public */\n public convertHelmertToTransform(): Transform {\n const rotationXY = Matrix3d.createRotationAroundAxisIndex(\n AxisIndex.Z,\n Angle.createDegrees(this?.rotDeg)\n );\n rotationXY.scaleColumnsInPlace(this.scale, this.scale, 1.0);\n const translation = Vector3d.create(\n this.translationX,\n this.translationY,\n this.translationZ\n );\n const helmertTransform = Transform.createRefs(translation, rotationXY);\n\n return helmertTransform;\n }\n}\n\n/** Additional Transform definition\n * @public\n * @extensions\n */\nexport interface AdditionalTransformProps {\n /** The properties of a 2D Helmert transform with Z offset if one is defined. */\n helmert2DWithZOffset?: Helmert2DWithZOffsetProps;\n}\n\n/** Additional Transform implementation.\n * An additional transform is a transformation that can apply to either the horizontal or vertical coordinates of a\n * geographic CRS. The transformation is applied after the latitude/longitude have been projected thus the process\n * is applied to the result Cartesian coordinates of the projection process.\n * @public\n*/\nexport class AdditionalTransform implements AdditionalTransformProps {\n\n /** The properties of a 2D Helmert transform with Z offset if one is defined. */\n public readonly helmert2DWithZOffset?: Helmert2DWithZOffset;\n\n public constructor(data?: AdditionalTransformProps) {\n if (data)\n this.helmert2DWithZOffset = data.helmert2DWithZOffset ? Helmert2DWithZOffset.fromJSON(data.helmert2DWithZOffset) : undefined;\n }\n\n /** Creates an Additional Transform from JSON representation.\n * @public */\n public static fromJSON(data: AdditionalTransformProps): AdditionalTransform {\n return new AdditionalTransform(data);\n }\n\n /** Creates a JSON from the Additional Transform definition\n * @public */\n public toJSON(): AdditionalTransformProps {\n return { helmert2DWithZOffset: this.helmert2DWithZOffset };\n }\n\n /** Compares two additional transforms applying a minuscule tolerance to comparing numbers.\n * @public */\n public equals(other: AdditionalTransform): boolean {\n if ((this.helmert2DWithZOffset === undefined) !== (other.helmert2DWithZOffset === undefined))\n return false;\n\n if (this.helmert2DWithZOffset && !this.helmert2DWithZOffset.equals(other.helmert2DWithZOffset!))\n return false;\n\n return true;\n }\n}\n\n"]}