Exemplo n.º 1
0
        private void ElementsForm_Load(object sender, EventArgs e)
        {
            NLogger.LogText("Entered ElementsForm_Load");

            //  Load either Revit Elements grid or Revit Families dropdownlist, depending on how the user wants to select elements in Revit file
            if (elStructureList != null && elStructureList.Count != 0)
            {
                // Populate the Element datagrid
                var dataSources = offsitePanelHandler.GetElementsDataGridSource(elStructureList);

                elementList = dataSources["Elements"];

                offsitePanelHandler.FillGrid(dgElements, elementList);

                //DataGridAutoSize(dgElements);
            }
            else
            {
                var dataSource = offsitePanelHandler.GetRevitFamiliesList();

                this.comboBoxRevitFamilies.SelectedIndexChanged -= new EventHandler(comboBoxRevitFamilies_SelectedIndexChanged);

                offsitePanelHandler.FillComboRevitFamTypes(comboBoxRevitFamilies, dataSource, "Name");

                this.comboBoxRevitFamilies.SelectedIndexChanged += new EventHandler(comboBoxRevitFamilies_SelectedIndexChanged);

                comboBoxRevitFamilies.SelectedIndex = -1;

                //  populate filtering drowdown lists
                //var dataSource = offsitePanelHandler.GetListFamilyTypeSource(RevitFamTypes);
                //offsitePanelHandler.FillComboRevitFamTypes(comboBoxRevitFamilyTypes, dataSource, "FamilyTypeName");
            }

            NLogger.LogText("Exit ElementsForm_Load");
        }
Exemplo n.º 2
0
        private void dgInvRevMapping_SelectionChanged(object sender, EventArgs e)
        {
            NLogger.LogText("Entered dgInvRevMapping_SelectionChanged");

            var rowsCount            = dgInvRevMapping.Rows.GetRowCount(DataGridViewElementStates.Selected);
            var inventorTemplatePath = txtInventorTemplatesPath.Text;

            if (rowsCount > 0)
            {
                var invTemplateFileName = dgInvRevMapping.SelectedRows[0].Cells["Inventor Template"].Value.ToString();

                // Populate the Properties datagrid
                var dataSources = offsitePanelHandler.GetInvRevitParamsMappingDataGridSource(invTemplateFileName, inventorTemplatePath);

                var elementList = dataSources["ParamsMapping"];

                offsitePanelHandler.FillGrid(dgParamsMapping, elementList);

                //  Select the first row of the Param mapping grid by Default
                dgParamsMapping.ClearSelection();

                if (dgParamsMapping.Rows.Count > 0)
                {
                    dgParamsMapping.Rows[0].Selected = true;
                }

                var mappedParams = elementList.Where(l => !string.IsNullOrEmpty(l.RevitParamName)).Count();
                lblNumbOfMappedParams.Text = mappedParams.ToString();
                lblNumberOfParams.Text     = elementList.Count.ToString();
            }

            NLogger.LogText("Exit dgInvRevMapping_SelectionChanged");
        }
Exemplo n.º 3
0
        /// <summary>
        /// Based on mode, it reset the Revit property, or return the selected one from shown popup
        /// </summary>
        /// <param name="mode"></param>
        /// <param name="revitFamily"></param>
        /// <param name="currentRefParam"></param>
        /// <param name="RevitUsedParams"></param>
        /// <returns></returns>
        private string GetRevitFamilyParameter(RevitFamilyHandling mode, string revitFamily, string currentRefParam, IList <string> RevitUsedParams)
        {
            NLogger.LogText("Entered GetRevitFamilyParameter");

            string revitFamilyParam = "";

            switch (mode)
            {
            case RevitFamilyHandling.ResetRevitFamily:
                revitFamilyParam = "";
                break;

            case RevitFamilyHandling.SetRevitFamily:

                var revitFamiliesParamsSelectionPopup = new RevitFamiliesParametersSelectionPopup(revitFamily, runtimeElStructureList, RevitUsedParams);
                var result = revitFamiliesParamsSelectionPopup.ShowDialog();

                //  Update Mapping grids with data coming from popup or leave the original value if click on Cancel button
                if (result == DialogResult.OK)
                {
                    //  Update RevitInventorParameters mapping datagrid with Revit family Parameter selected in the popup
                    revitFamilyParam = revitFamiliesParamsSelectionPopup.SelectedRevitFamilyParam;
                }
                else
                {
                    revitFamilyParam = currentRefParam;
                }
                break;
            }

            NLogger.LogText("Exit GetRevitFamilyParameter");

            return(revitFamilyParam);
        }
