Example #1
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow) {
    ui->setupUi(this);

    // Add a simple drawing canvas to the main window
    canvas = new Canvas(ui->centralwidget, 320, 240);
    ui->verticalLayout->addWidget(canvas);

    QObject::connect(ui->actionLine, SIGNAL(triggered()), this, SLOT(actionLine()));
    QObject::connect(ui->actionCircle, SIGNAL(triggered()), this, SLOT(actionCircle()));
}
Example #2
0
LineEditor::LineEditor(Controller *ctrl, QSharedPointer<Line> line)
	: AbstractEditor(ctrl),
	  mState(SELECTED),
	  mLine(line),
	  mWidth(0),
	  mLayer(Layer::LAY_SILK_TOP),
	  mLineType(Line::LINE),
	  mLineAction(4, "Straight Line"),
	  mArcCWAction(5, "Arc (CW)"),
	  mArcCCWAction(6, "Arc (CCW)"),
	  mEditAction(0, "Edit Segment"),
	  mMoveAction(3, "Move Segment"),
	  mDelAction(7, "Delete Segment"),
	  mMoveVtxAction(3, "Move Vertex")
{
	connect(&mLineAction, SIGNAL(execFired()), SLOT(actionLine()));
	connect(&mArcCWAction, SIGNAL(execFired()), SLOT(actionArcCW()));
	connect(&mArcCCWAction, SIGNAL(execFired()), SLOT(actionArcCCW()));
	connect(&mEditAction, SIGNAL(execFired()), SLOT(actionEdit()));
	connect(&mMoveAction, SIGNAL(execFired()), SLOT(actionMove()));
	connect(&mDelAction, SIGNAL(execFired()), SLOT(actionDel()));
	connect(&mMoveVtxAction, SIGNAL(execFired()), SLOT(actionMoveVtx()));
}
QString ExperimentLogger::get(qint64 elapsedTime) {
	QDateTime start;
	start.setMSecsSinceEpoch(startTime);

	QString log;
	log += QString("%%BEGIN_HEADER\r\n");
	log += QString("// Date ( %1 )\r\n").arg(start.toString("d.M.yyyy"));
	log += QString("// Time ( %1 )\r\n").arg(start.toString("h:mm"));
	log += QString("  %MilliTime ( %1 )\r\n").arg(startTime);
	log += QString("  %ElapsedTime_ms ( %1 )\r\n").arg(elapsedTime);
	// log += QString("  %Paradigm ( %1 )\r\n").arg(paradigm);
	log += QString("\r\n");
	log += QString("  %ShockDelay ( %1 )\r\n").arg(shock.delay);
	log += QString("  %ShockLength ( %1 )\r\n").arg(shock.length);
	log += QString("  %ShockPause ( %1 )\r\n").arg(shock.in_delay);
	log += QString("  %ShockRefractory ( %1 )\r\n").arg(shock.refractory);
	log += QString("\r\n");
	log += QString("  %ArenaDiameter_m ( %1 )\r\n").arg(arena.size);
	log += QString("  %ArenaCenterXY ( %1 %2 )\r\n").arg(arena.x).arg(arena.y);
	log += QString("  %TrackerResolution_PixPerCM.0 ( %1 )\r\n").arg((2 * arena.radius) / (arena.size * 100));
	log += QString("\r\n");

	int index = 0;

	for (Area area : areas) {
		if (area.type == area.CIRCULAR_AREA) {
			log += QString("  %RobotZone ( %1 %2 %3 %4 %5 )\r\n").arg(index++).arg(area.enabled).arg(area.radius).arg(area.angle).arg(area.distance);
		}
		else {
			log += QString("  %ArenaZone ( %1 %2 %3 %4 )\r\n").arg(index++).arg(area.enabled).arg(area.angle).arg(area.range);
		}
	}

	for (Counter counter : counters) {
		log += QString("  %Counter ( %1 %2 %3 %4 %5 )\r\n").arg(index++).arg(counter.active ? 1 : 0)
			.arg(counter.singleShot ? 1 : 0).arg(counter.period).arg(counter.limit);
	}

	for (Action action : actions) {
		QString actionLine("  %Action ( %1 %2 %3 )\r\n");
		actionLine = actionLine.arg(action.trigger);

		switch (action.type)
		{
		case action.SHOCK:
			actionLine = actionLine.arg("SHOCK");
			break;
		case action.ENABLE:
			actionLine = actionLine.arg("ENABLE");
			break;
		case action.DISABLE:
			actionLine = actionLine.arg("DISABLE");
			break;
		case action.COUNTER_INC:
			actionLine = actionLine.arg("COUNTER_INC");
			break;
		case action.COUNTER_DEC:
			actionLine = actionLine.arg("COUNTER_DEC");
			break;
		case action.COUNTER_SET:
			actionLine = actionLine.arg("COUNTER_SET");
			break;
		case action.SOUND:
			actionLine = actionLine.arg("SOUND");
			break;
		case action.LIGHT_ON:
			actionLine = actionLine.arg("LIGHT_ON");
			break;
		case action.LIGHT_OFF:
			actionLine = actionLine.arg("LIGHT_OFF");
			break;
		case action.FEEDER:
			actionLine = actionLine.arg("FEEDER");
			break;
		}
		actionLine = actionLine.arg(action.arg);

		log += actionLine;
	}


	QString rowLine("  %Row ( FrameCount 1msTimeStamp RatRoomX RatRoomY ");
	if (hasAngle) {
		rowLine += "RatAngle ";
	}

	if (hasRobot) {
		rowLine += "RobotRoomX RobotRoomY ";
		if (hasAngle) {
			rowLine += "RobotAngle ";
		}
	}

	rowLine += "State CurrentLevel Position";

	index = 0;

	for (Area area : areas) {
		rowLine += QString("%1_Enabled ").arg(index++);
	}

	for (Counter counter : counters) {
		rowLine += QString("%1_Active %1_Value ").arg(index++);
	}

	rowLine += ")\r\n";

	log += rowLine;
	log += QString("  %TrackerVersion ( %1 )\r\n").arg(KACHNA_VERSION);
	log += QString("%%END_HEADER\r\n");

	int i = 1;
	auto it = frames.begin();
	while (it != frames.end()) {
		Frame frame = (*it);
		log += QString::number(i);
		log += "    ";
		log += QString::number(frame.timestamp);
		log += "    ";
		log += QString::number(frame.rat.pt.x);
		log += "    ";
		log += QString::number(frame.rat.pt.y);
		log += "    ";
		if (hasAngle) {
			log += QString::number(frame.rat.angle);
			log += "    ";
		}
		if (hasRobot) {
			log += QString::number(frame.robot.pt.x);
			log += "    ";
			log += QString::number(frame.robot.pt.y);
			log += "    ";
			if (hasAngle) {
				log += QString::number(frame.robot.angle);
				log += "    ";
			}
		}
		log += QString::number(frame.state);
		log += "    ";
		log += QString::number(frame.shock);
		log += "    ";
		log += QString::number(frame.position);
		log += "    ";

		for (Area area : frame.areas) {
			log += QString("%1    ").arg(area.enabled ? 1 : 0);
		}

		for (Counter counter : frame.counters) {
			log += QString("%1    %2    ").arg(counter.active ? 1 : 0).arg(counter.value);
		}

		log += "\r\n";

		i++;
		it++;
	}

	return log;
}