You seem to be confusing two different things (but that's totally understandable):
- The BCL Measures. Locally they are typically at
~/BCL
. When you download a measure from the online BCL, it goes in there - The "My Measures Directory". This is a convenience thing provided by the OpenStudio Application (and PAT). It's typically at
~/OpenStudio/Measures
. That's where you put the measures you create yourself.
In the OpenStudio Application when you drag any measure (BCL or your own) to your model, the measure is copied to the measures
subdirectory in your companion directory (= if your model is named "my_model.osm", there is a "my_model/" folder next to it). So they will run from there.
Generally speaking, the definitive source is to look at the WorkflowJSON file you used to run your workflow (workflow.osw file in your companion directory for OSApp). If you don't see any added paths there, the standard paths are used. (that'd be ./measures
, ../../measures
and .
, where .
is the directory of the workflow.osw))
Too much information (?):
Behind the scenes, the SDK has three things of interest:
- The RemoteBCL: used to lookup online measures
- The LocalBCL, to interact with the downloaded BCL Measures
- The MeasureManager, which is used to get information about a measure (the type of the measure, it's name, description, etc), compute arguments for your model, etc.
std::vector<BCLMeasure> BCLMeasure::getMeasuresInDir(path)
is used on your "My Measures Dir" (it loops on all subdirectories and try to load BCLMeasure (meaning there's a measure.xml and a measure.rb/.py at least).
BCL Measures and your own measures are passed to the MeasureManager which will compute the info.
BCL Measures in your local ~/BCL measures are in a folder structure like this ~/BCL/<uid>/<version_id>
(check the measure.xml and you'll see it matches). There's also a ~/BCL/components.sql
that stores some relevant information about which BCL measures and components you have.
BCL Measures can be updated: by matching the uid of the measures with the content of the (online) RemoteBCL, if the version_id
does not match between your local copy and the online one, you know it's outdated.