UNPKG

@itwin/core-backend

Version:
312 lines • 16.2 kB
/** @packageDocumentation * @module ElementGeometry */ import { Id64String } from "@itwin/core-bentley"; import { LinePixels } from "@itwin/core-common"; import { IModelDb } from "./IModelDb"; /** A line style definition is a uniquely named pattern that repeats as it is displayed along a curve path. In the absence of a line style, curve display is limited to solid lines with a width in pixels. * There are three varieties of line styles: * - A style described by a stroke pattern (series of dashes and gaps) that may also include symbol graphics. * - A style using pre-defined pixel bit patterns [[LinePixels]] for dashed display (Code1-Code7). * - A style that uses a texture. * * A definition is defined by one or more components. A component is saved as a "file property" and can be referenced by other components. The line style definition references a component * by file property id and type and is saved as a dictionary element. * @public */ export declare namespace LineStyleDefinition { /** Line style component type identifiers */ enum ComponentType { /** Component type for [[LineStyleDefinition.PointSymbolProps]] */ PointSymbol = 1, /** Component type for [[LineStyleDefinition.CompoundProps]] */ Compound = 2, /** Component type for [[LineStyleDefinition.StrokePatternProps]] */ StrokePattern = 3, /** Component type for [[LineStyleDefinition.StrokePointProps]] */ StrokePoint = 4, /** Component type for [[LinePixels]], never saved as a file property */ Internal = 6, /** Component type for [[LineStyleDefinition.RasterImageProps]] */ RasterImage = 7 } /** Mask of values for StrokeMode */ enum StrokeMode { /** Stroke represents a blank space */ Gap = 0, /** Stroke represents a solid dash */ Dash = 1, /** Treat stroke as rigid and continue past a corner to complete the stroke as opposed to breaking at the corner */ Ray = 2, /** Stroke length can be stretched when [[LineStyleDefinition.StrokePatternOptions.Iteration]] and [[LineStyleDefinition.StrokePatternOptions.AutoPhase]] options are set, applicable to both Gap and Dash strokes */ Scale = 4, /** Invert stroke in first stroke pattern */ FirstInvert = 8, /** Invert stroke in last stroke pattern */ LastInvert = 16 } /** Define constant width or tapered strokes with distance specified in meters */ enum StrokeWidth { /** Stroke draws as one pixel wide line */ None = 0, /** Half [[LineStyleDefinition.StrokeProps.orgWidth]] and [[LineStyleDefinition.StrokeProps.endWidth]] applied to left side of stroke */ Left = 1, /** Half [[LineStyleDefinition.StrokeProps.orgWidth]] and [[LineStyleDefinition.StrokeProps.endWidth]] applied to right side of stroke */ Right = 2, /** Half [[LineStyleDefinition.StrokeProps.orgWidth]] and [[LineStyleDefinition.StrokeProps.endWidth]] applied to both sides of stroke */ Full = 3 } /** Controls appearance of stroke end caps. If StrokeCap is >= Hexagon, the end cap is stroked as an arc and the value of * StrokeCap indicates the number of vectors in the arc. */ enum StrokeCap { /** Stroke displays as a closed polygon */ Closed = 0, /** Stroke displays lines at specified width instead of a polygon */ Open = 1, /** Stroke length extended by half the stroke width */ Extended = 2, /** Stroke end cap is a hexagon */ Hexagon = 3, /** Stroke end cap is an octagon */ Octagon = 4, /** Stroke end cap is a decagon */ Decagon = 5, /** Stroke end cap is an arc */ Arc = 30 } /** A stroke representing either a dash or gap in a stroke pattern */ interface StrokeProps { /** Length of stroke in meters */ length: number; /** Width at start of stroke. Behavior controlled by [[LineStyleDefinition.StrokeWidth]], choose value other than [[LineStyleDefinition.StrokeWidth.None]] */ orgWidth?: number; /** Width at end of stroke, same as start width if not present. Behavior controlled by [[LineStyleDefinition.StrokeWidth]], choose value other than [[LineStyleDefinition.StrokeWidth.None]] */ endWidth?: number; /** Type and behavior of stroke */ strokeMode?: StrokeMode; /** How to apply orgWidth and endWidth to stroke */ widthMode?: StrokeWidth; /** Appearance of stroke end cap */ capMode?: StrokeCap; } type Strokes = StrokeProps[]; /** Options to control how stroke pattern is applied to underlying curve */ enum StrokePatternOptions { /** Use default stroke behavior */ None = 0, /** [[LineStyleDefinition.StrokePatternProps.phase]] represents fractional distance into first stroke of pattern */ AutoPhase = 1, /** Use [[LineStyleDefinition.StrokePatternProps.maxIter]] to limit the number of iterations of the stroke pattern */ Iteration = 8, /** Single segment mode restarts the stroke pattern at corners instead of continuing around corners */ Segment = 16, /** Center the line style and stretch the ends */ CenterStretch = 32 } /** Stroke pattern component definition [[LineStyleDefinition.ComponentType.StrokePattern]]. * A stroke pattern component consists of a series of dashes and gaps having specified lengths and widths in meters. Simple dash-dot type line styles that do not * include point symbols can be created by referencing a stroke pattern component by its file property id. */ interface StrokePatternProps { /** Name for this stroke pattern */ descr: string; /** Skip into the pattern before starting to draw. Value treated as fraction of the first stroke when [[LineStyleDefinition.StrokePatternOptions.AutoPhase]] set. Value used as distance when [[LineStyleDefinition.StrokePatternOptions.CenterStretch]] is not set. */ phase?: number; /** Options mask for this stroke pattern */ options?: StrokePatternOptions; /** The entire stroke pattern will be repeated no more than maxIter on curve or segment when [[LineStyleDefinition.StrokePatternOptions.Iteration]] is set and stroke pattern includes stretchable strokes. */ maxIter?: number; /** Array of strokes, maximum number that will be used is 32 */ strokes: Strokes; } /** Flags to identify point symbol behavior */ enum PointSymbolFlags { /** Default symbol behavior */ None = 0, /** Symbol includes 3d geometry */ Is3d = 1, /** Symbol does not allow scaling */ NoScale = 2 } /** Point symbol component definition [[LineStyleDefinition.ComponentType.PointSymbol]]. * A point symbol component identifies a GeometryPart for reference by a [[LineStyleDefinition.SymbolProps]]. */ interface PointSymbolProps { /** GeometryPart Id to use as a pattern symbol */ geomPartId: Id64String; /** GeometryPart.bbox.low.x */ baseX?: number; /** GeometryPart.bbox.low.y */ baseY?: number; /** GeometryPart.bbox.low.z */ baseZ?: number; /** GeometryPart.bbox.high.x */ sizeX?: number; /** GeometryPart.bbox.high.y */ sizeY?: number; /** GeometryPart.bbox.high.z */ sizeZ?: number; /** Symbol behavior flags */ symFlags?: PointSymbolFlags; /** Symbol scale, defaults to 1 */ scale?: number; } /** Symbol options for location, orientation, and behavior */ enum SymbolOptions { /** No point symbol */ None = 0, /** Symbol at origin of stroke */ Origin = 1, /** Symbol at end of stroke */ End = 2, /** symbol at center of stroke */ Center = 3, /** Symbol at curve start point */ CurveOrigin = 4, /** Symbol at curve end point */ CurveEnd = 8, /** Symbol at each vertex */ CurveVertex = 16, /** Adjust symbol rotation left->right */ AdjustRotation = 32, /** Angle of symbol not relative to stroke direction */ AbsoluteRotation = 64, /** No scale on variable strokes */ NoScale = 256, /** No clip on partial strokes */ NoClip = 512, /** No partial strokes */ NoPartial = 1024, /** Project partial origin */ ProjectOrigin = 2048, /** Use color from symbol instead of inheriting curve color */ UseColor = 16384, /** Use weight from symbol instead of inheriting curve weight */ UseWeight = 32768 } /** Identifies a symbol and its location and orientation relative to a stroke pattern */ interface SymbolProps { /** The file property id of the symbol component, assumed to be [[LineStyleDefinition.ComponentType.PointSymbol]] if symType is undefined. */ symId: number; /** The component type, leave undefined if symId is a [[LineStyleDefinition.ComponentType.PointSymbol]] */ symType?: ComponentType; /** The 0 based stroke index for base stroke pattern [[LineStyleDefinition.ComponentType.StrokePattern]] component */ strokeNum?: number; /** Symbol x offset distance in meters */ xOffset?: number; /** Symbol y offset distance in meters */ yOffset?: number; /** Symbol rotation in radians */ angle?: number; /** Must set location for symbol as default value is [[LineStyleDefinition.SymbolOptions.None]] */ mod1?: SymbolOptions; } type Symbols = SymbolProps[]; /** Stroke point component definition [[LineStyleDefinition.ComponentType.StrokePoint]]. * A stroke point component identifies the locations of point symbol components relative to a base stroke pattern component. */ interface StrokePointProps { /** Name for this stroke point component */ descr: string; /** The file property id of the stroke component, assumed to be [[LineStyleDefinition.ComponentType.StrokePattern]] if lcType is undefined */ lcId: number; /** The component type, leave undefined if lcId is a [[LineStyleDefinition.ComponentType.StrokePattern]] */ lcType?: ComponentType; /** Array of symbols */ symbols: Symbols; } /** Raster component definition [[LineStyleDefinition.ComponentType.RasterImage]]. * A raster component identifies a texture for a line style. */ interface RasterImageProps { /** Name for this raster image component */ descr: string; /** Raster width */ x: number; /** Raster height */ y: number; /** True width flag */ trueWidth?: number; /** Raster flags */ flags?: number; /** The file property id of raster image */ imageId?: number; } /** Identifies a component by file property id and type */ interface ComponentProps { /** The file property id of [[LineStyleDefinition.ComponentType.StrokePattern]] or [[LineStyleDefinition.ComponentType.StrokePoint]] component */ id: number; /** The type of component for specified file property id */ type: ComponentType; /** Offset distance for this component, default is 0 */ offset?: number; } type Components = ComponentProps[]; /** Compound component definition [[LineStyleDefinition.ComponentType.Compound]]. * A compound component is used to link stroke pattern and stroke point components to create a style that displays dashes, gaps, and symbols. */ interface CompoundProps { comps: Components; } /** Flags to describe a style or control style behavior */ enum StyleFlags { /** Use defaults */ None = 0, /** Only snap to center line and not individual strokes and symbols of line style */ NoSnap = 4, /** Style represents a continuous line with width (determined by looking at components if not set) */ Continuous = 8, /** Style represents physical geometry and should be scaled as such */ Physical = 128 } /** The line style definition element data */ interface StyleProps { /** The file property id for either a [[LineStyleDefinition.ComponentType.StrokePattern]] or [[LineStyleDefinition.ComponentType.Compound]] component */ compId: number; /** The type of component for specified file property id */ compType: ComponentType; /** Style behavior flags. Defaults to [[LineStyleDefinition.StyleFlags.NoSnap]] if left undefined */ flags?: StyleFlags; /** Style scale, defaults to 1 */ unitDef?: number; } /** Helper methods for creating and querying line styles */ class Utils { /** Create a file property for a new stroke pattern component. */ static createStrokePatternComponent(iModel: IModelDb, props: StrokePatternProps): StyleProps; /** Create a file property for a new point symbol component. * If base and size parameters are not supplied, queries GeometryPart by id to set them. */ static createPointSymbolComponent(iModel: IModelDb, props: PointSymbolProps): StyleProps | undefined; /** Create a file property for a new stroke point component. */ static createStrokePointComponent(iModel: IModelDb, props: StrokePointProps): StyleProps; /** Create a file property for a new compound component. */ static createCompoundComponent(iModel: IModelDb, props: CompoundProps): StyleProps; /** Create a file property for a new raster image component. */ static createRasterComponent(iModel: IModelDb, props: RasterImageProps, image: Uint8Array): StyleProps | undefined; /** Query for an existing line style with the supplied name. */ static queryStyle(imodel: IModelDb, scopeModelId: Id64String, name: string): Id64String | undefined; /** Insert a new line style with the supplied name. * @throws [[IModelError]] if unable to insert the line style definition element. */ static createStyle(imodel: IModelDb, scopeModelId: Id64String, name: string, props: StyleProps): Id64String; /** Query for a continuous line style that can be used to create curves with physical width instead of weight in pixels and create one if it does not already exist. * There are 2 ways to define a continuous line style: * - Width is not specified in the style itself and instead will be supplied as an override for each curve that is drawn. * - Defined using [[LineStyleDefinition.ComponentType.Internal]] with component id 0 [[LinePixels.Solid]] which has special behavior of being affected by width overrides. * - Width is specified in the style. * - Defined using a single stroke component that is a long dash. * * @throws [[IModelError]] if unable to insert the line style definition element. */ static getOrCreateContinuousStyle(imodel: IModelDb, scopeModelId: Id64String, width?: number): Id64String; /** Query for a line style using the supplied [[LinePixels]] value (Code1-Code7) and create one if it does not already exist. * Most applications should instead use [[createStrokePatternComponent]] to define a style with physical dash and gap lengths. * Unlike other components, [[LineStyleDefinition.ComponentType.Internal]] uses the line code as the compId instead of a file property id. * @throws [[IModelError]] if supplied an invalid [[LinePixels]] value or if unable to insert the line style definition element. */ static getOrCreateLinePixelsStyle(imodel: IModelDb, scopeModelId: Id64String, linePixels: LinePixels): Id64String; } } //# sourceMappingURL=LineStyle.d.ts.map