private static int GetFirstRegisteredResult(SpatialFieldManager sfm, AnalysisResultSchema analysisResultSchema) { IList <int> registeredResults = new List <int>(); registeredResults = sfm.GetRegisteredResults(); return(registeredResults.Count == 0 ? sfm.RegisterResult(analysisResultSchema) : registeredResults.First()); }
public void PaintSolid(Document doc, Solid s, double value) { int schemaId = -1; var rnd = new Random(); View view = doc.ActiveView; using (Transaction transaction = new Transaction(doc)) { if (transaction.Start("Create model curves") == TransactionStatus.Started) { if (view.AnalysisDisplayStyleId == ElementId.InvalidElementId) { CreateAVFDisplayStyle(doc, view); } SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); if (null == sfm) { sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 1); } if (-1 != schemaId) { IList <int> results = sfm.GetRegisteredResults(); if (!results.Contains(schemaId)) { schemaId = -1; } } if (-1 == schemaId) { AnalysisResultSchema resultSchema1 = new AnalysisResultSchema(rnd.Next().ToString(), "Description"); schemaId = sfm.RegisterResult(resultSchema1); } FaceArray faces = s.Faces; Transform trf = Transform.Identity; foreach (Face face in faces) { int idx = sfm.AddSpatialFieldPrimitive(face, trf); 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); } transaction.Commit(); } } }
private SpatialFieldManager SetSpatialFieldManager(Autodesk.Revit.DB.View view, out int index) { SpatialFieldManager sfm = null; index = -1; try { sfm = SpatialFieldManager.GetSpatialFieldManager(view); using (Transaction trans = new Transaction(m_doc)) { trans.Start("Create Spatial Manager"); try { if (null == sfm) { sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 1); List <string> names = new List <string>(); List <string> descriptions = new List <string>(); names.Add("Visibility Index"); descriptions.Add("0: area with no views, 1: area with views"); sfm.SetMeasurementNames(names); sfm.SetMeasurementDescriptions(descriptions); } IList <int> resultIndices = sfm.GetRegisteredResults(); foreach (int i in resultIndices) { AnalysisResultSchema resultSchema = sfm.GetResultSchema(i); if (resultSchema.Name == "View Analysis") { index = i; } } if (index == -1) { AnalysisResultSchema resultSchema = new AnalysisResultSchema("View Analysis", "Calculating area with views"); index = sfm.RegisterResult(resultSchema); } trans.Commit(); } catch (Exception ex) { string message = ex.Message; trans.RollBack(); } } } catch (Exception ex) { MessageBox.Show("Set Spatial Field Manager.\n" + ex.Message, "Set Spatial Field Manager", MessageBoxButton.OK, MessageBoxImage.Warning); } return(sfm); }
internal static void ShowSolids(Document doc, IEnumerable <Solid> solids, IEnumerable <double> values) { SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(doc.ActiveView, 1); } if (_SchemaId != -1) { IList <int> results = sfm.GetRegisteredResults(); if (!results.Contains(_SchemaId)) { _SchemaId = -1; } } if (_SchemaId == -1) { _SchemaId = registerResults(sfm, "ShowChanges", "Description"); } List <double> valueList = values.ToList(); int i = 0; foreach (Solid s in solids) { double value = valueList[i]; i++; FaceArray faces = s.Faces; Transform trf = Transform.Identity; foreach (Face face in faces) { int idx = sfm.AddSpatialFieldPrimitive(face, trf); 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); } } updateView(doc.ActiveView, StyleEnum.Faces); }
public static Element RequestAnalysisResultInstanceSelection(string message) { var doc = dynRevitSettings.Doc; try { View view = doc.ActiveView as View; SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); Element AnalysisResult; if (sfm != null) { sfm.GetRegisteredResults(); Autodesk.Revit.UI.Selection.Selection choices = doc.Selection; choices.Elements.Clear(); //MessageBox.Show(message); DynamoLogger.Instance.Log(message); Reference fsRef = doc.Selection.PickObject(ObjectType.Element); if (fsRef != null) { AnalysisResult = doc.Document.GetElement(fsRef.ElementId) as Element; if (AnalysisResult != null) { return(AnalysisResult); } else { return(null); } } else { return(null); } } else { return(null); } } catch (Exception ex) { DynamoLogger.Instance.Log(ex); return(null); } }
/// <summary> /// Set up the AVF spatial field manager /// for the given view. /// </summary> static void SetUpAvfSfm( View view, Reference faceReference) { if (view.AnalysisDisplayStyleId == ElementId.InvalidElementId) { SetAvfDisplayStyle(view); } _sfm = SpatialFieldManager .GetSpatialFieldManager(view); if (null == _sfm) { _sfm = SpatialFieldManager .CreateSpatialFieldManager(view, 1); } else if (0 < _sfp_index) { _sfm.RemoveSpatialFieldPrimitive( _sfp_index); } _sfp_index = _sfm.AddSpatialFieldPrimitive( faceReference); if (-1 != _schemaId) { IList <int> results = _sfm.GetRegisteredResults(); if (!results.Contains(_schemaId)) { _schemaId = -1; } } if (-1 == _schemaId) { AnalysisResultSchema schema = new AnalysisResultSchema("Attenuation", "RvtFader signal attenuation"); List <string> unitNames = new List <string>(new string[1] { "dB" }); List <double> unitFactors = new List <double>(new double[1] { 1.0 }); schema.SetUnits(unitNames, unitFactors); _schemaId = _sfm.RegisterResult(schema); } }
public static Element RequestAnalysisResultInstanceSelection(UIDocument doc, string message, dynElementSettings settings) { try { View view = doc.ActiveView as View; SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); Element AnalysisResult; if (sfm != null) { sfm.GetRegisteredResults(); Selection choices = doc.Selection; choices.Elements.Clear(); //MessageBox.Show(message); settings.Bench.Log(message); Reference fsRef = doc.Selection.PickObject(ObjectType.Element); if (fsRef != null) { AnalysisResult = doc.Document.get_Element(fsRef.ElementId) as Element; if (AnalysisResult != null) { return(AnalysisResult); } else { return(null); } } else { return(null); } } else { return(null); } } catch (Exception ex) { settings.Bench.Log(ex.Message); return(null); } }
private void HideExistingAnalysis() { SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView); if (sfm != null) { IList <int> regIndices = sfm.GetRegisteredResults(); foreach (int i in regIndices) { AnalysisResultSchema result = sfm.GetResultSchema(i); result.IsVisible = false; sfm.SetResultSchema(i, result); } } }
/// <summary> /// Paint solid by AVF /// </summary> /// <param name="solid">Solid to be painted</param> /// <param name="view">The view that shows solid</param> private void PaintSolid(Solid solid, View view) { String viewName = view.Name; SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 1); } if (m_schemaId != -1) { IList <int> results = sfm.GetRegisteredResults(); if (!results.Contains(m_schemaId)) { m_schemaId = -1; } } // set up the display style if (m_schemaId == -1) { AnalysisResultSchema resultSchema1 = new AnalysisResultSchema("PaintedSolid " + viewName, "Description"); AnalysisDisplayStyle displayStyle = AnalysisDisplayStyle.CreateAnalysisDisplayStyle(this.RevitDoc, "Real_Color_Surface" + viewName, new AnalysisDisplayColoredSurfaceSettings(), new AnalysisDisplayColorSettings(), new AnalysisDisplayLegendSettings()); resultSchema1.AnalysisDisplayStyleId = displayStyle.Id; m_schemaId = sfm.RegisterResult(resultSchema1); } // get points of all faces in the solid FaceArray faces = solid.Faces; Transform trf = Transform.Identity; foreach (Face face in faces) { int idx = sfm.AddSpatialFieldPrimitive(face, trf); IList <UV> uvPts = null; IList <ValueAtPoint> valList = null; ComputeValueAtPointForFace(face, out uvPts, out valList, 1); FieldDomainPointsByUV pnts = new FieldDomainPointsByUV(uvPts); FieldValues vals = new FieldValues(valList); sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, m_schemaId); } }
private void DisplayExisitingResults() { listViewResults.Items.Clear(); SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView); if (sfm != null) { IList <int> regIndices = sfm.GetRegisteredResults(); foreach (int i in regIndices) { AnalysisResultSchema result = sfm.GetResultSchema(i); ListViewItem item = new ListViewItem(result.Name); item.Name = result.Name; item.Tag = result; item.Checked = result.IsVisible; listViewResults.Items.Add(item); } } }
private int FindIndexOfResult(SpatialFieldManager sfm) { int index = 0; overwriteResult = false; IList <int> regIndices = sfm.GetRegisteredResults(); foreach (int i in regIndices) { AnalysisResultSchema result = sfm.GetResultSchema(i); if (result.Name == settings.LegendTitle) { index = i; overwriteResult = true; break; } } return(index); }
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(); }
/// <summary> /// Get the AnalysisResultsSchemaIndex for the SpatialFieldManager /// </summary> /// <returns></returns> protected int GetAnalysisResultSchemaIndex() { // Get the AnalysisResultSchema index - there is only one for Dynamo var schemaIndex = 0; if (!SpatialFieldManager.IsResultSchemaNameUnique(AbstractAnalysisDisplay.ResultsSchemaName, -1)) { var arses = SpatialFieldManager.GetRegisteredResults(); schemaIndex = arses.First( x => SpatialFieldManager.GetResultSchema(x).Name == AbstractAnalysisDisplay.ResultsSchemaName); } else { var ars = new AnalysisResultSchema(AbstractAnalysisDisplay.ResultsSchemaName, "Resulting analyses from Dynamo."); schemaIndex = SpatialFieldManager.RegisterResult(ars); } return(schemaIndex); }
public static Element RequestAnalysisResultInstanceSelection(string message) { UIDocument doc = DocumentManager.Instance.CurrentUIDocument; try { View view = doc.ActiveView; SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); if (sfm != null) { sfm.GetRegisteredResults(); Autodesk.Revit.UI.Selection.Selection choices = doc.Selection; choices.Elements.Clear(); //MessageBox.Show(message); dynSettings.Controller.DynamoLogger.Log(message); Reference fsRef = doc.Selection.PickObject(ObjectType.Element); if (fsRef != null) { Element analysisResult = doc.Document.GetElement(fsRef.ElementId); return(analysisResult); } return(null); } return(null); } catch (Exception ex) { dynSettings.Controller.DynamoLogger.Log(ex); return(null); } }
/// <summary> /// Get the AnalysisResultsSchemaIndex for the SpatialFieldManager /// </summary> /// <returns></returns> protected virtual int GetAnalysisResultSchemaIndex(string resultsSchemaName, string resultsDescription, Type unitType) { // Get the AnalysisResultSchema index - there is only one for Dynamo var schemaIndex = 0; if (!SpatialFieldManager.IsResultSchemaNameUnique(resultsSchemaName, -1)) { var arses = SpatialFieldManager.GetRegisteredResults(); schemaIndex = arses.First( x => SpatialFieldManager.GetResultSchema(x).Name == resultsSchemaName); } else { var ars = new AnalysisResultSchema(resultsSchemaName, resultsDescription); if (unitType != null) { if (typeof(SIUnit).IsAssignableFrom(unitType)) { var prop = unitType.GetProperty("Conversions"); var conversions = (Dictionary <string, double>)prop.GetValue(null, new object[] { }); if (conversions != null) { var unitNames = conversions.Keys.ToList(); var multipliers = conversions.Values.ToList(); ars.SetUnits(unitNames, multipliers); ars.CurrentUnits = 0; } } } schemaIndex = SpatialFieldManager.RegisterResult(ars); } return(schemaIndex); }
private static int registerResults(SpatialFieldManager sfm, string name, string description) { IList <int> results = sfm.GetRegisteredResults(); if ((results != null) && (results.Count > 0)) { for (int i = 0; i < results.Count; i++) { try { if (sfm.GetResultSchema(i).Name.ToUpper() == name.ToUpper()) { return(i); } } catch { } // ran into cases in 2015 where this produced "Non-existent schema" } } AnalysisResultSchema resultSchema1 = new AnalysisResultSchema(name, description); int result = sfm.RegisterResult(resultSchema1); return(result); }
/// <summary> /// Paint a solid in a new named view /// </summary> /// <param name="s">solid</param> /// <param name="viewName">Given the name of view</param> public void PaintSolid(Solid s, String viewName) { View view; if (!viewNameList.Contains(viewName)) { view = m_doc.Create.NewView3D(new XYZ(1, 1, 1)); view.Name = viewName; viewNameList.Add(viewName); } else { view = (((new FilteredElementCollector(m_doc). OfClass(typeof(View))).Cast <View>()). Where(e => e.Name == viewName)).First <View>(); } SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view); if (sfm == null) { sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 1); } if (SchemaId != -1) { IList <int> results = sfm.GetRegisteredResults(); if (!results.Contains(SchemaId)) { SchemaId = -1; } } if (SchemaId == -1) { AnalysisResultSchema resultSchema1 = new AnalysisResultSchema("PaintedSolid" + viewName, "Description"); AnalysisDisplayStyle displayStyle = AnalysisDisplayStyle.CreateAnalysisDisplayStyle( m_doc, "Real_Color_Surface" + viewName, new AnalysisDisplayColoredSurfaceSettings(), new AnalysisDisplayColorSettings(), new AnalysisDisplayLegendSettings()); resultSchema1.AnalysisDisplayStyleId = displayStyle.Id; SchemaId = sfm.RegisterResult(resultSchema1); } FaceArray faces = s.Faces; Transform trf = Transform.Identity; foreach (Face face in faces) { int idx = sfm.AddSpatialFieldPrimitive(face, trf); IList <UV> uvPts = null; IList <ValueAtPoint> valList = null; ComputeValueAtPointForFace(face, out uvPts, out valList, 1); FieldDomainPointsByUV pnts = new FieldDomainPointsByUV(uvPts); FieldValues vals = new FieldValues(valList); sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, SchemaId); } }
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); }
/// <summary> /// External webcam event handler. /// </summary> public void Execute(UIApplication uiapp) { UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; Log("OnIdling image changed, active document " + doc.Title); Transaction transaction = new Transaction(doc); transaction.Start("Revit Webcam Update"); View view = doc.ActiveView; // maybe has to be 3D SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager( view); if (null == sfm) { sfm = SpatialFieldManager .CreateSpatialFieldManager(view, 1); } if (0 > _sfp_index) { _sfp_index = sfm.AddSpatialFieldPrimitive( _faceReference); } int nPoints = _width * _height; // _data.Width * _data.Height; IList <UV> pts = new List <UV>(nPoints); IList <ValueAtPoint> valuesAtPoints = new List <ValueAtPoint>(nPoints); Element eFace = doc.GetElement( _faceReference.ElementId); // 2013 Face face = eFace.GetGeometryObjectFromReference( _faceReference) as Face; // 2012 GetFieldPointsAndValues(ref pts, ref valuesAtPoints, face); FieldDomainPointsByUV fieldPoints = new FieldDomainPointsByUV(pts); FieldValues fieldValues = new FieldValues(valuesAtPoints); int result_index; IList <int> registeredResults = sfm.GetRegisteredResults(); if (0 == registeredResults.Count) { AnalysisResultSchema resultSchema = new AnalysisResultSchema( "Schema 1", "Schema 1 Description"); result_index = sfm.RegisterResult( resultSchema); } else { result_index = registeredResults.First(); } sfm.UpdateSpatialFieldPrimitive( _sfp_index, fieldPoints, fieldValues, result_index); // 2012 doc.Regenerate(); transaction.Commit(); }
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); } }
private static int GetFirstRegisteredResult(SpatialFieldManager sfm, AnalysisResultSchema analysisResultSchema) { IList<int> registeredResults = new List<int>(); registeredResults = sfm.GetRegisteredResults(); return registeredResults.Count == 0 ? sfm.RegisterResult(analysisResultSchema) : registeredResults.First(); }
/// <summary> /// Handle Revit Idling event. /// Return immediately if less time elapsed than /// specified interval. /// Otherwise, download the current image file /// from the specified URL. /// If it has not changed since the last update, /// return immediately. /// Otherwise, update the spatial field primitive /// with the new image data. /// Currently, we only display a grey scale image. /// Colour images could be handled as well by /// defining a custom colour palette. /// </summary> static void OnIdling( object sender, IdlingEventArgs e) { if (DateTime.Now.Subtract(_lastUpdate) > _interval) { Log("OnIdling"); GreyscaleBitmapData data = new GreyscaleBitmapData( _width, _height, _url); byte[] hash = data.HashValue; if (null == _lastHash || 0 != CompareBytes(hash, _lastHash)) { _lastHash = hash; // access active document from sender: // Support both 2011, where sender is an // Application instance, and 2012, where // it is a UIApplication instance: UIApplication uiapp = sender is UIApplication ? sender as UIApplication // 2012 : new UIApplication( sender as Application); // 2011 Debug.Assert(null != uiapp, "expected a valid Revit UIApplication instance"); UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; Log("OnIdling image changed, active document " + doc.Title); Transaction transaction = new Transaction(doc, "Revit Webcam Update"); transaction.Start(); View view = doc.ActiveView; // maybe has to be 3D SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager( view); if (null == sfm) { sfm = SpatialFieldManager .CreateSpatialFieldManager(view, 1); } if (0 > _sfp_index) { _sfp_index = sfm.AddSpatialFieldPrimitive( _faceReference); } int nPoints = data.Width * data.Height; IList <UV> pts = new List <UV>(nPoints); IList <ValueAtPoint> valuesAtPoints = new List <ValueAtPoint>(nPoints); // warning CS0618: // GeometryObject is obsolete: Property will be removed. // Use Element.GetGeometryObjectFromReference(Reference) instead //Face face = _faceReference.GeometryObject as Face; // 2011 //Face face = doc.get_Element( _elementId ) // .GetGeometryObjectFromReference( // _faceReference ) as Face; // 2012 // warning CS0618: // Autodesk.Revit.DB.Document.get_Element(Autodesk.Revit.DB.ElementId) is obsolete: // This method has been obsoleted. Use GetElement() instead. //Element eFace = doc.get_Element( _elementId ); // 2012 Element eFace = doc.GetElement(_elementId); // 2013 Face face = eFace.GetGeometryObjectFromReference( _faceReference) as Face; // 2012 GetFieldPointsAndValues(ref pts, ref valuesAtPoints, ref data, face); FieldDomainPointsByUV fieldPoints = new FieldDomainPointsByUV(pts); FieldValues fieldValues = new FieldValues(valuesAtPoints); int result_index; IList <int> registeredResults = sfm.GetRegisteredResults(); if (0 == registeredResults.Count) { AnalysisResultSchema resultSchema = new AnalysisResultSchema( "Schema 1", "Schema 1 Description"); result_index = sfm.RegisterResult( resultSchema); } else { result_index = registeredResults.First(); } // warning CS0618: // UpdateSpatialFieldPrimitive(int, FieldDomainPoints, FieldValues) is obsolete: // This method is obsolete in Revit 2012; use the overload accepting the result index instead. //sfm.UpdateSpatialFieldPrimitive( // _sfp_index, fieldPoints, fieldValues ); // 2011 sfm.UpdateSpatialFieldPrimitive( _sfp_index, fieldPoints, fieldValues, result_index); // 2012 doc.Regenerate(); transaction.Commit(); _lastUpdate = DateTime.Now; } } }