/// <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;
 }