Esempio n. 1
0
FrameData *ObjectModel::getFrameDataFromNextFrame(QModelIndex index, int frame)
{
    if (!isLayer(index))
    {
        return NULL;
    }
    ObjectItem *p = getItemFromIndex(index);
    return getFrameDataFromNextFrame(p, frame);
}
Esempio n. 2
0
FrameData ObjectItem::getDisplayFrameData(int frame, bool *bValid)
{
	FrameData d ;
	FrameData *pPrev = getFrameDataFromPrevFrame(frame+1) ;
	if ( pPrev ) {
		FrameData *pNext = getFrameDataFromNextFrame(frame) ;
		d = pPrev->getInterpolation(pNext, frame) ;
		d.frame = frame ;
		if ( bValid ) { *bValid = true ; }
	}
	else {
		if ( bValid ) { *bValid = false ; }
	}
	return d ;
}
Esempio n. 3
0
QPointF ObjectItem::getBezierPos(int frame, bool *pValid)
{
	FrameData *pPrev = getFrameDataFromPrevFrame(frame+1) ;
	FrameData *pNext = getFrameDataFromNextFrame(frame) ;
	QMatrix4x4 m0, m1 ;
	QList<QPointF> list ;
	bool valid ;
	float t ;

	if ( !pPrev || !pNext || (!pPrev->path[0].bValid && !pNext->path[1].bValid) ) {
		goto __FAILED ;
	}
	if ( pNext->frame-pPrev->frame == 0 ) {
		qDebug() << "Error same frame" ;
		goto __FAILED ;
	}

	m0 = getDisplayMatrix(pPrev->frame, &valid) ;
	if ( !valid ) {
		goto __FAILED ;
	}
	if ( frame == pPrev->frame ) {
		if ( pValid ) { *pValid = true ; }
		return QPointF(m0.column(3).x(), m0.column(3).y()) ;
	}
	m1 = getDisplayMatrix(pNext->frame, &valid) ;
	if ( !valid ) {
		goto __FAILED ;
	}
	if ( frame == pNext->frame ) {
		if ( pValid ) { *pValid = true ; }
		return QPointF(m0.column(3).x(), m0.column(3).y()) ;
	}

	list << QPointF(m0.column(3).x(), m0.column(3).y()) ;
	list << QPointF(m0.column(3).x() + pPrev->path[0].v.x(), m0.column(3).y() + pPrev->path[0].v.y()) ;
	list << QPointF(m1.column(3).x() + pNext->path[1].v.x(), m1.column(3).y() + pNext->path[1].v.y()) ;
	list << QPointF(m1.column(3).x(), m1.column(3).y()) ;
	t = (frame-pPrev->frame) / (float)(pNext->frame-pPrev->frame) ;
	if ( pValid ) { *pValid = true ; }
	return util::getBezierPoint(list, t) ;

__FAILED:
	if ( pValid ) { *pValid = false ; }
	return QPointF(0, 0) ;
}