void AnimatePluginInterface::SetCurrentFrame( int f )
{
    m_currentFrame = f;

    // Adjust camera
    vtkCamera * cam = GetIbisAPI()->GetMain3DView()->GetRenderer()->GetActiveCamera();
    m_cameraAnim->ComputeFrame( f, cam );

    // Adjust transfer function
    vtkVolumeProperty * prop = GetVolumeRenderer()->GetVolumeProperty( 0 );
    vtkColorTransferFunction * color = prop->GetRGBTransferFunction();
    vtkPiecewiseFunction * opacity = prop->GetScalarOpacity();
    TransferFunctionKey key;
    bool isFrame = m_tfAnim->ComputeFrame( f, key );
    if( isFrame )
    {
        color->DeepCopy( key.GetColorFunc() );
        opacity->DeepCopy( key.GetOpacityFunc() );
    }

    // Adjust camera min distance
    DoubleValueKey camDistKey;
    m_minCamDistanceAnim->ComputeFrame( m_currentFrame, camDistKey );
    this->SetMinCamDistance( camDistKey.GetValue() );

    // Broadcast the message
    GetIbisAPI()->GetMain3DView()->NotifyNeedRender();
    emit CurrentFrameChanged();
}
Beispiel #2
0
void CTimeline::mousePressEvent(QMouseEvent* event)
{
	m_lastMousePos = QPoint(event->x(), event->y());
	bool mustUpdate = false;

	const QPoint oldSelection = m_selection;

	if (event->button() == Qt::RightButton || event->button() == Qt::MiddleButton)
		m_movingView = true;
	else if (event->button() == Qt::LeftButton && (m_frameCount == -1 || m_frameCount > 0))
	{
		m_movingCurrentFrame = true;

		if (m_lastMousePos.x() > m_leftWidth)
		{
			int frame = (m_lastMousePos.x() - m_leftWidth) + m_viewPos.x() - 2;
			if (frame <= 0)
				frame = 0;
			else
				frame /= m_frameWidth;
			if ((m_frameCount == -1 || frame < m_frameCount) && frame != m_currentFrame)
			{
				m_currentFrame = frame;
				emit CurrentFrameChanged(m_currentFrame);
				mustUpdate = true;
			}
		}

		m_selection = QPoint(-1, -1);
		int row = event->y() + m_viewPos.y();
		row -= m_rowHeight;
		if (row > 0)
		{
			row /= m_rowHeight;
			if (row < m_rows.size())
			{
				m_selection.setY(row);
				mustUpdate = true;

				if (m_lastMousePos.x() > m_leftWidth)
				{
					int frame = (m_lastMousePos.x() - m_leftWidth) + m_viewPos.x() - 2;
					if (frame <= 0)
						frame = 0;
					else
						frame /= m_frameWidth;
					if (m_frameCount == -1 || frame < m_frameCount)
					{
						for (int i = 0; i < m_rows[row].keys.size(); i++)
						{
							if (m_rows[row].keys[i] == frame)
							{
								m_selection.setX(i);
								break;
							}
						}
					}
				}
			}
		}
	}

	if (mustUpdate)
		update();

	if (oldSelection != m_selection)
		_emitSelectionChanged();

	event->accept();
}
void AnimatePluginInterface::SetNumberOfFrames( int nbFrames )
{
    m_numberOfFrames = nbFrames;
    emit CurrentFrameChanged();
}
Beispiel #4
0
void CTimeline::mouseMoveEvent(QMouseEvent* event)
{
	const QPoint mousePos(event->x(), event->y());
	const QPoint mouseMove = m_lastMousePos - mousePos;

	if (m_movingView)
	{
		m_viewPos += mouseMove;

		if (m_viewPos.x() < 0)
			m_viewPos.setX(0);
		if (m_viewPos.y() < 0)
			m_viewPos.setY(0);
	}

	const QPoint oldSelection = m_selection;

	if (m_movingCurrentFrame)
	{
		if (mousePos.x() > m_leftWidth)
		{
			int frame = (mousePos.x() - m_leftWidth) + m_viewPos.x() - 2;
			if (frame <= 0)
				frame = 0;
			else
				frame /= m_frameWidth;
			if ((m_frameCount == -1 || frame < m_frameCount) && frame != m_currentFrame)
			{
				m_currentFrame = frame;
				emit CurrentFrameChanged(m_currentFrame);
			}
		}

		m_selection = QPoint(-1, -1);
		int row = event->y() + m_viewPos.y();
		row -= m_rowHeight;
		if (row > 0)
		{
			row /= m_rowHeight;
			if (row < m_rows.size())
			{
				m_selection.setY(row);

				if (mousePos.x() > m_leftWidth)
				{
					int frame = (mousePos.x() - m_leftWidth) + m_viewPos.x() - 2;
					if (frame <= 0)
						frame = 0;
					else
						frame /= m_frameWidth;
					if (m_frameCount == -1 || frame < m_frameCount)
					{
						for (int i = 0; i < m_rows[row].keys.size(); i++)
						{
							if (m_rows[row].keys[i] == frame)
							{
								m_selection.setX(i);
								break;
							}
						}
					}
				}
			}
		}
	}

	if (m_movingView || m_movingCurrentFrame)
		update();

	if (oldSelection != m_selection)
		_emitSelectionChanged();

	m_lastMousePos = mousePos;
	event->accept();
}