Exemple #1
0
RobotItem::RobotItem(const QString &robotImageFileName, model::RobotModel &robotModel)
	: RotateItem()
	, mImage(QImage(robotImageFileName))
	, mBeepItem(new BeepItem)
	, mRectangleImpl()
	, mRobotModel(robotModel)
{
	connect(&mRobotModel, &model::RobotModel::robotRided, this, &RobotItem::ride);
	connect(&mRobotModel, &model::RobotModel::positionChanged, this, &RobotItem::setPos);
	connect(&mRobotModel, &model::RobotModel::rotationChanged, this, &RobotItem::setRotation);
	connect(&mRobotModel, &model::RobotModel::playingSoundChanged, this, &RobotItem::setNeededBeep);

	connect(&mRobotModel.configuration(), &model::SensorsConfiguration::deviceRemoved, this, &RobotItem::removeSensor);
	connect(&mRobotModel.configuration(), &model::SensorsConfiguration::positionChanged
			, this, &RobotItem::updateSensorPosition);
	connect(&mRobotModel.configuration(), &model::SensorsConfiguration::rotationChanged
			, this, &RobotItem::updateSensorRotation);

	setAcceptHoverEvents(true);
	setAcceptDrops(true);
	setCursor(QCursor(Qt::PointingHandCursor));
	setZValue(1);
	setX2(x1() + robotWidth);
	setY2(y1() + robotHeight);
	mMarkerPoint = QPointF(0, y2() / 2);  // Marker is situated behind the robot
	QPen pen(this->pen());
	pen.setWidth(defaultTraceWidth);
	setPen(pen);

	setTransformOriginPoint(rotatePoint);
	mBeepItem->setParentItem(this);
	mBeepItem->setPos((robotWidth - beepWavesSize) / 2, (robotHeight - beepWavesSize) / 2);
	mBeepItem->setVisible(false);

	RotateItem::init();

	QHash<kitBase::robotModel::PortInfo, kitBase::robotModel::DeviceInfo> sensors = robotModel.info().specialDevices();
	for (const kitBase::robotModel::PortInfo &port : sensors.keys()) {
		const kitBase::robotModel::DeviceInfo device = sensors[port];
		SensorItem *sensorItem = new SensorItem(robotModel.configuration(), port
				, robotModel.info().sensorImagePath(device), robotModel.info().sensorImageRect(device));
		addSensor(port, sensorItem);

		const QPair<QPoint, qreal> configuration(robotModel.info().specialDeviceConfiguration(port));
		QPoint position(configuration.first.x() * boundingRect().width() / 2
				, configuration.first.y() * boundingRect().height() / 2);
		sensorItem->setPos(position + boundingRect().center());
		sensorItem->setRotation(configuration.second);
	}
}
Exemple #2
0
void SensorWidget::drawChannels()
{
    if(m_pGraphicsScene)
    {
        m_pGraphicsScene->clear();

        for(qint32 i = 0; i < m_pSensorModel->rowCount(); ++i)
        {
            QString dispChName = m_pSensorModel->data(i, 0).toString();
            QString fullChName = m_pSensorModel->data(i, 1).toString();
            QPointF loc = m_pSensorModel->data(i, 2).toPointF();
            qint32 chNum = m_pSensorModel->getNameIdMap()[fullChName];
            SensorItem *item = new SensorItem(dispChName, chNum, loc, QSizeF(28, 16));
            item->setSelected(m_pSensorModel->data(i, 3).toBool());
            item->setPos(loc);

            connect(item, &SensorItem::itemChanged, m_pSensorModel, &SensorModel::updateChannelState);
            m_pGraphicsScene->addItem(item);
        }
    }
}