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 ); }
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 ); }
void XKeyEmitter::Execute( XSprObj *pSprObj, float fOverSec ) { // spLayer를 인수로 받아쓰면 될거 같은데... auto pLayer = SafeCast<XLayerParticle*>( pSprObj->GetLayer(GetLayerType(), GetnLayer()) ); if( XASSERT( pLayer ) ) { pLayer->SetEmitter( m_Emit ); } }
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(); }
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 }
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 ); }
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; }
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; }