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); } } }
/// <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; } } }
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); }
/// <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) { // } }