public override void SetScene(IRayEngineScene secn)
        {

            Tracer.TraceLine("OptixIntersectionDevice  -  Initializing Optix");
            this.scene = (RayEngineScene)secn;
            td = scene.Triangles.SelectMany(tr => new[]
            {
                scene.Vertices[tr.v0.VertexIndex].x,
                scene.Vertices[tr.v0.VertexIndex].y,
                scene.Vertices[tr.v0.VertexIndex].z,
                scene.Vertices[tr.v1.VertexIndex].x,
                scene.Vertices[tr.v1.VertexIndex].y,
                scene.Vertices[tr.v1.VertexIndex].z,
                scene.Vertices[tr.v2.VertexIndex].x,
                scene.Vertices[tr.v2.VertexIndex].y,
                scene.Vertices[tr.v2.VertexIndex].z,

            }).ToArray();
            this.triangles = scene.Triangles.Select(tr => new TriInfo
            {
                v0x = scene.Vertices[tr.v0.VertexIndex].x,
                v1x = scene.Vertices[tr.v1.VertexIndex].x,
                v2x = scene.Vertices[tr.v2.VertexIndex].x,

                v0y = scene.Vertices[tr.v0.VertexIndex].y,
                v1y = scene.Vertices[tr.v1.VertexIndex].y,
                v2y = scene.Vertices[tr.v2.VertexIndex].y,

                v0z = scene.Vertices[tr.v0.VertexIndex].z,
                v1z = scene.Vertices[tr.v1.VertexIndex].z,
                v2z = scene.Vertices[tr.v2.VertexIndex].z,

            }).ToArray();
            if (trav == null)
                trav = new Traversal(Context, QueryType.ClosestHit, RayFormat.OriginDirectionMinMaxInterleaved, TriFormat.TriangleSoup, TraversalOutput.BaryCentric, InitOptions.CullBackFace);

            trav.SetTriangles(td);
        }
Beispiel #2
0
 public ByTraversalStep(Traversal traversal) : base(traversal.GetSideEffectSemanticsChange())
 {
     Traversal = traversal;
 }
 public WithStrategiesStep(Traversal traversal) : base(traversal.GetSideEffectSemanticsChange())
 {
     Traversal = traversal;
 }
Beispiel #4
0
 public ByTraversalStep(Traversal traversal, Order order) : base(traversal.GetSideEffectSemanticsChange())
 {
     Traversal = traversal;
     Order     = order;
 }
Beispiel #5
0
 public OptionTraversalStep(object?guard, Traversal optionTraversal)
 {
     Guard           = guard;
     OptionTraversal = optionTraversal;
 }
Beispiel #6
0
        public static void Traverse(Tour tour, Traversal tm, Visitor vm, Direction d, Filter f = null)
        {
            WriteHeader(tm.ToString() + " - " + vm.ToString() + " - " + d.ToString());

            if (f == null)
            {
                filter = v => true;
            }
            else
            {
                filter = f;
            }

            switch (vm)
            {
            case Visitor.Partition: tour.visit = StandardPartition; break;

            case Visitor.Conjugate: tour.visit = ConjugatedPartition; break;

            case Visitor.Reverse: tour.visit = ReversedPartition; break;

            case Visitor.ReverseConjugate: tour.visit = ReversedConjugatedPartition; break;

            default: tour.visit = PrintPartition; break;
            }

            switch (tm)
            {
            case Traversal.PreOrder:
                if (d == Direction.LeftRight)
                {
                    tour.PreorderLRTraversal();
                }
                else
                {
                    tour.PreorderRLTraversal();
                }
                break;

            case Traversal.InOrder:
                if (d == Direction.LeftRight)
                {
                    tour.InorderLRTraversal();
                }
                else
                {
                    tour.InorderRLTraversal();
                }
                break;

            case Traversal.PostOrder:
                if (d == Direction.LeftRight)
                {
                    tour.PostorderLRTraversal();
                }
                else
                {
                    tour.PostorderRLTraversal();
                }
                break;

            case Traversal.LevelOrder:
                if (d == Direction.LeftRight)
                {
                    tour.LevelorderLRTraversal();
                }
                else
                {
                    tour.LevelorderRLTraversal();
                }
                break;

            case Traversal.BranchOrder:
                if (d == Direction.LeftRight)
                {
                    tour.BranchorderLRTraversal();
                }
                else
                {
                    tour.BranchorderRLTraversal();
                }
                break;
            }
        }