Exemplo n.º 4
0
        //  Load list of Inventor Templates from user selected path, applying filter on files extension
        public List <FileInfo> GetInventorTemplates(string path)
        {
            NLogger.LogText("Entered GetInventorTemplates method with path {path}", path);

            List <FileInfo> inventorTemplates = null;
            List <string>   fileExtensions    = new List <string> {
                ".iam", ".ipt", ".zip"
            };

            try
            {
                var g = Directory.EnumerateFiles(path).Select(p => new FileInfo(p));

                NLogger.LogText("Retrieved Inventor files {InventorFiles}", g.ToList().Count.ToString());

                inventorTemplates = g.Where(j => fileExtensions.Contains(j.Extension)).ToList();

                NLogger.LogText("Filtered Inventor files {InventorFiles}", inventorTemplates.Count.ToString());

                NLogger.LogText("Exit GetInventorTemplates method");
            }
            catch (Exception ex)
            {
                NLogger.LogError($"Following error occurred in GetInventorTemplates: {ex}");
                throw new UIRelevantException(LanguageHandler.GetString("msgBox_BIM360NotSync"));
            }

            return(inventorTemplates);
        }
        //  Retrieve Revit family types in Active document
        public IList <Element> GetRevitFamilyTypesInActiveDocument(RevitFamily famType)
        {
            NLogger.LogText("Entered GetRevitFamiliesInActiveDocument");

            IList <Element> genModElements = null;

            try
            {
                Type RevitFamType = Type.GetType(famType.Type);

                var genModelTypeCollector = new FilteredElementCollector(doc);
                genModelTypeCollector.OfClass(RevitFamType);

                if (!string.IsNullOrEmpty(famType.Category))
                {
                    BuiltInCategory RevitFamilyCategory = (BuiltInCategory)Enum.Parse(typeof(BuiltInCategory), famType.Category, true);
                    genModelTypeCollector.OfCategory(RevitFamilyCategory);
                }
                genModElements = genModelTypeCollector.ToElements();
            }
            catch (Exception ex)
            {
                NLogger.LogError(ex);
                NLogger.LogText("Exit GetRevitFamiliesInActiveDocument with error");

                throw (ex);
            }

            NLogger.LogText($"Extracted {genModElements.Count()} Families from Revit document");

            NLogger.LogText("Exit GetRevitFamiliesInActiveDocument");

            return(genModElements);
        }
