本文整理汇总了C++中TimeSeries::secondsFromFirstReport方法的典型用法代码示例。如果您正苦于以下问题:C++ TimeSeries::secondsFromFirstReport方法的具体用法?C++ TimeSeries::secondsFromFirstReport怎么用?C++ TimeSeries::secondsFromFirstReport使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TimeSeries
的用法示例。
在下文中一共展示了TimeSeries::secondsFromFirstReport方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: idfObject
boost::optional<IdfObject> ForwardTranslator::translateScheduleVariableInterval( ScheduleVariableInterval & modelObject )
{
IdfObject idfObject( openstudio::IddObjectType::Schedule_Compact );
m_idfObjects.push_back(idfObject);
idfObject.setName(modelObject.name().get());
boost::optional<ScheduleTypeLimits> scheduleTypeLimits = modelObject.scheduleTypeLimits();
if (scheduleTypeLimits){
boost::optional<IdfObject> idfScheduleTypeLimits = translateAndMapModelObject(*scheduleTypeLimits);
if (idfScheduleTypeLimits){
idfObject.setString(Schedule_CompactFields::ScheduleTypeLimitsName, idfScheduleTypeLimits->name().get());
}
}
TimeSeries timeseries = modelObject.timeSeries();
// Check that the time series has at least one point
if(timeseries.values().size() == 0)
{
LOG(Error,"Time series in schedule '" << modelObject.name().get() << "' has no values, schedule will not be translated");
return boost::optional<IdfObject>();
}
DateTime firstReportDateTime = timeseries.firstReportDateTime();
Vector daysFromFirst = timeseries.daysFromFirstReport();
std::vector<long> secondsFromFirst = timeseries.secondsFromFirstReport();
Vector values = timeseries.values();
// We aren't using this - should we?
std::string interpolateField = "Interpolate:No";
if (modelObject.interpolatetoTimestep()){
interpolateField = "Interpolate:Yes";
}
// New version assumes that the interval is less than one day.
// The original version did not, so it was a bit more complicated.
// The last date data was written
Date lastDate = firstReportDateTime.date();
Time dayDelta = Time(1.0);
// The day number of the date that data was last written relative to the first date
//double lastDay = 0.0;
int lastDay = 0;
// Adjust the floating point day delta to be relative to the beginning of the first day and
// shift the start of the loop if needed
int secondShift = firstReportDateTime.time().totalSeconds();
unsigned int start = 0;
if(secondShift == 0) {
start = 1;
} else {
for(unsigned int i=0;i<secondsFromFirst.size();i++) {
secondsFromFirst[i] += secondShift;
}
}
// Start the input into the schedule object
unsigned fieldIndex = Schedule_CompactFields::ScheduleTypeLimitsName + 1;
//idfObject.setString(fieldIndex, interpolateField);
//++fieldIndex;
fieldIndex = startNewDay(idfObject,fieldIndex,lastDate);
for(unsigned int i=start; i < values.size()-1; i++){
// Loop over the time series values and write out values to the
// schedule. This version is based on the seconds from the start
// of the time series, so should not be vulnerable to round-off.
// It was translated from the day version, so there could be
// issues associated with that.
//
// We still have a potential aliasing problem unless the API has
// enforced that the times in the time series are all distinct when
// rounded to the minute. Is that happening?
int secondsFromStartOfDay = secondsFromFirst[i] % 86400;
int today = (secondsFromFirst[i]-secondsFromStartOfDay)/86400;
// Check to see if we are at the end of a day.
if(secondsFromStartOfDay==0 || secondsFromStartOfDay==86400) {
// This value is an end of day value, so end the day and set up the next
// Note that 00:00:00 counts as the end of the previous day - we only write
// out the 24:00:00 value and not both.
fieldIndex = addUntil(idfObject,fieldIndex,24,0,values[i]);
lastDate += dayDelta;
fieldIndex = startNewDay(idfObject,fieldIndex,lastDate);
} else {
// This still could be on a different day
if(today != lastDay) {
// We're on a new day, need a 24:00:00 value and set up the next day
fieldIndex = addUntil(idfObject,fieldIndex,24,0,values[i]);
lastDate += dayDelta;
fieldIndex = startNewDay(idfObject,fieldIndex,lastDate);
}
if(values[i] == values[i+1]){
// Bail on values that match the next value
continue;
}
// Write out the current entry
Time time(0,0,0,secondsFromStartOfDay);
int hours = time.hours();
int minutes = time.minutes() + floor((time.seconds()/60.0) + 0.5);
// This is a little dangerous, but all of the problematic 24:00
// times that might need to cause a day++ should be caught above.
if(minutes==60){
hours += 1;
//.........这里部分代码省略.........