Ejemplo n.º 1
0
            //
            // Loop across all points in FaultInterpretation polylines:
            // 1. set context to Cube
            // 2. set attribute value from Cube (the same as for Horizon in main exercise)
            //
            private void calcFI(FaultInterpretation fi, SeismicCube cube, ITransaction tr)
            {
                // Check for Domain
                if (cube.Domain != fi.Domain)
                {
                    return;
                }
                // Lock FaultInterpretation for update
                tr.Lock(fi);
                FaultProperty fp = findOrCreateFProperty(fi, cube.Template, "Ocean Fault Property", tr);

                // Set Cube as a context for FaultInterpretation
                List <FaultInterpretationPolyline>        chgdPolylines = new List <FaultInterpretationPolyline>();
                IEnumerable <FaultInterpretationPolyline> fiPolylines   = fi.GetPolylines();

                // Process each poly line and set the context for each point.
                foreach (FaultInterpretationPolyline poly in fiPolylines)
                {
                    foreach (FaultInterpretationContextPoint pt in poly)
                    {
                        // Must cast as Context is IDomainObject and can be SeismicLine2D or SeismicCube.
                        pt.Context = (IDomainObject)cube;
                    }
                    chgdPolylines.Add(poly);
                }
                fi.SetPolylines(chgdPolylines);


                // set attribute's values via PointPropertyRecord, the same way as for Horizon

                Index3 cubeIndex = cube.NumSamplesIJK;

                foreach (PointPropertyRecord ppr in fp)
                {
                    ppr.Value = double.NaN;
                    Point3       p          = ppr.Geometry;
                    IndexDouble3 ptIndexDbl = cube.IndexAtPosition(p);
                    Index3       seisIndex  = ptIndexDbl.ToIndex3();
                    if (seisIndex.I >= 0 && seisIndex.J >= 0 &&
                        seisIndex.I < cubeIndex.I && seisIndex.J < cubeIndex.J)
                    {
                        ITrace trace = cube.GetTrace(seisIndex.I, seisIndex.J);
                        if (seisIndex.K >= 0 && seisIndex.K < cubeIndex.K)
                        {
                            ppr.Value = trace[seisIndex.K];
                        }
                    }
                }
                return;
            }
Ejemplo n.º 2
0
            //
            // Check FaultProperty with particular name and template, create if doesn't exist
            //
            private FaultProperty findOrCreateFProperty(FaultInterpretation fi, Template t, string Name, ITransaction tr)
            {
                FaultProperty fp = fi.FaultProperties.Where(prp => (prp.Name == Name && prp.Template == t)).FirstOrDefault();

                if (fp == null)
                {
                    fp      = fi.CreateProperty(t);
                    fp.Name = Name;
                }
                else
                {
                    tr.Lock(fp);
                }
                return(fp);
            }