Beispiel #1
0
        public void CropBy_Plane_with_two_plane_orientations_yields_polygons_lying_on_respective_halfspaces_whose_area_sum_is_the_area_of_the_original_polygon()
        {
            var rectangles = new List <IPolygon>
            {
                new Box2(minX: 0, minY: 0, width: 2, height: 2),
                new Box2(minX: -1, minY: -1, width: 4, height: 2),
                new Box2(minX: -1, minY: -1, width: 2, height: 4)
            };

            var polygon2 = PolygonUtils.Union(rectangles);
            var cs       = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3));

            var polygon3 = new Polygon3(cs, polygon2);

            var point1 = polygon3.PlaneToSpace(new Vector2(0.1, 0.2));
            var point2 = polygon3.PlaneToSpace(new Vector2(0.9, 0.7));
            var point3 = new Vector3(3.141, 2.718, 0.577);

            var plane = Plane.Through(point1, point2, point3);

            var half1 = polygon3.CropBy(plane);
            var half2 = polygon3.CropBy(plane.Reverse);

            Expect(half1.IsOnNegativeSide(Plane.ParallelTo(plane, _tolerance)));
            Expect(half2.IsOnPositiveSide(Plane.ParallelTo(plane, -_tolerance)));

            Expect(half1.InPlane.Area() + half2.InPlane.Area(), Is.EqualTo(polygon3.InPlane.Area()).Within(_tolerance));
        }
        public TransformedPolysurface(IPolysurface localSurface, RotoTranslation3 localToGlobal)
        {
            _localSurface  = localSurface;
            _localToGlobal = localToGlobal;

            _vertexCollection = new VertexCollection(this);
            _edgeCollection   = new EdgeCollection(this);
            _faceCollection   = new FaceCollection(this);

            _undirectedComparer = new UndirectedEdgeComparerImpl(this);
        }
        public void TransformedPolysurface_Face_normals_result_from_original_IPolysurface_Face_normals_by_applying_Rotation3()
        {
            var origSurface    = MockPolysurface();
            var transformation = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3));

            var transSurface = new TransformedPolysurface(origSurface, transformation);

            var normal = transSurface.Faces.ElementAt(1).Normal;

            Expect(Vector3.Distance(normal, transformation.Rotation * MockFaceNormal(1)), Is.LessThan(_tolerance));
        }
        public void TransformedPolysurface_Vertex_points_result_from_original_IPolysurface_Vertex_points_by_applying_RotoTranslation3()
        {
            var origSurface    = MockPolysurface();
            var transformation = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3));

            var transSurface = new TransformedPolysurface(origSurface, transformation);

            var point = transSurface.Vertices.ElementAt(1).Point;

            Expect(Vector3.Distance(point, transformation.Apply(MockVertexPoint(1))), Is.LessThan(_tolerance));
        }
        public void TransformedPolysurface_Face_polygons_result_from_original_IPolysurface_Face_polygons_by_applying_RotoTranslation3()
        {
            var origSurface    = MockPolysurface();
            var transformation = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3));

            var transSurface = new TransformedPolysurface(origSurface, transformation);

            var polygon = transSurface.Faces.ElementAt(1).Polygon;

            var actualVertex   = polygon.Contours().First().Vertices.First();
            var expectedVertex = transformation.Apply(MockFacePolygon(1)).Contours().First().Vertices.First();

            Expect(Vector3.Distance(actualVertex, expectedVertex), Is.LessThan(_tolerance));
        }
Beispiel #6
0
        public void CropVisible_returns_null_when_LocalModel_CropVisible_returns_null()
        {
            var localModel = Mock.Of <IImageModel>(model => model.CropVisible(It.IsAny <Segment3>()) == null);

            var localToGlobal = new RotoTranslation3((Rotation3) new Quaternion(1.1, 2.2, 3.3, 4.4), new Vector3(1.23, 4.56, 2.56));

            var globalModel = new TransformedImageModel(localModel, localToGlobal);

            var segment = new Segment3(new Vector3(7, 8, 9), new Vector3(-1, -2, -4));

            var crop = globalModel.CropVisible(segment);

            Expect(crop == null);
        }
Beispiel #7
0
        public void CropVisible_returns_correct_result_when_LocalModel_CropVisible_returns_not_null()
        {
            var point = new Vector3(3.141, 0.577, 2.718);

            var localModelMock = new Mock <IImageModel>();

            localModelMock.Setup(model => model.CropVisible(It.IsAny <Segment3>())).Returns((Segment3 s) => new Segment3(s.Start, point));

            var localToGlobal = new RotoTranslation3((Rotation3) new Quaternion(1.1, 2.2, 3.3, 4.4), new Vector3(1.23, 4.56, 2.56));

            var globalModel = new TransformedImageModel(localModelMock.Object, localToGlobal);

            var segment = new Segment3(new Vector3(7, 8, 9), new Vector3(-1, -2, -4));

            var crop = globalModel.CropVisible(segment);

            var transPoint = localToGlobal.Apply(point);

            Expect(crop != null);
            Expect(Vector3.Distance(crop.Value.Start, segment.Start), Is.LessThan(_tolerance));
            Expect(Vector3.Distance(crop.Value.End, transPoint), Is.LessThan(_tolerance));
        }
 public TransformedPolyhedron(IPolyhedron localPolyhedron, RotoTranslation3 localToGlobal) : base(localPolyhedron, localToGlobal)
 {
     _localPolyhedron = localPolyhedron;
 }
 public Polygon3(RotoTranslation3 coordinateSystem, IPolygon polygon)
 {
     _coordinateSystem = coordinateSystem;
     _polygon          = polygon;
 }
Beispiel #10
0
 public TransformedImageModel(IImageModel localModel, RotoTranslation3 localToGlobal)
 {
     _localModel    = localModel;
     _localToGlobal = localToGlobal;
 }