Пример #1
0
SDTSFeature *SDTSTransfer::GetIndexedFeatureRef( SDTSModId *poModId,
                                                 SDTSLayerType *peType )

{
/* -------------------------------------------------------------------- */
/*      Find the desired layer ... this is likely a significant slow    */
/*      point in the whole process ... perhaps the last found could     */
/*      be cached or something.                                         */
/* -------------------------------------------------------------------- */
    const int iLayer = FindLayer( poModId->szModule );
    if( iLayer == -1 )
        return nullptr;

/* -------------------------------------------------------------------- */
/*      Get the reader, and read a feature from it.                     */
/* -------------------------------------------------------------------- */
    SDTSIndexedReader *poReader = GetLayerIndexedReader( iLayer );
    if( poReader == nullptr )
        return nullptr;

/* -------------------------------------------------------------------- */
/*      return type, if requested.                                      */
/* -------------------------------------------------------------------- */
    if( peType != nullptr )
        *peType = GetLayerType(iLayer);

    return poReader->GetIndexedFeatureRef( poModId->nRecord );
}
Пример #2
0
void XKeyEffect::Execute( XSprObj *pSprObj, float fOverSec )
{
	auto pLayer = pSprObj->GetpLayerMove( GetLayerType(), GetnLayer() );
	auto& cn = pLayer->GetcnEffect();
	cn.interpolation = m_Interpolation;
	cn.fAlphaSrc = GetOpacityRandomed();
	cn.fStartKeyFrame = GetfFrame();
	auto pNextKey = m_pNextKey;
	if( pNextKey ) {
		cn.fAlphaDest = pNextKey->GetOpacityRandomed();
		cn.fNextKeyFrame = pNextKey->GetfFrame();
	} else {
		cn.interpolation = XBaseLayer::xNONE;
		cn.fNextKeyFrame = GetfFrame();
	}
	cn.DrawMode = m_DrawMode;
	cn.dwDrawFlag = m_dwFlag;
	m_fOpacityRandomed = AssignRandom();
// 	XLayerMove *pLayer = pSprObj->GetpLayerMove(GetLayerType(), GetnLayer());
// 	pLayer->GetcnEffect().fAlpha = m_fOpacity;
// 	XKeyEffect *pNextKey = m_pNextKey;
// 	
// 	if( m_Interpolation && pNextKey )			// 다음키까지 보간모드로 변해야 하고 다음키가 있으면
// 		pLayer->SetcnEffect( m_Interpolation, pNextKey->GetfOpacity(), m_fOpacity, m_dwFlag, m_DrawMode, GetfFrame(), pNextKey->GetfFrame() );
// 	else
// 		pLayer->SetcnEffect( XBaseLayer::xNONE, 0, 0, m_dwFlag, m_DrawMode, 0, 0 );
}
Пример #3
0
void XKeyEmitter::Execute( XSprObj *pSprObj, float fOverSec )
{
	// spLayer를 인수로 받아쓰면 될거 같은데...
	auto pLayer = SafeCast<XLayerParticle*>( pSprObj->GetLayer(GetLayerType(), GetnLayer()) );
	if( XASSERT( pLayer ) ) {
		pLayer->SetEmitter( m_Emit );
	}
}
Пример #4
0
void tttLayerManager::currentFrameChanged(unsigned long frame) {
	std::cout << "tttLayerManager->currentFrameChanged " << frame << std::endl;

	this->m_pUI->layersTableView->selectionModel()->clear();

	m_CurrentFrame = frame;
	m_LayerModel->frameChanged(frame);

	auto resultset = m_Dataset->GetFramesAtTimestamp(frame);

	for(auto itDrawers =  m_Drawers.begin();itDrawers!=m_Drawers.end();++itDrawers){
		itDrawers->second->Reset();
	}
	for(auto resultIt = resultset.first;resultIt!=resultset.second;++resultIt ){
		auto layerHandler =resultIt->GetLayerHandler();
		auto layer = m_Dataset->GetLayer(layerHandler);

		if(m_Drawers.find(layerHandler)==m_Drawers.end()){

			if(layer.GetLayerType()==ttt::Layer::IMAGE){
				m_Drawers[layerHandler]=ttt::MinMaxVolumeDrawer<ttt::Dataset::FloatImageType>::New();
				m_Drawers[layerHandler]->SetRenderer(m_Renderer);
			}
		}


		if(layer.GetLayerType()==ttt::Layer::IMAGE){
			itk::ImageFileReader<ttt::Dataset::FloatImageType>::Pointer source = resultIt->GetFrameSource<itk::ImageFileReader<ttt::Dataset::FloatImageType>>();
			source->Update();

			ttt::MinMaxVolumeDrawer<ttt::Dataset::FloatImageType>::Pointer drawer = std::dynamic_pointer_cast<ttt::MinMaxVolumeDrawer<ttt::Dataset::FloatImageType>>(m_Drawers[layerHandler]);
			drawer->SetImage(source->GetOutput());
		}

		m_Drawers[layerHandler]->Draw();
		m_Drawers[layerHandler]->SetVisibility(m_LayerModel->getVisibility(layerHandler));

	}
	this->m_RenderWindow->Render();
}
Пример #5
0
void XKeyPos::Execute( XSprObj *pSprObj, float fOverSec )
{
    auto pActObj = pSprObj->GetpObjActCurr();
    if( XASSERT( pActObj ) ) {
        XLayerMove* pLayer = nullptr;
        if( GetidLayer() ) {
            pLayer = SafeCast<XLayerMove*>( pActObj->GetpLayerByidLocalInLayer( GetidLayer() ) );
        } else {
            pLayer = SafeCast<XLayerMove*>( pSprObj->GetLayer( GetLayerType(), GetnLayer() ) );
        }
// 		auto pLayer = GetpLayerByidLayerT<XLayerMove>( pSprObj );
        if( XASSERT( pLayer ) ) {
            auto& cn = pLayer->GetcnPos();
// 			if( cn.interpolation )		// 새 키가 실행될때 이전 채널값을 안지운다는 가정.
// 				// 현재 채널이 보간모드면 이전 위치를 시작위치로 한다.
// 				cn.m_vStart = cn.m_vEnd;
// 			else
// 				// 채널에 보간옵션이 없으면 현재키의 랜덤값으로 지정한다.
// 				cn.m_vStart = AssignRandom();
            if( m_pInterpolationEndKey ) {
                cn.interpolation = m_Interpolation;
                cn.m_frameStartKey = GetfFrame();
                cn.m_vStart = GetvPosRandomed();
// 				cn.m_vStart = AssignRandom();
                cn.m_frameEndKey = m_pInterpolationEndKey->GetfFrame();
// 				cn.m_vEnd = m_pInterpolationEndKey->GetvPosRandomed();
                cn.m_vEnd = m_pInterpolationEndKey->AssignRandom();
            } else {
                // 다음키가 없다는것은 보간옵션이 켜져있어도 보간할게 없다는뜻임.
                cn.interpolation = XBaseLayer::xNONE;
                cn.m_frameStartKey = GetfFrame();
                cn.m_vStart = GetvPosRandomed();
// 				cn.m_frameEndKey = GetfFrame();
            }
            m_vPosRandomed = AssignRandom();
// 			cn.m_mapRandom[ GetidKey() ] = AssignRandom();
        } // pLayer
    } // pActObj
}
Пример #6
0
void XKeyScale::Execute( XSprObj *pSprObj, float fOverSec )
{
	auto pLayer = pSprObj->GetpLayerMove( GetLayerType(), GetnLayer() );
	auto& cn = pLayer->GetcnScale();
	cn.m_vScaleSrc = GetvScaleRandomed();
	cn.fStartKeyFrame = GetfFrame();
	if( m_pNextKey ) {
		cn.interpolation = m_Interpolation;
		cn.m_vScaleDest = m_pNextKey->GetvScaleRandomed();
		cn.fNextKeyFrame = m_pNextKey->GetfFrame();
	} else {
		cn.interpolation = XBaseLayer::xNONE;
	}
	m_vScaleRandomed = AssignRandom();
// 	XLayerMove *pLayer = pSprObj->GetpLayerMove(GetLayerType(), GetnLayer());
// 	pLayer->SetScale( m_fScaleX, m_fScaleY );
// 
// 	XKeyScale *pNextKey = m_pNextKey;
// 	
// 	if( m_Interpolation && pNextKey )			// 다음키가 있으면 보간으로 움직이도록 한다
// 		pLayer->SetcnScale( m_Interpolation, pNextKey->GetfScaleX(), pNextKey->GetfScaleY(), GetfScaleX(), GetfScaleY(), GetfFrame(), pNextKey->GetfFrame() );
// 	else
// 		pLayer->SetcnScale( XBaseLayer::xNONE, 1.0f, 1.0f, 1.0f, 1.0f, 0, 0 );
}
Пример #7
0
int SDTSTransfer::GetBounds( double *pdfMinX, double *pdfMinY,
                             double *pdfMaxX, double *pdfMaxY )

