The last day before DevCamp!
I am happy to note that the articles on grabbing a webcam image and displaying it on a Revit element face were so popular ... I will be demonstrating that and other samples using the Idling event and modeless dialogues at DevCamp.
Meanwhile, here is an interesting little item that my colleagues Jorgen Dahl and Martin Schmid (who by the way published a book on AutoCAD MEP 2010) dug up, another nugget of information on the topic of Revit database units, an area that we looked at repeatedly in the past:
- Units.
- Formatting unit strings.
- Unit types and format options.
- Unit conversion.
- Unit Suffix and the ProjectUnit SDK sample.
- DisplayUnitType and UnitSymbolType.
- Parameter filter units.
Martin is an expert in the MEP domain, so one area of interest to him is the following:
Question: What is the internal unit used by Revit for voltage? In the API, the ElectricalSystem.Voltage property returns a value that is about 10.76391 times the expected value in Volts, i.e., I get 1291.669 instead of 120 V. The same applies to the TrueLoad property. So I assume Revit is using some non-standard unit for voltage?
Answer: Electrical potential can be defined using the following more fundamental units:
(Length2 * Mass) / (Time3 * Current).
In Revit, this formula makes use of the following units:
- Length: feet
- Mass: kg
- Time: s
- Current: A
The unit Volt is defined in the same way, of course, but uses the SI unit meters instead of feet, as specified by the International System of Units SI.
As a result, to convert the Revit internal database voltage unit to Volts, you have to multiply it with 0.3048^2.
It would be nice to upgrade the internal Revit database unit to use meters as well, but the problem is that there are a lot of data fields on elements in Revit that don’t know if they are just a number or a length. We are working on it, though.
Every unit in Revit knows what base units it is built of, and data is stored in that format. The base units used internally by Revit are currently:
enum BaseUnit { BU_Length = 0, // length, feet (ft) BU_Angle, // angle, radian (rad) BU_Mass, // mass, kilogram (kg) BU_Time, // time, second (s) BU_Electric_Current, // electric current, ampere (A) BU_Temperature, // temperature, kelvin (K) BU_Luminous_Intensity, // luminous intensity, candela (cd) BU_Solid_Angle, // solid angle, steradian (sr) };
Many thanks to Jorgen and Martin for this useful background information!