52 lines
1.8 KiB
C++
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; // 变压器间距
|
|
};
|