Exemplo n.º 6
0
        private void comboBoxRevitFamilies_SelectedIndexChanged(object sender, EventArgs e)
        {
            NLogger.LogText("Enter comboBoxRevitFamilies_SelectedIndexChanged");

            RevitFamily selectedFamily = (RevitFamily)comboBoxRevitFamilies.SelectedItem;

            if (selectedFamily != null)
            {
                //  Reset other elements depending from the selection
                offsitePanelHandler.FillGrid(dgElements, null);
                offsitePanelHandler.FillGrid(dgParamsMapping, null);
                offsitePanelHandler.FillGrid(dgInvRevMapping, null);
                txtInventorTemplatesPath.Text = "";
                offsitePanelHandler.ResetRevitInventorMappingInternalStructure();
                ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = false;

                //  Extract Revit family from revit document, based on selected xml configured element
                NLogger.LogText($"Revit family selected: {selectedFamily.Name}");

                RevitFamTypes = offsitePanelHandler.GetRevitFamilyTypesInActiveDocument(selectedFamily);

                NLogger.LogText($"Retrieved: {RevitFamTypes.Count()} family types");

                //  populate filtering drowdown lists
                var dataSource = offsitePanelHandler.GetListFamilyTypeSource(RevitFamTypes, selectedFamily);

                this.comboBoxRevitFamilyTypes.SelectedIndexChanged -= new EventHandler(comboBoxRevitFamilyTypes_SelectedIndexChanged);
                offsitePanelHandler.FillComboRevitFamTypes(comboBoxRevitFamilyTypes, dataSource, "FamilyTypeName");
                this.comboBoxRevitFamilyTypes.SelectedIndexChanged += new EventHandler(comboBoxRevitFamilyTypes_SelectedIndexChanged);
            }

            NLogger.LogText("Exit comboBoxRevitFamilies_SelectedIndexChanged");
        }
        //  Find a list of element with given class, family type and category (optional).
        public IList <Element> FindInstancesOfType(Type targetType, ElementId idType, Nullable <BuiltInCategory> targetCategory = null)
        {
            NLogger.LogText("Entered FindInstancesOfType");

            // narrow down to the elements of the given type and category

            var collector = new FilteredElementCollector(doc).OfClass(targetType);

            if (targetCategory.HasValue)
            {
                collector.OfCategory(targetCategory.Value);
            }

            // parse the collection for the given family type id using LINQ query here.
            var elems =
                from element in collector
                where element.get_Parameter(BuiltInParameter.SYMBOL_ID_PARAM).
                AsElementId().Equals(idType)
                select element;

            NLogger.LogText($"Found {elems.Count()} elements");
            NLogger.LogText("Exit FindInstancesOfType");

            // put the result as a list of element fo accessibility.
            return(elems.ToList());
        }
        //  Extract from returned json the subfolder info
        internal string SetFolderStructure(ForgeRestResponse ret, string parentId, string folderName)
        {
            NLogger.LogText("Entered SetFolderStructure");

            string  topFolderId = "";
            JObject res         = JObject.Parse(ret.ResponseContent);
            var     data        = res.SelectTokens("$.data").Children();

            foreach (var item in data)
            {
                var name = ((string)item.SelectToken("attributes.name"));

                if (name == folderName)
                {
                    topFolderId = (string)item.SelectToken("id");

                    //bIM360DocsStructure.Hub.ProjectList.First(o => o.Id == parentId).TopFolder = new Folder { Id = topFolderId, Name = name };

                    bIM360DocsStructure1.BIM360DataRows1.Add(new BIM360DocsRowStructure
                    {
                        ParentId = parentId,
                        Id       = topFolderId,
                        Name     = name,
                        Type     = BIM360Type.Folder
                    });
                }
            }

            NLogger.LogText("Exit SetFolderStructure");

            return(topFolderId);
        }
        //  Extract from returned json the project info
        internal string SetProjectStructure(ForgeRestResponse ret, string parentId)
        {
            NLogger.LogText("Entered SetProjectStructure");

            string  projectId = "";
            JObject res       = JObject.Parse(ret.ResponseContent);
            var     data      = res.SelectTokens("$.data").Children();

            foreach (var item in data)
            {
                var name = ((string)item.SelectToken("attributes.name"));

                if (name == ConfigUtilities.GetProject())
                {
                    projectId = (string)item.SelectToken("id");

                    //bIM360DocsStructure.Hub.ProjectList = new List<Project> { new Project { Id = projectId, Name = name } };

                    bIM360DocsStructure1.BIM360DataRows1.Add(new BIM360DocsRowStructure
                    {
                        ParentId = parentId,
                        Id       = projectId,
                        Name     = name,
                        Type     = BIM360Type.Project
                    });
                }
            }

            NLogger.LogText("Exit SetProjectStructure");

            return(projectId);
        }
Exemplo n.º 10
0
        //  Handles the UI logic of the row selected + button click on the InventorRevit mapping grid
        private void HandleRowSelection(RevitFamilyHandling mode)
        {
            NLogger.LogText("Entered HandleRowSelection");

            var    invTemplRowCount    = dgInvRevMapping.Rows.GetRowCount(DataGridViewElementStates.Selected);
            string invTemplateFileName = "";
            int    selectedRow         = -1;

            if (invTemplRowCount == 1)
            {
                invTemplateFileName = dgInvRevMapping.SelectedRows[0].Cells["Inventor Template"].Value.ToString();
                selectedRow         = dgInvRevMapping.SelectedRows[0].Index;
            }
            else
            {
                //MessageBox.Show("You have to select one Inventor Template");
                MessageBox.Show(LanguageHandler.GetString("msgBox_SelInvTemplate"));

                return;
            }

            //  If zip file, cannot associate parameters
            var isZipFile = System.IO.Path.GetExtension(invTemplateFileName) == ".zip";

            if (isZipFile)
            {
                //MessageBox.Show("Cannot map parameters for zip file");
                MessageBox.Show(LanguageHandler.GetString("msgBox_ZipFileParamMap"));
                return;
            }

            //  Set or reset Revit Family
            var selRevFamily = GetRevitFamily(mode);

            NLogger.LogText($"Selected Revit Family {selRevFamily}");

            if (string.IsNullOrEmpty(selRevFamily))
            {
                return;
            }

            var dataSource = offsitePanelHandler.RefreshInvRevitMappingDataGridSource(selRevFamily, invTemplateFileName);

            var elementList = dataSource["InvRevMapping"];

            NLogger.LogText("Fill InventorRevitMapping grid");
            offsitePanelHandler.FillGrid(dgInvRevMapping, elementList);

            NLogger.LogText("Set selected rows on  InventorRevitMapping and ParametersMapping grids");
            dgInvRevMapping.ClearSelection();
            dgInvRevMapping.CurrentCell                = dgInvRevMapping.Rows[selectedRow].Cells["Inventor Template"];
            dgInvRevMapping.CurrentRow.Selected        = false;
            dgInvRevMapping.Rows[selectedRow].Selected = true;

            dgParamsMapping.ClearSelection();
            dgParamsMapping.Rows[0].Selected = true;

            NLogger.LogText("Exit HandleRowSelection");
        }
