Files
OpenBK7231T_App/src/sim/Tool_Wire.cpp
2022-11-28 12:29:01 +01:00

94 lines
1.7 KiB
C++

#ifdef WINDOWS
#include "Tool_Wire.h"
#include "Simulator.h"
#include "Simulation.h"
#include "CursorManager.h"
#include "Junction.h"
#include "Wire.h"
Tool_Wire::Tool_Wire() {
newWire = 0;
bActive = false;
}
void Tool_Wire::onKeyDown(int button) {
if (button == SDLK_ESCAPE) {
bActive = false;
newWire = 0;
}
}
void Tool_Wire::onMouseDown(const Coord &pos, int button) {
if (button == SDL_BUTTON_RIGHT) {
bSideness = !bSideness;
}
if (button == SDL_BUTTON_LEFT) {
Coord curPos = roundToGrid(GetMousePos());
if (bActive) {
#if 1
CWire *newWireOld = sim->getSim()->addWire(a, b);
newWire = sim->getSim()->addWire(b, c);
if (newWire != 0) {
CJunction *jun = newWire->getJunctionForPos(c);
if (jun->getLinksCount() > 0) {
// hit target, stop wire
bActive = false;
}
}
else if (newWireOld != 0) {
CJunction *jun = newWireOld->getJunctionForPos(b);
if (jun->getLinksCount() > 0) {
// hit target, stop wire
bActive = false;
}
}
#else
if (newWire == 0) {
newWire = sim->getSim()->addWire(a, b);
newWire->addPoint(c);
}
else {
newWire->addPoint(b);
newWire->addPoint(c);
}
#endif
basePos = curPos;
}
else {
basePos = curPos;
bActive = true;
}
}
}
void Tool_Wire::drawTool() {
Coord m;
sim->getCursorMgr()->setCursor(SDL_SYSTEM_CURSOR_CROSSHAIR);
m = roundToGrid(GetMousePos());
if (bActive) {
if (0) {
glBegin(GL_LINES);
glVertex2fv(basePos);
glVertex2fv(m);
glEnd();
}
a = basePos;
b = basePos;
if (bSideness) {
b.setX(m.getX());
}
else {
b.setY(m.getY());
}
c = m;
glBegin(GL_LINE_STRIP);
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
glEnd();
}
}
#endif