예제 #1
0
        private void VisitModelItem(Model model, ModelItem mi, NavModelNode node)
        {
            node.DisplayName = ((mi.DisplayName.Length == 0) ? mi.ClassDisplayName : mi.DisplayName);
            this.ReadProperties(mi, node);
            //如果该项目有几何图形
            bool hasGeometry = mi.HasGeometry;

            if (hasGeometry)
            {
                //转换为COM选择集
                Autodesk.Navisworks.Api.Interop.ComApi.InwOaPath inwOaPath = ComApiBridge.ToInwOaPath(mi);
                //创建回调对象
                NavGeometryCallback navGeometryCallback = new NavGeometryCallback();
                navGeometryCallback.UnitScaleToMM = (float)UnitConversion.ScaleFactor(model.Units, Units.Millimeters);
                foreach (InwOaFragment3 inwOaFragment in inwOaPath.Fragments())
                {
                    Autodesk.Navisworks.Api.Interop.ComApi.InwOpState10    state              = ComApiBridge.State;
                    Autodesk.Navisworks.Api.Interop.ComApi.InwOaPath3      inwOaPath2         = (Autodesk.Navisworks.Api.Interop.ComApi.InwOaPath3)inwOaFragment.path;
                    Autodesk.Navisworks.Api.Interop.ComApi.InwLTransform3f localToWorldMatrix = inwOaFragment.GetLocalToWorldMatrix();
                    Array array3 = (Array)(object)localToWorldMatrix.Matrix;


                    InwOaPath path = inwOaFragment.path;
                    ModelItem obj2 = ComApiBridge.ToModelItem(path);
                    bool      flag = !mi.Equals(obj2);
                    if (!flag)
                    {
                        ComApi.InwLTransform3f3 localToWorld = (ComApi.InwLTransform3f3)(object) inwOaFragment.GetLocalToWorldMatrix();
                        //Array array_v1 = (Array)(object)localToWorld.Matrix;

                        InwLTransform3f3 fragmentTransform = (InwLTransform3f3)inwOaFragment.GetLocalToWorldMatrix();
                        // navGeometryCallback.localToWorldMatrix =  inwOaFragment.GetLocalToWorldMatrix();
                        navGeometryCallback.FragmentTransform = fragmentTransform;
                        inwOaFragment.GenerateSimplePrimitives(nwEVertexProperty.eNORMAL, navGeometryCallback);
                    }
                }
                Color    originalColor = mi.Geometry.OriginalColor;
                NavColor color         = new NavColor((float)originalColor.R, (float)originalColor.G, (float)originalColor.B, 1f - (float)mi.Geometry.ActiveTransparency);
                navGeometryCallback.Geometry.Color = color;
                this.Geometries.Add(navGeometryCallback.Geometry);
                this.currentTriangleCount_ += navGeometryCallback.Geometry.Triangles.Count / 3;
                node.GeometryId             = string.Concat(navGeometryCallback.Geometry.Id);
                bool flag2 = this.currentTriangleCount_ >= this.maxTriangleCount_;
                if (flag2)
                {
                    this.WriteModel();
                }
            }
            foreach (ModelItem modelItem in mi.Children)
            {
                bool isHidden = modelItem.IsHidden;
                if (!isHidden)
                {
                    NavModelNode navModelNode = new NavModelNode();
                    node.Children.Add(navModelNode);
                    this.VisitModelItem(model, modelItem, navModelNode);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Aula 11
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lbCkeck_MouseUp(object sender, MouseEventArgs e)
        {
            var acd      = NavisworksApp.ActiveDocument;
            var allItems = new ModelItemCollection();

            allItems.AddRange(acd.CurrentSelection.SelectedItems);

            var cb = new ModelItemCollection();

            foreach (var modelItem in allItems)
            {
                cb.Clear();
                cb.AddRange(allItems);
                cb.Remove(modelItem);

                // Cria o teste de clash
                var ct = new ClashTest {
                    CustomTestName = modelItem.DisplayName
                };
                ct.DisplayName = ct.CustomTestName;

                ct.TestType = ClashTestType.Hard;

                //Scala de conversão
                var sc = UnitConversion.ScaleFactor(acd.Models.First.Units, Units.Millimeters);
                ct.Tolerance = Convert.ToDouble(1 / sc);

                ct.SelectionA.SelfIntersect  = false;
                ct.SelectionA.PrimitiveTypes = PrimitiveTypes.Triangles;
                ct.SelectionB.SelfIntersect  = false;
                ct.SelectionB.PrimitiveTypes = PrimitiveTypes.Triangles;

                ct.SelectionA.Selection.CopyFrom(new ModelItemCollection()
                {
                    modelItem
                });
                ct.SelectionB.Selection.CopyFrom(cb);

                try
                {
                    var dc    = acd.Clash as DocumentClash;
                    var tcopy = (ClashTest)ct.CreateCopy();
                    dc.TestsData.TestsAddCopy(tcopy);
                }
                catch (Exception)
                {
                    return;
                }
            }
        }
예제 #3
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);
        }
예제 #4
0
        /// <summary>
        /// Aula 10
        /// </summary>
        private void MoveElements()
        {
            var acd = NavisworksApp.ActiveDocument;

            var x   = 0;
            var y   = 0;
            var z   = 0;
            var inc = 100;

            if (LbEixoXPlus.BackColor.Equals(FocusedColor))
            {
                x = inc;
            }

            if (LbEixoXLess.BackColor.Equals(FocusedColor))
            {
                x = -inc;
            }

            if (LbEixoYPlus.BackColor.Equals(FocusedColor))
            {
                y = inc;
            }

            if (LbEixoYLess.BackColor.Equals(FocusedColor))
            {
                y = -inc;
            }

            if (LbEixoZPlus.BackColor.Equals(FocusedColor))
            {
                z = inc;
            }

            if (LbEixoZLess.BackColor.Equals(FocusedColor))
            {
                z = -inc;
            }

            if (x == 0 && y == 0 && z == 0)
            {
                return;
            }

            try
            {
                var se = acd.CurrentSelection.SelectedItems;

                foreach (var item in se)
                {
                    var im = item.AncestorsAndSelf.First(i => i.Model != null);

                    var sc = UnitConversion.ScaleFactor(Units.Millimeters, im.Model.Units);

                    var mv = new Vector3D(x * sc, y * sc, z * sc);

                    var transVec = Transform3D.CreateTranslation(mv);

                    acd.Models.OverridePermanentTransform(new List <ModelItem> {
                        item
                    }, transVec, true);

                    this.lbCenterLogEixos.Text = string.Format("X = {0}\n Y = {1}\n Z = {2}", item.BoundingBox().Center.X.ToString(),
                                                               item.BoundingBox().Center.Y.ToString(),
                                                               item.BoundingBox().Center.Z.ToString());
                }
            }
            catch (Exception)
            {
                //
            }
        }