// Execution method for the updater public void Execute(UpdaterData data) { // Remove old idling event callback UIApplication uiApp = new UIApplication(data.GetDocument().Application); uiApp.Idling -= containerOld.UpdateWhileIdling; containerOld.Stop(); // Clear the current AVF results Document doc = data.GetDocument(); View activeView = doc.GetElement(s_activeViewId) as View; SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(activeView); sfm.Clear(); // Restart the multithread calculation with a new container Element modifiedElem = doc.GetElement(data.GetModifiedElementIds().First <ElementId>()); MultithreadedCalculationContainer container = MultithreadedCalculation.CreateContainer(modifiedElem); containerOld = container; // Setup the new idling callback uiApp.Idling += new EventHandler <IdlingEventArgs>(container.UpdateWhileIdling); // Start the thread Thread threadNew = new Thread(new ThreadStart(container.Run)); threadNew.Start(); }
/// <summary> /// Getting ready to preform an analysis for the given in view /// </summary> /// <remarks> /// This initializes the Spatial Field Manager, /// adds a field primitive corresponding to the face, /// and registers our result schema we want to use. /// The method clears any previous results in the view. /// </remarks> /// public void Initialize() { // create of get field manager for the view m_SFManager = SpatialFieldManager.GetSpatialFieldManager(m_view); if (m_SFManager == null) { m_SFManager = SpatialFieldManager.CreateSpatialFieldManager(m_view, 1); } // For the sake of simplicity, we remove any previous results m_SFManager.Clear(); // register schema for the results AnalysisResultSchema schema = new AnalysisResultSchema("E4623E91-8044-4721-86EA-2893642F13A9", "SDK2014-AL, Sample Schema"); m_schemaId = m_SFManager.RegisterResult(schema); // Add a spatial field for our face reference m_fieldId = m_SFManager.AddSpatialFieldPrimitive(GetReference()); m_needInitialization = false; }
internal static void Clear(Autodesk.Revit.UI.UIDocument uiDoc) { Document doc = uiDoc.Document; Transaction t = null; if (doc.IsModifiable == false) { t = new Transaction(doc, "Clear Visualizations"); t.Start(); } SpatialFieldManager sfm = null; sfm = SpatialFieldManager.GetSpatialFieldManager(uiDoc.ActiveGraphicalView); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(uiDoc.ActiveGraphicalView, 1); } sfm.Clear(); if (t != null) { t.Commit(); } }
private void bttnRemove_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("Would you like to remove all Analysis Results of the current view?", "Remove All Analysis Results", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dr == DialogResult.Yes) { SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView); sfm.Clear(); } }
public static void PaintSolid(Document doc, Solid solid, double value) { Autodesk.Revit.DB.View view = doc.ActiveView; if (view.AnalysisDisplayStyleId == ElementId.InvalidElementId) { CreateAVFDisplayStyle(doc, view); } SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 1); } sfm.Clear(); IList <int> results = sfm.GetRegisteredResults(); AnalysisResultSchema resultSchema1 = new AnalysisResultSchema("PaintedSolid2", "Description"); int schemaId = sfm.RegisterResult(resultSchema1); foreach (Face face in solid.Faces) { int idx = sfm.AddSpatialFieldPrimitive(face, Transform.Identity); IList <UV> uvPts = new List <UV>(); List <double> doubleList = new List <double>(); IList <ValueAtPoint> valList = new List <ValueAtPoint>(); BoundingBoxUV bb = face.GetBoundingBox(); uvPts.Add(bb.Min); doubleList.Add(value); valList.Add(new ValueAtPoint(doubleList)); FieldDomainPointsByUV pnts = new FieldDomainPointsByUV(uvPts); FieldValues vals = new FieldValues(valList); sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, schemaId); } // UIDocument uidoc = new UIDocument(doc); //uidoc.RefreshActiveView(); }
internal static void ShowVectors(Document doc, IList <Objects.VectorObject> points, bool scaleVectors) { double viewScale = 12.0 / Convert.ToDouble(doc.ActiveView.Scale); SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(doc.ActiveView, 1); } if (sfm == null) { throw new System.ApplicationException("SFM still null!"); } sfm.Clear(); // schema if (_SchemaId != -1) { IList <int> results = sfm.GetRegisteredResults(); if (!results.Contains(_SchemaId)) { _SchemaId = -1; } } if (_SchemaId == -1) { _SchemaId = registerResults(sfm, "ShowChanges", "Description"); } IList <VectorAtPoint> valList = new List <VectorAtPoint>(); List <XYZ> dummyList = new List <XYZ>(); dummyList.Add(XYZ.BasisZ); FieldDomainPointsByXYZ pnts = null; FieldValues vals = null; List <XYZ> tmpXYZ = new List <XYZ>(); List <string> tmpNames = new List <String>(); int idx = sfm.AddSpatialFieldPrimitive(); int localPointCount = 0; int max = points.Count; for (int i = 0; i < max; i++) { tmpXYZ.Add(points[i].Origin); if (scaleVectors) { dummyList[0] = points[i].Vector.Multiply(viewScale); } else { dummyList[0] = points[i].Vector; } valList.Add(new VectorAtPoint(dummyList)); if (localPointCount > MAX_POINTS_PER_PRIMITIVE) { pnts = new FieldDomainPointsByXYZ(tmpXYZ); vals = new FieldValues(valList); sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, _SchemaId); // create a new primitive idx = sfm.AddSpatialFieldPrimitive(); // reset localPointCount = 0; tmpXYZ = new List <XYZ>(); valList = new List <VectorAtPoint>(); } localPointCount++; } // do it one more time if there are leftovers if (tmpXYZ.Count > 0) { pnts = new FieldDomainPointsByXYZ(tmpXYZ); vals = new FieldValues(valList); sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, _SchemaId); } updateView(doc.ActiveView, StyleEnum.Vectors); }
public void Execute(UpdaterData data) { Document doc = data.GetDocument(); Autodesk.Revit.ApplicationServices.Application app = doc.Application; View view = doc.GetElement(viewID) as View; FamilyInstance sphere = doc.GetElement(sphereID) as FamilyInstance; LocationPoint sphereLP = sphere.Location as LocationPoint; XYZ sphereXYZ = sphereLP.Point; SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 3); // Three measurement values for each point } sfm.Clear(); FilteredElementCollector collector = new FilteredElementCollector(doc, view.Id); ElementCategoryFilter wallFilter = new ElementCategoryFilter(BuiltInCategory.OST_Walls); ElementCategoryFilter massFilter = new ElementCategoryFilter(BuiltInCategory.OST_Mass); LogicalOrFilter filter = new LogicalOrFilter(wallFilter, massFilter); ICollection <Element> elements = collector.WherePasses(filter).WhereElementIsNotElementType().ToElements(); foreach (Face face in GetFaces(elements)) { int idx = sfm.AddSpatialFieldPrimitive(face.Reference); List <double> doubleList = new List <double>(); IList <UV> uvPts = new List <UV>(); IList <ValueAtPoint> valList = new List <ValueAtPoint>(); BoundingBoxUV bb = face.GetBoundingBox(); for (double u = bb.Min.U; u < bb.Max.U; u = u + (bb.Max.U - bb.Min.U) / 15) { for (double v = bb.Min.V; v < bb.Max.V; v = v + (bb.Max.V - bb.Min.V) / 15) { UV uvPnt = new UV(u, v); uvPts.Add(uvPnt); XYZ faceXYZ = face.Evaluate(uvPnt); // Specify three values for each point doubleList.Add(faceXYZ.DistanceTo(sphereXYZ)); doubleList.Add(-faceXYZ.DistanceTo(sphereXYZ)); doubleList.Add(faceXYZ.DistanceTo(sphereXYZ) * 10); valList.Add(new ValueAtPoint(doubleList)); doubleList.Clear(); } } FieldDomainPointsByUV pnts = new FieldDomainPointsByUV(uvPts); FieldValues vals = new FieldValues(valList); AnalysisResultSchema resultSchema1 = new AnalysisResultSchema("Schema 1", "Schema 1 Description"); IList <int> registeredResults = new List <int>(); registeredResults = sfm.GetRegisteredResults(); int idx1 = 0; if (registeredResults.Count == 0) { idx1 = sfm.RegisterResult(resultSchema1); } else { idx1 = registeredResults.First(); } sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, idx1); } }