@@ -54,12 +54,79 @@ void Graphics::subdivideDone()
5454 }
5555}
5656
57+ void Graphics::repairNetStart (const BufferedNetPtr& bnet, odb::dbNet* net)
58+ {
59+ lines_.clear ();
60+ if (net_) {
61+ repair_net_ignore_ = (net != net_);
62+ }
63+ if (!repair_net_ignore_) {
64+ bnet_ = bnet;
65+ gui::Gui::get ()->redraw ();
66+ gui::Gui::get ()->pause ();
67+ }
68+ }
69+
70+ void Graphics::makeBuffer (odb::dbInst* inst)
71+ {
72+ if (!repair_net_ignore_) {
73+ buffers_.push_back (inst);
74+ gui::Gui::get ()->redraw ();
75+ gui::Gui::get ()->pause ();
76+ }
77+ }
78+
79+ void Graphics::repairNetDone ()
80+ {
81+ if (!repair_net_ignore_) {
82+ gui::Gui::get ()->redraw ();
83+ gui::Gui::get ()->pause ();
84+ }
85+ bnet_.reset ();
86+ buffers_.clear ();
87+ }
88+
89+ void Graphics::drawBNet (const BufferedNetPtr& bnet, gui::Painter& painter)
90+ {
91+ switch (bnet->type ()) {
92+ case BufferedNetType::wire: {
93+ painter.drawLine (bnet->location (), bnet->ref ()->location ());
94+ drawBNet (bnet->ref (), painter);
95+ break ;
96+ }
97+ case BufferedNetType::junction:
98+ painter.drawLine (bnet->location (), bnet->ref ()->location ());
99+ painter.drawLine (bnet->location (), bnet->ref2 ()->location ());
100+ drawBNet (bnet->ref (), painter);
101+ drawBNet (bnet->ref2 (), painter);
102+ break ;
103+ case BufferedNetType::load: {
104+ Point loc = bnet->location ();
105+ painter.drawCircle (loc.x (), loc.y (), 1000 );
106+ break ;
107+ }
108+ case BufferedNetType::buffer:
109+ painter.drawLine (bnet->location (), bnet->ref ()->location ());
110+ drawBNet (bnet->ref (), painter);
111+ break ;
112+ }
113+ }
114+
57115void Graphics::drawObjects (gui::Painter& painter)
58116{
59117 painter.setPen (gui::Painter::kRed , true );
60118 for (const odb::Line& line : lines_) {
61119 painter.drawLine (line.pt0 (), line.pt1 ());
62120 }
121+
122+ if (bnet_) {
123+ painter.setPenAndBrush (gui::Painter::kPink , true );
124+ drawBNet (bnet_, painter);
125+ painter.setPenAndBrush (gui::Painter::kGreen , true );
126+ for (odb::dbInst* buffer : buffers_) {
127+ painter.drawRect (buffer->getBBox ()->getBox ());
128+ }
129+ }
63130}
64131
65132} // namespace rsz
0 commit comments