Simple Nano Circuit 0.0.2
PlacementManagerClass.h
1#ifndef _PlacementManagerClass_H_
2#define _PlacementManagerClass_H_
3
4#include <list>
5#include <fstream>
6#include <SDL.h>
7
8#include "./helpers/SDLHelper.h"
9
10#include "BaseElectronObject.h"
11#include "BaseIcObject.h"
12#include "WireObject.h"
13#include "FootPinNode.h"
14
15class AsgardClass;
16
18{
19 private:
20 void releaseMemory();
21
22 std::list<FootPinNode*> findAllPinsOnSegment( WireObject* );
23 std::list<WireObject*> findAllWiresOnPin( FootPinNode* );
24
26 std::list<WireObject*> findoutRedundantWires();
27
29 std::list<WireObject*> findoutExactlyIdenticalWires();
30
31 // 对指定的多条线段进行批量删除
32 void removeWires(std::list<WireObject*>&);
33
34 // 对指定的线段进行删除
35 void removeWire(WireObject*);
36 void removeFootPin(FootPinNode*);
38
39 void loginWire(WireObject*);
40 void loginIc(BaseIcObject*);
41 void loginFootPin(FootPinNode*);
42
43 void logoutWire(WireObject*);
44 void logoutFootPin(FootPinNode*);
46
48 void splitLineByPin(FootPinNode*);
49
50 private:
51 AsgardClass* asgard = nullptr;
52
53 public:
56
57 public:
59 std::list<BaseIcObject*> snIcObjects;
60
62 std::list<WireObject*> snWires;
63
65 std::list<FootPinNode*> snFreeFootPins;
66
68 std::list<FootPinNode*> snBoundFootPins;
69
70 void Drawing();
71
72 bool isPreviewICHolderInFreePlace( BaseIcObject* );
73 bool isPreviewWireHolderInFreePlace( WireObject* );
74 bool isPreviewFreePointHolderInFreePlace( FootPinNode* );
75
76 template<typename T>
77 bool conflictWith(const SDL_Rect& rect, const std::list<T>& target)
78 {
79 for(const auto& _obj : target)
80 {
81 const SDL_Rect targetRect = _obj->getLocationRect();
82 if(SDLHelper::SDL_RectsOverlap(rect, targetRect))
83 {
84 return true;
85 }
86 }
87 return false;
88 };
89
91 bool PlaceWire( WireObject* );
92
95
97 bool PlaceIc( BaseIcObject* );
98
100 void resetToBlank();
101
104
106 void ObjectsReport();
107
109 void eraseRedundantWires();
110
113
114 private: // 电流结果输出选项
115 bool showingCurrentText = false;
116 public:
117 bool isShowingCurrentText() const { return this->showingCurrentText; };
118 void setShowingCurrentText(bool _val) { this->showingCurrentText = _val; };
119
120 public:
121 void CalculateCurrents();
123 void resetCurrentCalculateState();
124
126 std::unordered_map<std::string, std::set<FootPinNode*>> samePosFootPins;
127 //std::map<std::string, std::set<FootPinNode*>> samePosFootPins;
129
131 std::list<FootPinNode*> waitToCalculateCurrentFootPins;
132
133 bool canCalcCurrentBySamePosOtherPins(FootPinNode* footPin);
134 double calcCurrentBySamePosOtherPins(FootPinNode* footPin);
135
137 void markInvalidPins();
138
139 void saveToFile(std::ofstream&);
140};
141
142#endif
Definition: AsgardClass.h:17
Definition: BaseElectronObject.h:13
Definition: BaseIcObject.h:11
Definition: FootPinNode.h:15
Definition: PlacementManagerClass.h:18
std::list< BaseIcObject * > snIcObjects
存放已经放置在画布上的所有IC
Definition: PlacementManagerClass.h:59
bool PlaceFootPin(FootPinNode *)
放置落点到布局中
Definition: PlacementManagerClass.cpp:233
bool PlaceIc(BaseIcObject *)
放置IC元件到布局中
Definition: PlacementManagerClass.cpp:249
std::list< WireObject * > snWires
存放已经放置在画布上的所有线段
Definition: PlacementManagerClass.h:62
std::list< FootPinNode * > snFreeFootPins
存放已经放置在画布上的所有自由引脚落点
Definition: PlacementManagerClass.h:65
void resetToBlank()
清空当前布局,重新开始新的电路图绘制
Definition: PlacementManagerClass.cpp:261
void CalculateCurrents()
电流计算
Definition: PlacementManagerClass.cpp:533
bool buildingFootPinsCurrent()
对电路中的所有引脚位置进行扫描,对能够计算出电流的引脚完成电流计算
Definition: PlacementManagerClass.cpp:564
bool eraseExactlyIdenticalWires()
擦除完全相同的线段
Definition: PlacementManagerClass.cpp:497
void Drawing()
遍历IC、Wire、FreePin,渲染到屏幕上
Definition: PlacementManagerClass.cpp:34
bool PlaceWire(WireObject *)
放置线段到布局中
Definition: PlacementManagerClass.cpp:197
std::unordered_map< std::string, std::set< FootPinNode * > > samePosFootPins
存放同位节点信息
Definition: PlacementManagerClass.h:126
void remarkPinsValidState()
将所有的pin的有效状态进行检测和设置
Definition: PlacementManagerClass.cpp:683
std::list< FootPinNode * > waitToCalculateCurrentFootPins
存放需要推导电流的所有FootPin
Definition: PlacementManagerClass.h:131
BaseElectronObject * findObjectUnderMousePos(SDL_Point &)
找到鼠标落点下的IC,将IC句柄返回
Definition: PlacementManagerClass.cpp:295
void ObjectsReport()
简报当前已放置在布局当中的所有器件
Definition: PlacementManagerClass.cpp:330
std::list< FootPinNode * > snBoundFootPins
存放已经放置在画布上的所有隶属于IC或Wire的引脚落点
Definition: PlacementManagerClass.h:68
void eraseRedundantWires()
擦除冗余线段
Definition: PlacementManagerClass.cpp:511
Definition: WireObject.h:14