// 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 containers; }; explicit FixedLayoutCalculator(DiagramEditorWizard* wizard); QMap 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& transformers, double& deltaY, double& lastMaxDownH); private: DiagramEditorWizard* m_wizard = nullptr; QMap 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; // 变压器间距 };