示例#1
0
        public void ConstructorThrowsArgumentExceptionWithUndefinedUnits(LengthUnit length, MassUnit mass, DurationUnit time, ElectricCurrentUnit current,
                                                                         TemperatureUnit temperature, AmountOfSubstanceUnit amount, LuminousIntensityUnit luminousIntensity)
        {
            var baseUnits = new BaseUnits(length, mass, time, current, temperature, amount, luminousIntensity);

            Assert.Throws <ArgumentException>(() => new UnitSystem(baseUnits));
        }
        public void ToStringGivesExpectedResult()
        {
            var siBaseUnits = new BaseUnits(LengthUnit.Meter, MassUnit.Kilogram, DurationUnit.Second,
                                            ElectricCurrentUnit.Ampere, TemperatureUnit.Kelvin, AmountOfSubstanceUnit.Mole, LuminousIntensityUnit.Candela);

            Assert.Equal("[Length]: m, [Mass]: kg, [Time]: s, [Current]: A, [Temperature]: K, [Amount]: mol, [LuminousIntensity]: cd", siBaseUnits.ToString());
        }
示例#3
0
        public void GetUnitInfosFor_GivenBaseUnitsWithNoMatch_ReturnsEmpty()
        {
            var baseUnitsWithNoMatch = new BaseUnits(mass: MassUnit.Kilogram);
            var result = Length.Info.GetUnitInfosFor(baseUnitsWithNoMatch);

            Assert.Empty(result);
        }
示例#4
0
        public void GetUnitInfosFor_GivenBaseUnitsWithOneMatch_ReturnsOneMatch()
        {
            var baseUnitsWithOneMatch = new BaseUnits(LengthUnit.Foot);
            var result = Length.Info.GetUnitInfosFor(baseUnitsWithOneMatch);

            Assert.Collection(result, element1 => Assert.Equal(LengthUnit.Foot, element1.Value));
        }
 protected Enumeration(PreFix SI, BaseUnits baseunit)
 {
     LocalC  = PrefixSISize(SI);
     GlobalC = 1;
     Symbol  = PrefixSISymbol(SI) + BaseUnitSISymbol(baseunit);
     B       = 0;
     ActualC = 1;
 }
示例#6
0
        /// <summary>
        ///     Construct a BaseUnitSystem with default BaseUnits and a lazy-loaded set of unit configurations (for each quantity)
        /// </summary>
        /// <param name="baseUnits">The base units for this unit system</param>
        /// <param name="systemInfos">The units configuration for this unit system (lazy-loaded)</param>
        protected BaseUnitSystem(BaseUnits baseUnits, Lazy <UnitSystemInfo?[]> systemInfos) : base(systemInfos)
        {
            if (!baseUnits.IsFullyDefined) // TODO should we required that baseUnits are FullyDefined?
            {
                throw new ArgumentException("A unit system must have all base units defined.", nameof(baseUnits));
            }

            BaseUnits = baseUnits;
        }
示例#7
0
        public void ConstructorImplementedProperly()
        {
            var baseUnits = new BaseUnits(LengthUnit.Meter, MassUnit.Kilogram, DurationUnit.Second,
                                          ElectricCurrentUnit.Ampere, TemperatureUnit.Kelvin, AmountOfSubstanceUnit.Mole, LuminousIntensityUnit.Candela);

            var unitSystem = new UnitSystem(baseUnits);

            Assert.Equal(unitSystem.BaseUnits, baseUnits);
        }
示例#8
0
        static readonly double[] cutoverPoint      = { 90.0, 90.0, 24.0, 365.25 }; // Number of smaller units accumulated before cutting over to next larger unit

        public static string FormatElapsedTime(double elapsedTime, BaseUnits baseUnits)
        {
            int unitsIndex = (int)baseUnits;

            while ((unitsIndex < lastUnitsIndex) && (elapsedTime > cutoverPoint[unitsIndex]))
            {
                elapsedTime /= unitsPerUnit[unitsIndex++];
            }
            return(String.Format("{0:" + formatSpecifiers[unitsIndex] + "} {1}", elapsedTime, unitAbbreviations[unitsIndex]));
        }
