예제 #1
0
bool OSArgument::setMaxValue(int maxValue)
{
  if (m_type == OSArgumentType::Double) {
    double test = (double)maxValue;
    return setMaxValue(test);
  }
  else if (m_type != OSArgumentType::Integer) {
    return false;
  }

  double minValue = std::numeric_limits<int>::min();
  if (hasDomain() && (m_domainType == OSDomainType::Interval)){
    std::vector<int> domain = domainAsInteger();
    if (domain.size() == 2){
      minValue = domain[0];
    }
  }

  m_domainType = OSDomainType::Interval;
  m_domain.clear();
  m_domain.push_back(QVariant(minValue));
  m_domain.push_back(QVariant(maxValue));

  onChange();

  return true;
}
예제 #2
0
bool OSArgument::setMinValue(double minValue)
{
  if (m_type == OSArgumentType::Integer){
    int test = floor(minValue);
    if (test == minValue){
      return setMinValue(test);
    }
    return false;
  } else if (m_type != OSArgumentType::Double) {
    return false;
  }

  double maxValue = std::numeric_limits<double>::max();
  if (hasDomain() && (m_domainType == OSDomainType::Interval)){
    std::vector<double> domain = domainAsDouble();
    if (domain.size() == 2){
      maxValue = domain[1];
    }
  }

  m_domainType = OSDomainType::Interval;
  m_domain.clear();
  m_domain.push_back(QVariant(minValue));
  m_domain.push_back(QVariant(maxValue));

  onChange();

  return true;
}
예제 #3
0
std::string OSArgument::print() const {
  std::stringstream ss;

  // name
  ss << name();
  if (!displayName().empty()) {
    ss << " (" << displayName() << ")";
  }
  ss << std::endl;

  // type and required
  ss << type().valueName() << ", ";
  if (required()) {
    ss << "Required";
  }
  else {
    ss << "Optional";
  }
  ss << std::endl;

  // value
  ss << "Value: ";
  if (hasValue()) {
    ss << printValue(false) << " ";
  }
  if (hasDefaultValue()) {
    ss << "(" << printDefaultValue() << ")";
  }
  ss << std::endl;

  if (m_type.value() == OSArgumentType::Choice) {
    ss << "Choices:" << std::endl;
    int dnn = m_choiceDisplayNames.size();
    for (int i = 0, n = m_choices.size(); i < n; ++i) {
      ss << "  " << m_choices[i];
      if ((i < dnn) && (!m_choiceDisplayNames[i].empty())) {
        ss << " (" << m_choiceDisplayNames[i] << ")";
      }
      ss << std::endl;
    }
  }

  if (hasDomain()) {
    ss << m_domainType.valueName() << " Domain: ";
    if (m_domainType == OSDomainType::Interval) {
      OS_ASSERT(m_domain.size() == 2u);
      ss << "[" << printQVariant(m_domain[0]) << ", " << printQVariant(m_domain[1]) << "]" << std::endl;
    }
    else {
      ss << std::endl;
      for (const QVariant& value : m_domain) {
        ss << "  " << printQVariant(value) << std::endl;
      }
    }
  }

  return ss.str();

}
예제 #4
0
std::vector<double> OSArgument::domainAsDouble() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  DoubleVector result;
  BOOST_FOREACH(const QVariant& value,m_domain) {
    result.push_back(value.toDouble());
  }
예제 #5
0
std::vector<openstudio::path> OSArgument::domainAsPath() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  std::vector<openstudio::path> result;
  for (const QVariant& value : m_domain) {
    result.push_back(toPath(value.toString()));
  }
  return result;
}
예제 #6
0
std::vector<std::string> OSArgument::domainAsString() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  StringVector result;
  for (const QVariant& value : m_domain) {
    result.push_back(printQVariant(value));
  }
  return result;
}
예제 #7
0
std::vector<int> OSArgument::domainAsInteger() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  IntVector result;
  for (const QVariant& value : m_domain) {
    result.push_back(value.toInt());
  }
  return result;
}
예제 #8
0
std::vector<Quantity> OSArgument::domainAsQuantity() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  QuantityVector result;
  for (const QVariant& value : m_domain) {
    result.push_back(value.value<openstudio::Quantity>());
  }
  return result;
}
예제 #9
0
std::vector<bool> OSArgument::domainAsBool() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  BoolVector result;
  for (const QVariant& value : m_domain) {
    if ("true" == value.toString()) {
      result.push_back(true);
    }
    result.push_back(false);
  }
  return result;
}
예제 #10
0
void ConfigFile::addDomain(ConfigDomain *domain, int lineNumber) {
	if (!domain)
		// No domain, nothing to do
		return;

	// Sanity check
	if (hasDomain(domain->_name))
		throw Exception("Duplicate domain \"%s\" (line %d)", domain->_name.c_str(), lineNumber);

	// Add the domain to the list and map
	_domainList.push_back(domain);
	_domainMap.insert(std::make_pair(domain->_name, domain));
}
예제 #11
0
std::vector<QVariant> OSArgument::domainAsQVariant() const {
  if (!hasDomain()) {
    LOG_AND_THROW("No domain set for OSArgument '" << name() << "'.");
  }
  return m_domain;
}