Exemplo n.º 11
0
        private void btnSelectFromScope_Click(object sender, EventArgs e)
        {
            NLogger.LogText("Entered btnSelectFromScope_Click");

            HandleRowSelection(RevitFamilyHandling.SetRevitFamily);

            NLogger.LogText("Exit btnSelectFromScope_Click");
        }
Exemplo n.º 12
0
        private void btnRevitParametersSel_Click(object sender, EventArgs e)
        {
            NLogger.LogText("Entered btnRevitParametersSel_Click");

            HandleRowSelectionParams(RevitFamilyHandling.SetRevitFamily);

            NLogger.LogText("Exit btnRevitParametersSel_Click");
        }
Exemplo n.º 13
0
        //  Clear Inventor - Revit parameters mapping for a selected row
        private void btnClearSelectedParamMapping_Click(object sender, EventArgs e)
        {
            NLogger.LogText("Enter btnClearSelectedParamMapping_Click");

            HandleRowSelectionParams(RevitFamilyHandling.ResetRevitFamily);

            NLogger.LogText("Exit btnClearSelectedParamMapping_Click");
        }
Exemplo n.º 14
0
        public static void HandleErrorInForgeResponse(string messageParam, ForgeRestResponse res)
        {
            NLogger.LogText($"Exit {messageParam} with Error");
            var ex = new Exception($"Following error occurred: Response Content: {res.ResponseContent}; Response Error: {res.RetResponse.ErrorMessage}");

            NLogger.LogError(ex);

            throw ex;
        }
        public ForgeAuthenticator(string url, string key, string secret, string authScope)
        {
            NLogger.LogText("ForgeAuthenticator constructor");

            Url       = url;
            Key       = key;
            Secret    = secret;
            AuthScope = authScope;
        }
Exemplo n.º 16
0
        //  Load or attach to Inventor Process
        public /*async Task*/ void StartInventorApplication()
        {
            NLogger.LogText("Entered StartInventorApplication");

            try
            {
                try
                {
                    NLogger.LogText("StartInventorApplication - Try to attach to an active Inventor process");

                    // Get active inventor object
                    //await Task.Run(() =>
                    //{
                    m_InventorApplication = Marshal.GetActiveObject("Inventor.Application") as Inventor.Application;
                    //});

                    NLogger.LogText("StartInventorApplication - Attached sucessfully to an active Inventor process");
                }
                catch (COMException ex)
                {
                    NLogger.LogText("StartInventorApplication - Error in attaching to the Inventor process");

                    NLogger.LogError(ex);

                    try
                    {
                        NLogger.LogText("StartInventorApplication - Try to activate an Inventor process");

                        //  If not, start a new instance
                        Type invAppType = Type.GetTypeFromProgID("Inventor.Application");

                        //await Task.Run(() =>
                        //{
                        m_InventorApplication         = (Application)Activator.CreateInstance(invAppType);
                        m_InventorApplication.Visible = false;
                        started = true;
                        //});

                        NLogger.LogText("StartInventorApplication - Inventor process activated sucessfully");
                    }
                    catch (Exception ex2)
                    {
                        NLogger.LogText("StartInventorApplication - Error in activating the Inventor process");

                        NLogger.LogError(ex2);
                    }
                }
            }
            catch (Exception e)
            {
                NLogger.LogError(e);
            }
        }