{
    bool bFirst = true;

    for( int iLayer = 0; iLayer < GetLayerCount(); iLayer++ )
    {
        if( GetLayerType( iLayer ) == SLTPoint )
        {

            SDTSPointReader *poLayer = reinterpret_cast<SDTSPointReader *>(
                GetLayerIndexedReader( iLayer ) );
            if( poLayer == nullptr )
                continue;

            poLayer->Rewind();

            SDTSRawPoint *poPoint = nullptr;
            while( (poPoint = reinterpret_cast<SDTSRawPoint *>(
                      poLayer->GetNextFeature() ) ) != nullptr )
            {
                if( bFirst )
                {
                    *pdfMinX = poPoint->dfX;
                    *pdfMaxX = poPoint->dfX;
                    *pdfMinY = poPoint->dfY;
                    *pdfMaxY = poPoint->dfY;
                    bFirst = false;
                }
                else
                {
                    *pdfMinX = std::min( *pdfMinX, poPoint->dfX );
                    *pdfMaxX = std::max( *pdfMaxX, poPoint->dfX );
                    *pdfMinY = std::min( *pdfMinY, poPoint->dfY );
                    *pdfMaxY = std::max( *pdfMaxY, poPoint->dfY );
                }

                if( !poLayer->IsIndexed() )
                    delete poPoint;
            }
        }
        else if( GetLayerType( iLayer ) == SLTRaster )
        {
            SDTSRasterReader *poRL = GetLayerRasterReader( iLayer );
            if( poRL == nullptr )
                continue;

            double adfGeoTransform[6];
            poRL->GetTransform( adfGeoTransform );

            const double dfMinX = adfGeoTransform[0];
            const double dfMaxY = adfGeoTransform[3];
            const double dfMaxX = adfGeoTransform[0]
                + poRL->GetXSize() * adfGeoTransform[1];
            const double dfMinY = adfGeoTransform[3]
                + poRL->GetYSize() * adfGeoTransform[5];

            if( bFirst )
            {
                *pdfMinX = dfMinX;
                *pdfMaxX = dfMaxX;
                *pdfMinY = dfMinY;
                *pdfMaxY = dfMaxY;
                bFirst = false;
            }
            else
            {
                *pdfMinX = std::min( dfMinX, *pdfMinX );
                *pdfMaxX = std::max( dfMaxX, *pdfMaxX );
                *pdfMinY = std::min( dfMinY, *pdfMinY );
                *pdfMaxY = std::max( dfMaxY, *pdfMaxY );
            }

            delete poRL;
        }
    }

    return !bFirst;
}
Пример #8
0
int SDTSTransfer::GetBounds( double *pdfMinX, double *pdfMinY,
                             double *pdfMaxX, double *pdfMaxY )

