/// <summary> /// /// </summary> /// <param name="view"></param> /// <param name="data"></param> protected FaceAnalysisDisplay( Autodesk.Revit.DB.View view, ISurfaceData <Autodesk.DesignScript.Geometry.UV, double> data, string resultsName, string description, Type unitType) { var sfm = GetSpatialFieldManagerFromView(view); // create a new spatial field primitive TransactionManager.Instance.EnsureInTransaction(Document); sfm.Clear(); sfm.SetMeasurementNames(new List <string>() { Properties.Resources.Dynamo_AVF_Data_Name }); InternalSetSpatialFieldManager(sfm); var primitiveIds = new List <int>(); var reference = data.Surface.Tags.LookupTag(DefaultTag) as Reference; if (reference == null) { // Dont' throw an exception here. Handle the case of a bad tag // in the static constructor. return; } var primitiveId = SpatialFieldManager.AddSpatialFieldPrimitive(reference); primitiveIds.Add(primitiveId); InternalSetSpatialFieldValues(primitiveId, data, resultsName, description, unitType); TransactionManager.Instance.TransactionTaskDone(); }
InternalSetSpatialFieldValues(int primitiveId, ISurfaceData <Autodesk.DesignScript.Geometry.UV, double> data, string schemaName, string description, Type unitType) { // Get the surface reference var reference = data.Surface.Tags.LookupTag(DefaultTag) as Reference; var el = DocumentManager.Instance.CurrentDBDocument.GetElement(reference.ElementId); var pointLocations = new List <UV>(); if (el != null) { var face = el.GetGeometryObjectFromReference(reference) as Autodesk.Revit.DB.Face; if (face != null) { foreach (var loc in data.ValueLocations) { var pt = data.Surface.PointAtParameter(loc.U, loc.V); var faceLoc = face.Project(pt.ToXyz()).UVPoint; pointLocations.Add(faceLoc); } } } var valList = data.Values.Select(v => new ValueAtPoint(new List <double>() { v })); TransactionManager.Instance.EnsureInTransaction(Document); // Convert the analysis values to a special Revit type //var valList = enumerable.Select(n => new ValueAtPoint(n.ToList())).ToList(); var sampleValues = new FieldValues(valList.ToList()); // Convert the sample points to a special Revit Type var samplePts = new FieldDomainPointsByUV(pointLocations.ToList()); // Get the analysis results schema var schemaIndex = GetAnalysisResultSchemaIndex(schemaName, description, unitType); // Update the values SpatialFieldManager.UpdateSpatialFieldPrimitive(primitiveId, samplePts, sampleValues, schemaIndex); TransactionManager.Instance.TransactionTaskDone(); }
/// <summary> /// /// </summary> /// <param name="view"></param> /// <param name="data"></param> /// <param name="resultsName"></param> /// <param name="description"></param> /// <param name="unitType"></param> protected FaceAnalysisDisplay( Autodesk.Revit.DB.View view, ISurfaceData <Autodesk.DesignScript.Geometry.UV, double> data, string resultsName, string description, Type unitType) { SpatialFieldManager sfm; // create a new spatial field primitive TransactionManager.Instance.EnsureInTransaction(Document); var refPriIds = new Dictionary <Reference, int>(); var primitiveIds = new List <int>(); var reference = data.Surface.Tags.LookupTag(DefaultTag) as Reference; if (reference == null) { // Dont' throw an exception here. Handle the case of a bad tag // in the static constructor. return; } var TraceData = GetElementAndRefPrimitiveIdFromTrace(); if (TraceData != null) { sfm = TraceData.Item1; refPriIds = TraceData.Item2; InternalSetSpatialFieldManager(sfm); int primitiveId; if (refPriIds.TryGetValue(reference, out primitiveId)) { InternalSetSpatialFieldValues(primitiveId, data, resultsName, description, unitType); TransactionManager.Instance.TransactionTaskDone(); return; } else { foreach (var refPriId in refPriIds) { sfm.RemoveSpatialFieldPrimitive(refPriId.Value); } refPriIds.Clear(); primitiveId = SpatialFieldManager.AddSpatialFieldPrimitive(reference); primitiveIds.Add(primitiveId); refPriIds.Add(reference, primitiveId); InternalSetSpatialPrimitiveIds(primitiveIds); InternalSetReferencePrimitiveIdPairs(refPriIds); InternalSetSpatialFieldValues(primitiveId, data, resultsName, description, unitType); } } else { sfm = GetSpatialFieldManagerFromView(view); sfm.SetMeasurementNames(new List <string>() { Properties.Resources.Dynamo_AVF_Data_Name }); InternalSetSpatialFieldManager(sfm); var primitiveId = SpatialFieldManager.AddSpatialFieldPrimitive(reference); primitiveIds.Add(primitiveId); refPriIds.Add(reference, primitiveId); InternalSetSpatialPrimitiveIds(primitiveIds); InternalSetReferencePrimitiveIdPairs(refPriIds); InternalSetSpatialFieldValues(primitiveId, data, resultsName, description, unitType); } TransactionManager.Instance.TransactionTaskDone(); SetElementAndRefPrimitiveIdsForTrace(); }
public SurfaceMeshGenerator(ISurfaceData data) { _data = data; }