IfcCompoundPlaneAngleMeasure

Natural language names
enCompound Plane Angle Measure
frMesure composée d'angle plan
Semantic definitions at the type
Type definition

IfcCompoundPlaneAngleMeasure is a compound measure of plane angle in degrees, minutes, seconds, and optionally millionth-seconds of arc.

NOTE  IfcCompoundPlaneAngleMeasure is used where angles need to be described to an accuracy as fine as one millionth of a degree and expressed as parts of an arc. It may be used for angular measurement by surveyors or for other angular measurements where precision is required. Another usage is exact or approximate global positioning against a geographic coordinate systems using longitude and latitude.
NOTE  While the unit of measurement of the type IfcPlaneAngleMeasure depends on unit assignment (radian or degree or other derived units; globally at the IfcPoject or locally at an IfcMeasureWithUnit), the units of IfcCompoundPlaneAngleMeasure are always degrees, minutes, seconds, and millionth-seconds irrespective of unit assignments.
HISTORY  New type in IFC1.5.1.

Type: LIST [3:4] OF INTEGER

Value restrictions

Signedness

All measure components have the same sign (positive or negative). It is therefore trivial to convert between floating point representation (decimal degrees) and compound representation regardless whether the angle is greater or smaller than zero. Example:

LOCAL
  a : IfcPlaneAngleMeasure := -50.975864;  (* decimal degrees, -50° 58' 33" 110400 *)
  b : IfcPlaneAngleMeasure;
  c : IfcCompoundPlaneAngleMeasure;
  s : IfcText;
END_LOCAL;

(* convert from float to compound *)
  c[1] :=    a;                                           -- -50
  c[2] :=   (a - c[1]) * 60;                              -- -58
  c[3] :=  ((a - c[1]) * 60 - c[2]) * 60;                 -- -33
  c[4] := (((a - c[1]) * 60 - c[2]) * 60 - c[3]) * 1.e6;  -- -110400

(* convert from compound to float *)
  b := c[1] + c[2]/60. + c[3]/3600. + c[4]/3600.e6;       -- -50.975864

Use in string representations

When a compound plane angle measure is formatted for display or printout, the signs of the fractional components will usually be discarded because, to a human reader, the sign of the first component alone already indicates the sense of the angle:

(* convert from compound to human-readable string *)
  s := FORMAT(c[1], '+##')     + "000000B0"
     + FORMAT(ABS(c[2]), '##') + ''''
     + FORMAT(ABS(c[3]), '##') + '"'
     + FORMAT(ABS(c[4]), '##');  -- -50° 58' 33" 110400

Another often encountered display format of latitudes and longitudes is to omit the signs and print N, S, E, W indicators instead, for example, 50°58'33"S. When stored as IfcCompoundPlaneAngleMeasure however, a compound plane angle measure is always signed, with same sign of all components.

Formal Propositions
RuleDescription
MinutesInRangeThe second measure (minutes) shall be between -60 exclusive and 60 exclusive.
SecondsInRangeThe third measure (seconds) shall be between -60 exclusive and 60 exclusive.
MicrosecondsInRangeThe forth measure (millionth-seconds), if asserted, shall be between -1e6 exclusive and 1e6 exclusive.
ConsistentSignAll non-zero measure components shall have the same sign (positive or negative).
Formal representations
XSD Specification
 <xs:complexType name="IfcCompoundPlaneAngleMeasure">
  <xs:simpleContent>
   <xs:extension base="ifc:List-IfcCompoundPlaneAngleMeasure">
    <xs:attribute ref="ifc:itemType" fixed="xs:long"/>
    <xs:attribute ref="ifc:cType" fixed="list"/>
    <xs:attribute ref="ifc:arraySize" use="optional"/>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
 <xs:simpleType name="List-IfcCompoundPlaneAngleMeasure">
  <xs:restriction>
   <xs:simpleType>
    <xs:list itemType="xs:long"/>
   </xs:simpleType>
   <xs:minLength value="3"/>
   <xs:maxLength value="4"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="IfcCompoundPlaneAngleMeasure-wrapper" nillable="true">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="ifc:IfcCompoundPlaneAngleMeasure">
     <xs:attributeGroup ref="ifc:instanceAttributes"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
EXPRESS Specification
TYPE IfcCompoundPlaneAngleMeasure = LIST [3:4] OF INTEGER;
 WHERE
  MinutesInRange : ABS(SELF[2]) < 60
  SecondsInRange : ABS(SELF[3]) < 60
  MicrosecondsInRange : (SIZEOF(SELF) = 3) OR (ABS(SELF[4]) < 1000000)
  ConsistentSign : ((SELF[1] >= 0) AND (SELF[2] >= 0) AND (SELF[3] >= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] >= 0))) OR ((SELF[1] <= 0) AND (SELF[2] <= 0) AND (SELF[3] <= 0) AND ((SIZEOF(SELF) = 3) OR (SELF[4] <= 0)))
END_TYPE;

Link to EXPRESS-G diagram EXPRESS-G diagram

Link to this page  Link to this page