// The state machine is wired up with this Paint method. We wrote a few helper // functions at the top of this files to keep this method clear and easy to // read. void ExampleImageInteractor::Paint(mitk::StateMachineAction*, mitk::InteractionEvent* event) { try { auto renderer = event->GetSender(); auto image = GetImage(this->GetDataNode()); auto timeStep = renderer->GetTimeStep(); auto geometry = GetGeometry(image, timeStep); // This method is wired up to mouse events. Thus, we can safely assume // that the following cast will succeed and we have access to the mouse // position and the first intersection point of a ray originating at the // mouse position and shot into the scene. Convenient, isn't it? :-) auto positionEvent = dynamic_cast<mitk::InteractionPositionEvent*>(event); auto position = positionEvent->GetPositionInWorld(); if (!geometry->IsInside(position)) return; // Nothing to paint, as we're not inside the image bounds. // Okay, we're safe. Convert the mouse position to the index of the pixel // we're pointing at. itk::Index<3> index; geometry->WorldToIndex<3>(position, index); // We don't need to paint over and over again while moving the mouse // pointer inside the same pixel. That's especially relevant when operating // on zoomed images. if (index != m_LastPixelIndex) { // And finally... ::Paint(image, index, timeStep); // Nearly done. We request the renderer to update the render window in // order to see the result immediately. Actually, we should update all // of the render windows by caling RequestUpdateAll() instead, as the // painted pixels are possibly visible in other render windows, too. // However, we decided to prefer performance here. mitk::RenderingManager::GetInstance()->RequestUpdate(positionEvent->GetSender()->GetRenderWindow()); MITK_INFO << index[0] << " " << index[1] << " " << index[2]; m_LastPixelIndex = index; } } catch (...) { return; } }
mitk::ScalarType mitk::BaseRenderer::GetTime() const { if (m_TimeSlicedWorldGeometry.IsNull()) { return 0; } else { ScalarType timeInMS = m_TimeSlicedWorldGeometry->TimeStepToMS(GetTimeStep()); if (timeInMS == ScalarTypeNumericTraits::NonpositiveMin()) return 0; else return timeInMS; } }
void Game::SetTimeAccel(TimeAccel t) { // don't want player to spin like mad when hitting time accel if ((t != m_timeAccel) && (t > TIMEACCEL_1X)) { m_player->SetAngVelocity(vector3d(0,0,0)); m_player->SetTorque(vector3d(0,0,0)); m_player->SetAngThrusterState(vector3d(0.0)); } // Give all ships a half-step acceleration to stop autopilot overshoot if (t < m_timeAccel) for (Space::BodyIterator i = m_space->BodiesBegin(); i != m_space->BodiesEnd(); ++i) if ((*i)->IsType(Object::SHIP)) (static_cast<Ship*>(*i))->ApplyAccel(0.5f * GetTimeStep()); m_timeAccel = t; if (m_timeAccel == TIMEACCEL_PAUSED || m_timeAccel == TIMEACCEL_HYPERSPACE) { m_requestedTimeAccel = m_timeAccel; m_forceTimeAccel = false; } }
double MarkersMotion::GetTotalTime() { // The total time of our recorded data is precisely the number of frames // recorded multiplied by the interval between frames. return GetNumFrames() * GetTimeStep(); }
char* CHSDownloadData::MakeReqPacket( CodeInfo* pCode, short nPeriod , long &lReqLen) { if ( pCode == NULL || IsBadReadPtr(pCode,1)) return NULL; BOOL bChangeRange = FALSE; BOOL bDownLoaded = FALSE; CString str; str.Format("%d-%s",pCode->m_cCodeType,pCode->GetCode()); /* TaskItem* m_pTaskItem = NULL;*/ if( m_pTaskItem && !IsBadReadPtr(m_pTaskItem,1) && m_pTaskItem->m_TaskName.Compare(str) ) { m_pTaskItem->SetDayTaskFinished(); m_pTaskItem->SetMinute1TaskFinished(); m_pTaskItem->SetMinute5TaskFinished(); return NULL; } m_DownLoadCount = 0; int nAfterBegin = 1300,nAfterEnd = 1500; short nGZIndex = MakeGZIndex(pCode->m_cCodeType); short nQihuo = MakeMarket(pCode->m_cCodeType); if (nQihuo == FUTURES_MARKET) { if (nGZIndex) { nAfterEnd = 1515; } else { nAfterBegin = 1330; } } //取本地缓存中已有的数据 GetLocalData(pCode,nPeriod,m_pTaskItem); CArray<DateRange,DateRange> ayDate; CTime t1 = GetNowTime(nPeriod); CTimeSpan tSpan = GetTimeStep(nPeriod); unsigned long nLimitTime = GetLimitDate(pCode,nPeriod,m_nLimitedDay);//修正2012时间问题 unsigned long nEarliestTime = GetIntTimeFromTime(t1,nPeriod);//修正2012时间问题 unsigned long nTodayTime = nEarliestTime;//修正2012时间问题 long lCurDate = 10; CTime tmNow = CTime::GetCurrentTime(); lCurDate = tmNow.GetYear() * 10000 + tmNow.GetMonth() * 100 + tmNow.GetDay(); bDownLoaded = IsDownLoaded(lCurDate,pCode,nPeriod); try { BOOL bExistLastData = FALSE; BOOL bFirstDayRange = TRUE; CString strCode = pCode->GetCode(); StockDay* pStockDay = (StockDay*)m_pTaskItem->m_localData; for(int i = m_pTaskItem->m_localDataCount - 1; i >= 0; i--) { if (bDownLoaded) { break; } if(pStockDay[i].m_lDate <= 0) continue; if(pStockDay[i].m_lDate < nEarliestTime) nEarliestTime = pStockDay[i].m_lDate; if (pStockDay[i].m_lDate == 20000000) //修正错误的日期时间 { pStockDay[i].m_lDate = 19991231; } ///////////////若本地一存在的数据日期在限制时间内 则挑过数据的缺失检查///////////////////////////// if (i == m_pTaskItem->m_localDataCount - 1) { CTime tmNow = t1; CTime tmLastData = GetTimeFromIntTime(pStockDay[i].m_lDate,nPeriod); int nNowYear = tmNow.GetYear(); int nNowMonth = tmNow.GetMonth(); int nNowDay = tmNow.GetDay(); if ( nNowYear == tmLastData.GetYear() && nNowMonth == tmLastData.GetMonth() && tmLastData.GetDay() == nNowDay) { CTime tmlimit = GetTimeFromIntTime(nLimitTime,nPeriod); CTime tmFirstDate = GetTimeFromIntTime(pStockDay[0].m_lDate,nPeriod); if (m_nLimitedDay == 0) { if ( PERIOD_TYPE_DAY != nPeriod) { int nMaxDays = 0; if (nGZIndex) nMaxDays = 36 - 1; //36 = (10000/240 * 240)/270 else nMaxDays = 41 - 1; //41= 10000/240 long lLastDate = tmLastData.GetYear() * 10000 + tmLastData.GetMonth() * 100 + tmLastData.GetDay(); if (lLastDate != lCurDate) { nMaxDays --; } CTimeSpan tmSpan(1,0,0,0); int nCount = 0; while(nCount < nMaxDays) { tmLastData -= tmSpan; if (tmLastData.GetDayOfWeek() != 1&& tmLastData.GetDayOfWeek() != 7) { nCount ++; } } } if (PERIOD_TYPE_DAY == nPeriod) { if (tmFirstDate.GetYear() <= tmlimit.GetYear() && tmFirstDate.GetMonth() <= tmlimit.GetMonth() && tmFirstDate.GetDay() <= tmlimit.GetDay()) { bExistLastData = TRUE; } } else if (tmFirstDate.GetYear() <= tmLastData.GetYear() && tmFirstDate.GetMonth() <= tmLastData.GetMonth() && tmFirstDate.GetDay() <= tmLastData.GetDay()) { bExistLastData = TRUE; } } else { if (tmFirstDate.GetYear() <= tmlimit.GetYear() && tmFirstDate.GetMonth() <= tmlimit.GetMonth() && tmFirstDate.GetDay() <= tmlimit.GetDay()) { bExistLastData = TRUE; } } if (bExistLastData) { break; } } } ////////////////////////////////////////////////////////////////////////// int nCount = 0; long lEndDate = 0; long lBeginDate = 0; CTime t2 = GetTimeFromIntTime(pStockDay[i].m_lDate,nPeriod); CTime t = t2; if (i != m_pTaskItem->m_localDataCount - 1) { t = t + tSpan; } while(t < t1) { if(t.GetDayOfWeek() != 1 && t.GetDayOfWeek() != 7 && t < t1) //1 = Sunday, 2 = Monday, ..., 7 = Saturday { if(lBeginDate == 0) lBeginDate = GetIntTimeFromTime(t,nPeriod); if (!bFirstDayRange) { lEndDate = GetIntTimeFromTime(t1 - tSpan,nPeriod); } else { while(t1.GetDayOfWeek()==1 || t1.GetDayOfWeek() == 7) { CTimeSpan OneDay(1,0,0,0); t1 -= OneDay; } lEndDate = GetIntTimeFromTime(t1,nPeriod); } nCount ++; break; } t = t + tSpan; }; t1 = t2; bFirstDayRange = FALSE; if(nCount > 0 && lBeginDate >= nLimitTime ) { if( lEndDate < nLimitTime) lEndDate = nLimitTime; CTime tmBegin = GetTimeFromIntTime(lBeginDate,nPeriod); CTime tmEnd = GetTimeFromIntTime(lEndDate,nPeriod); if (tmBegin.GetYear() == tmEnd.GetYear() && tmBegin.GetMonth() == tmEnd.GetMonth() && tmBegin.GetDay() == tmEnd.GetDay()) { if (tmBegin.GetHour()*100 + tmBegin.GetMinute() > 1130 && tmEnd.GetHour()*100 + tmEnd.GetMinute() < nAfterBegin) { continue; } } if (lBeginDate > lEndDate) { continue ; } DateRange dr; dr.m_nBeginDate = lBeginDate; dr.m_nEndDate = lEndDate; ayDate.Add(dr); } if (nCount == 0 && pStockDay[i].m_lDate <= nLimitTime) { break; } } //下载分钟线数据时按9840的倍数根往前下载,若没有最近41天的数据,则下载最近82天数据,依次类推,最多倒退41*18天 int nLimitedDays = 0,nPermitCount = 9840; if (ayDate.GetCount() < 1) { if(nEarliestTime > nLimitTime && !bExistLastData) //加入最后一段时间 { DateRange dr; dr.m_nBeginDate = nLimitTime; dr.m_nEndDate = nEarliestTime; ayDate.Add(dr); } } else { int nMaxDays = 0; DateRange LastDateRage = ayDate.GetAt(ayDate.GetUpperBound()); long nPreDate = GetPreDataDate(pCode,LastDateRage.m_nBeginDate,nPeriod); if (nGZIndex) nMaxDays = 36 - 1; //36 = (10000/240 * 240)/270 else nMaxDays = 41 - 1; //41= 10000/240 long nEarlyLimitedDate = nLimitTime; if (PERIOD_TYPE_DAY != nPeriod) { nEarlyLimitedDate = GetPreDate(pStockDay[m_pTaskItem->m_localDataCount -1].m_lDate,nMaxDays,nPeriod); long nCheckDataCount = GetDayDataCount(pCode,nEarlyLimitedDate,nTodayTime,nPeriod); if (nCheckDataCount > nPermitCount) { int nSurplusCount = nCheckDataCount - nPermitCount; nEarlyLimitedDate = GetChangedBeginDate(pCode,nEarlyLimitedDate,nSurplusCount,nPeriod); } } if (nPreDate >= nEarlyLimitedDate) { DateRange dr; dr.m_nBeginDate = nEarlyLimitedDate > nLimitTime ? nEarlyLimitedDate : nLimitTime; dr.m_nEndDate = nPreDate; ayDate.Add(dr); } } CArray<DateRange,DateRange> ayDateChange; int nDateCount = ayDate.GetCount(); nPermitCount = nPermitCount*(m_nReloadDegree + 1); for (int i = nDateCount - 1; i>= 0; i--) { DateRange dateRange = ayDate.GetAt(i); long nRangeCount = GetDayDataCount(pCode,dateRange.m_nBeginDate,dateRange.m_nEndDate,nPeriod); nLimitedDays += nRangeCount; if (nLimitedDays < nPermitCount) { ayDateChange.Add(dateRange); } else { int nSpillCount = nLimitedDays - nPermitCount; dateRange.m_nBeginDate = GetChangedBeginDate(pCode,dateRange.m_nBeginDate,nSpillCount,nPeriod); ayDateChange.Add(dateRange); bChangeRange = TRUE; break; } } if (bChangeRange) { nDateCount = ayDateChange.GetCount(); } if (bDownLoaded) { bChangeRange = TRUE; ayDateChange.RemoveAll(); long nOutRangeDateB = 20101001; //国庆放假无交易行情 long nOutRangeDateE = 20101001; if (PERIOD_TYPE_DAY != nPeriod) { nOutRangeDateB = 2010010930; nOutRangeDateE = 2010010930; } DateRange dr; dr.m_nBeginDate = nOutRangeDateB; dr.m_nEndDate = nOutRangeDateE; nDateCount = ayDateChange.GetCount(); } short nCount = sizeof(ReqDayData) / sizeof(CodeInfo); if( sizeof(ReqDayData) % sizeof(CodeInfo) ) nCount++; int lLen = sizeof(AskData) + sizeof(CodeInfo) * (nCount - 1) + nDateCount * sizeof(DateRange); lReqLen = lLen; AskData* ask = (AskData*)(new char[lLen]); memset(ask,0,lLen); ask->m_nType = RT_TECHDATA_RANGE; ask->m_nSize = nCount; ask->m_lKey = nPeriod; memcpy(&ask->m_nPrivateKey, pCode, sizeof(CodeInfo)); ReqRangeDayData* pRequest = (ReqRangeDayData*)ask->m_pCode; pRequest->m_lBeginPosition = 0; pRequest->m_nDay = 0; pRequest->m_cPeriod = nPeriod; memcpy(&pRequest->m_ciCode, pCode, sizeof(CodeInfo)); pRequest->m_nDataRangCount = nDateCount; DateRange *pRane = pRequest->m_dataRange; CString strRequest,strRang; for(int nIndex = 0; nIndex < nDateCount; nIndex++) { if (bChangeRange) pRane[nIndex] = ayDateChange.GetAt(nIndex); else pRane[nIndex] = ayDate.GetAt(nIndex); m_DownLoadCount += GetDayDataCount(pCode,pRane[nIndex].m_nBeginDate,pRane[nIndex].m_nEndDate,nPeriod); strRang.Format("%d-%d;",pRane[nIndex].m_nBeginDate,pRane[nIndex].m_nEndDate); strRequest += strRang; } return (char*)ask; } catch (...) { } return NULL; }
long CHSDownloadData::GetPreDataDate( CodeInfo *pCode,long nCurrentDate,int nPeriod ) { CTimeSpan oneDay(1,0,0,0); CTimeSpan tSpan = GetTimeStep(nPeriod); CTime tm = GetTimeFromIntTime(nCurrentDate,nPeriod); short nGZIndex = MakeGZIndex(pCode->m_cCodeType); short nMainType = MakeMarket(pCode->m_cCodeType); int nBeing1min = 931; int nBegin5min = 935; if (nMainType != STOCK_MARKET) { if (nGZIndex) { nBeing1min = 916; nBegin5min = 920; } else { nBeing1min = 901; nBegin5min = 905; } } switch(nPeriod) { case PERIOD_TYPE_DAY: tm -= tSpan; while(tm.GetDayOfWeek() == 1 || tm.GetDayOfWeek() ==7) { tm -= tSpan; } return GetIntTimeFromTime(tm,nPeriod); case PERIOD_TYPE_MINUTE1: case PERIOD_TYPE_MINUTE5: { int nMinute = nCurrentDate%10000; if (nPeriod == PERIOD_TYPE_MINUTE1) { if (nMinute != nBeing1min) { tm -= tSpan; return GetIntTimeFromTime(tm,nPeriod); } } if (nPeriod == PERIOD_TYPE_MINUTE5) { if (nMinute != nBegin5min) { tm -= tSpan; return GetIntTimeFromTime(tm,nPeriod); } } tm -= oneDay; while(tm.GetDayOfWeek() == 1 || tm.GetDayOfWeek() == 7) { tm -= oneDay; } long lPreDate = (tm.GetYear() - 1990)* 100000000 + tm.GetMonth() * 1000000 + tm.GetDay() * 10000; if (nGZIndex) { lPreDate += 1515; } else { lPreDate += 1500; } return lPreDate; } default: return nCurrentDate; } }