示例#1
0
        public static Autodesk.Revit.DB.Level ToNative(this SpeckleElementsClasses.Level myLevel)
        {
            var(docObj, stateObj) = GetExistingElementByApplicationId(myLevel.ApplicationId, myLevel.Type);

            // if the new and old have the same id (hash equivalent) and the doc obj is not marked as being modified, return the doc object
            if (stateObj != null && docObj != null && myLevel._id == stateObj._id && (bool)stateObj.Properties["userModified"] == false)
            {
                return((Autodesk.Revit.DB.Level)docObj);
            }

            if (docObj == null)
            {
                docObj = ExistingLevelByName(myLevel.levelName);
            }
            if (docObj == null)
            {
                docObj = ExistingLevelByElevation(myLevel.elevation);
            }

            // If no doc object, means we need to create it!
            if (docObj == null)
            {
                var myNewLevel = Autodesk.Revit.DB.Level.Create(Doc, myLevel.elevation * Scale);
                if (myLevel.levelName != null)
                {
                    try
                    {
                        myNewLevel.Name = myLevel.levelName;
                    }
                    catch { }
                }

                if (myLevel.createView)
                {
                    var vt = new FilteredElementCollector(Doc).OfClass(typeof(ViewFamilyType)).Where(el => ((ViewFamilyType)el).ViewFamily == ViewFamily.FloorPlan).First();

                    var view = Autodesk.Revit.DB.ViewPlan.Create(Doc, vt.Id, myNewLevel.Id);
                    try
                    {
                        view.Name = myLevel.levelName;
                    }
                    catch { }
                }

                SetElementParams(myNewLevel, myLevel.parameters);
                myNewLevel.Maximize3DExtents();
                return(myNewLevel);
            }

            var existingLevel = docObj as Autodesk.Revit.DB.Level;

            existingLevel.Elevation = myLevel.elevation * Scale;
            existingLevel.Name      = myLevel.levelName != null && existingLevel.Name == null ? myLevel.levelName : existingLevel.Name;

            SetElementParams(existingLevel, myLevel.parameters);
            existingLevel.Maximize3DExtents();
            return(existingLevel);
        }
示例#2
0
        public static SpeckleElementsClasses.Level ToSpeckle(this Autodesk.Revit.DB.Level myLevel)
        {
            // TODO
            var speckleLevel = new SpeckleElementsClasses.Level();

            speckleLevel.elevation  = myLevel.Elevation / Scale; // UnitUtils.ConvertFromInternalUnits(myLevel.Elevation, DisplayUnitType.Meters)
            speckleLevel.levelName  = myLevel.Name;
            speckleLevel.parameters = GetElementParams(myLevel);

            speckleLevel.ApplicationId = myLevel.UniqueId;
            speckleLevel.elementId     = myLevel.Id.ToString();
            speckleLevel.GenerateHash();
            return(speckleLevel);
        }