示例#9
0
        public string CreateProject(string name, BaseUnits units)
        {
            Guid guid = Guid.NewGuid();

            model = InitializeModel(units);
            string path = GetFolderPath(guid.ToString()) + guid + ".ifc";

            model.SaveAs(path, StorageType.Ifc);
            model.Close();
            return(guid.ToString());
        }
        public void ExistsInWorksCorrectly()
        {
            Assert.False(BaseUnits.Undefined.IsSubsetOf(siBaseUnits));
            Assert.False(siBaseUnits.IsSubsetOf(BaseUnits.Undefined));

            var meterBaseUnits = new BaseUnits(LengthUnit.Meter);

            Assert.True(meterBaseUnits.IsSubsetOf(siBaseUnits));

            // Not all units in siBaseUnits will exist in meterBaseUnits
            Assert.False(siBaseUnits.IsSubsetOf(meterBaseUnits));
        }
        public void ConstructorSetsUnitsProperly()
        {
            var baseUnits = new BaseUnits(LengthUnit.Meter, MassUnit.Kilogram, DurationUnit.Second,
                                          ElectricCurrentUnit.Ampere, TemperatureUnit.Kelvin, AmountOfSubstanceUnit.Mole, LuminousIntensityUnit.Candela);

            Assert.Equal(LengthUnit.Meter, baseUnits.Length);
            Assert.Equal(MassUnit.Kilogram, baseUnits.Mass);
            Assert.Equal(DurationUnit.Second, baseUnits.Time);
            Assert.Equal(ElectricCurrentUnit.Ampere, baseUnits.Current);
            Assert.Equal(TemperatureUnit.Kelvin, baseUnits.Temperature);
            Assert.Equal(AmountOfSubstanceUnit.Mole, baseUnits.Amount);
            Assert.Equal(LuminousIntensityUnit.Candela, baseUnits.LuminousIntensity);
        }
示例#12
0
        public void SIUnitSystemHasCorrectBaseUnits()
        {
            var siBaseUnits = new BaseUnits(LengthUnit.Meter, MassUnit.Kilogram, DurationUnit.Second,
                                            ElectricCurrentUnit.Ampere, TemperatureUnit.Kelvin, AmountOfSubstanceUnit.Mole, LuminousIntensityUnit.Candela);

            Assert.Equal(LengthUnit.Meter, UnitSystem.SI.BaseUnits.Length);
            Assert.Equal(MassUnit.Kilogram, UnitSystem.SI.BaseUnits.Mass);
            Assert.Equal(DurationUnit.Second, UnitSystem.SI.BaseUnits.Time);
            Assert.Equal(ElectricCurrentUnit.Ampere, UnitSystem.SI.BaseUnits.Current);
            Assert.Equal(TemperatureUnit.Kelvin, UnitSystem.SI.BaseUnits.Temperature);
            Assert.Equal(AmountOfSubstanceUnit.Mole, UnitSystem.SI.BaseUnits.Amount);
            Assert.Equal(LuminousIntensityUnit.Candela, UnitSystem.SI.BaseUnits.LuminousIntensity);
        }
