public void Extensions() { var units = new UnitsManager(); const double x = 5.0; var length = x.ToLength(units); Assert.AreEqual("5.000m", length.ToString(DynamoLengthUnit.Meter)); var area = x.ToArea(units); Assert.AreEqual("5.000m²", area.ToString(DynamoAreaUnit.SquareMeter)); var volume = x.ToVolume(units); Assert.AreEqual("5.000m³", volume.ToString(DynamoVolumeUnit.CubicMeter)); }
public void CanMapOverUnits() { var units = new UnitsManager(); var length = FSchemeInterop.Utils.ToFSharpList(Enumerable.Range(1, 5).Select(x => new Length(x,units))); var area = FSchemeInterop.Utils.ToFSharpList(Enumerable.Range(1, 5).Select(x => new Area(x,units))); var volume = FSchemeInterop.Utils.ToFSharpList(Enumerable.Range(1, 5).Select(x => new Volume(x,units))); RunExampleTest( Path.Combine(GetTestDirectory(), @"core\units\map-numbers-to-units.dyn"), new[] { new KeyValuePair<Guid, object>(Guid.Parse("8d46007e-e6d3-4848-8213-7c2ac3c5624d"), length), new KeyValuePair<Guid, object>(Guid.Parse("b22c8a19-04dc-473e-a3b8-d0071175ce53"), area), new KeyValuePair<Guid, object>(Guid.Parse("92accc0a-4380-4c60-92e7-7f735cecbb6b"), volume), new KeyValuePair<Guid, object>(Guid.Parse("97fdd4df-e9dd-4f7f-9494-b2adabfdbdeb"), length), new KeyValuePair<Guid, object>(Guid.Parse("4e830faa-d358-4086-ba4c-9b7e70f96681"), area), new KeyValuePair<Guid, object>(Guid.Parse("e6ae471f-9cd8-4cbb-bb83-ecdf1785c35f"), volume) }); }
public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { AppDomain.CurrentDomain.AssemblyResolve += Dynamo.Utilities.AssemblyHelper.CurrentDomain_AssemblyResolve; AppDomain.CurrentDomain.AssemblyResolve += DynamoRaaS.AssemblyHelper.ResolveAssemblies; //Add an assembly load step for the System.Windows.Interactivity assembly //Revit owns a version of this as well. Adding our step here prevents a duplicative //load of the dll at a later time. var assLoc = Assembly.GetExecutingAssembly().Location; var interactivityPath = Path.Combine(Path.GetDirectoryName(assLoc), "System.Windows.Interactivity.dll"); var interactivityAss = Assembly.LoadFrom(interactivityPath); //When a user double-clicks the Dynamo icon, we need to make //sure that we don't create another instance of Dynamo. if (isRunning) { Debug.WriteLine("Dynamo is already running."); if (dynamoView != null) { dynamoView.Focus(); } return Result.Succeeded; } isRunning = true; try { m_revit = revit.Application; m_doc = m_revit.ActiveUIDocument; #region default level Level defaultLevel = null; var fecLevel = new FilteredElementCollector(m_doc.Document); fecLevel.OfClass(typeof (Level)); defaultLevel = fecLevel.ToElements()[0] as Level; #endregion dynRevitSettings.Revit = m_revit; dynRevitSettings.Doc = m_doc; dynRevitSettings.DefaultLevel = defaultLevel; IdlePromise.ExecuteOnIdle(delegate { //get window handle IntPtr mwHandle = Process.GetCurrentProcess().MainWindowHandle; Regex r = new Regex(@"\b(Autodesk |Structure |MEP |Architecture )\b"); string context = r.Replace(m_revit.Application.VersionName, ""); //they changed the application version name conventions for vasari //it no longer has a version year so we can't compare it to other versions //TODO:come up with a more stable way to test for Vasari beta 3 if (context == "Vasari") context = "Vasari 2014"; var units = new UnitsManager { HostApplicationInternalAreaUnit = DynamoAreaUnit.SquareFoot, HostApplicationInternalLengthUnit = DynamoLengthUnit.DecimalFoot, HostApplicationInternalVolumeUnit = DynamoVolumeUnit.CubicFoot }; dynamoController = new DynamoController_Revit(DynamoRevitApp.env, DynamoRevitApp.Updater, typeof(DynamoRevitViewModel), context, units); dynamoView = new DynamoView { DataContext = dynamoController.DynamoViewModel }; dynamoController.UIDispatcher = dynamoView.Dispatcher; //set window handle and show dynamo new WindowInteropHelper(dynamoView).Owner = mwHandle; handledCrash = false; dynamoView.WindowStartupLocation = WindowStartupLocation.Manual; Rectangle bounds = Screen.PrimaryScreen.Bounds; dynamoView.Left = dynamoViewX ?? bounds.X; dynamoView.Top = dynamoViewY ?? bounds.Y; dynamoView.Width = dynamoViewWidth ?? 1000.0; dynamoView.Height = dynamoViewHeight ?? 800.0; dynamoView.Show(); dynamoView.Dispatcher.UnhandledException -= DispatcherOnUnhandledException; dynamoView.Dispatcher.UnhandledException += DispatcherOnUnhandledException; dynamoView.Closing += dynamoView_Closing; dynamoView.Closed += dynamoView_Closed; //revit.Application.ViewActivated += new EventHandler<Autodesk.Revit.UI.Events.ViewActivatedEventArgs>(Application_ViewActivated); revit.Application.ViewActivating += Application_ViewActivating; }); } catch (Exception ex) { isRunning = false; MessageBox.Show(ex.ToString()); DynamoLogger.Instance.Log(ex.Message); DynamoLogger.Instance.Log(ex.StackTrace); DynamoLogger.Instance.Log("Dynamo log ended " + DateTime.Now.ToString()); return Result.Failed; } return Result.Succeeded; }
private void StartDynamo() { Level defaultLevel = null; var fecLevel = new FilteredElementCollector(RevitData.Document.Document); fecLevel.OfClass(typeof(Level)); dynRevitSettings.Revit = RevitData.Application; dynRevitSettings.Doc = RevitData.Document; dynRevitSettings.DefaultLevel = defaultLevel; var units = new UnitsManager { HostApplicationInternalAreaUnit = DynamoAreaUnit.SquareFoot, HostApplicationInternalLengthUnit = DynamoLengthUnit.DecimalFoot, HostApplicationInternalVolumeUnit = DynamoVolumeUnit.CubicFoot }; //create dynamo var r = new Regex(@"\b(Autodesk |Structure |MEP |Architecture )\b"); string context = r.Replace(RevitData.Application.Application.VersionName, ""); var dynamoController = new DynamoController_Revit(DynamoRevitApp.env, DynamoRevitApp.Updater, typeof(DynamoRevitViewModel), context, units) { Testing = true }; }
private void StartDynamo() { try { var units = new UnitsManager { HostApplicationInternalAreaUnit = DynamoAreaUnit.SquareFoot, HostApplicationInternalLengthUnit = DynamoLengthUnit.DecimalFoot, HostApplicationInternalVolumeUnit = DynamoVolumeUnit.CubicFoot }; //create a new instance of the ViewModel Controller = new DynamoController(new ExecutionEnvironment(), typeof (DynamoViewModel), Context.NONE, new UpdateManager.UpdateManager(), units) { Testing = true }; } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } }
public void UnitsNegatives() { var units = new UnitsManager(); var length = new Length(-2.0, units); var area = new Area(-2.0, units); var volume = new Volume(-2.0, units); Assert.AreEqual(-2.0, length.Value); Assert.AreEqual(-2.0, area.Value); Assert.AreEqual(-2.0, volume.Value); Assert.AreEqual(new Length(-2.0, units), new Length(10.0, units) - new Length(12.0, units)); Assert.AreEqual(new Area(-2.0, units), new Area(10.0, units) - new Area(12.0,units)); Assert.AreEqual(new Volume(-2.0, units), new Volume(10.0, units) - new Volume(12.0, units)); }
public void UnitsMath() { var units = new UnitsManager(); var length = new Units.Length(2.0, units); var area = new Units.Area(2.0, units); var volume = new Units.Volume(2.0, units); //addition var length_add = length + length; Assert.AreEqual(4, length_add.Value); var area_add = area + area; Assert.AreEqual(4, area_add.Value); var volume_add = volume + volume; Assert.AreEqual(4, volume_add.Value); Assert.Throws<UnitsException>(() => { var test = length + area; }); Assert.Throws<UnitsException>(() => { var test = area + volume; }); Assert.Throws<UnitsException>(() => { var test = length + volume; }); //subtraction var length_sub = length - length; Assert.AreEqual(0, length_sub.Value); var area_sub = area - area; Assert.AreEqual(0, area_sub.Value); var volume_sub = volume - volume; Assert.AreEqual(0, volume_sub.Value); Assert.Throws<UnitsException>(() => { var test = length - area; }); Assert.Throws<UnitsException>(() => { var test = area - volume; }); Assert.Throws<UnitsException>(() => { var test = length - volume; }); Assert.Throws<UnitsException>(() => { var test = area - length; }); Assert.Throws<UnitsException>(() => { var test = volume - area; }); Assert.Throws<UnitsException>(() => { var test = volume - length; }); //multiplication Assert.AreEqual(4, (length * length).Value); Assert.IsInstanceOf<Area>(length * length); Assert.AreEqual(4, (length * area).Value); Assert.IsInstanceOf<Volume>(length * area); Assert.Throws<UnitsException>(() => { var test = area * area; }); Assert.Throws<UnitsException>(() => { var test = volume * area; }); Assert.Throws<UnitsException>(() => { var test = length * volume; }); Assert.Throws<UnitsException>(() => { var test = volume * volume; }); //division Assert.AreEqual(1, length / length); Assert.AreEqual(1, area / area); Assert.AreEqual(1, volume / volume); Assert.Throws<UnitsException>(() => { var test = length / area; }); Assert.Throws<UnitsException>(() => { var test = area / volume; }); Assert.Throws<UnitsException>(() => { var test = length / volume; }); //modulo var length_mod = length%length; Assert.AreEqual(0, length_mod.Value); var area_mode = area%area; Assert.AreEqual(0, area_mode.Value); var volume_mod = volume%volume; Assert.AreEqual(0, volume_mod.Value); Assert.Throws<UnitsException>(() => { var test = length % area; }); Assert.Throws<UnitsException>(() => { var test = area % volume; }); Assert.Throws<UnitsException>(() => { var test = length % volume; }); Assert.Throws<UnitsException>(() => { var test = area % length; }); Assert.Throws<UnitsException>(() => { var test = volume % area; }); Assert.Throws<UnitsException>(() => { var test = volume % length; }); //ensure that when a formula is unit + double it returns a unit //and when it is double + unit, it returns a double Assert.AreEqual(new Length(length.Value + 2.0, units), length + 2.0); Assert.AreEqual(4.0, 2.0 + length); Assert.AreEqual(new Area(area.Value + 2.0, units), area + 2.0); Assert.AreEqual(4.0, 2.0 + area); Assert.AreEqual(new Volume(volume.Value + 2.0, units), volume + 2.0); Assert.AreEqual(4.0, 2.0 + volume); }
public void UiRounding() { var units = new UnitsManager {LengthUnit = DynamoLengthUnit.FractionalFoot}; var length = Units.Length.FromFeet(1.5,units); Assert.AreEqual("2' 0\"", ((Units.Length)length.Round()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("2' 0\"", ((Units.Length)length.Ceiling()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("1' 0\"", ((Units.Length)length.Floor()).ToString(DynamoLengthUnit.FractionalFoot)); length = Units.Length.FromFeet(1.2,units); Assert.AreEqual("1' 0\"", ((Units.Length)length.Round()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("2' 0\"", ((Units.Length)length.Ceiling()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("1' 0\"", ((Units.Length)length.Floor()).ToString(DynamoLengthUnit.FractionalFoot)); length = Units.Length.FromFeet(-1.5,units); Assert.AreEqual("-2' 0\"", ((Units.Length)length.Round()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("-1' 0\"", ((Units.Length)length.Ceiling()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("-2' 0\"", ((Units.Length)length.Floor()).ToString(DynamoLengthUnit.FractionalFoot)); length = Units.Length.FromFeet(-1.2,units); Assert.AreEqual("-1' 0\"", ((Units.Length)length.Round()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("-1' 0\"", ((Units.Length)length.Ceiling()).ToString(DynamoLengthUnit.FractionalFoot)); Assert.AreEqual("-2' 0\"", ((Units.Length)length.Floor()).ToString(DynamoLengthUnit.FractionalFoot)); //this fails as explained here: //http://msdn.microsoft.com/en-us/library/wyk4d9cy(v=vs.110).aspx //length = Units.Length.FromFeet(.5); //Assert.AreEqual("1' 0\"", ((Units.Length)length.Round()).ToString(DynamoLengthUnit.FractionalFoot)); }
public void ToFractonialInchRepresentation() { var units = new UnitsManager(); var length = new Dynamo.Units.Length(0.03175, units); //1.25" Assert.AreEqual("1 1/4\"", length.ToString(DynamoLengthUnit.FractionalInch)); length.Value = -0.03175; Assert.AreEqual("-1 1/4\"", length.ToString(DynamoLengthUnit.FractionalInch)); //test just the fractional case length.Value = 0.00635; //1/4" Assert.AreEqual("1/4\"", length.ToString(DynamoLengthUnit.FractionalInch)); length.Value = -0.00635; //-1/4" Assert.AreEqual("-1/4\"", length.ToString(DynamoLengthUnit.FractionalInch)); //test just the whole case length.Value = 0.0254; //1" Assert.AreEqual("1\"", length.ToString(DynamoLengthUnit.FractionalInch)); length.Value = -0.0254; Assert.AreEqual("-1\"", length.ToString(DynamoLengthUnit.FractionalInch)); //test some edge cases length.Value = 0.0; Assert.AreEqual("0\"", length.ToString(DynamoLengthUnit.FractionalInch)); length.Value = 0.000396875; //1/64" Assert.AreEqual("1/64\"", length.ToString(DynamoLengthUnit.FractionalInch)); length.Value = 0.025146; //.99" Assert.AreEqual("1\"", length.ToString(DynamoLengthUnit.FractionalInch)); }
public void ToFractionalFootRepresentations() { var units = new UnitsManager(); //test just the fractional case var length = new Units.Length(0.0762, units); //.25" Assert.AreEqual("3\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = -0.0762; Assert.AreEqual("-3\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = 0.3048; //1ft. Assert.AreEqual("1' 0\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = -0.3048; Assert.AreEqual("-1' 0\"", length.ToString(DynamoLengthUnit.FractionalFoot)); //test some edge cases length.Value = 0.0; Assert.AreEqual("0' 0\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = 0.003175; //1/8" Assert.AreEqual("1/8\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = 0.301752; //.99ft Assert.AreEqual("11 29/32\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = 0.3044952; //.999ft Assert.AreEqual("1'", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = 0.35560000000142239; //1'2" Assert.AreEqual("1' 2\"", length.ToString(DynamoLengthUnit.FractionalFoot)); length.Value = -0.35560000000142239; //-1'2" Assert.AreEqual("-1' 2\"", length.ToString(DynamoLengthUnit.FractionalFoot)); }
public void Sorting() { var units = new UnitsManager(); //tests of units IComparability var l1 = new Length(-13.0,units); var l2 = new Length(27.0,units); var l3 = new Length(0.0, units); var l4 = new Length(.0000001,units); var lengths = new List<Length> {l4, l3, l1, l2}; lengths.Sort(); Assert.AreEqual(l1.Value, lengths[0].Value); Assert.AreEqual(l2.Value, lengths[3].Value); Assert.AreEqual(l3.Value, lengths[1].Value); Assert.AreEqual(l4.Value, lengths[2].Value); var a2 = new Area(27.0,units); var a3 = new Area(0.0,units); var a4 = new Area(.0000001,units); var areas = new List<Area> {a4, a3, a2}; areas.Sort(); Assert.AreEqual(a2.Value, areas[2].Value); Assert.AreEqual(a3.Value, areas[0].Value); Assert.AreEqual(a4.Value, areas[1].Value); var v2 = new Volume(27.0,units); var v3 = new Volume(0.0,units); var v4 = new Volume(.0000001,units); var volumes = new List<Volume> {v4, v3, v2}; volumes.Sort(); Assert.AreEqual(v2.Value, volumes[2].Value); Assert.AreEqual(v3.Value, volumes[0].Value); Assert.AreEqual(v4.Value, volumes[1].Value); //test that we're not comparing units //that can't be compared var mixedList = new List<SIUnit> {l2, a4, v4}; Assert.Throws<InvalidOperationException>(mixedList.Sort); }
public void SetVolumeFromString() { var units = new UnitsManager(); var volume = new Volume(1.0, units); volume.SetValueFromString("1 mm³"); Assert.AreEqual(1.0e-9, volume.Value, 0.001); volume.SetValueFromString("1mm³"); Assert.AreEqual(1.0e-9, volume.Value, 0.001); volume.SetValueFromString("1 mm3"); Assert.AreEqual(1.0e-9, volume.Value, 0.001); volume.SetValueFromString("1 cumm"); Assert.AreEqual(1.0e-9, volume.Value, 0.001); volume.SetValueFromString("1 cm³"); Assert.AreEqual(1.0e-6, volume.Value, 0.001); volume.SetValueFromString("1cm³"); Assert.AreEqual(1.0e-6, volume.Value, 0.001); volume.SetValueFromString("1 cm3"); Assert.AreEqual(1.0e-6, volume.Value, 0.001); volume.SetValueFromString("1 cucm"); Assert.AreEqual(1.0e-6, volume.Value, 0.001); volume.SetValueFromString("1 m³"); Assert.AreEqual(1, volume.Value, 0.001); volume.SetValueFromString("1m³"); Assert.AreEqual(1, volume.Value, 0.001); volume.SetValueFromString("1 m3"); Assert.AreEqual(1, volume.Value, 0.001); volume.SetValueFromString("1 cum"); Assert.AreEqual(1, volume.Value, 0.001); volume.SetValueFromString("1 in³"); Assert.AreEqual(1.6387e-5, volume.Value, 0.001); volume.SetValueFromString("1in³"); Assert.AreEqual(1.6387e-5, volume.Value, 0.001); volume.SetValueFromString("1 in3"); Assert.AreEqual(1.6387e-5, volume.Value, 0.001); volume.SetValueFromString("1 cuin"); Assert.AreEqual(1.6387e-5, volume.Value, 0.001); volume.SetValueFromString("1 ft³"); Assert.AreEqual(0.0283168, volume.Value, 0.001); volume.SetValueFromString("1ft³"); Assert.AreEqual(0.0283168, volume.Value, 0.001); volume.SetValueFromString("1 ft3"); Assert.AreEqual(0.0283168, volume.Value, 0.001); volume.SetValueFromString("1 cuft"); Assert.AreEqual(0.0283168, volume.Value, 0.001); }
public void SetLengthsFromString() { var units = new UnitsManager(); //feet tests var length = new Dynamo.Units.Length(1.0,units); length.SetValueFromString("1' 3\""); Assert.AreEqual(0.381, length.Value, 0.001); length.SetValueFromString("1' 2\""); Assert.AreEqual(0.3556, length.Value, 0.001); length.SetValueFromString("30.48 cm"); Assert.AreEqual(0.3048, length.Value, 0.001); length.SetValueFromString("1 ft"); Assert.AreEqual(0.3048, length.Value, 0.001); length.SetValueFromString("12 in"); Assert.AreEqual(0.3048, length.Value, 0.001); length.SetValueFromString("1' 0\""); Assert.AreEqual(0.3048, length.Value, 0.001); length.SetValueFromString("0.3 m"); Assert.AreEqual(0.3, length.Value, 0.001); length.SetValueFromString("304.8 mm"); Assert.AreEqual(0.3048, length.Value, 0.001); length.SetValueFromString("1' 2 1/2\""); Assert.AreEqual(0.3683, length.Value, 0.001); length.SetValueFromString("14 1/2\""); Assert.AreEqual(0.3683, length.Value, 0.001); }
public void SetAreaFromString() { var units = new UnitsManager(); var area = new Area(1.0, units); area.SetValueFromString("1 mm²"); Assert.AreEqual(1.0e-6 , area.Value, 0.001); area.SetValueFromString("1mm²"); Assert.AreEqual(1.0e-6, area.Value, 0.001); area.SetValueFromString("1 mm2"); Assert.AreEqual(1.0e-6, area.Value, 0.001); area.SetValueFromString("1 sqmm"); Assert.AreEqual(1.0e-6, area.Value, 0.001); area.SetValueFromString("1 cm²"); Assert.AreEqual(0.0001, area.Value, 0.001); area.SetValueFromString("1cm²"); Assert.AreEqual(0.0001, area.Value, 0.001); area.SetValueFromString("1 cm2"); Assert.AreEqual(0.0001, area.Value, 0.001); area.SetValueFromString("1 sqcm"); Assert.AreEqual(0.0001, area.Value, 0.001); area.SetValueFromString("1 m²"); Assert.AreEqual(1, area.Value, 0.001); area.SetValueFromString("1m²"); Assert.AreEqual(1, area.Value, 0.001); area.SetValueFromString("1 m2"); Assert.AreEqual(1, area.Value, 0.001); area.SetValueFromString("1 sqm"); Assert.AreEqual(1, area.Value, 0.001); area.SetValueFromString("1 in²"); Assert.AreEqual(0.00064516, area.Value, 0.001); area.SetValueFromString("1in²"); Assert.AreEqual(0.00064516, area.Value, 0.001); area.SetValueFromString("1 in2"); Assert.AreEqual(0.00064516, area.Value, 0.001); area.SetValueFromString("1 sqin"); Assert.AreEqual(0.00064516, area.Value, 0.001); area.SetValueFromString("1 ft²"); Assert.AreEqual(0.092903, area.Value, 0.001); area.SetValueFromString("1ft²"); Assert.AreEqual(0.092903, area.Value, 0.001); area.SetValueFromString("1 ft2"); Assert.AreEqual(0.092903, area.Value, 0.001); area.SetValueFromString("1 sqft"); Assert.AreEqual(0.092903, area.Value, 0.001); }