예제 #1
0
            public ProjectionBuilder(IVertexBase source, TValue value, ProjectionVisitor <TValue> visitor, ProjectionGraph graph)
            {
                Source = source;
                Value  = value;

                _visitor = visitor;
                _graph   = graph;
            }
예제 #2
0
        private ProjectionGraph BuildProjectionGraph()
        {
            var graph = new ProjectionGraph();

            foreach (IView view in Views)
            {
                if (view.Camera == null)
                {
                    continue;
                }

                var viewVertex = new ViewVertex(view);
                graph.AddViewVertex(view, viewVertex);

                ISceneNode viewSceneRoot = view.GetSceneNode().RootNode();
                if (viewSceneRoot != null)
                {
                    SceneVertex viewSceneVertex = graph.GetSceneVertex(viewSceneRoot);
                    if (viewSceneVertex == null)
                    {
                        viewSceneVertex = new SceneVertex(viewSceneRoot);
                        graph.AddSceneVertex(viewSceneRoot, viewSceneVertex);
                    }

                    new SceneToViewEdge().Link(viewSceneVertex, viewVertex);
                }

                ISceneNode  cameraSceneRoot   = view.Camera.GetSceneNode().RootNode();
                SceneVertex cameraSceneVertex = graph.GetSceneVertex(cameraSceneRoot);
                if (cameraSceneVertex == null)
                {
                    cameraSceneVertex = new SceneVertex(cameraSceneRoot);
                    graph.AddSceneVertex(cameraSceneRoot, cameraSceneVertex);
                }

                new ViewToSceneEdge().Link(viewVertex, cameraSceneVertex);
            }

            return(graph);
        }
예제 #3
0
        public IProjectionController <Transformation> ProjectFrom(ISceneNode sceneNode, Transformation transformation)
        {
            ProjectionGraph graph = BuildProjectionGraph();

            return(new ProjectionBuilder <Transformation>(graph.GetSceneVertex(sceneNode), transformation, new TransformationProjectionVisitor(), graph));
        }
예제 #4
0
        public IProjectionController <Transformation> ProjectFrom(IView view, Transformation transformationOnView)
        {
            ProjectionGraph graph = BuildProjectionGraph();

            return(new ProjectionBuilder <Transformation>(graph.GetViewVertex(view), transformationOnView, new TransformationProjectionVisitor(), graph));
        }
예제 #5
0
        public IProjectionController <Vector2> ProjectFromPosition(ISceneNode sceneNode)
        {
            ProjectionGraph graph = BuildProjectionGraph();

            return(new ProjectionBuilder <Vector2>(graph.GetSceneVertex(sceneNode), sceneNode.Position, new PositionProjectionVisitor(), graph));
        }
예제 #6
0
        public IProjectionController <Vector2> ProjectFromPosition(IView view, Vector2 positionOnView)
        {
            ProjectionGraph graph = BuildProjectionGraph();

            return(new ProjectionBuilder <Vector2>(graph.GetViewVertex(view), positionOnView, new PositionProjectionVisitor(), graph));
        }