コード例 #1
0
FrameData *CObjectModel::getFrameDataFromPrevFrame(QModelIndex index, int frame, bool bRepeat)
{
	if ( !isLayer(index) ) { return NULL ; }
	ObjectItem *p = getItemFromIndex(index) ;

	return getFrameDataFromPrevFrame(p, frame, bRepeat) ;
}
コード例 #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 ;
}
コード例 #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) ;
}