public void Test_ParallelIntersectMass_28Breps() { TestContext.WriteLine($"Testing: {nameof(Test_ParallelIntersectMass_28Breps)}"); string file = @"D:\Dev\honeybee-rhino-plugin\src\HoneybeeRhino.Test\TestModels\28Breps.json"; var breps = LoadBrepsFromJson(file); var rooms = breps.Select(_ => InitRoomBrepObject(_).Brep()); var dupBreps = rooms.Select(_ => _.DuplicateBrep()); var adjSolver = new AdjacencySolver(dupBreps); sw.Restart(); var intersectedBreps = adjSolver.Execute(_tol, true); sw.Stop(); var ms = sw.Elapsed.TotalSeconds; TestContext.WriteLine($"Runtime: {ms} ms"); //check if there is a new face created Assert.IsTrue(intersectedBreps.All(_ => _.IsSolid)); Assert.IsTrue(intersectedBreps.All(_ => _.IsRoom())); ////Check if all face names are identical var names = intersectedBreps.Select(b => b.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject.Name)); Assert.IsTrue(names.Sum(_ => _.Count()) == intersectedBreps.Sum(_ => _.Faces.Count())); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { using (var go = new GetObject()) { go.SetCommandPrompt("Please select closed objects for converting to Honeybee Room"); go.GeometryFilter = ObjectType.Brep; go.GetMultiple(2, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } if (go.ObjectCount <= 1) { return(go.CommandResult()); } //Must be all room objects. var rooms = go.Objects().Select(_ => _.Brep()).Where(_ => _ != null).Where(_ => _.IsSolid); //if (rooms.Any(_ => !_.IsRoom())) //{ // RhinoApp.WriteLine("Not all selected objects are Honeybee room, please double check, and convert it to room first."); // return go.CommandResult(); //} var ids = go.Objects().Select(_ => _.ObjectId).ToList(); var tol = RhinoDoc.ActiveDoc.ModelAbsoluteTolerance / 10; var dupRooms = rooms.Select(_ => _.DuplicateBrep()); var adjSolver = new AdjacencySolver(dupRooms); var checkedObjs = adjSolver.Execute(tol, true); var counts = rooms.Count(); var objs = checkedObjs.ToList(); for (int i = 0; i < counts; i++) { doc.Objects.Replace(ids[i], objs[i]); //doc.Objects.Add(objs[i]); } doc.Views.Redraw(); return(Result.Success); } }
public void Test_IntersectMass_MoreBreps() { string file = @"D:\Dev\honeybee-rhino-plugin\src\HoneybeeRhino.Test\TestModels\RingFiveBreps.json"; var breps = LoadBrepsFromJson(file); var rooms = breps.Select(_ => InitRoomBrepObject(_).Brep()); var dupBreps = rooms.Select(_ => _.DuplicateBrep()); var adjSolver = new AdjacencySolver(dupBreps); var intersectedBreps = adjSolver.Execute(_tol); //check if there is a new face created Assert.IsTrue(intersectedBreps.All(_ => _.IsSolid)); Assert.IsTrue(intersectedBreps.All(_ => _.Faces.Count == 8)); Assert.IsTrue(intersectedBreps.All(_ => _.IsRoom())); ////Check if all face names are identical var names = intersectedBreps.Select(b => b.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject.Name)); var diffNames = names.Distinct(); Assert.IsTrue(names.Sum(_ => _.Count()) == diffNames.Sum(_ => _.Count())); //var hbObjs_second = secondB.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject); //var faceNames_first = hbObjs_first.Select(_ => _.Name).Distinct(); //var faceNames_second = hbObjs_second.Select(_ => _.Name).Distinct(); //Assert.IsTrue(faceNames_first.Count() == 7); //Assert.IsTrue(faceNames_second.Count() == 7); ////check adjacent face property: match center point //var indoorFace_first = firstB.Faces.First(_ => Math.Abs(AreaMassProperties.Compute(_).Area - 12) < _tol); //var indoorFace_second = secondB.Faces.First(_ => Math.Abs(AreaMassProperties.Compute(_).Area - 12) < _tol); //var center_first = AreaMassProperties.Compute(indoorFace_first).Centroid; //var center_second = AreaMassProperties.Compute(indoorFace_second).Centroid; //Assert.IsTrue(center_first.DistanceToSquared(center_second) < Math.Pow(_tol, 2)); //throw new Exception("dddd"); }
public void Test_IntersectMass_TwoSimpleBreps() { string file = @"D:\Dev\honeybee-rhino-plugin\src\HoneybeeRhino.Test\TestModels\TwoSimpleBreps.json"; var breps = LoadBrepsFromJson(file); var rooms = breps.Select(_ => InitRoomBrepObject(_).Brep()); var solver = new AdjacencySolver(rooms); var intersectedBreps = solver.ExecuteIntersectMasses(rooms, _tol).ToList(); var firstB = intersectedBreps[0]; var secondB = intersectedBreps[1]; //check if there is a new face created Assert.IsTrue(firstB.IsSolid); Assert.AreEqual(firstB.Faces.Count, 7); Assert.IsTrue(secondB.IsSolid); Assert.AreEqual(secondB.Faces.Count, 7); //Check if all face names are identical var hbObjs_first = firstB.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject); var hbObjs_second = secondB.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject); var faceNames_first = hbObjs_first.Select(_ => _.Name); var faceNames_second = hbObjs_second.Select(_ => _.Name); Assert.IsTrue(faceNames_first.Count() - faceNames_first.Distinct().Count() == 1); Assert.IsTrue(faceNames_second.Count() - faceNames_second.Distinct().Count() == 1); //check adjacent face property: match center point var indoorFace_first = firstB.Faces.First(_ => Math.Abs(AreaMassProperties.Compute(_).Area - 12) < _tol); var indoorFace_second = secondB.Faces.First(_ => Math.Abs(AreaMassProperties.Compute(_).Area - 12) < _tol); var center_first = AreaMassProperties.Compute(indoorFace_first).Centroid; var center_second = AreaMassProperties.Compute(indoorFace_second).Centroid; Assert.IsTrue(center_first.DistanceToSquared(center_second) < Math.Pow(_tol, 2)); }
public void Test_SolveAdjacency_TwoSimpleBrepsWithTol() { var rhinoObjs = InitTwoBoxes(); var breps = rhinoObjs.Select(_ => _.Brep()); var solver = new AdjacencySolver(breps); var intersectedBreps = solver.ExecuteIntersectMasses(breps, _tol).ToList(); intersectedBreps = solver.ExecuteMatchInteriorFaces(intersectedBreps, _tol).ToList(); var firstB = intersectedBreps[0]; var secondB = intersectedBreps[1]; //check if there is a new face created Assert.IsTrue(firstB.IsSolid); Assert.AreEqual(firstB.Faces.Count, 7); Assert.IsTrue(secondB.IsSolid); Assert.AreEqual(secondB.Faces.Count, 7); //Check if all face names are identical var hbObjs_first = firstB.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject); var hbObjs_second = secondB.Surfaces.Select(_ => _.TryGetFaceEntity().HBObject); var faceNames_first = hbObjs_first.Select(_ => _.Name); var faceNames_second = hbObjs_second.Select(_ => _.Name); Assert.IsTrue(faceNames_first.Distinct().Count() == 7); Assert.IsTrue(faceNames_second.Distinct().Count() == 7); var faceBC_first = hbObjs_first.Select(_ => _.BoundaryCondition); var faceBC_second = hbObjs_second.Select(_ => _.BoundaryCondition); Assert.IsTrue(faceBC_first.Where(_ => _.Obj is HB.Surface).Count() == 1); Assert.IsTrue(faceBC_second.Where(_ => _.Obj is HB.Surface).Count() == 1); }