1 //---------------------------------------------------------------------------
\r
3 //---------------------------------------------------------------------------
\r
6 #include "StrUtils.h"
\r
7 //---------------------------------------------------------------------------
\r
8 QCCNot::QCCNot(int x,int y) :QCircuit(x,y) {
\r
13 //---------------------------------------------------------------------------
\r
14 QCCNot::QCCNot(int x,int y, string param) :QCircuit(x,y) {
\r
15 Name = GetTypeStr();
\r
18 vector<string> v = StrUtils::split_str(param);
\r
19 Target1 = atoi(v[0].c_str());
\r
20 Target2 = atoi(v[1].c_str());
\r
22 //---------------------------------------------------------------------------
\r
24 QCCNot::Draw(QDraw *qDraw) {
\r
26 int GridSize = qDraw->GetGridSize();
\r
27 int UnitSize = qDraw->GetUnitSize();
\r
32 int tx1 = tx*GridSize + GridSize/2;
\r
33 int ty1 = ty*GridSize + GridSize/2;
\r
34 int tx2 = X*GridSize + GridSize/2;
\r
35 int ty2 = Y*GridSize + GridSize/2;
\r
36 qDraw->SetPenColor(clBlack);
\r
37 qDraw->DrawLine(tx1,ty1,tx2,ty2);
\r
38 qDraw->SetBrushColor(clBlack);
\r
39 qDraw->Ellipse(tx1-4,ty1-4,tx1+5,ty1+5);
\r
44 tx1 = tx*GridSize + GridSize/2;
\r
45 ty1 = ty*GridSize + GridSize/2;
\r
46 tx2 = X*GridSize + GridSize/2;
\r
47 ty2 = Y*GridSize + GridSize/2;
\r
48 qDraw->SetPenColor(clBlack);
\r
49 qDraw->DrawLine(tx1,ty1,tx2,ty2);
\r
50 qDraw->SetBrushColor(clBlack);
\r
51 qDraw->Ellipse(tx1-4,ty1-4,tx1+5,ty1+5);
\r
53 int d = (GridSize-UnitSize)/2;
\r
54 int x1 = X * GridSize+d;
\r
55 int y1 = Y * GridSize+d;
\r
56 int x2 = x1 + UnitSize;
\r
57 int y2 = y1 + UnitSize;
\r
59 qDraw->SetBrushColor(clWhite);
\r
60 qDraw->FillRect(x1,y1,x2,y2);
\r
61 qDraw->SetPenColor(clBlack);
\r
62 qDraw->SetBrushColor(clWhite);
\r
63 qDraw->Ellipse(x1,y1,x2,y2);
\r
64 qDraw->DrawLine(x1+UnitSize/2,y1,x1+UnitSize/2,y2);
\r
65 qDraw->DrawLine(x1,y1+UnitSize/2,x2,y1+UnitSize/2);
\r
67 //---------------------------------------------------------------------------
\r
69 QCCNot::GetCalcText(void) {
\r
72 os << "q[" << Y << "],";
\r
73 os << "q[" << Target1 << "],";
\r
74 os << "q[" << Target2 << "])";
\r
77 //---------------------------------------------------------------------------
\r
79 QCCNot::DrawPS(QPSDraw *psDraw) {
\r
81 int GridSize = psDraw->GetGridSize();
\r
82 int UnitSize = psDraw->GetUnitSize();
\r
87 int tx1 = tx*GridSize + GridSize/2;
\r
88 int ty1 = ty*GridSize + GridSize/2;
\r
89 int tx2 = X*GridSize + GridSize/2;
\r
90 int ty2 = Y*GridSize + GridSize/2;
\r
91 psDraw->DrawLine(tx1,ty1,tx2,ty2);
\r
92 psDraw->DrawFillCircle(tx1,ty1,4);
\r
97 tx1 = tx*GridSize + GridSize/2;
\r
98 ty1 = ty*GridSize + GridSize/2;
\r
99 tx2 = X*GridSize + GridSize/2;
\r
100 ty2 = Y*GridSize + GridSize/2;
\r
101 psDraw->DrawLine(tx1,ty1,tx2,ty2);
\r
102 psDraw->DrawFillCircle(tx1,ty1,4);
\r
104 int d = (GridSize-UnitSize)/2;
\r
105 int x1 = X * GridSize+d;
\r
106 int y1 = Y * GridSize+d;
\r
107 int x2 = x1 + UnitSize;
\r
108 int y2 = y1 + UnitSize;
\r
110 psDraw->FillRect(x1,y1,x2,y2);
\r
111 psDraw->DrawCircle(X*GridSize + GridSize/2,Y*GridSize + GridSize/2,UnitSize/2);
\r
112 psDraw->DrawLine(x1+UnitSize/2,y1,x1+UnitSize/2,y2);
\r
113 psDraw->DrawLine(x1,y1+UnitSize/2,x2,y1+UnitSize/2);
\r
115 //---------------------------------------------------------------------------
\r
117 QCCNot::GetParam(void) {
\r
119 os << Target1 << "," << Target2;
\r
122 //---------------------------------------------------------------------------
\r
124 QCCNot::Reverse(int y) {
\r
126 Target1 = y - Target1;
\r
127 Target2 = y - Target2;
\r
129 //---------------------------------------------------------------------------
\r
130 TRect QCCNot::GetOccupiedRect() {
\r
133 rc.right = this->X + 1;
\r
135 rc.bottom = this->Y + 1;
\r
136 if (this->Target1 < this->Y) {
\r
137 rc.top = this->Target1;
\r
139 rc.bottom = this->Target1 + 1;
\r
142 if (this->Target2 < rc.top) {
\r
143 rc.top = this->Target2;
\r
144 } else if (this->Target2 >= rc.bottom) {
\r
145 rc.bottom = this->Target2 + 1;
\r
149 //--------------------------------------------------------------------------
\r
150 QCircuit *QCCNot::Clone() {
\r
151 QCCNot * qc = new QCCNot(X, Y);
\r
152 qc->SetTarget1(GetTarget1());
\r
153 qc->SetTarget2(GetTarget2());
\r
154 return (QCircuit*)qc;
\r
156 //---------------------------------------------------------------------------
\r