示例#13
0
        /// <summary>
        /// Make a model containing a project and a building
        /// </summary>
        /// <returns></returns>
        private IfcStore InitializeModel(BaseUnits units = BaseUnits.Meters)
        {
            var creds = new XbimEditorCredentials
            {
                ApplicationDevelopersName = "Digital Alchemy",
                ApplicationFullName       = "Simergy/Pegasus",
                ApplicationIdentifier     = "hello.exe",
                ApplicationVersion        = "1.0",
            };

            IfcStore model = IfcStore.Create(creds, XbimSchemaVersion.Ifc4, XbimStoreType.InMemoryModel);

            CreateProject(model, units);
            return(model);
        }
        public void InequalityOperatorIsImplementedCorrectly()
        {
            Assert.False(siBaseUnits != siBaseUnitsCopy);
            Assert.False(siBaseUnitsCopy != siBaseUnits);

            Assert.True(siBaseUnits != nonSiBaseUnits);
            Assert.True(nonSiBaseUnits != siBaseUnits);

            Assert.True(siBaseUnits != null);
            Assert.True(null != siBaseUnits);

            BaseUnits nullBaseUnits1 = null;
            BaseUnits nullBaseUnits2 = null;

            Assert.False(nullBaseUnits1 != nullBaseUnits2);
        }
示例#15
0
        private void CreateProject(IfcStore model, BaseUnits units = BaseUnits.Meters)
        {
            using (var txn = model.BeginTransaction("Initialising..."))
            {
                var project = model.Instances.New <IfcProject>();
                project.Initialize(ProjectUnits.SIUnitsUK);
                project.Name = "Pegasus";

                // By default the units are mm, m2 and m3
                // Change the length unit to meters (metres)
                // Note xbim doesn't have imperial units so we might have to add a complete set of imperial units here,
                // check out IfcProjectPartial.cs
                switch (units)
                {
                case BaseUnits.Millimeters:
                    model.Instances.OfType <IfcSIUnit>().Where(u => u.UnitType == IfcUnitEnum.LENGTHUNIT).ToList().ForEach(u => u.Prefix = null);
                    break;

                case BaseUnits.Meters:
                    break;

                case BaseUnits.Feet:
                {
                    IfcUnitAssignment unitAssignment = model.Instances.New <IfcUnitAssignment>();
                    unitAssignment.SetOrChangeConversionUnit(IfcUnitEnum.LENGTHUNIT, ConversionBasedUnit.Foot);
                    unitAssignment.SetOrChangeConversionUnit(IfcUnitEnum.AREAUNIT, ConversionBasedUnit.SquareFoot);
                    unitAssignment.SetOrChangeConversionUnit(IfcUnitEnum.VOLUMEUNIT, ConversionBasedUnit.CubicFoot);
                }
                break;

                case BaseUnits.Inches:
                {
                    IfcUnitAssignment unitAssignment = model.Instances.New <IfcUnitAssignment>();
                    unitAssignment.SetOrChangeConversionUnit(IfcUnitEnum.LENGTHUNIT, ConversionBasedUnit.Inch);
                    unitAssignment.SetOrChangeConversionUnit(IfcUnitEnum.AREAUNIT, ConversionBasedUnit.SquareFoot);
                    unitAssignment.SetOrChangeConversionUnit(IfcUnitEnum.VOLUMEUNIT, ConversionBasedUnit.CubicFoot);
                }
                break;
                }

                txn.Commit();
            }
        }
 public AmountOfSubstanceUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }
示例#17
0
 public LuminousIntensityUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }
 public DurationUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }
示例#19
0
 public MassUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }
 public ElectricCurrentUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }
示例#21
0
 public TemperatureDeltaUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }
示例#22
0
 /// <summary>
 /// Creates an instance of the UnitInfo class.
 /// </summary>
 /// <param name="value">The enum value for this class, for example <see cref="LengthUnit.Meter"/>.</param>
 /// <param name="baseUnits">The <see cref="BaseUnits"/> for this unit.</param>
 public UnitInfo(Enum value, BaseUnits baseUnits)
 {
     Value     = value ?? throw new ArgumentNullException(nameof(value));
     Name      = value.ToString();
     BaseUnits = baseUnits ?? throw new ArgumentNullException(nameof(baseUnits));
 }
 public CombinedUnit(PreFix SI, BaseUnits baseunit) : base(SI, baseunit)
 {
     SetUnitSystem();
 }