modified: src/AddObjectForm.svelte

modified:   src/CustomShapeRendererModule.ts
	modified:   src/Diagram.svelte
This commit is contained in:
Gregory Bednov 2025-01-17 01:10:07 +03:00
commit bba700c4d5
3 changed files with 71 additions and 36 deletions

View file

@ -38,7 +38,7 @@ const функцииПоТипу = {
'ZДополнительный']}; 'ZДополнительный']};
function addFunction() { function addFunction() {
функции = [...функции, { тип: 'ВыполняемаяФункция', значение: 'Регистрация' }]; функции = [...функции, { тип: 'ВыполняемаяФункция', значение: 'Регистрация' }]
} }
function removeFunction(index: number) { function removeFunction(index: number) {
@ -47,7 +47,7 @@ function removeFunction(index: number) {
let являетсяПаз = false; let являетсяПаз = false;
let ручной = false; let ручной = false;
let направление: 'Открывается' | 'Закрывается' | 'ОстаётсяНаМесте' | null = null; let направление: 'Открывается' | 'Закрывается' | 'ОстаётсяНаМесте' | null = null
function handleSubmit() { function handleSubmit() {
const data = const data =
@ -74,10 +74,10 @@ function handleSubmit() {
} }
}; };
console.log(величина); console.log(to_svg(0,0));
} }
function to_svg(x, y) { export function to_svg(x, y):SVGElement {
const r = svgCreate('g'); const r = svgCreate('g');
if (типОбъекта === 'ИсполнительныйМеханизм') { if (типОбъекта === 'ИсполнительныйМеханизм') {
var circle = svgCreate('circle', var circle = svgCreate('circle',
@ -89,18 +89,34 @@ function to_svg(x, y) {
stroke: "CanvasText", stroke: "CanvasText",
}); });
var line = svgCreate('line', var lineAttrs: {
{ x1: any;
x2: any;
y1: any;
y2: number;
stroke: string;
"marker-start"?: string;
"marker-end"?: string;
} = {
x1: x, x1: x,
x2: x, x2: x,
y1: y, y1: y,
y2: y - 42, y2: y - 42,
stroke: "CanvasText", stroke: "CanvasText",
}) }
svgAppend(r, circle); if (направление == "Открывается" || направление == "ОстаётсяНаМесте") {
svgAppend(r, line); // здесь НЕОБХОДИМО добавить стрелки в разных направлениях TODO lineAttrs["marker-start"] = "url(#arrow)"
return r; }
if (направление == "Закрывается" || направление == "ОстаётсяНаМесте") {
lineAttrs["marker-end"] = "url(#arrow)"
}
const line = svgCreate("line", lineAttrs);
svgAppend(r, circle)
svgAppend(r, line)
return r
} }
if (являетсяПаз) { if (являетсяПаз) {

View file

@ -7,7 +7,7 @@ import {
attr as svgAttr, attr as svgAttr,
create as svgCreate create as svgCreate
} from 'tiny-svg'; } from 'tiny-svg';
import to_svg from "./AddObjectForm.svelte"
@ -29,35 +29,38 @@ class CustomShapeRenderer extends BaseRenderer {
drawShape(visuals, element, attrs): SVGElement { drawShape(visuals, element, attrs): SVGElement {
var circle = svgCreate('circle'); // var circle = svgCreate('circle');
svgAttr(circle, { // svgAttr(circle, {
cx: `${element.width / 2}`, // cx: `${element.width / 2}`,
cy: `${element.height / 2 - 52}`, // cy: `${element.height / 2 - 52}`,
r: '2.5mm', // r: '2.5mm',
fill: "none", // fill: "none",
stroke: "CanvasText", // stroke: "CanvasText",
}); // });
var line = svgCreate('line'); // var line = svgCreate('line');
svgAttr(line, { // svgAttr(line, {
x1: element.width / 2, // x1: element.width / 2,
x2: element.width / 2, // x2: element.width / 2,
y1: element.height/2, // y1: element.height/2,
y2: element.height/2 - 40 - 2, // y2: element.height/2 - 40 - 2,
stroke: "CanvasText", // stroke: "CanvasText",
}) // })
var g = svgCreate('g'); // var g = svgCreate('g');
svgAppend(g, circle); // svgAppend(g, circle);
svgAppend(g, line); // svgAppend(g, line);
svgAttr(g, assign({}, this.SHAPE_STYLE, attrs || {})); // svgAttr(g, assign({}, this.SHAPE_STYLE, attrs || {}));
svgAppend(visuals, g); // svgAppend(visuals, g);
console.log(visuals);
return g; return to_svg(element.x, element.y);
//console.log(visuals);
// return g;
} }
} }

View file

@ -17,6 +17,22 @@
}); });
</script> </script>
<svg>
<defs>
<marker
id="arrow"
refX="9"
refY="5"
fill="CanvasText"
markerHeight="6"
markerWidth="6"
orient="auto-start-reverse"
viewBox="0 0 297 210">
<path d="M 0 0 L 10 5 L 0 10 z"></path>
</marker>
</defs>
</svg>
<style> <style>
.container { .container {
width: 297mm; width: 297mm;