public void XYZFromReferencePoint() { var model = dynSettings.Controller.DynamoModel; string samplePath = Path.Combine(_testPath, @".\XYZ\XYZFromReferencePoint.dyn"); string testPath = Path.GetFullPath(samplePath); model.Open(testPath); ReferencePoint rp; using (_trans = new Transaction(dynRevitSettings.Doc.Document)) { _trans.Start("Create a reference point."); rp = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ()); _trans.Commit(); } FSharpList<FScheme.Value> args = FSharpList<FScheme.Value>.Empty; args = FSharpList<FScheme.Value>.Cons(FScheme.Value.NewContainer(rp), args); //find the XYZFromReferencePoint node var node = dynSettings.Controller.DynamoModel.Nodes.Where(x => x is XyzFromReferencePoint).First(); FScheme.Value v = ((NodeWithOneOutput)node).Evaluate(args); Assert.IsInstanceOf(typeof(XYZ), ((FScheme.Value.Container)v).Item); }
public void CurveByPoints() { var model = dynSettings.Controller.DynamoModel; string samplePath = Path.Combine(_testPath, @".\Curve\CurveByPoints.dyn"); string testPath = Path.GetFullPath(samplePath); model.Open(testPath); //cerate some points and wire them //to the selections ReferencePoint p1, p2, p3, p4; using (_trans = new Transaction(dynRevitSettings.Doc.Document)) { _trans.Start("Create reference points for testing."); p1 = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ(1, 5, 12)); p2 = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ(5, 1, 12)); p3 = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ(12, 1, 5)); p4 = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ(5, 12, 1)); _trans.Commit(); } var ptSelectNodes = dynSettings.Controller.DynamoModel.Nodes.Where(x => x is PointBySelection); if (!ptSelectNodes.Any()) Assert.Fail("Could not find point selection nodes in dynamo graph."); ((PointBySelection)ptSelectNodes.ElementAt(0)).SelectedElement = p1; ((PointBySelection)ptSelectNodes.ElementAt(1)).SelectedElement = p2; ((PointBySelection)ptSelectNodes.ElementAt(2)).SelectedElement = p3; ((PointBySelection)ptSelectNodes.ElementAt(3)).SelectedElement = p4; dynSettings.Controller.RunExpression(true); FilteredElementCollector fec = new FilteredElementCollector(dynRevitSettings.Doc.Document); fec.OfClass(typeof(CurveElement)); Assert.AreEqual(fec.ToElements().Count(), 1); CurveByPoints mc = (CurveByPoints)fec.ToElements().ElementAt(0); Assert.IsTrue(mc.IsReferenceLine); //now flip the switch for creating a reference curve var boolNode = dynSettings.Controller.DynamoModel.Nodes.Where(x => x is BoolSelector).First(); ((BasicInteractive<bool>)boolNode).Value = false; dynSettings.Controller.RunExpression(true); Assert.AreEqual(fec.ToElements().Count(), 1); mc = (CurveByPoints)fec.ToElements().ElementAt(0); Assert.IsFalse(mc.IsReferenceLine); }
/// <summary> /// This function gets all the walls in the current Revit document /// </summary> /// <param name="startNewTransaction">whether do the filtering in a new transaction</param> /// <returns>the walls</returns> private static IList<Element> GetAllWallElements(bool startNewTransaction) { if (startNewTransaction) { using (var trans = new Transaction(DocumentManager.Instance.CurrentUIDocument.Document, "FilteringElements")) { trans.Start(); ElementClassFilter ef = new ElementClassFilter(typeof(Wall)); FilteredElementCollector fec = new FilteredElementCollector(DocumentManager.Instance.CurrentUIDocument.Document); fec.WherePasses(ef); trans.Commit(); return fec.ToElements(); } } else { ElementClassFilter ef = new ElementClassFilter(typeof(Wall)); FilteredElementCollector fec = new FilteredElementCollector(DocumentManager.Instance.CurrentUIDocument.Document); fec.WherePasses(ef); return fec.ToElements(); } }
/// <summary> /// Creates one model curve on a plane with an origin at 0,0,0 /// </summary> /// <param name="mc1"></param> protected void CreateOneModelCurve(out ModelCurve mc1) { //create two model curves using (_trans = _trans = new Transaction(DocumentManager.Instance.CurrentUIDocument.Document, "CreateTwoModelCurves")) { _trans.Start(); var p1 = new Plane(XYZ.BasisZ, XYZ.Zero); SketchPlane sp1 = DocumentManager.Instance.CurrentUIDocument.Document.FamilyCreate.NewSketchPlane(p1); Curve c1 = DocumentManager.Instance.CurrentUIApplication.Application.Create.NewLineBound(XYZ.Zero, new XYZ(1, 0, 0)); mc1 = DocumentManager.Instance.CurrentUIDocument.Document.FamilyCreate.NewModelCurve(c1, sp1); _trans.Commit(); } }
/// <summary> /// Creates one model curve on a plane with an origin at 0,0,0 /// </summary> /// <param name="mc1"></param> protected void CreateOneModelCurve(out ModelCurve mc1) { //create two model curves using (_trans = _trans = new Transaction(dynRevitSettings.Doc.Document, "CreateTwoModelCurves")) { _trans.Start(); Plane p1 = new Plane(XYZ.BasisZ, XYZ.Zero); SketchPlane sp1 = dynRevitSettings.Doc.Document.FamilyCreate.NewSketchPlane(p1); Curve c1 = dynRevitSettings.Revit.Application.Create.NewLineBound(XYZ.Zero, new XYZ(1, 0, 0)); mc1 = dynRevitSettings.Doc.Document.FamilyCreate.NewModelCurve(c1, sp1); _trans.Commit(); } }
public void CreateInRevitSelectInDynamoSelectDifferentElement() { //This is to test that when a node is binding with a new element, the information related to binding //has actually changed. //Create two reference points in Revit ElementId rpID1, rpID2; using (var trans = new Transaction(DocumentManager.Instance.CurrentUIDocument.Document, "CreateInRevit")) { trans.Start(); ReferencePoint rp1 = DocumentManager.Instance.CurrentUIDocument.Document.FamilyCreate.NewReferencePoint(new XYZ()); rpID1 = rp1.Id; ReferencePoint rp2 = DocumentManager.Instance.CurrentUIDocument.Document.FamilyCreate.NewReferencePoint(new XYZ(10, 0, 0)); rpID2 = rp2.Id; trans.Commit(); } //Select the first reference point in Dynamo string dynFilePath = Path.Combine(_testPath, @".\ElementBinding\SelectInDynamo.dyn"); string testPath = Path.GetFullPath(dynFilePath); Controller.DynamoViewModel.OpenCommand.Execute(testPath); var model = Controller.DynamoModel; var selNodes = model.AllNodes.Where(x => x is DSElementSelection); var selNode = selNodes.First() as DSElementSelection; selNode.SelectedElement = rpID1; Assert.DoesNotThrow(() => Controller.RunExpression()); var id1 = selNode.SelectedElement; //Select the second reference point in Dynamo selNode.SelectedElement = rpID2; Assert.DoesNotThrow(() => Controller.RunExpression()); var id2 = selNode.SelectedElement; //Ensure the element binding is not the same Assert.IsTrue(!id1.Equals(id2)); }
public void CreateInRevitSelectInDynamoUndoInRevit() { //Create a reference point in Revit ElementId rpID; using (var trans = new Transaction(DocumentManager.Instance.CurrentUIDocument.Document, "CreateInRevit")) { trans.Start(); ReferencePoint rp = DocumentManager.Instance.CurrentUIDocument.Document.FamilyCreate.NewReferencePoint(new XYZ()); rpID = rp.Id; trans.Commit(); } //Select the reference point in Dynamo string dynFilePath = Path.Combine(_testPath, @".\ElementBinding\SelectInDynamo.dyn"); string testPath = Path.GetFullPath(dynFilePath); Controller.DynamoViewModel.OpenCommand.Execute(testPath); var model = Controller.DynamoModel; var selNodes = model.AllNodes.Where(x => x is DSElementSelection); var selNode = selNodes.First() as DSElementSelection; selNode.SelectedElement = rpID; Assert.DoesNotThrow(() => Controller.RunExpression()); //Undo the creation of a reference point in Revit Assert.Inconclusive("TO DO"); }
public void CreateInDynamoModifyInRevit() { //Create a wall in Dynamo string dynFilePath = Path.Combine(_testPath, @".\ElementBinding\CreateWallInDynamo.dyn"); string testPath = Path.GetFullPath(dynFilePath); Controller.DynamoViewModel.OpenCommand.Execute(testPath); Assert.DoesNotThrow(() => Controller.RunExpression()); //Modify the wall in Revit using (var trans = new Transaction(DocumentManager.Instance.CurrentUIDocument.Document, "DeleteInRevit")) { trans.Start(); IList<Element> rps = GetAllWallElements(false); Assert.AreEqual(1, rps.Count); Wall wall = rps.First() as Wall; //Modify the wall to cause a failure Assert.Inconclusive("TO DO"); wall.Flip(); DocumentManager.Instance.CurrentDBDocument.Delete(wall); trans.Commit(); } }
public void CreateInDynamoDeleteInRevit() { //This test case is to test that elements can be created via Dynamo. //After they are deleted in Revit, we can still create them via Dynamo. //Create a reference point in Dynamo string dynFilePath = Path.Combine(_testPath, @".\ElementBinding\CreateInDynamo.dyn"); string testPath = Path.GetFullPath(dynFilePath); Controller.DynamoViewModel.OpenCommand.Execute(testPath); Assert.DoesNotThrow(() => Controller.RunExpression()); var model = Controller.DynamoModel; var selNodes = model.AllNodes.Where(x => string.Equals(x.GUID.ToString(), "6a79717b-7438-458a-a725-587be0ba84fd")); Assert.IsTrue(selNodes.Any()); var node = selNodes.First(); var id1 = GetBindingElementIdForNode(node.GUID); //Delete all reference points in Revit using (var trans = new Transaction(DocumentManager.Instance.CurrentUIDocument.Document, "DeleteInRevit")) { trans.Start(); IList<Element> rps = GetAllReferencePointElements(false); var rpIDs = rps.Select(x => x.Id); DocumentManager.Instance.CurrentDBDocument.Delete(rpIDs.ToList()); trans.Commit(); } //Run the graph again Assert.DoesNotThrow(() => Controller.RunExpression()); var id2 = GetBindingElementIdForNode(node.GUID); //Check the number of reference points //This also verifies MAGN-2317 IList<Element> newRps = GetAllReferencePointElements(true); Assert.AreEqual(1, newRps.Count()); //Ensure the binding elements are different Assert.IsTrue(!id1.Equals(id2)); }
public void idleUpdate(object sender, Autodesk.Revit.UI.Events.IdlingEventArgs e) { e.SetRaiseWithoutDelay(); UIApplication uiapp = sender as UIApplication; Document doc = uiapp.ActiveUIDocument.Document; UIDocument uidoc = uiapp.ActiveUIDocument; if (COVER.Instance.messageQueue.Count > 0) { using (Autodesk.Revit.DB.Transaction transaction = new Autodesk.Revit.DB.Transaction(doc)) { FailureHandlingOptions failOpt = transaction.GetFailureHandlingOptions(); failOpt.SetClearAfterRollback(true); failOpt.SetFailuresPreprocessor( new NoWarningsAndErrors()); transaction.SetFailureHandlingOptions(failOpt); if (transaction.Start("changeParameters") == Autodesk.Revit.DB.TransactionStatus.Started) { while (COVER.Instance.messageQueue.Count > 0) { COVERMessage m = COVER.Instance.messageQueue.Dequeue(); COVER.Instance.handleMessage(m.message, m.messageType,doc,uidoc); if (Autodesk.Revit.DB.TransactionStatus.Committed != transaction.Commit()) { // Autodesk.Revit.UI.TaskDialog.Show("Failure", "Transaction could not be committed"); //an error occured end resolution was cancled thus this change can't be committed. // just ignore it and dont bug the user } return; } } } } }
/// <summary> /// Execute method invoked by Revit via the /// external event as a reaction to a call /// to its Raise method. /// </summary> public void Execute(Autodesk.Revit.UI.UIApplication a) { // As far as I can tell, the external event // should work fine even when switching between // different documents. That, however, remains // to be tested in more depth (or at all). //Document doc = a.ActiveUIDocument.Document; //Debug.Assert( doc.Title.Equals( _doc.Title ), // "oops ... different documents ... test this" ); UIDocument uidoc = a.ActiveUIDocument; using (Autodesk.Revit.DB.Transaction transaction = new Autodesk.Revit.DB.Transaction(a.ActiveUIDocument.Document)) { FailureHandlingOptions failOpt = transaction.GetFailureHandlingOptions(); failOpt.SetClearAfterRollback(true); failOpt.SetFailuresPreprocessor(new NoWarningsAndErrors()); transaction.SetFailureHandlingOptions(failOpt); if (transaction.Start("changeParameters") == Autodesk.Revit.DB.TransactionStatus.Started) { while (COVER.Instance.messageQueue.Count > 0) { COVERMessage m = COVER.Instance.messageQueue.Dequeue(); COVER.Instance.handleMessage(m.message, m.messageType, a.ActiveUIDocument.Document,uidoc); if (Autodesk.Revit.DB.TransactionStatus.Committed != transaction.Commit()) { // Autodesk.Revit.UI.TaskDialog.Show("Failure", "Transaction could not be committed"); //an error occured end resolution was cancled thus this change can't be committed. // just ignore it and dont bug the user } return; } } } }