GridFrame/diagramCavas/include/diagramEditor/layoutCalculator.h

52 lines
1.8 KiB
C++

// LayoutCalculator.h
#pragma once
#include "layoutData.h"
#include "common/core_model/constants.h"
class DiagramEditorWizard;
class DiagramEditorBaseBlock;
class DiagramEditorStructContainer;
class FixedLayoutCalculator {
public:
struct LevelLayout {
int level = 0;
double maxUpHeight = 0; // 整行最大上高度
double maxDownHeight = 0; // 整行最大下高度
double startY = 0; // 行起始Y
QList<DiagramEditorStructContainer*> containers;
};
explicit FixedLayoutCalculator(DiagramEditorWizard* wizard);
QMap<DiagramEditorBaseBlock*, QPointF> calculateLayout();
private:
// 第一阶段:计算尺寸
void calculateContainerSizes(LevelLayout& levelLayout);
// 第二阶段:计算位置
void calculatePositions(LevelLayout& levelLayout, double& deltaY, double& lastMaxDownH);
// 计算单个容器的设备位置
void calculateBlockPositionsInContainer(DiagramEditorStructContainer* container,
double startX,
double midUpY,
double midDownY);
// 计算变压器位置
void calculateTransformerPositions(const QList<DiagramEditorStructContainer*>& transformers,
double& deltaY, double& lastMaxDownH);
private:
DiagramEditorWizard* m_wizard = nullptr;
QMap<DiagramEditorBaseBlock*, QPointF> m_blockPositions;
// 全局常量
const double BUS_V_SPACING = 50.0; // 母线1和母线2间距
const double CONTAINER_H_SPACING = 100.0; // 容器水平间距
const double CONTAINER_START_X = 50.0; // 容器起始X
const double TRANSFORMER_START_X = 150.0; // 变压器起始X
const double TRANSFORMER_SPACING = 200.0; // 变压器间距
};