Beispiel #7
0
 /// <summary>
 /// Compute the algorithm starting at the first vertex.
 /// </summary>
 public void Compute()
 {
     this.Compute(Traversal.FirstEdge(this.VisitedGraph).Source);
 }
Beispiel #8
0
 public ChooseTraversalStep(Traversal ifTraversal, Traversal thenTraversal, Traversal?elseTraversal = default) : base(thenTraversal, elseTraversal)
 {
     IfTraversal = ifTraversal;
 }
Beispiel #9
0
 public HasTraversalStep(Key key, Traversal traversal) : base(traversal.GetSideEffectSemanticsChange())
 {
     Key       = key;
     Traversal = traversal;
 }
Beispiel #10
0
 public ToTraversalStep(Traversal traversal)
 {
     Traversal = traversal;
 }
Beispiel #11
0
 public FromTraversalStep(Traversal traversal)
 {
     Traversal = traversal;
 }
Beispiel #12
0
 public FlatMapStep(Traversal traversal)
 {
     Traversal = traversal;
 }
 public HasTraversalStep(Key key, Traversal traversal)
 {
     Key       = key;
     Traversal = traversal;
 }
Beispiel #14
0
        internal override GremlinToSqlContext GetContext()
        {
            GremlinToSqlContext inputContext = GetInputContext();

            switch (OpType)
            {
            //has(key)
            case HasOpType.HasProperty:
                inputContext.PivotVariable.Has(inputContext, PropertyKey);
                break;

            //has(key, value)
            case HasOpType.HasPropertyValue:
                inputContext.PivotVariable.Has(inputContext, PropertyKey, Value);
                break;

            //has(key, predicate)
            case HasOpType.HasPropertyPredicate:
                inputContext.PivotVariable.Has(inputContext, PropertyKey, Predicate);
                break;

            //has(label, key, value)
            case HasOpType.HasLabelPropertyValue:
                inputContext.PivotVariable.Has(inputContext, Label, PropertyKey, Value);
                break;

            //has(label, key, predicate)
            case HasOpType.HasLabelPropertyPredicate:
                inputContext.PivotVariable.Has(inputContext, Label, PropertyKey, Predicate);
                break;

            case HasOpType.HasPropertyTraversal:
                Traversal.GetStartOp().InheritedVariableFromParent(inputContext);
                if (Traversal.GetStartOp() is GremlinParentContextOp)
                {
                    if (Traversal.GremlinTranslationOpList.Count > 1)
                    {
                        Traversal.InsertGremlinOperator(1, new GremlinValuesOp(PropertyKey));
                    }
                    else
                    {
                        Traversal.AddGremlinOperator(new GremlinValuesOp(PropertyKey));
                    }
                }
                GremlinToSqlContext hasContext = Traversal.GetEndOp().GetContext();
                inputContext.PivotVariable.Has(inputContext, PropertyKey, hasContext);
                break;

            //hasId(values)
            case HasOpType.HasId:
                inputContext.PivotVariable.HasId(inputContext, Values);
                break;

            //hasId(predicate)
            case HasOpType.HasIdPredicate:
                inputContext.PivotVariable.HasId(inputContext, Predicate);
                break;

            //hasKey(values)
            case HasOpType.HasKey:
                inputContext.PivotVariable.HasKey(inputContext, Keys);
                break;

            //hasKey(predicate)
            case HasOpType.HasKeyPredicate:
                inputContext.PivotVariable.HasKey(inputContext, Predicate);
                break;

            //hasLabel(values)
            case HasOpType.HasLabel:
                inputContext.PivotVariable.HasLabel(inputContext, Values);
                break;

            //hasLabel(predicate)
            case HasOpType.HasLabelPredicate:
                inputContext.PivotVariable.HasLabel(inputContext, Predicate);
                break;

            //hasValue(values)
            case HasOpType.HasValue:
                inputContext.PivotVariable.HasValue(inputContext, Values);
                break;

            //hasValue(predicate)
            case HasOpType.HasValuePredicate:
                inputContext.PivotVariable.HasValue(inputContext, Predicate);
                break;
            }

            return(inputContext);
        }