Esempio n. 1
0
        private static List <ClashResultGroup> GroupByGridIntersection(List <ClashResult> results)
        {
            //TODO Check if the grid system exist
            GridSystem gridSystem = Application.MainDocument.Grids.ActiveSystem;
            Dictionary <GridIntersection, ClashResultGroup> groups = new Dictionary <GridIntersection, ClashResultGroup>();
            ClashResultGroup currentGroup;

            foreach (ClashResult result in results)
            {
                //Cannot add original result to new clash test, so I create a copy
                ClashResult      copiedResult        = (ClashResult)result.CreateCopy();
                GridIntersection closestIntersection = gridSystem.ClosestIntersection(copiedResult.Center);

                if (!groups.TryGetValue(closestIntersection, out currentGroup))
                {
                    currentGroup             = new ClashResultGroup();
                    currentGroup.DisplayName = closestIntersection.DisplayName;
                    groups.Add(closestIntersection, currentGroup);
                }
                currentGroup.Children.Add(copiedResult);
            }

            IOrderedEnumerable <KeyValuePair <GridIntersection, ClashResultGroup> > list = groups.OrderBy(key => key.Key.Position.X).OrderBy(key => key.Key.Level.Elevation);

            groups = list.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);
            return(groups.Values.ToList());
        }
Esempio n. 2
0
        public override int Execute(params string[] parameters)
        {
            string grName = "";
            string grGuid = "";
            //string grStatus = "";

            string        connstring = Properties.Settings.Default.ConnString;
            SqlConnection conn       = new SqlConnection(connstring);


            foreach (ClashTest test in oDCT.Tests)
            {
                foreach (SavedItem issue in test.Children)
                {
                    ClashResultGroup group = issue as ClashResultGroup;
                    if (null != group)
                    {
                        foreach (SavedItem issue1 in group.Children)
                        {
                            ClashResult rt1 = issue as ClashResult;
                            if (null != rt1)
                            {
                                writeClashResult(test, rt1, conn, grName, grGuid);
                            }
                        }
                    }
                }
            }
            MessageBox.Show("Clash Result Status Updated", "Execute");
            return(0);
        }
Esempio n. 3
0
        private static List <ClashResultGroup> GroupByElementOfAGivenSelection(List <ClashResult> results, GroupingMode mode)
        {
            Dictionary <ModelItem, ClashResultGroup> groups = new Dictionary <ModelItem, ClashResultGroup>();
            ClashResultGroup currentGroup;

            foreach (ClashResult result in results)
            {
                //Cannot add original result to new clash test, so I create a copy
                ClashResult copiedResult = (ClashResult)result.CreateCopy();
                ModelItem   modelItem    = null;

                if (mode == GroupingMode.BySelectionA)
                {
                    modelItem = GetSignificantAncestorOrSelf(copiedResult.CompositeItem1);
                }
                else if (mode == GroupingMode.BySelectionB)
                {
                    modelItem = GetSignificantAncestorOrSelf(copiedResult.CompositeItem2);
                }

                if (!groups.TryGetValue(modelItem, out currentGroup))
                {
                    currentGroup             = new ClashResultGroup();
                    currentGroup.DisplayName = modelItem.DisplayName;
                    groups.Add(modelItem, currentGroup);
                }
                currentGroup.Children.Add(copiedResult);
            }

            return(groups.Values.ToList());
        }
        private static List <ClashResultGroup> GroupByGridIntersection(List <ClashResult> results, string initialName)
        {
            //I already check if it exists
            GridSystem gridSystem = Application.MainDocument.Grids.ActiveSystem;
            Dictionary <GridIntersection, ClashResultGroup> groups = new Dictionary <GridIntersection, ClashResultGroup>();
            ClashResultGroup currentGroup;

            //Create a group for the null GridIntersection
            ClashResultGroup nullGridGroup = new ClashResultGroup();

            nullGridGroup.DisplayName = initialName + "No Grid intersection";

            foreach (ClashResult result in results)
            {
                //Cannot add original result to new clash test, so I create a copy
                ClashResult copiedResult = (ClashResult)result.CreateCopy();

                if (gridSystem.ClosestIntersection(copiedResult.Center) != null)
                {
                    GridIntersection closestGridIntersection = gridSystem.ClosestIntersection(copiedResult.Center);

                    if (!groups.TryGetValue(closestGridIntersection, out currentGroup))
                    {
                        currentGroup = new ClashResultGroup();
                        string displayName = closestGridIntersection.DisplayName;
                        if (string.IsNullOrEmpty(displayName))
                        {
                            displayName = "Unnamed Grid Intersection";
                        }
                        currentGroup.DisplayName = initialName + displayName;
                        groups.Add(closestGridIntersection, currentGroup);
                    }
                    currentGroup.Children.Add(copiedResult);
                }
                else
                {
                    nullGridGroup.Children.Add(copiedResult);
                }
            }

            IOrderedEnumerable <KeyValuePair <GridIntersection, ClashResultGroup> > list = groups.OrderBy(key => key.Key.Position.X).OrderBy(key => key.Key.Level.Elevation);

            groups = list.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);

            List <ClashResultGroup> groupsByGridIntersection = groups.Values.ToList();

            if (nullGridGroup.Children.Count != 0)
            {
                groupsByGridIntersection.Add(nullGridGroup);
            }

            return(groupsByGridIntersection);
        }
        private static List <ClashResult> RemoveOneClashGroup(ref List <ClashResultGroup> clashResultGroups)
        {
            List <ClashResult>      ungroupedClashResults      = new List <ClashResult>();
            List <ClashResultGroup> temporaryClashResultGroups = new List <ClashResultGroup>();

            temporaryClashResultGroups.AddRange(clashResultGroups);

            foreach (ClashResultGroup group in temporaryClashResultGroups)
            {
                if (group.Children.Count == 1)
                {
                    ClashResult result = (ClashResult)group.Children.FirstOrDefault();
                    //result.DisplayName = group.DisplayName;
                    ungroupedClashResults.Add(result);
                    clashResultGroups.Remove(group);
                }
            }

            return(ungroupedClashResults);
        }
        private static List <ClashResultGroup> GroupByProperties(List <ClashResult> results, GroupingMode mode, string initialName)
        {
            Dictionary <string, ClashResultGroup> groups = new Dictionary <string, ClashResultGroup>();
            ClashResultGroup currentGroup;

            foreach (ClashResult result in results)
            {
                //Cannot add original result to new clash test, so I create a copy
                ClashResult copiedResult  = (ClashResult)result.CreateCopy();
                string      clashProperty = null;

                if (mode == GroupingMode.ApprovedBy)
                {
                    clashProperty = copiedResult.ApprovedBy;
                }
                else if (mode == GroupingMode.AssignedTo)
                {
                    clashProperty = copiedResult.AssignedTo;
                }
                else if (mode == GroupingMode.Status)
                {
                    clashProperty = copiedResult.Status.ToString();
                }

                if (string.IsNullOrEmpty(clashProperty))
                {
                    clashProperty = "Unspecified";
                }

                if (!groups.TryGetValue(clashProperty, out currentGroup))
                {
                    currentGroup             = new ClashResultGroup();
                    currentGroup.DisplayName = initialName + clashProperty;
                    groups.Add(clashProperty, currentGroup);
                }
                currentGroup.Children.Add(copiedResult);
            }

            return(groups.Values.ToList());
        }
