Exemple #1
0
        private List <Dictionary <string, string> > HandleUpload()
        {
            using (ProgressDialog pd = new ProgressDialog("Upload", 5))
            {
                pd.Show();
                // collect rooms from the model, return false if there are none
                pd.StartTask("Collecting placed rooms");
                IList <SpatialElement> placedRooms = RevitMethods.GetPlacedRooms(_doc);
                if (placedRooms == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // check if the custom room parameters exist
                pd.StartTask("Checking room parameters");
                bool roomParametersCheck = RevitMethods.CheckParametersExist(
                    placedRooms,
                    SharepointConstants.Dictionaries.newRevitRoomParameters);
                if (roomParametersCheck == false)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // collect the room info for writing to sharepoint
                pd.StartTask("Parsing room data");
                List <Dictionary <string, string> > placedRoomsData = RevitMethods.ParseRoomData(
                    placedRooms,
                    SharepointConstants.Dictionaries.newRevitRoomParameters);
                if (placedRoomsData == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // retrieve write list from sharepoint
                pd.StartTask("Connecting to Sharepoint");
                SP.List SPWriteList = SharepointMethods.GetListFromWeb(
                    _context,
                    SharepointConstants.Links.spWriteList);
                if (SPWriteList == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // write the room data to the write list
                pd.StartTask("Writing data to Sharepoint");
                bool roomsUploaded = SharepointMethods.AddItemsToList(
                    _context,
                    SPWriteList,
                    placedRoomsData);
                if (roomsUploaded == false)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // if we get to the end then return the written data
                return(placedRoomsData);
            }
        }
Exemple #2
0
        private List <Room> HandleSync()
        {
            using (ProgressDialog pd = new ProgressDialog("Sync", 6))
            {
                pd.Show();
                List <Room> syncedRooms = new List <Room>();

                // get current revit rooms
                pd.StartTask("Collecting Revit rooms");
                IList <Element> collectedRooms = RevitMethods.GetElements(
                    _doc,
                    BuiltInCategory.OST_Rooms);
                if (collectedRooms == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // get items from SP list
                pd.StartTask("Fetching Sharepoint data");
                SP.ListItemCollection allSpRooms = GetItemsFromSharepointList(
                    SharepointConstants.Links.spReadList,
                    SharepointConstants.Views.allItems);
                if (allSpRooms == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // filter by current project
                pd.StartTask("Retrieving rooms from current project");
                IEnumerable <SP.ListItem> spRooms = SharepointMethods.GetItems(
                    allSpRooms,
                    SharepointConstants.ColumnHeaders.project_id,
                    _project[SharepointConstants.ColumnHeaders.ID].ToString());
                if (spRooms == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // get the latest phase
                pd.StartTask("Getting latest Revit phase");
                Phase latestPhase = RevitMethods.GetLatestPhase(_doc);
                if (latestPhase == null)
                {
                    pd.Close();
                    return(null);
                }
                pd.Increment();

                // check if room parameters exist
                pd.StartTask("Checking Revit parameters");
                bool roomParamsExist = RevitMethods.CheckParametersExist(
                    collectedRooms,
                    SharepointConstants.Dictionaries.newRevitRoomParameters);
                pd.Increment();

                // if they don't exist
                if (!roomParamsExist)
                {
                    // make new parameters
                    Dictionary <string, ExternalDefinition> roomParametersCreated = RevitMethods.CreateSharedParameters(
                        _doc,
                        _app,
                        SharepointConstants.Dictionaries.newRevitRoomParameters,
                        BuiltInCategory.OST_Rooms,
                        BuiltInParameterGroup.PG_REFERENCE);
                    if (roomParametersCreated == null)
                    {
                        pd.Close();
                        return(null);
                    }

                    // generate the rooms
                    pd.StartTask("Creating revit rooms");
                    syncedRooms = RevitMethods.CreateRooms(
                        _doc,
                        latestPhase,
                        spRooms,
                        roomParametersCreated);
                    pd.Increment();
                }
                else
                {
                    // sync the existing rooms
                    pd.StartTask("Syncing revit rooms");
                    syncedRooms = RevitMethods.UpdateRooms(
                        _doc,
                        latestPhase,
                        collectedRooms,
                        spRooms,
                        SharepointConstants.Dictionaries.newRevitRoomParameters);
                    pd.Increment();
                }
                return(syncedRooms);
            }
        }