Exemplo n.º 17
0
        public void CloseInventorProcess()
        {
            NLogger.LogText("Entered CloseInventorProcess");

            if (started && m_InventorApplication != null)
            {
                m_InventorApplication.Quit();

                NLogger.LogText("Inventor Process shut down");
            }

            m_InventorApplication = null;

            NLogger.LogText("Exit CloseInventorProcess");
        }
Exemplo n.º 18
0
        //  Initialize the form and its elements
        public OffsiteForm(IList <ADSK.Element> elementStructureList, UIApplication uiapplication, RevitElementSelectionMode RevitselMode)
        {
            NLogger.LogText("Entered Offsite Form constructor");

            InitializeComponent();

            //  Initialize Offsite Panel BL handler.
            //  Here inventor process is started / attached to
            offsitePanelHandler = new OffsitePanelHandler(uiapplication);
            this.Size           = new Size(1380, 800);

            selMode = RevitselMode;
            NLogger.LogText($"Selection mode: {selMode}");

            //  Check if selection mode is from Viewer or from Revit Families filter
            if (selMode == RevitElementSelectionMode.FromView)
            {
                var tempelStructureList = offsitePanelHandler.ProcessElements(elementStructureList);
                elStructureList              = offsitePanelHandler.FilterElements(tempelStructureList);
                runtimeElStructureList       = elStructureList;
                grBoxRevFamTypes.Visible     = false;
                grBoxRevFamilies.Visible     = false;
                btnSelectAllElements.Visible = false;
                btnUnselectAll.Visible       = false;
            }
            else
            {
                grBoxRevFamTypes.Visible = true;
                grBoxRevFamilies.Visible = true;
            }

            //  Set local BIM 360 folder as root path
            rootPath = Utility.GetInventorTemplateFolder(); // Utilities.GetBIM360RootPath();
            folderBrowserDialogInventorTemplates.SelectedPath = rootPath;

            //  Initialize data grids & combobox
            InitializeSOWGrid(dgElements);
            InitializeMappingGrid(dgInvRevMapping);
            InitializeParametersMappingGrid(dgParamsMapping);
            InitializeLanguage();

            ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = false;
            //InitializeCombobox(comboBoxRevitFamilies);
            //InitializeCombobox(comboBoxRevitFamilyTypes);

            NLogger.LogText("Exit Offsite Form constructor");
        }
        //  Extract all relevant information from selected elements and create an internal structure for passing parameters around
        public List <ElementStructure> ProcessElements(IList <Element> RevitElements)
        {
            NLogger.LogText("Entered ProcessElements");

            elementStructureList.Clear();

            //  Extract information from received Revit elements
            foreach (var elem in RevitElements)
            {
                var elementOrderedParamsList     = new List <ElementOrderedParameter>();
                var elementTypeOrderedParamsList = new List <ElementOrderedParameter>();
                var elementTypeSingleParamsList  = new List <ElementOrderedParameter>();

                elementOrderedParamsList = GetParameters(elem);

                //  Extract the corresponding ElementType
                var         elemTypeId = elem.GetTypeId();
                ElementType elemType   = (ElementType)doc.GetElement(elemTypeId);

                if (elemType == null)
                {
                    throw new UIRelevantException(LanguageHandler.GetString("msgBox_SelElNoRevFam"));
                }

                elementTypeOrderedParamsList = GetParameters(elemType);
                elementTypeSingleParamsList.Add(new ElementOrderedParameter
                {
                    ParameterName  = BuiltInParameter.SYMBOL_FAMILY_AND_TYPE_NAMES_PARAM.ToString(),
                    ParameterValue = GetSingleParameter(elemType, BuiltInParameter.SYMBOL_FAMILY_AND_TYPE_NAMES_PARAM)
                });

                elementStructureList.Add(new ElementStructure {
                    Element     = elem,
                    ElementType = elemType,
                    ElementOrderedParameters     = elementOrderedParamsList,
                    ElementTypeOrderedParameters = elementTypeOrderedParamsList,
                    ElementTypeSingleParameters  = elementTypeSingleParamsList
                });
            }

            NLogger.LogText("Exit ProcessElements");

            return(elementStructureList);
        }
        //  Extract single parameter from element
        private string GetSingleParameter(Element el, BuiltInParameter parameter)
        {
            NLogger.LogText("Entered GetSingleParameter");

            string parVal = "";

            if (el != null)
            {
                var par = el.get_Parameter(parameter);
                parVal = Utility.ParameterToString(doc, par);
            }
            else
            {
                NLogger.LogText("Received Revit element family is null");
            }

            NLogger.LogText("Exit GetSingleParameter");

            return(parVal);
        }
        /// <summary>
        /// Prepares Request and perform Async call to Forge
        /// </summary>
        /// <param name="path"></param>
        /// <param name="payload"></param>
        /// <param name="application"></param>
        /// <param name="method"></param>
        /// <returns></returns>
        public async Task <ForgeRestResponse> RequestAsync(string path, string payload, string application, Method method)
        {
            NLogger.LogText($"Entered RequestAsync with url: {Client.BaseUrl}{path}, method: {method.ToString()}, application: {application}");

            if (!string.IsNullOrEmpty(payload))
            {
                NLogger.LogText($"Entered RequestAsync with payload {payload}");
            }

            RestRequest request = new RestRequest(path, method);

            request.AddParameter(application, payload, ParameterType.RequestBody);

            NLogger.LogText("Execute Async HTTP call");
            IRestResponse response = await Client.ExecuteAsync(request);

            NLogger.LogText("Exit RequestAsync");

            return(new ForgeRestResponse(response));
        }