{
    int         bFirst = TRUE;
    
    for( int iLayer = 0; iLayer < GetLayerCount(); iLayer++ )
    {
        if( GetLayerType( iLayer ) == SLTPoint )
        {
            SDTSPointReader     *poLayer;
            SDTSRawPoint    *poPoint;
        
            poLayer = (SDTSPointReader *) GetLayerIndexedReader( iLayer );
            if( poLayer == NULL )
                continue;
            
            poLayer->Rewind();
            while( (poPoint = (SDTSRawPoint*) poLayer->GetNextFeature()) )
            {
                if( bFirst )
                {
                    *pdfMinX = *pdfMaxX = poPoint->dfX;
                    *pdfMinY = *pdfMaxY = poPoint->dfY;
                    bFirst = FALSE;
                }
                else
                {
                    *pdfMinX = MIN(*pdfMinX,poPoint->dfX);
                    *pdfMaxX = MAX(*pdfMaxX,poPoint->dfX);
                    *pdfMinY = MIN(*pdfMinY,poPoint->dfY);
                    *pdfMaxY = MAX(*pdfMaxY,poPoint->dfY);
                }
                
                if( !poLayer->IsIndexed() )
                    delete poPoint;
            }
        }
        
        else if( GetLayerType( iLayer ) == SLTRaster )
        {
            SDTSRasterReader    *poRL;
            double              adfGeoTransform[6];
            double              dfMinX, dfMaxX, dfMinY, dfMaxY;

            poRL = GetLayerRasterReader( iLayer );
            if( poRL == NULL )
                continue;

            poRL->GetTransform( adfGeoTransform );

            dfMinX = adfGeoTransform[0];
            dfMaxY = adfGeoTransform[3];
            dfMaxX = adfGeoTransform[0] + poRL->GetXSize()*adfGeoTransform[1];
            dfMinY = adfGeoTransform[3] + poRL->GetYSize()*adfGeoTransform[5];

            if( bFirst )
            {
                *pdfMinX = dfMinX;
                *pdfMaxX = dfMaxX;
                *pdfMinY = dfMinY;
                *pdfMaxY = dfMaxY;
                bFirst = FALSE;
            }
            else
            {
                *pdfMinX = MIN(dfMinX,*pdfMinX);
                *pdfMaxX = MAX(dfMaxX,*pdfMaxX);
                *pdfMinY = MIN(dfMinY,*pdfMinY);
                *pdfMaxY = MAX(dfMaxY,*pdfMaxY);
            }

            delete poRL;
        }
    }

    return !bFirst;
}