Esempio n. 7
0
        private void writeClashResult(ClashTest test, ClashResult rt, SqlConnection conn, string grName, string grGuid)
        {
            //SqlCommand cmdApproveClash = new SqlCommand("dbo.selectApproved", conn);
            //cmdApproveClash.CommandType = CommandType.StoredProcedure;

            //cmdApproveClash.Parameters.Add("@clashGuid", SqlDbType.NVarChar, 50).Value = rt1.Guid.ToString();
            //cmdApproveClash.Parameters.Add("@clashStatus", SqlDbType.NVarChar, 50);

            string     rtGuid    = rt.Guid.ToString();
            string     sqlQuery  = $"SELECT ClashGuid, ClashStatus, ClashApprovedBy, ClashApprovedTime FROM tblClashResult WHERE ClashGuid={rtGuid}";
            SqlCommand myCommand = new SqlCommand(sqlQuery, conn);

            try
            {
                conn.Open();
                // Obtain a data reader ExecuteReader().
                using (SqlDataReader myDataReader = myCommand.ExecuteReader())
                {
                    while (myDataReader.Read())
                    {
                        if (myDataReader["ClashStatus"].ToString() == "Approved")
                        {
                            string rtApprovedBy = $"{myDataReader["ClashApprovedBy"]}";
                            oDCT.TestsEditResultStatus(rt, ClashResultStatus.Approved);
                            oDCT.TestsEditResultApprovedBy(rt, rtApprovedBy);
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                MessageBox.Show(e.Message.ToString(), "Error Message");
            }
            finally
            {
                conn.Close();
            }
        }
Esempio n. 8
0
        private void writeClashResult(ClashResult rt, SqlCommand cmdClashData)
        {
            cmdClashData.Parameters.Add(new SqlParameter("@clashGuid", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@clashName", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@clashTime", SqlDbType.SmallDateTime));
            cmdClashData.Parameters.Add(new SqlParameter("@clashStatus", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@clashApprovedBy", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@clashApprovedOn", SqlDbType.SmallDateTime));

            cmdClashData.Parameters["@clashGuid"].Value = rt.Guid.ToString();
            cmdClashData.Parameters["@clashName"].Value = rt.DisplayName;

            if (rt.CreatedTime != null)
            {
                cmdClashData.Parameters["@clashTime"].Value = rt.CreatedTime.Value.ToShortDateString();
            }

            cmdClashData.Parameters["@clashStatus"].Value     = rt.Status.ToString();
            cmdClashData.Parameters["@clashApprovedBy"].Value = rt.ApprovedBy;
            cmdClashData.Parameters["@clashApprovedOn"].Value = rt.ApprovedTime.Value.ToShortTimeString();

            cmdClashData.ExecuteNonQuery();
        }
        private static void CreateSubGroups(ref List <ClashResultGroup> clashResultGroups, GroupingMode mode)
        {
            List <ClashResultGroup> clashResultSubGroups = new List <ClashResultGroup>();

            foreach (ClashResultGroup group in clashResultGroups)
            {
                List <ClashResult> clashResults = new List <ClashResult>();

                foreach (SavedItem item in group.Children)
                {
                    ClashResult clashResult = item as ClashResult;
                    if (clashResult != null)
                    {
                        clashResults.Add(clashResult);
                    }
                }

                List <ClashResultGroup> clashResultTempSubGroups = new List <ClashResultGroup>();
                CreateGroup(ref clashResultTempSubGroups, mode, clashResults, group.DisplayName + "_");
                clashResultSubGroups.AddRange(clashResultTempSubGroups);
            }

            clashResultGroups = clashResultSubGroups;
        }
Esempio n. 10
0
        private static List <ClashResultGroup> GroupByElementOfAGivenSelection(List <ClashResult> results, GroupingMode mode, string initialName)
        {
            Dictionary <ModelItem, ClashResultGroup> groups = new Dictionary <ModelItem, ClashResultGroup>();
            ClashResultGroup        currentGroup;
            List <ClashResultGroup> emptyClashResultGroups = new List <ClashResultGroup>();

            foreach (ClashResult result in results)
            {
                //Cannot add original result to new clash test, so I create a copy
                ClashResult copiedResult = (ClashResult)result.CreateCopy();
                ModelItem   modelItem    = null;

                if (mode == GroupingMode.SelectionA)
                {
                    if (copiedResult.CompositeItem1 != null)
                    {
                        modelItem = GetSignificantAncestorOrSelf(copiedResult.CompositeItem1);
                    }
                    else if (copiedResult.CompositeItem2 != null)
                    {
                        modelItem = GetSignificantAncestorOrSelf(copiedResult.CompositeItem2);
                    }
                }
                else if (mode == GroupingMode.SelectionB)
                {
                    if (copiedResult.CompositeItem2 != null)
                    {
                        modelItem = GetSignificantAncestorOrSelf(copiedResult.CompositeItem2);
                    }
                    else if (copiedResult.CompositeItem1 != null)
                    {
                        modelItem = GetSignificantAncestorOrSelf(copiedResult.CompositeItem1);
                    }
                }

                string displayName = "Empty clash";
                if (modelItem != null)
                {
                    displayName = modelItem.DisplayName;
                    //Create a group
                    if (!groups.TryGetValue(modelItem, out currentGroup))
                    {
                        currentGroup = new ClashResultGroup();
                        if (string.IsNullOrEmpty(displayName))
                        {
                            displayName = modelItem.Parent.DisplayName;
                        }
                        if (string.IsNullOrEmpty(displayName))
                        {
                            displayName = "Unnamed Parent";
                        }
                        currentGroup.DisplayName = initialName + displayName;
                        groups.Add(modelItem, currentGroup);
                    }

                    //Add to the group
                    currentGroup.Children.Add(copiedResult);
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("test");
                    ClashResultGroup oneClashResultGroup = new ClashResultGroup();
                    oneClashResultGroup.DisplayName = "Empty clash";
                    oneClashResultGroup.Children.Add(copiedResult);
                    emptyClashResultGroups.Add(oneClashResultGroup);
                }
            }

            List <ClashResultGroup> allGroups = groups.Values.ToList();

            allGroups.AddRange(emptyClashResultGroups);
            return(allGroups);
        }
Esempio n. 11
0
        private void writeClashResult(ClashTest test, ClashResult rt, StreamWriter sw, SqlConnection conn, string gName, string gGuid, string gStatus)
        {
            //if (rt.Status.ToString() == "Approved")
            //{
            sw.WriteLine("Clash Test: " + test.DisplayName);
            sw.WriteLine("  clash Name: " + rt.DisplayName);
            sw.WriteLine("  clash Guid: " + rt.Guid.ToString());

            SqlCommand cmdClashData = new SqlCommand("dbo.Procedure", conn);

            cmdClashData.CommandType = CommandType.StoredProcedure;

            cmdClashData.Parameters.Add("@testName", SqlDbType.NVarChar, 100).Value = test.DisplayName;
            cmdClashData.Parameters.Add("@testGuid", SqlDbType.NVarChar, 50).Value  = test.Guid.ToString();

            if (test.LastRun != null)
            {
                cmdClashData.Parameters.Add("@testLastRunDate", SqlDbType.Date).Value = test.LastRun.Value.ToShortDateString();
                cmdClashData.Parameters.Add("@testLastRunTime", SqlDbType.Time).Value = test.LastRun.Value.ToShortTimeString();
            }

            cmdClashData.Parameters.Add("@testStatus", SqlDbType.NVarChar, 50).Value = test.Status.ToString();
            cmdClashData.Parameters.Add("@testType", SqlDbType.NVarChar, 50).Value   = test.TestType.ToString();
            cmdClashData.Parameters.Add("@testTolerance", SqlDbType.Float, 53).Value = test.Tolerance;

            cmdClashData.Parameters.Add("@groupName", SqlDbType.NVarChar, 50).Value   = gName;
            cmdClashData.Parameters.Add("@groupGuid", SqlDbType.NVarChar, 50).Value   = gGuid;
            cmdClashData.Parameters.Add("@groupStatus", SqlDbType.NVarChar, 50).Value = gStatus;

            cmdClashData.Parameters.Add("@clashName", SqlDbType.NVarChar, 50).Value = rt.DisplayName;
            cmdClashData.Parameters.Add("@clashGuid", SqlDbType.NVarChar, 50).Value = rt.Guid.ToString();

            if (rt.CreatedTime != null)
            {
                sw.WriteLine("  Created Time: " + rt.CreatedTime.ToString());
                cmdClashData.Parameters.Add("@clashTime", SqlDbType.SmallDateTime).Value = rt.CreatedTime.Value.ToShortDateString();
            }

            cmdClashData.Parameters.Add("@clashStatus", SqlDbType.NVarChar, 50).Value        = rt.Status.ToString();
            cmdClashData.Parameters.Add("@clashApprovedBy", SqlDbType.NVarChar, 50).Value    = rt.ApprovedBy;
            cmdClashData.Parameters.Add("@clashApprovedTime", SqlDbType.SmallDateTime).Value = rt.ApprovedTime.Value.ToShortDateString();
            cmdClashData.Parameters.Add("@clashX", SqlDbType.Float, 53).Value = rt.Center.X;
            cmdClashData.Parameters.Add("@clashY", SqlDbType.Float, 53).Value = rt.Center.Y;
            cmdClashData.Parameters.Add("@clashZ", SqlDbType.Float, 53).Value = rt.Center.Z;

            try
            {
                conn.Open();

                cmdClashData.ExecuteNonQuery();
            }
            catch (SqlException e)
            {
                MessageBox.Show(e.Message.ToString(), "Error Message");
            }
            finally
            {
                conn.Close();
            }


            sw.WriteLine("  Status: " + rt.Status.ToString());
            sw.WriteLine("  Approved By: " + rt.ApprovedBy);
            sw.WriteLine("  Approved Date: " + rt.ApprovedTime.ToString());
            //if (rt.Center != null)
            //    sw.WriteLine(" Centre[{0}, {1}, {2}]: ", rt.Center.X, rt.Center.Y, rt.Center.Z);
            //sw.WriteLine(" Simulation Type: " + rt.SimulationType.ToString());
            //}
        }
Esempio n. 12
0
        public override int Execute(params string[] parameters)
        {
            string documentspath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string fileoutpath   = documentspath + "\\" + "CoordinationModel.nwd";

            Document doc         = Autodesk.Navisworks.Api.Application.ActiveDocument;
            double   scalefactor = UnitConversion.ScaleFactor(Units.Meters, doc.Units);

            DocumentSelectionSets myselectionsets = doc.SelectionSets;
            ModelItemCollection   clipbox         = new ModelItemCollection();

            foreach (SavedItem childItem in ((GroupItem)myselectionsets.RootItem).Children)
            {
                if (childItem.DisplayName == "hidden")
                {
                    SelectionSet oSet = childItem as SelectionSet;
                    doc.Models.SetHidden(oSet.ExplicitModelItems, false);
                    myselectionsets.Remove((GroupItem)myselectionsets.RootItem, oSet);
                }
                else if (childItem.DisplayName == "clipbox")
                {
                    SelectionSet oSet = childItem as SelectionSet;
                    clipbox.AddRange(oSet.ExplicitModelItems);
                }
            }

            Point3D selbbmin, selbbmax;

            if (parameters.Length == 0)
            {
                ModelItemCollection mysel = doc.CurrentSelection.SelectedItems;
                selbbmin = mysel.BoundingBox().Min;
                selbbmax = mysel.BoundingBox().Max;
            }
            else
            {
                fileoutpath = @parameters[0];
                selbbmin    = new Point3D(Convert.ToDouble(parameters[1].Replace("neg", "-")) * scalefactor, Convert.ToDouble(parameters[2].Replace("neg", "-")) * scalefactor, Convert.ToDouble(parameters[3].Replace("neg", "-")) * scalefactor);
                selbbmax    = new Point3D(Convert.ToDouble(parameters[4].Replace("neg", "-")) * scalefactor, Convert.ToDouble(parameters[5].Replace("neg", "-")) * scalefactor, Convert.ToDouble(parameters[6].Replace("neg", "-")) * scalefactor);
            }

            if (selbbmin.IsOrigin && selbbmax.IsOrigin)
            {
                doc.SaveFile(fileoutpath);
                return(0);
            }

            string        logfile = documentspath + "\\" + Path.GetFileName(fileoutpath) + ".txt";
            List <string> log     = new List <string>();
            //log.Add("scalefactor###" + scalefactor);
            //selbbmin = new Point3D(-7.000, 14.000, 17.000);
            //selbbmax = new Point3D(-5.000, 16.000, 19.000);

            Point3D  mid       = selbbmin.ToVector3D().Add(selbbmax).ToVector3D().Divide(2).ToPoint3D();
            Vector3D diff      = new Point3D(1, 1, 1).ToVector3D();
            double   deltaval  = 0.01;
            Vector3D delta     = new Point3D(deltaval, deltaval, deltaval).ToVector3D();
            double   clearance = 0;

            while (diff.X > 0 && diff.Y > 0 && diff.Z > 0)
            {
                clearance += deltaval;
                selbbmax   = selbbmax.Subtract(delta);
                selbbmin   = selbbmin.Add(delta);
                diff       = selbbmax.ToVector3D().Subtract(selbbmin.ToVector3D());
            }

            Transform3D           EndTransform         = new Transform3D();
            Transform3DComponents Transform3DComponent = EndTransform.Factor();

            Transform3DComponent.Scale = selbbmax.ToVector3D().Subtract(selbbmin.ToVector3D());
            Rotation3D ScaleOrientation = new Rotation3D(new UnitVector3D(0, 0, 1), 0);

            Transform3DComponent.Rotation    = ScaleOrientation;
            Transform3DComponent.Translation = mid.ToVector3D();
            EndTransform = Transform3DComponent.Combine();

            doc.Models.OverridePermanentTransform(clipbox, EndTransform, true);

            try
            {
                DocumentClash      documentClash  = doc.GetClash();
                DocumentClashTests myClashTests   = documentClash.TestsData;
                ClashTest          myClashTestorg = myClashTests.Tests[0] as ClashTest;
                ClashTest          myClashTest    = myClashTestorg.CreateCopy() as ClashTest;
                myClashTest.TestType  = ClashTestType.Clearance;
                myClashTest.Tolerance = Math.Pow((3 * Math.Pow(clearance, 2)), 0.5);
                myClashTest.Status    = ClashTestStatus.New;
                myClashTests.TestsEditTestFromCopy(myClashTestorg, myClashTest);
                myClashTests.TestsRunTest(myClashTestorg);
                myClashTest = myClashTests.Tests[0] as ClashTest;
                ModelItemCollection myClashingElements = new ModelItemCollection();
                for (var i = 0; i < myClashTest.Children.Count; i++)
                {
                    ClashResult myClash = myClashTest.Children[i] as ClashResult;
                    myClashingElements.AddRange(myClash.Selection2);
                }

                myClashingElements.Invert(doc);
                doc.Models.SetHidden(myClashingElements, true);

                SelectionSet allhidden = new SelectionSet(myClashingElements);
                allhidden.DisplayName = "hidden";
                myselectionsets.AddCopy(allhidden);

                myClashTests.TestsClearResults(myClashTest);
                //clipbox.AddRange((doc.SelectionSets.RootItem.Children[0] as SelectionSet).GetSelectedItems());
                doc.Models.ResetPermanentTransform(clipbox);
                doc.SaveFile(fileoutpath);
            }
            catch (Exception e) { log.Add(e.Message + "###" + e.StackTrace); }
            finally { File.WriteAllText(logfile, string.Join("\r\n", log)); }

            return(0);
        }
Esempio n. 13
0
        void ClashByNetAPI()
        {
            try
            {
                Document document =
                    Autodesk.Navisworks.Api.Application.ActiveDocument;
                DocumentClash      documentClash = document.GetClash();
                DocumentClashTests oDCT          = documentClash.TestsData;

                List <ClashTestCls> tests_array = new List <ClashTestCls>();

                foreach (ClashTest test in oDCT.Tests)
                {
                    ClashTestCls oEachTest = new ClashTestCls();
                    oEachTest.DisplayName = test.DisplayName;

                    List <ClashResultCls> test_results_array = new List <ClashResultCls>();

                    foreach (SavedItem saveditem in test.Children)
                    {
                        ClashResultGroup group =
                            saveditem as ClashResultGroup;
                        if (null != group)
                        {
                            //foreach (SavedItem issue1 in group.Children)
                            //{
                            //    ClashResult rt1 = issue as ClashResult;
                            // }

                            //skip folder. just for simple demo
                        }
                        else
                        {
                            ClashResult nwissue = (ClashResult)saveditem;

                            ClashResultCls oEachResult = new ClashResultCls();
                            oEachResult.DisplayName = nwissue.DisplayName;
                            oEachResult.ApprovedBy  = nwissue.ApprovedBy;
                            oEachResult.Status      = Enum.GetName(typeof(ClashResultStatus), nwissue.Status);
                            oEachResult.Description = nwissue.Description;
                            oEachResult.Found       = nwissue.CreatedTime.Value.ToString("yyyy-MM-dd HH:mm:ss");

                            //DWG or Revit files
                            DataProperty oDP = nwissue.Item1.PropertyCategories.FindPropertyByDisplayName("Entity Handle", "Value");
                            if (oDP == null)
                            {
                                oDP = nwissue.Item1.PropertyCategories.FindPropertyByDisplayName("Element ID", "Value");
                            }
                            oEachResult.path1ID = oDP.Value.ToDisplayString();

                            oDP = nwissue.Item2.PropertyCategories.FindPropertyByDisplayName("Entity Handle", "Value");
                            if (oDP == null)
                            {
                                oDP = nwissue.Item1.PropertyCategories.FindPropertyByDisplayName("Element ID", "Value");
                            }
                            oEachResult.path2ID = oDP.Value.ToDisplayString();


                            oEachResult.CenterPt = new double[3] {
                                nwissue.Center.X,
                                nwissue.Center.Y,
                                nwissue.Center.Z
                            };


                            oEachResult.BoundingBox = new double[6] {
                                nwissue.BoundingBox.Min.X,
                                nwissue.BoundingBox.Min.Y,
                                nwissue.BoundingBox.Min.Z,
                                nwissue.BoundingBox.Max.X,
                                nwissue.BoundingBox.Max.Y,
                                nwissue.BoundingBox.Max.Z
                            };

                            oEachResult.ViewBoundingBox = new double[6] {
                                nwissue.ViewBounds.Min.X,
                                nwissue.ViewBounds.Min.Y,
                                nwissue.ViewBounds.Min.Z,
                                nwissue.ViewBounds.Max.X,
                                nwissue.ViewBounds.Max.Y,
                                nwissue.ViewBounds.Max.Z
                            };

                            oEachResult.SuitablePosition = new double[3] {
                                nwissue.ViewBounds.Max.X,
                                nwissue.ViewBounds.Min.Y,
                                (nwissue.ViewBounds.Min.Z + nwissue.ViewBounds.Max.Z) / 2.0
                            };



                            oEachResult.viewpoint = new ClashResultVP();

                            test_results_array.Add(oEachResult);
                        }
                    }//Result
                    oEachTest.ClashResults = test_results_array.ToArray();
                    tests_array.Add(oEachTest);
                } //Test


                string jsonStr = JsonConvert.SerializeObject(tests_array.ToArray());


                const String strClient   = "http://localhost:3001";
                RestClient   _thisclient = new RestClient(strClient);

                RestRequest authReq = new RestRequest();
                authReq.Resource = "ClashTestRoute/postNewClash";
                authReq.Method   = Method.POST;

                byte[] fileData = System.Text.Encoding.Default.GetBytes(jsonStr);
                authReq.AddParameter("Content-Length", fileData.Length);
                authReq.AddHeader("Content-Type", "application/octet-stream");
                authReq.AddFile("file", fileData, "clashtestresult.json", "application/octet-stream");

                IRestResponse result = _thisclient.Execute(authReq);
                if (result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    System.Windows.Forms.MessageBox.Show("The updated clash json has been sent to server successfully!");
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("failed to upload clash json to server! " + result.StatusCode.ToString());
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.ToString());
            }
        }
Esempio n. 14
0
        public void ClashTestsSearch(DocumentClashTests oDCT, Excel.Worksheet newWorksheet)
        {
            //ClashTests names output
            int i;
            int ic = 0;

            int[] Sum = new int[6];

            //Clash tests iterating
            foreach (ClashTest ctest in oDCT.Tests)
            {
                newWorksheet.Cells[ic + 2, 1] = ic + 1;
                newWorksheet.Cells[ic + 2, 2] = ctest.DisplayName;
                int[] StatusNum = new int[6];

                //ClashTestsResults properties output
                foreach (SavedItem issue in ctest.Children)
                {
                    ClashResult clash = issue as ClashResult;
                    if (clash != null)
                    {
                        if (clash.Status == ClashResultStatus.New)
                        {
                            StatusNum[1] = StatusNum[1] + 1;
                        }
                        else if (clash.Status == ClashResultStatus.Active)
                        {
                            StatusNum[2] = StatusNum[2] + 1;
                        }
                        else if (clash.Status == ClashResultStatus.Reviewed)
                        {
                            StatusNum[3] = StatusNum[3] + 1;
                        }
                        else if (clash.Status == ClashResultStatus.Approved)
                        {
                            StatusNum[4] = StatusNum[4] + 1;
                        }
                        else if (clash.Status == ClashResultStatus.Resolved)
                        {
                            StatusNum[5] = StatusNum[5] + 1;
                        }
                    }
                }

                //Total clash test results ammountB
                StatusNum[0] = StatusNum[1] + StatusNum[2] + StatusNum[3] + StatusNum[4] + StatusNum[5];

                //Data assigning to Excel cells
                for (i = 0; i <= 5; i++)
                {
                    newWorksheet.Cells[ic + 2, 3 + i] = StatusNum[i];
                    Sum[i] += StatusNum[i];
                }
                ic += 1;
            }

            newWorksheet.Cells[ic + 2, 2] = "ИТОГО:";
            for (i = 0; i <= 5; i++)
            {
                newWorksheet.Cells[ic + 2, 3 + i] = Sum[i];
            }
        }
Esempio n. 15
0
        public override int Execute(params string[] parameters)
        {
            MessageBox.Show("Hello World!", "Execute", MessageBoxButtons.OK, MessageBoxIcon.Information);

            string connstr = "Data Source = (localdb)\\ProjectsV13; Initial Catalog = ClashDB; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; MultiSubnetFailover = False";
            //SQL Connection
            SqlConnection conn = new SqlConnection(connstr);

            //SQL Command - Stored Procedure
            SqlCommand cmdClashData = new SqlCommand("dbo.createClashData", conn);

            cmdClashData.CommandType = CommandType.StoredProcedure;

            //Create SQL Parameters

            cmdClashData.Parameters.Add(new SqlParameter("@testName", SqlDbType.NVarChar, 100));
            cmdClashData.Parameters.Add(new SqlParameter("@testStatus", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@testType", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@testLastRun", SqlDbType.SmallDateTime));
            cmdClashData.Parameters.Add(new SqlParameter("@testTolerance", SqlDbType.Float, 53));
            cmdClashData.Parameters.Add(new SqlParameter("@groupName", SqlDbType.NVarChar, 50));
            cmdClashData.Parameters.Add(new SqlParameter("@groupStatus", SqlDbType.NVarChar, 50));


            //Navisworks Document Clash Data
            Document           document      = Autodesk.Navisworks.Api.Application.ActiveDocument;
            DocumentClash      documentClash = document.GetClash();
            DocumentClashTests oDCT          = documentClash.TestsData;

            //Loop for getting clash test results
            foreach (ClashTest test in oDCT.Tests)
            {
                cmdClashData.Parameters["@testName"].Value = test.DisplayName;

                cmdClashData.Parameters["@testStatus"].Value = test.Status.ToString();
                cmdClashData.Parameters["@testType"].Value   = test.TestType.ToString();
                if (test.LastRun != null)
                {
                    cmdClashData.Parameters["@testLastRun"].Value = test.LastRun.Value.ToShortDateString();
                }
                cmdClashData.Parameters["@testTolerance"].Value = test.Tolerance;

                conn.Open();

                cmdClashData.ExecuteNonQuery();

                foreach (SavedItem issue in test.Children)
                {
                    ClashResultGroup group = issue as ClashResultGroup;
                    if (null != group)
                    {
                        cmdClashData.Parameters["@groupName"].Value   = group.DisplayName;
                        cmdClashData.Parameters["@groupStatus"].Value = group.Status.ToString();

                        cmdClashData.ExecuteNonQuery();

                        foreach (SavedItem issue1 in group.Children)
                        {
                            ClashResult rt1 = issue1 as ClashResult;
                            if (null != rt1)
                            {
                                writeClashResult(rt1, cmdClashData);
                            }
                        }
                    }

                    ClashResult rt = issue as ClashResult;
                    if (null != rt)
                    {
                        writeClashResult(rt, cmdClashData);
                    }
                }
            }

            MessageBox.Show("Done");
            conn.Close();
            //string sql = "INSERT INTO [ClashDB].[Table] ";
            //SqlCommand cmdAddClashData = new SqlCommand
            return(0);
        }
Esempio n. 16
0
        public override int Execute(params string[] parameters)
        {
            //MessageBox.Show("Hello World", "Execute", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //return 0;

            string grName   = "";
            string grGuid   = "";
            string grStatus = "";

            string connstring = Properties.Settings.Default.ConnectionString;

            SqlConnection conn = new SqlConnection(connstring);

            //string delstring = "TRUNCATE TABLE tblClashResult";
            //SqlCommand cmdDelete = new SqlCommand(delstring, conn);
            //cmdDelete.CommandType = CommandType.Text;

            //try
            //{
            //    conn.Open();
            //    cmdDelete.ExecuteNonQuery();
            //    MessageBox.Show("All Data deleted");

            //}
            //catch (SqlException e)
            //{
            //    MessageBox.Show(e.Message.ToString(), "Error Message");
            //}
            //finally
            //{
            //    conn.Close();
            //}


            MessageBox.Show("will dump clash to c:\\sqlite\\dumpClash.txt");
            StreamWriter sw       = File.CreateText("c:\\sqlite\\dumpClash.txt");
            Document     document = Autodesk.Navisworks.Api.Application.ActiveDocument;

            DocumentClash      documentClash = document.GetClash();
            DocumentClashTests oDCT          = documentClash.TestsData;

            foreach (ClashTest test in oDCT.Tests)
            {
                sw.WriteLine("Connection String:" + connstring);
                sw.WriteLine("***Test: " + test.DisplayName + "***");
                //sw.WriteLine(" Status: " + test.Status.ToString());
                //sw.WriteLine(" Test Type: " + test.TestType.ToString());
                if (test.LastRun != null)
                {
                    sw.WriteLine(" Last Run: " + test.LastRun.Value.ToShortDateString());
                }
                //sw.WriteLine(" tolerance: " + test.Tolerance);
                //sw.WriteLine(" comments: " + test.Comments);
                //sw.WriteLine(" Simulation Type: " + test.SimulationType.ToString());
                //sw.WriteLine(" Simulation Step: " + test.SimulationStep.ToString());
                sw.WriteLine("    ---Results---");

                foreach (SavedItem issue in test.Children)
                {
                    ClashResultGroup group = issue as ClashResultGroup;
                    if (null != group)
                    {
                        sw.WriteLine(" test result group: " + group.DisplayName);
                        sw.WriteLine(" group status: " + group.Status.ToString());

                        grName   = group.DisplayName;
                        grGuid   = group.Guid.ToString();
                        grStatus = group.Status.ToString();

                        foreach (SavedItem issue1 in group.Children)
                        {
                            ClashResult rt1 = issue1 as ClashResult;
                            if (null != rt1)
                            {
                                writeClashResult(test, rt1, sw, conn, grName, grGuid, grStatus);
                            }
                        }
                    }
                    ClashResult rt = issue as ClashResult;

                    if (null != rt)
                    {
                        writeClashResult(test, rt, sw, conn, grName, grGuid, grStatus);
                    }
                }
            }
            MessageBox.Show("done");
            sw.Close();
            return(0);
        }
        public override int Execute(params string[] parameters)
        {
            //Obtain user Input for Focus Zone (calls UserInput Form)
            UserInput UIReturn = new UserInput();

            UIReturn.ShowDialog();

            string fz = UIReturn.Returnfz;
            Dictionary <string, string> trade = UIReturn.Returnpd;

            if (fz == "" || trade == null)
            {
                //MessageBox.Show("Cancelled Operation");
                return(0);
            }

            //Initialize Objects
            List <string> testName       = new List <string>();
            List <int>    resultNew      = new List <int>();
            List <int>    resultActive   = new List <int>();
            List <int>    resultReviewed = new List <int>();
            List <int>    resultApproved = new List <int>();
            List <int>    resultResolved = new List <int>();
            List <string> testDate       = new List <string>();
            List <string> fileName       = new List <string>();
            List <string> sumTestDate    = new List <string>();

            List <string> tradeStatus      = new List <string>();
            List <string> tradeClash       = new List <string>();
            List <string> tradeDiscipline1 = new List <string>();
            List <string> tradeDiscipline2 = new List <string>();
            List <string> tradeDate        = new List <string>();
            List <string> tradeFile        = new List <string>();
            List <string> tradeAll         = new List <string>();
            List <string> clashAssignTo    = new List <string>();
            List <string> clashApprovedBy  = new List <string>();
            List <string> clashApproveTime = new List <string>();
            List <string> clashDescription = new List <string>();
            List <string> discipline       = new List <string>();
            List <string> indiTest         = new List <string>();
            List <double> indiCoordX       = new List <double>();
            List <double> indiCoordY       = new List <double>();
            List <double> indiCoordZ       = new List <double>();
            List <string> focusZone        = new List <string>();
            List <string> level            = new List <string>();
            List <double> lvlElev          = new List <double>();
            List <string> clashLevel       = new List <string>();
            List <double> gridXMinCoord    = new List <double>();
            List <double> gridXMaxCoord    = new List <double>();
            List <double> gridYMinCoord    = new List <double>();
            List <double> gridYMaxCoord    = new List <double>();

            string tradeName1 = "";
            string tradeName2 = "";

            int countNew      = 0;
            int countActive   = 0;
            int countReviewed = 0;
            int countApproved = 0;
            int countResolved = 0;

            try
            {
                Document           document      = Autodesk.Navisworks.Api.Application.ActiveDocument;
                DocumentClash      documentClash = document.GetClash();
                DocumentClashTests allTests      = documentClash.TestsData;
                DocumentModels     docModel      = document.Models;

                DocumentGrids docGrids   = document.Grids;
                GridSystem    docGridSys = docGrids.ActiveSystem;

                foreach (GridLevel lvl in docGridSys.Levels)
                {
                    level.Add(lvl.DisplayName);
                    lvlElev.Add(lvl.Elevation);
                }

                //-----------------------------------------------------------------------------------------//
                //Check if Clash Test have even been created
                //If no clash tests created, exit program
                int check = allTests.Tests.Count;
                if (check == 0)
                {
                    MessageBox.Show("No clash tests currently exist!");
                    return(0);
                }
                //-----------------------------------------------------------------------------------------//

                //-----------------------------------------------------------------------------------------//
                //Begin storing clash data by created tests
                foreach (ClashTest test in allTests.Tests)
                {
                    testName.Add(test.DisplayName);

                    //Reset Clash Status counts per test in Clash Detective Summary.  Matches Results tab in Clash Detective (ungrouped clashes)
                    countNew      = 0;
                    countActive   = 0;
                    countReviewed = 0;
                    countApproved = 0;
                    countResolved = 0;

                    if (test.LastRun == null)
                    {
                        sumTestDate.Add("No Test Runs");
                    }
                    else
                    {
                        sumTestDate.Add(test.LastRun.Value.ToShortDateString());
                    }

                    //Count number of instances per Clash Status
                    //(based on how user grouped clashes)
                    foreach (SavedItem issue in test.Children)
                    {
                        ClashResultGroup group = issue as ClashResultGroup;

                        //Check if clash groups exist.  If null, clash result is not grouped
                        if (null != group)
                        {
                            foreach (SavedItem subissue in group.Children)
                            {
                                ClashResult item = subissue as ClashResult;

                                //Checking if Item1 is null (due to resolved) and need to use Selection-A
                                if (item.Item1 != null)
                                {
                                    List <ModelItem> lItem1 = item.Item1.Ancestors.ToList();

                                    tradeName1 = ClashDiscipline_Search(lItem1, trade);
                                }
                                else
                                {
                                    ModelItemCollection oSelA  = test.SelectionA.Selection.GetSelectedItems();
                                    List <ModelItem>    lItemA = new List <ModelItem>();

                                    if (oSelA.First.HasModel == true)
                                    {
                                        lItemA.Add(oSelA.First);
                                    }
                                    else
                                    {
                                        lItemA = oSelA.First.Ancestors.ToList();
                                    }

                                    tradeName1 = ClashDiscipline_Search(lItemA, trade);
                                }

                                //Checking if Item2 is null (due to resolved) and need to use Selection-B
                                if (item.Item2 != null)
                                {
                                    List <ModelItem> lItem2 = item.Item2.Ancestors.ToList();

                                    tradeName2 = ClashDiscipline_Search(lItem2, trade);
                                }
                                else
                                {
                                    ModelItemCollection oSelB  = test.SelectionB.Selection.GetSelectedItems();
                                    List <ModelItem>    lItemB = new List <ModelItem>();
                                    //MessageBox.Show(oSelB.First.DisplayName);

                                    if (oSelB.First.HasModel == true)
                                    {
                                        lItemB.Add(oSelB.First);
                                    }
                                    else
                                    {
                                        lItemB = oSelB.First.Ancestors.ToList();
                                    }

                                    tradeName2 = ClashDiscipline_Search(lItemB, trade);
                                }

                                //Prompt User when no Discipline match found
                                //User may be missing a discipline/trade in initial input
                                if (tradeName1 == "" || tradeName2 == "")
                                {
                                    MessageBox.Show("Discipline Missing.  Check Project Disciplines Input File (.txt)." + "\n"
                                                    + "Clash Test: " + test.DisplayName + "\n"
                                                    + "Clash Name: " + item.DisplayName + "\n"
                                                    + "Discipline 1: " + tradeName1 + "\n"
                                                    + "Discipline 2: " + tradeName2);

                                    return(0);
                                }

                                //Store Individual Clash Data
                                testDate.Add(test.LastRun.Value.ToShortDateString());
                                indiTest.Add(test.DisplayName);
                                focusZone.Add(fz);
                                tradeDiscipline1.Add(tradeName1);
                                tradeDiscipline2.Add(tradeName2);
                                tradeClash.Add(item.DisplayName.ToString());
                                tradeStatus.Add(item.Status.ToString());
                                indiCoordX.Add(item.Center.X);
                                indiCoordY.Add(item.Center.Y);
                                indiCoordZ.Add(item.Center.Z);
                                fileName.Add(document.CurrentFileName.ToString());
                                clashAssignTo.Add(item.AssignedTo);
                                clashApprovedBy.Add(item.ApprovedBy);
                                clashApproveTime.Add(item.ApprovedTime.ToString());
                                clashDescription.Add(item.Description);

                                if (test.LastRun == null)
                                {
                                    testDate.Add("Test Not Run");
                                }
                                else
                                {
                                    tradeDate.Add(test.LastRun.Value.ToShortDateString());
                                }

                                tradeFile.Add(document.CurrentFileName.ToString());

                                //for Clash Summary
                                if (null != item && item.Status.ToString() == "New")
                                {
                                    countNew = countNew + 1;
                                }
                                else if (null != item && item.Status.ToString() == "Active")
                                {
                                    countActive = countActive + 1;
                                }
                                else if (null != item && item.Status.ToString() == "Reviewed")
                                {
                                    countReviewed = countReviewed + 1;
                                }
                                else if (null != item && item.Status.ToString() == "Approved")
                                {
                                    countApproved = countApproved + 1;
                                }
                                else
                                {
                                    countResolved = countResolved + 1;
                                }
                            }
                        }
                        else
                        {
                            ClashResult rawItem = issue as ClashResult;

                            //Checking if Item1 is null (due to resolved) and need to use Selection-A
                            if (rawItem.Item1 != null)
                            {
                                List <ModelItem> lItem1 = rawItem.Item1.Ancestors.ToList();

                                tradeName1 = ClashDiscipline_Search(lItem1, trade);
                            }
                            else
                            {
                                ModelItemCollection oSelA  = test.SelectionA.Selection.GetSelectedItems();
                                List <ModelItem>    lItemA = new List <ModelItem>();

                                if (oSelA.First.HasModel == true)
                                {
                                    lItemA.Add(oSelA.First);
                                }
                                else
                                {
                                    lItemA = oSelA.First.Ancestors.ToList();
                                }

                                tradeName1 = ClashDiscipline_Search(lItemA, trade);
                            }

                            //Checking if Item1 is null (due to resolved) and need to use Selection-B
                            if (rawItem.Item2 != null)
                            {
                                List <ModelItem> lItem2 = rawItem.Item2.Ancestors.ToList();

                                tradeName2 = ClashDiscipline_Search(lItem2, trade);
                            }
                            else
                            {
                                ModelItemCollection oSelB  = test.SelectionB.Selection.GetSelectedItems();
                                List <ModelItem>    lItemB = new List <ModelItem>();

                                if (oSelB.First.HasModel == true)
                                {
                                    lItemB.Add(oSelB.First);
                                }
                                else
                                {
                                    lItemB = oSelB.First.Ancestors.ToList();
                                }

                                tradeName2 = ClashDiscipline_Search(lItemB, trade);
                            }

                            if (tradeName1 == "" || tradeName2 == "")
                            {
                                MessageBox.Show("Discipline Missing.  Check Project Disciplines Input File (.txt)." + "\n"
                                                + "Clash Test: " + test.DisplayName + "\n"
                                                + "Clash Name: " + rawItem.DisplayName + "\n"
                                                + "Discipline 1: " + tradeName1 + "\n"
                                                + "Discipline 2: " + tradeName2);

                                return(0);
                            }

                            //write to second sheet by discipline involvement
                            testDate.Add(test.LastRun.Value.ToShortDateString());
                            indiTest.Add(test.DisplayName);
                            focusZone.Add(fz);
                            tradeDiscipline1.Add(tradeName1);
                            tradeDiscipline2.Add(tradeName2);
                            tradeClash.Add(rawItem.DisplayName.ToString());
                            tradeStatus.Add(rawItem.Status.ToString());
                            tradeFile.Add(document.CurrentFileName.ToString());
                            indiCoordX.Add(rawItem.Center.X);
                            indiCoordY.Add(rawItem.Center.Y);
                            indiCoordZ.Add(rawItem.Center.Z);
                            fileName.Add(document.CurrentFileName.ToString());
                            clashAssignTo.Add(rawItem.AssignedTo);
                            clashApprovedBy.Add(rawItem.ApprovedBy);
                            clashApproveTime.Add(rawItem.ApprovedTime.ToString());
                            clashDescription.Add(rawItem.Description);

                            if (test.LastRun == null)
                            {
                                testDate.Add("Test Not Run");
                            }
                            else
                            {
                                tradeDate.Add(test.LastRun.Value.ToShortDateString());
                            }

                            if (rawItem.Status.ToString() == "New")
                            {
                                countNew = countNew + 1;
                            }
                            else if (rawItem.Status.ToString() == "Active")
                            {
                                countActive = countActive + 1;
                            }
                            else if (rawItem.Status.ToString() == "Reviewed")
                            {
                                countReviewed = countReviewed + 1;
                            }
                            else if (rawItem.Status.ToString() == "Approved")
                            {
                                countApproved = countApproved + 1;
                            }
                            else
                            {
                                countResolved = countResolved + 1;
                            }
                        }
                    }

                    //inputs values into Clash Status List by Test
                    resultNew.Add(countNew);
                    resultActive.Add(countActive);
                    resultReviewed.Add(countReviewed);
                    resultApproved.Add(countApproved);
                    resultResolved.Add(countResolved);
                }

                //-----------------------------------------------------------------------------------------//
                //call grid intersection function to return min and max grid coordinate values
                GridIntersectCoord gridValueReturn = new GridIntersectCoord();

                var gridCoordValues = gridValueReturn.GridCoord();

                double gridXMin = gridCoordValues.gridXMin;
                double gridXMax = gridCoordValues.gridXMax;
                double gridYMin = gridCoordValues.gridYMin;
                double gridYMax = gridCoordValues.gridYMax;

                foreach (string clash in tradeClash)
                {
                    gridXMinCoord.Add(gridXMin);
                    gridXMaxCoord.Add(gridXMax);
                    gridYMinCoord.Add(gridYMin);
                    gridYMaxCoord.Add(gridYMax);
                }
                //-----------------------------------------------------------------------------------------//

                //-----------------------------------------------------------------------------------------//
                //Record level clashes occur for Clash Level
                int clashIdx = 0; int cnt1 = 0;

                while (clashIdx < indiCoordZ.Count)
                {
                    int  lvlIdx    = 0;
                    bool lvlAssign = false;

                    while (lvlIdx < level.Count && lvlAssign == false)
                    {
                        if (indiCoordZ[clashIdx] >= lvlElev[lvlIdx] && indiCoordZ[clashIdx] < lvlElev[lvlIdx + 1])
                        {
                            clashLevel.Add(level[lvlIdx]);
                            lvlAssign = true;
                            cnt1++;
                        }
                        else if (lvlIdx == level.Count - 1 && indiCoordZ[clashIdx] >= lvlElev[lvlIdx])
                        {
                            clashLevel.Add(level[lvlIdx]);
                            lvlAssign = true;
                            cnt1++;
                        }
                        else if (lvlIdx == 0 && indiCoordZ[clashIdx] < lvlElev[lvlIdx])
                        {
                            clashLevel.Add("UNDERGROUND");
                            lvlAssign = true;
                            cnt1++;
                        }
                        lvlIdx++;
                    }
                    clashIdx++;
                }
                //-----------------------------------------------------------------------------------------//

                //-----------------------------------------------------------------------------------------//
                //Totals current Open(New + Active), Closed(Resolved + Approved), Field Coordinate(Reviewed)
                int totOpen     = resultNew.Aggregate((a, b) => a + b) + resultActive.Aggregate((a, b) => a + b);
                int totClosed   = resultResolved.Aggregate((a, b) => a + b) + resultApproved.Aggregate((a, b) => a + b);
                int totReviewed = resultReviewed.Aggregate((a, b) => a + b);
                int totNew      = resultNew.Aggregate((a, b) => a + b);
                int totActive   = resultActive.Aggregate((a, b) => a + b);
                int totApproved = resultApproved.Aggregate((a, b) => a + b);
                int totResolved = resultResolved.Aggregate((a, b) => a + b);
                //-----------------------------------------------------------------------------------------//

                //-----------------------------------------------------------------------------------------//
                //Launch or access Excel via COM Interop:
                Excel.Application xlApp = new Excel.Application();
                Excel.Workbook    xlWorkbook;

                if (xlApp == null)
                {
                    MessageBox.Show("Excel is not properly installed!");
                }

                //Create New Workbook & Worksheets
                xlWorkbook = xlApp.Workbooks.Add(Missing.Value);
                Excel.Worksheet xlWorksheet       = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);
                Excel.Worksheet xlWorksheet_trade = (Excel.Worksheet)xlWorkbook.Worksheets.Add();
                xlWorksheet.Name       = "Clash Detective Summary";
                xlWorksheet_trade.Name = "Individual Clashes";

                //Label Column Headers - Summary Worksheet
                xlWorksheet.Cells[1, 1]  = "Test Date";
                xlWorksheet.Cells[1, 2]  = "Test Name";
                xlWorksheet.Cells[1, 3]  = "New";
                xlWorksheet.Cells[1, 4]  = "Active";
                xlWorksheet.Cells[1, 5]  = "Reviewed";
                xlWorksheet.Cells[1, 6]  = "Approved";
                xlWorksheet.Cells[1, 7]  = "Resolved";
                xlWorksheet.Cells[1, 9]  = "Total New";
                xlWorksheet.Cells[1, 10] = "Total Active";
                xlWorksheet.Cells[1, 11] = "Total Reviewed";
                xlWorksheet.Cells[1, 12] = "Total Approved";
                xlWorksheet.Cells[1, 13] = "Total Resolved";
                xlWorksheet.Cells[1, 15] = "Total Open (New + Active)";
                xlWorksheet.Cells[1, 16] = "Total Closed (Approved + Resolved)";
                xlWorksheet.Cells[1, 17] = "Total Deferred to Field Coordination (Reviewed)";

                //Label Column Headers - Worksheet By Trade Involvement
                xlWorksheet_trade.Cells[1, 1]        = "Date";
                xlWorksheet_trade.Cells[1, 2]        = "Focus Zone";
                xlWorksheet_trade.Cells[1, 3]        = "Test Name";
                xlWorksheet_trade.Cells[1, 4]        = "Discipline 1";
                xlWorksheet_trade.Cells[1, 5]        = "Discipline 2";
                xlWorksheet_trade.Cells[1, 6]        = "Clash";
                xlWorksheet_trade.Cells[1, 7]        = "Clash Level";
                xlWorksheet_trade.Cells[1, 8]        = "Status";
                xlWorksheet_trade.Cells.Cells[1, 9]  = "Clash Location (X)";
                xlWorksheet_trade.Cells.Cells[1, 10] = "Clash Location (Y)";
                xlWorksheet_trade.Cells.Cells[1, 11] = "Clash Location (Z)";
                xlWorksheet_trade.Cells.Cells[1, 12] = "Min X Grid Coordinate";
                xlWorksheet_trade.Cells.Cells[1, 13] = "Min Y Grid Coordinate";
                xlWorksheet_trade.Cells.Cells[1, 14] = "Max X Grid Coordinate";
                xlWorksheet_trade.Cells.Cells[1, 15] = "Max Y Grid Coordinate";
                xlWorksheet_trade.Cells.Cells[1, 16] = "File Path";
                xlWorksheet_trade.Cells.Cells[1, 17] = "Assigned To";
                xlWorksheet_trade.Cells.Cells[1, 18] = "Approved By";
                xlWorksheet_trade.Cells.Cells[1, 19] = "Approved Time";
                xlWorksheet_trade.Cells.Cells[1, 20] = "Description";


                //write clash statuses to excel file by Test
                int counterSumDate = 2;
                foreach (string name in sumTestDate)
                {
                    string cellName = "A" + counterSumDate.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = name;
                    counterSumDate++;
                }

                int counterTest = 2;
                foreach (string name in testName)
                {
                    string cellName = "B" + counterTest.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = name;
                    counterTest++;
                }

                int counterNew = 2;
                foreach (int valueNew in resultNew)
                {
                    string cellName = "C" + counterNew.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = valueNew;
                    counterNew++;
                }

                int counterActive = 2;
                foreach (int valueActive in resultActive)
                {
                    string cellName = "D" + counterActive.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = valueActive;
                    counterActive++;
                }

                int counterReviewed = 2;
                foreach (int valueReviewed in resultReviewed)
                {
                    string cellName = "E" + counterReviewed.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = valueReviewed;
                    counterReviewed++;
                }

                int counterApproved = 2;
                foreach (int valueApproved in resultApproved)
                {
                    string cellName = "F" + counterApproved.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = valueApproved;
                    counterApproved++;
                }

                int counterResolved = 2;
                foreach (int valueResolved in resultResolved)
                {
                    string cellName = "G" + counterResolved.ToString();
                    var    range    = xlWorksheet.get_Range(cellName, cellName);
                    range.Value2 = valueResolved;
                    counterResolved++;
                }

                //write totals Open, Closed, Field Coordinate to Cells
                xlWorksheet.Cells[2, 9]  = totNew;
                xlWorksheet.Cells[2, 10] = totActive;
                xlWorksheet.Cells[2, 11] = totReviewed;
                xlWorksheet.Cells[2, 12] = totApproved;
                xlWorksheet.Cells[2, 13] = totResolved;
                xlWorksheet.Cells[2, 15] = totOpen;
                xlWorksheet.Cells[2, 16] = totClosed;
                xlWorksheet.Cells[2, 17] = totReviewed;

                //Complete Data on Worksheet (per Discipline Clash Involvement)
                int tradeDateCount = 2;
                foreach (string date in tradeDate)
                {
                    string cellName = "A" + tradeDateCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = date;
                    tradeDateCount++;
                }

                int counterFz = 2;
                foreach (string valueFz in focusZone)
                {
                    string cellName = "B" + counterFz.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = valueFz;
                    counterFz++;
                }

                int testNameCount = 2;
                foreach (string tn in indiTest)
                {
                    string cellName = "C" + testNameCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = tn;
                    testNameCount++;
                }

                int dis1Count = 2;
                foreach (string dis1 in tradeDiscipline1)
                {
                    string cellName = "D" + dis1Count.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = dis1;
                    dis1Count++;
                }

                int dis2Count = 2;
                foreach (string dis2 in tradeDiscipline2)
                {
                    string cellName = "E" + dis2Count.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = dis2;
                    dis2Count++;
                }

                int tradeClashCount = 2;
                foreach (string clash in tradeClash)
                {
                    string cellName = "F" + tradeClashCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = clash;
                    tradeClashCount++;
                }

                int levelCount = 2;
                foreach (string lvl in clashLevel)
                {
                    string cellName = "G" + levelCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = lvl;
                    levelCount++;
                }

                int tradeStatusCount = 2;
                foreach (string status in tradeStatus)
                {
                    string cellName = "H" + tradeStatusCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = status;
                    tradeStatusCount++;
                }

                int coordXCount = 2;
                foreach (double x in indiCoordX)
                {
                    string cellName = "I" + coordXCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = x;
                    coordXCount++;
                }

                int coordYCount = 2;
                foreach (double y in indiCoordY)
                {
                    string cellName = "J" + coordYCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = y;
                    coordYCount++;
                }

                int coordZCount = 2;
                foreach (double z in indiCoordZ)
                {
                    string cellName = "K" + coordZCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = z;
                    coordZCount++;
                }

                int xMinCount = 2;
                foreach (double xMin in gridXMinCoord)
                {
                    string cellName = "L" + xMinCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = xMin;
                    xMinCount++;
                }

                int yMinCount = 2;
                foreach (double yMin in gridYMinCoord)
                {
                    string cellName = "M" + yMinCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = yMin;
                    yMinCount++;
                }

                int xMaxCount = 2;
                foreach (double xMax in gridXMaxCoord)
                {
                    string cellName = "N" + xMaxCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = xMax;
                    xMaxCount++;
                }

                int yMaxCount = 2;
                foreach (double yMax in gridYMaxCoord)
                {
                    string cellName = "O" + yMaxCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = yMax;
                    yMaxCount++;
                }

                int tradeFileCount = 2;
                foreach (string file in tradeFile)
                {
                    string cellName = "P" + tradeFileCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = file;
                    tradeFileCount++;
                }

                int assignToCount = 2;
                foreach (string assign in clashAssignTo)
                {
                    string cellName = "Q" + assignToCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = assign;
                    assignToCount++;
                }

                int approvedByCount = 2;
                foreach (string approve in clashApprovedBy)
                {
                    string cellName = "R" + approvedByCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = approve;
                    approvedByCount++;
                }

                int approveTimeCount = 2;
                foreach (string time in clashApproveTime)
                {
                    string cellName = "S" + approveTimeCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = time;
                    approveTimeCount++;
                }

                int descriptionCount = 2;
                foreach (string description in clashDescription)
                {
                    string cellName = "T" + descriptionCount.ToString();
                    var    range    = xlWorksheet_trade.get_Range(cellName, cellName);
                    range.Value2 = description;
                    descriptionCount++;
                }

                //Locate file save location
                string[] clashDate = tradeDate[0].Split('/');
                string   modDate   = "";

                if (clashDate[0].Length == 1)
                {
                    clashDate[0] = "0" + clashDate[0];
                }

                if (clashDate[1].Length == 1)
                {
                    clashDate[1] = "0" + clashDate[1];
                }
                modDate = clashDate[2] + clashDate[0] + clashDate[1];


                SaveFileDialog saveClashData = new SaveFileDialog();

                saveClashData.Title    = "Save to...";
                saveClashData.Filter   = "Excel Workbook | *.xlsx|Excel 97-2003 Workbook | *.xls";
                saveClashData.FileName = modDate + "-Clash_Test_Data-" + focusZone[0].ToString();

                if (saveClashData.ShowDialog() == DialogResult.OK)
                {
                    string path = saveClashData.FileName;
                    xlWorkbook.SaveCopyAs(path);
                    xlWorkbook.Saved = true;
                    xlWorkbook.Close(true, Missing.Value, Missing.Value);
                    xlApp.Quit();
                }

                xlApp.Visible = false;
                //-----------------------------------------------------------------------------------------//
            }

            catch (Exception exception)
            {
                MessageBox.Show("Error! Check if clash test(s) exist or previously run.  Original Message: " + exception.Message);
            }

            return(0);
        }
Esempio n. 18
0
    public static ClashResult CaclulateFlatDamage(AbilityStep_Damage step, HealthEntityCombatObject attacker, HealthEntityCombatObject defender)
    {
        ClashResult result = new ClashResult();

        // If defender is dead, result fails.
        if (step == null || defender == null || defender.IsDead)
        {
            result.name = ClashResult.Name.Failed;
            return(result);
        }

        // If defender is immune to damage, result immune.
        if (defender.IsImmuneToDamage())
        {
            result.name = ClashResult.Name.Immune;
            return(result);
        }

        // Grab the damage amount.
        result.damage = step.amount;

        if (attacker != null)
        {
            // Multiply with raw damage of the attacker.
            result.damage = (int)(result.damage * attacker.Stats.rawDamageMultiplier.Value);

            // Check for vulnerable
            if (defender.IsVulnerable())
            {
                result.damage = (int)(result.damage * 1.5f);
            }

            // Crit calculator.
            if (step.canCriticallyStrike)
            {
                float attackerCritChance = attacker.Stats.criticalChance.Value;

                // Get negative crit multiplier on target.
                foreach (var behaviour in defender.GetCritMultiplierBehaviours())
                {
                    attackerCritChance *= behaviour.modifyCritChanceAgainst;
                }

                // Roll the crit and double the damage.
                float critValue = Random.Range(0f, 1f);

                // Critical is success.
                if (critValue < attackerCritChance)
                {
                    result.damage     *= 2;
                    result.criticalHit = true;
                }
            }

            // Calculate damage against armor or magic resist.
            switch (step.damageType)
            {
            case AbilityStep_Damage.DamageType.None:
                result.damage = 0;
                break;

            case AbilityStep_Damage.DamageType.Physical:
                // defender armor - attacker armor pen => clamped between 0-1.
                float defenderPenetratedArmor = Mathf.Clamp01(defender.Stats.armor.Value - attacker.Stats.armorPenetration.Value);
                result.damage = (int)(result.damage * (1 - defenderPenetratedArmor));
                break;

            case AbilityStep_Damage.DamageType.Magic:
                // defender MR - attacker mr pen => clamped between 0-1.
                float defenderPenetratedMR = Mathf.Clamp01(defender.Stats.magicResist.Value - attacker.Stats.magicPenetration.Value);
                result.damage = (int)(result.damage * (1 - defenderPenetratedMR));
                break;
            }
        }

        // Clamp it to 0.
        result.damage = Mathf.Max(0, result.damage);

        // If the clamped damage is 0, result immune.
        if (result.damage < 1)
        {
            result.name = ClashResult.Name.Immune;
            return(result);
        }

        result.name = ClashResult.Name.Damage;
        return(result);
    }