Exemplo n.º 22
0
        //  Fill logs textbox with messages coming from background
        private void DaEvHandler_DACurrentStepHandler(object sender, string e)
        {
            NLogger.LogText("Entered DaEvHandler_DACurrentStepHandler");

            //  This construct is needed in order to access a Win Form control from a thread different from the UI thread
            BeginInvoke(new Action(() =>
            {
                if (!string.IsNullOrWhiteSpace(richTextBoxLogs.Text))
                {
                    richTextBoxLogs.AppendText("\r\n" + e);
                }
                else
                {
                    richTextBoxLogs.AppendText(e);
                }
                richTextBoxLogs.ScrollToCaret();
            }));

            NLogger.LogText("Exit DaEvHandler_DACurrentStepHandler");
        }
Exemplo n.º 23
0
        private void btnProcessElements_Click(object sender, EventArgs e)
        {
            NLogger.LogText("Enter btnProcessElements_Click");

            var rowsCount = dgElements.Rows.GetRowCount(DataGridViewElementStates.Selected);

            //  depending on Selection mode and if there are Revit selected elements in the grid, enable / disable tab
            ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = false;

            if (selMode == RevitElementSelectionMode.FromFilters)
            {
                if (rowsCount > 0)
                {
                    //  Retrieve from internal structure list only selected elements
                    ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = true;
                    tabControl1.SelectedTab = tabControl1.TabPages[tabName];

                    IList <string> selectedElementsIds = new List <string>();

                    foreach (DataGridViewRow row in dgElements.SelectedRows)
                    {
                        selectedElementsIds.Add(row.Cells[0].Value.ToString());
                    }

                    runtimeElStructureList = elStructureList.Where(l => selectedElementsIds.Contains(l.Element.Id.ToString())).ToList();
                }
                else
                {
                    //MessageBox.Show("At least one Revit Element must be selected");
                    MessageBox.Show(LanguageHandler.GetString("msgBox_SelRevElement"));
                }
            }

            if (selMode == RevitElementSelectionMode.FromView)
            {
                ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = true;
                tabControl1.SelectedTab = tabControl1.TabPages[tabName];
            }

            NLogger.LogText("Exit btnProcessElements_Click");
        }
        //  extract parameters from element
        private List <ElementOrderedParameter> GetParameters(Element el)
        {
            NLogger.LogText("Entered GetParameters");

            var elementParams = new List <ElementOrderedParameter>();

            if (el != null)
            {
                var elParams = el.GetOrderedParameters();

                //  Extract all parameters for each element
                foreach (Parameter param in elParams)
                {
                    string name          = param.Definition.Name;
                    bool   transferParam = false;

                    //  Flag the parameter to be transferred to Inventor or not, based on a filtering file

                    //  TODO: MOVE FILTER OUTSIDE

                    //if (revitFilterHandler.checkValue(name))
                    //{
                    //    transferParam = true;
                    //}

                    var val = Utility.ParameterToString(doc, param);

                    elementParams.Add(new ElementOrderedParameter {
                        ParameterId = param.Id.IntegerValue, ParameterName = name, ParameterValue = val, TransferParam = transferParam
                    });
                }
            }
            else
            {
                NLogger.LogText("Received Revit element or its corresponding family is null");
            }

            NLogger.LogText("Exit GetParameters");

            return(elementParams);
        }
Exemplo n.º 25
0
        //  Load the list of all Inventor files found at specified location and load them into grid
        private void btnBrowse_Click(object sender, EventArgs e)
        {
            NLogger.LogText("Entered btnBrowse_Click");

            try
            {
                DialogResult result = folderBrowserDialogInventorTemplates.ShowDialog();

                if (result == DialogResult.OK)
                {
                    //  Handle selected path
                    invTemplFolder = folderBrowserDialogInventorTemplates.SelectedPath;
                    //string selectedPath = rootPath ;
                    txtInventorTemplatesPath.Text = invTemplFolder;

                    //  handle internal structure creation
                    var dataSource  = offsitePanelHandler.GetInvRevitMappingDataGridSource(invTemplFolder);
                    var elementList = dataSource["InvRevMapping"];

                    NLogger.LogText("Fill InventorRevitMapping grid");
                    offsitePanelHandler.FillGrid(dgInvRevMapping, elementList);

                    //  Select first row of inventor - Revit mapping grid by default
                    if (dgInvRevMapping.Rows.Count > 0)
                    {
                        dgInvRevMapping.ClearSelection();
                        dgInvRevMapping.Rows[0].Selected = true;
                    }
                }

                if (result == DialogResult.Cancel)
                {
                }
            }
            catch (UIRelevantException ex)
            {
                MessageBox.Show(ex.Message);
            }

            NLogger.LogText("Exit btnBrowse_Click");
        }
        /// <summary>
        /// Prepares Request and perform Async call to Forge
        /// </summary>
        /// <param name="path"></param>
        /// <param name="payload"></param>
        /// <param name="method"></param>
        /// <returns></returns>
        public async Task <ForgeRestResponse> RequestAsync(string path, string payload, Method method)
        {
            NLogger.LogText($"Entered RequestAsync with url {Client.BaseUrl}{path}, method {method.ToString()}");

            if (!string.IsNullOrEmpty(payload))
            {
                var loggedPayload = Utility.HideTokenInJson(payload);
                NLogger.LogText($"Entered RequestAsync with payload {loggedPayload}");
            }

            RestRequest request = new RestRequest(path, method);

            request.AddParameter("application/json", payload, ParameterType.RequestBody);

            NLogger.LogText("Execute Async HTTP call");
            IRestResponse response = await Client.ExecuteAsync(request);

            NLogger.LogText("Exit RequestAsync");

            return(new ForgeRestResponse(response));
        }
        protected ForgeClientHandler(string baseURL, string clientId, string clientSecret, string authScope)
        {
            NLogger.LogText("Entered ForgeClientHandler");

            Uri    baseUri = new Uri(baseURL);
            string domain  = baseUri.GetLeftPart(UriPartial.Authority);
            bool   isLocal = baseUri.Host.Equals("localhost", StringComparison.OrdinalIgnoreCase);

            Client = new RestClient(baseURL)
            {
                Authenticator = isLocal ? null : new ForgeAuthenticator(domain, clientId, clientSecret, authScope)
            };

            //NLogger.LogText($"Set HTTP CLient timeout: {ConfigUtilities.GetAsyncHTTPCallWaitTime()} milliseconds");
            NLogger.LogText($"Set HTTP CLient domain: {domain}");
            NLogger.LogText($"Set HTTP CLient isLocal: {isLocal}");

            //Client.Timeout = ConfigUtilities.GetAsyncHTTPCallWaitTime();

            NLogger.LogText("Exit ForgeClientHandler");
        }
Exemplo n.º 28
0
        private async void btnExportPropVals_Click(object sender, EventArgs e)
        {
            NLogger.LogText("Entered btnExportPropVals_Click");

            //  Check if at least one parameters mapping has been done
            var checkConsistency = offsitePanelHandler.CheckMappingConsistency();

            if (!checkConsistency)
            {
                //MessageBox.Show("There are some missing mappings");
                MessageBox.Show(LanguageHandler.GetString("msgBox_MissingMapp"));
                return;
            }

            //  Disable the tab during DA workflow execution
            ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled  = false;
            ((System.Windows.Forms.Control)tabControl1.TabPages["TabSOW"]).Enabled = false;

            //  Handle event and build json from Revit elements + Revit - Inventor mapping
            var daEvHandler = offsitePanelHandler.DaEventHandler;

            daEvHandler.DACurrentStepHandler += DaEvHandler_DACurrentStepHandler;
            var jsonParams = offsitePanelHandler.GetRevitPropertiesValues(runtimeElStructureList);

            //  Call Design Automation Forge APIs via HTTP calls to trigger Inventor Cloud execution engine
            /*var ret = */ await offsitePanelHandler.RunDesignAutomation(jsonParams, invTemplFolder);

            //ret.Wait();

            daEvHandler.DACurrentStepHandler -= DaEvHandler_DACurrentStepHandler;

            //  Enable the tabs after DA workflow execution
            BeginInvoke(new Action(() =>
            {
                ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled  = true;
                ((System.Windows.Forms.Control)tabControl1.TabPages["TabSOW"]).Enabled = true;
            }));

            NLogger.LogText("Exit btnExportPropVals_Click");
        }
        //  Extract from returned json the hub info
        internal string SetHubStructure(ForgeRestResponse ret)
        {
            NLogger.LogText("Entered SetHubStructure");

            string hubId         = "";
            string configuredHub = ConfigUtilities.GetHub();

            NLogger.LogText("Parse ResponseContent");
            JObject res  = JObject.Parse(ret.ResponseContent);
            var     data = res.SelectTokens("$.data").Children();

            NLogger.LogText("Build bIM360DocsStructure1");
            foreach (var item in data)
            {
                var name = ((string)item.SelectToken("attributes.name")) /*.Replace("\u200B", "")*/;

                if (name == configuredHub /*.Replace("\u200B", "")*/)
                {
                    hubId = (string)item.SelectToken("id");

                    //bIM360DocsStructure.Hub = new Hub { Id = hubId, Name = name};
                    bIM360DocsStructure1.BIM360DataRows1.Add(new BIM360DocsRowStructure
                    {
                        Id   = hubId,
                        Name = name,
                        Type = BIM360Type.Hub
                    });
                }
            }

            if (string.IsNullOrEmpty(hubId))
            {
                throw new Exception($"The configured Hub '{configuredHub}' is not in the returned list");
            }

            NLogger.LogText("Exit SetHubStructure");

            return(hubId);
        }
Exemplo n.º 30
0
        private void comboBoxRevitFamilyTypes_SelectedIndexChanged(object sender, EventArgs e)
        {
            NLogger.LogText("Enter comboBoxRevitFamilies_SelectedIndexChanged");

            ComboBoxRevitFamilyTypesSourceData selectedFamilyType = (ComboBoxRevitFamilyTypesSourceData)comboBoxRevitFamilyTypes.SelectedItem;

            if (selectedFamilyType != null)
            {
                offsitePanelHandler.FillGrid(dgElements, null);
                offsitePanelHandler.FillGrid(dgParamsMapping, null);
                offsitePanelHandler.FillGrid(dgInvRevMapping, null);
                txtInventorTemplatesPath.Text = "";
                offsitePanelHandler.ResetRevitInventorMappingInternalStructure();
                ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = false;

                //  Extract Revit family from revit document, based on selected xml configured element
                NLogger.LogText($"Revit family type selected: {selectedFamilyType.FamilyTypeName}");

                Type famType = Type.GetType(selectedFamilyType.FamilyTypeInstance); //Type.GetType("Autodesk.Revit.DB.FamilyInstance,RevitAPI");

                var filteredElements = offsitePanelHandler.FindInstancesOfType(famType, selectedFamilyType.IdType, selectedFamilyType.TargetCategory);

                var tempelStructureList = offsitePanelHandler.ProcessElements(filteredElements);
                elStructureList = offsitePanelHandler.FilterElements(tempelStructureList);

                NLogger.LogText($"Retrieved: {elStructureList.Count()} Revit elements");

                // Populate the Element datagrid
                var dataSources = offsitePanelHandler.GetElementsDataGridSource(elStructureList);

                elementList = dataSources["Elements"];

                offsitePanelHandler.FillGrid(dgElements, elementList);
            }

            NLogger.LogText("Exit comboBoxRevitFamilies_SelectedIndexChanged");
        }