From 63ebf54f0ac04f3b0ab4b79b1f3e9d94b2736728 Mon Sep 17 00:00:00 2001 From: Gregory Bednov Date: Wed, 29 Jan 2025 00:04:58 +0300 Subject: [PATCH] label enhancment --- src/addObjectForm.ts | 48 ++++++++++++++++++++++++++---- src/modules/PaletteProvider.ts | 4 +-- src/modules/ShapeRendererModule.ts | 32 +++++++++++++++++++- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/addObjectForm.ts b/src/addObjectForm.ts index 0b80513..3e3d7bb 100644 --- a/src/addObjectForm.ts +++ b/src/addObjectForm.ts @@ -1,7 +1,7 @@ export const stateInstrument = { фиксация: 'НаМесте', типПрибора: 'Величина', - величина: 'Напряжение', + величина: 'E', являетсяПАЗ: false, уточнение: null, функции: [] as string[], @@ -16,17 +16,53 @@ export const stateMechanism = { const функцииПоТипу = { ВыполняемаяФункция: [ 'Сигнализация', - 'АвтоматическоеРегулирование', - 'ВеличинаОтклоненияОтЗаданной', + 'Автоматическое регулирование', + 'Величина отклонения от заданной', 'Регистрация', ], ФункциональныйПризнак: [ 'ЧувствительныйЭлемент', + 'Первичный показывающий прибор', + 'Вторичный показывающий прибор', + 'Станция управления', + 'Включение, отключение, переключение', 'Преобразование', - 'ПервичныйПоказывающийПрибор', - 'СтанцияУправления', - 'ВключениеОтключениеПереключение', + 'Вспомогательные компьютерные устройства', + 'Вспомогательные вычислительные устройства', + 'QДополнительный', + 'VДополнительный', + 'ZДополнительный', ], + УточнениеВеличины: [ + 'Разность, перепад', + 'Соотношение, доля, дробь', + 'Интегрирование, суммирование по времени', + 'Самосрабатывающее устройство безопасности', + 'Система инструментальной безопасности', + ], +} + +export const letterMatcher = { + Сигнализация: 'A', + 'Автоматическое регулирование': 'C', + 'Величина отклонения от заданной': 'I', + Регистрация: 'R', + ЧувствительныйЭлемент: 'E', + 'Первичный показывающий прибор': 'G', + 'Вторичный показывающий прибор': 'I', + 'Станция управления': 'K', + 'Включение, отключение, переключение': 'S', + Преобразование: 'T', + 'Вспомогательные компьютерные устройства': 'X', + 'Вспомогательные вычислительные устройства': 'Y', + QДополнительный: 'Q', + VДополнительный: 'V', + ZДополнительный: 'Z', + 'Разность, перепад': 'D', + 'Соотношение, доля, дробь': 'F', + 'Интегрирование, суммирование по времени': 'Q', + 'Самосрабатывающее устройство безопасности': 'S', + 'Система инструментальной безопасности': 'Z', } export function createInstrumentForm(): HTMLElement { diff --git a/src/modules/PaletteProvider.ts b/src/modules/PaletteProvider.ts index 14dde39..d854f95 100644 --- a/src/modules/PaletteProvider.ts +++ b/src/modules/PaletteProvider.ts @@ -104,8 +104,8 @@ PaletteProvider.prototype.getPaletteEntries = function () { action: { click: function () { var shape = elementFactory.createShape({ - width: 50, - height: 120, + width: 37.795276, + height: 37.795276, canStartConnection: true, type: 'instrument', obj: structuredClone(stateInstrument), diff --git a/src/modules/ShapeRendererModule.ts b/src/modules/ShapeRendererModule.ts index 04bee35..20c3d90 100644 --- a/src/modules/ShapeRendererModule.ts +++ b/src/modules/ShapeRendererModule.ts @@ -6,6 +6,7 @@ import { create as svgCreate, } from 'tiny-svg' import { Shape } from 'diagram-js/lib/model/Types' +import { letterMatcher } from '../addObjectForm' const HIGH_PRIORITY = 1500 @@ -84,9 +85,13 @@ function drawMechanism(shape: Shape): SVGGElement { return g } +function drawText(x: any): string { + return x.величина + x.функции.map((u: string) => letterMatcher[u]).join('') +} + function drawInstrument(shape: Shape): SVGGElement { var g = svgCreate('g') - if (!shape.obj.является_паз) { + if (!shape.obj.являетсяПАЗ) { const circle = svgCreate('circle', { cx: shape.width / 2, cy: shape.height / 2, @@ -103,7 +108,21 @@ function drawInstrument(shape: Shape): SVGGElement { fill: 'Canvas', }) } + svgAppend(g, diamond(shape.width, shape.height, 0, 0)) + svgAppend( + g, + svgCreate('rect', { + x: 0, + y: 0, + width: shape.width, + height: shape.height, + stroke: 'CanvasText', + fill: 'Canvas', + }) + ) + + console.log(g) } if (shape.obj.фиксация == 'НаЩите') { svgAppend( @@ -118,6 +137,17 @@ function drawInstrument(shape: Shape): SVGGElement { }) ) } + const label = svgCreate('text', { + x: shape.width / 2, + y: shape.height / 2 - 10, + 'font-size': 10, + 'font-family': 'Arial', + 'text-anchor': 'middle', + 'dominant-baseline': 'middle', + }) + label.innerHTML = drawText(shape.obj) + console.log(label.innerHTML) + svgAppend(g, label) return g }