Canvas: Implement dimension style
This commit is contained in:
parent
5b367f8e57
commit
5544eb05a4
5 changed files with 117 additions and 80 deletions
|
@ -2,16 +2,15 @@ import * as React from 'react';
|
|||
import { type IContainerModel } from '../../Interfaces/IContainerModel';
|
||||
import { type IHistoryState } from '../../Interfaces/IHistoryState';
|
||||
import { type IPoint } from '../../Interfaces/IPoint';
|
||||
import { DIMENSION_MARGIN, USE_EXPERIMENTAL_CANVAS_API } from '../../utils/default';
|
||||
import { USE_EXPERIMENTAL_CANVAS_API } from '../../utils/default';
|
||||
import { FindContainerById, MakeRecursionDFSIterator } from '../../utils/itertools';
|
||||
import { BAR_WIDTH } from '../Bar/Bar';
|
||||
import { Canvas } from '../Canvas/Canvas';
|
||||
import { AddDimensions } from '../Canvas/DimensionLayer';
|
||||
import { RenderSelector } from '../Canvas/Selector';
|
||||
import { SelectorMode, SVG } from '../SVG/SVG';
|
||||
import { RenderSymbol } from '../Canvas/Symbol';
|
||||
import { useState } from 'react';
|
||||
import { type ISymbolModel } from '../../Interfaces/ISymbolModel';
|
||||
import { RenderContainers, RenderDimensions, RenderSymbols } from '../Canvas/Renderer';
|
||||
|
||||
interface IViewerProps {
|
||||
className: string
|
||||
|
@ -117,15 +116,14 @@ export function Viewer({
|
|||
container,
|
||||
currentTransform
|
||||
);
|
||||
|
||||
// Draw selector
|
||||
RenderSelector(ctx, frameCount, {
|
||||
containers: current.containers,
|
||||
scale,
|
||||
selected: selectedContainer
|
||||
});
|
||||
}
|
||||
|
||||
// Draw selector
|
||||
RenderSelector(ctx, frameCount, {
|
||||
containers: current.containers,
|
||||
scale,
|
||||
selected: selectedContainer
|
||||
});
|
||||
// Draw symbols
|
||||
RenderSymbols(current, ctx, scale);
|
||||
ctx.restore();
|
||||
|
@ -158,47 +156,3 @@ export function Viewer({
|
|||
</SVG>
|
||||
);
|
||||
}
|
||||
function RenderSymbols(
|
||||
current: IHistoryState,
|
||||
ctx: CanvasRenderingContext2D,
|
||||
scale: number
|
||||
): void {
|
||||
current.symbols.forEach((symbol) => {
|
||||
RenderSymbol(symbol, ctx, scale);
|
||||
});
|
||||
}
|
||||
|
||||
function RenderDimensions(
|
||||
ctx: CanvasRenderingContext2D,
|
||||
leftDim: number,
|
||||
bottomDim: number,
|
||||
topDim: number,
|
||||
rightDim: number,
|
||||
depth: number,
|
||||
scale: number,
|
||||
containers: Map<string, IContainerModel>,
|
||||
container: IContainerModel,
|
||||
currentTransform: [number, number]
|
||||
): void {
|
||||
ctx.save();
|
||||
const depthOffset = (DIMENSION_MARGIN * (depth + 1)) / scale;
|
||||
const containerLeftDim = leftDim - depthOffset;
|
||||
const containerTopDim = topDim - depthOffset;
|
||||
const containerBottomDim = bottomDim + depthOffset;
|
||||
const containerRightDim = rightDim + depthOffset;
|
||||
const dimMapped = [containerLeftDim, containerBottomDim, containerTopDim, containerRightDim];
|
||||
AddDimensions(ctx, containers, container, dimMapped, currentTransform, scale, depth);
|
||||
ctx.restore();
|
||||
}
|
||||
|
||||
function RenderContainers(ctx: CanvasRenderingContext2D, container: IContainerModel, x: number, y: number): void {
|
||||
ctx.save();
|
||||
ctx.strokeStyle = container.properties.style?.stroke ?? '#000000';
|
||||
ctx.fillStyle = container.properties.style?.fill ?? '#000000';
|
||||
ctx.lineWidth = Number(container.properties.style?.strokeWidth ?? 1);
|
||||
ctx.globalAlpha = Number(container.properties.style?.fillOpacity ?? 1);
|
||||
ctx.fillRect(x, y, container.properties.width, container.properties.height);
|
||||
ctx.globalAlpha = Number(container.properties.style?.strokeOpacity ?? 1);
|
||||
ctx.strokeRect(x, y, container.properties.width, container.properties.height);
|
||||
ctx.restore();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue