Class: FindAndReplaceObjectNames

Inherits:
OpenStudio::Measure::ModelMeasure
  • Object
show all
Defined in:
lib/measures/FindAndReplaceObjectNames/measure.rb

Overview

start the measure

Instance Method Summary collapse

Instance Method Details

#arguments(model) ⇒ Object

define the arguments that the user will input



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/measures/FindAndReplaceObjectNames/measure.rb', line 14

def arguments(model)
  args = OpenStudio::Measure::OSArgumentVector.new

  # make an argument for your name
  orig_string = OpenStudio::Measure::OSArgument.makeStringArgument('orig_string', true)
  orig_string.setDisplayName('Type the text you want search for in object names')
  orig_string.setDefaultValue('replace this text')
  args << orig_string

  # make an argument to add new space true/false
  new_string = OpenStudio::Measure::OSArgument.makeStringArgument('new_string', true)
  new_string.setDisplayName('Type the text you want to add in place of the found text')
  new_string.setDefaultValue('with this text')
  args << new_string

  return args
end

#nameObject

define the name that a user will see



9
10
11
# File 'lib/measures/FindAndReplaceObjectNames/measure.rb', line 9

def name
  return 'Find and Replace Object Names in the Model'
end

#run(model, runner, user_arguments) ⇒ Object

define what happens when the measure is run



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/measures/FindAndReplaceObjectNames/measure.rb', line 33

def run(model, runner, user_arguments)
  super(model, runner, user_arguments)

  # use the built-in error checking
  if !runner.validateUserArguments(arguments(model), user_arguments)
    return false
  end

  # assign the user inputs to variables
  orig_string = runner.getStringArgumentValue('orig_string', user_arguments)
  new_string = runner.getStringArgumentValue('new_string', user_arguments)

  # check the orig_string for reasonableness
  puts orig_string
  if orig_string == ''
    runner.registerError('No search string was entered.')
    return false
  end

  # reporting initial condition of model
  starting_spaces = model.getSpaces
  runner.registerInitialCondition("The model has #{model.objects.size} objects.")

  # array for objects with names
  named_objects = []

  # loop through model objects and rename if the object has a name
  model.objects.each do |obj|
    if !obj.name.empty?
      old_name = obj.name.get
      new_name = obj.setName(old_name.gsub(orig_string, new_string))
      if old_name != new_name
        named_objects << new_name
      end
    end
  end

  # reporting final condition of model
  runner.registerFinalCondition("#{named_objects.size} objects were renamed.")

  return true
end