FPGA_WebLab/src/components/wireManager.ts

87 lines
2.3 KiB
TypeScript

import { ref, reactive } from 'vue';
export interface WireItem {
id: string;
startX: number;
startY: number;
endX: number;
endY: number;
startComponentId: string;
endComponentId?: string;
color?: string;
isActive?: boolean;
constraint?: string;
strokeWidth?: number;
routingMode?: 'auto' | 'orthogonal' | 'direct';
showLabel?: boolean;
}
// 全局wires状态
export const wires = ref<WireItem[]>([]);
// 添加新连线
export function addWire(wire: WireItem) {
wires.value.push(wire);
}
// 删除连线
export function deleteWire(wireId: string) {
const idx = wires.value.findIndex(w => w.id === wireId);
if (idx !== -1) wires.value.splice(idx, 1);
}
// 批量更新与某个引脚相关的所有Wire的约束
export function updateWiresConstraintByPin(componentId: string, newConstraint: string) {
wires.value.forEach(wire => {
if (
(wire.startComponentId === componentId) ||
(wire.endComponentId === componentId)
) {
wire.constraint = newConstraint;
}
});
}
// 查找与某个引脚相关的所有Wire
export function findWiresByPin(componentId: string) {
return wires.value.filter(wire =>
(wire.startComponentId === componentId) ||
(wire.endComponentId === componentId)
);
}
// 临时连线相关状态
export const isCreatingWire = ref(false);
export const creatingWireStart = reactive({ x: 0, y: 0 });
export const creatingWireStartInfo = reactive({
componentId: '',
pinLabel: '',
constraint: ''
});
export const mousePosition = reactive({ x: 0, y: 0 });
export function resetWireCreation() {
isCreatingWire.value = false;
creatingWireStart.x = 0;
creatingWireStart.y = 0;
creatingWireStartInfo.componentId = '';
creatingWireStartInfo.pinLabel = '';
creatingWireStartInfo.constraint = '';
}
export function setWireCreationStart(x: number, y: number, componentId: string, pinLabel: string, constraint: string) {
isCreatingWire.value = true;
creatingWireStart.x = x;
creatingWireStart.y = y;
creatingWireStartInfo.componentId = componentId;
creatingWireStartInfo.pinLabel = pinLabel;
creatingWireStartInfo.constraint = constraint;
}
export function setMousePosition(x: number, y: number) {
mousePosition.x = x;
mousePosition.y = y;
}
// 其它Wire相关操作可继续扩展...