public XbimPoint3D?Position(IIfcVirtualGridIntersection intersect)
 {
     //check all the grids to see which one has the placement
     foreach (var grid in this)
     {
         var pos = grid.Position(intersect);
         if (pos.HasValue)
         {
             return(pos);
         }
     }
     return(null);
 }
Exemple #2
0
        public XbimPoint3D?Position(IIfcVirtualGridIntersection intersect)
        {
            if (intersect == null)
            {
                return(null);
            }
            if (intersect.IntersectingAxes == null)
            {
                return(null);
            }
            if (intersect.IntersectingAxes.Count() != 2)
            {
                return(null);
            }
            var ax1 = intersect.IntersectingAxes[0];
            var ax2 = intersect.IntersectingAxes[1];

            IXbimCurve curve1;
            IXbimCurve curve2;
            var        tolerance = intersect.Model.ModelFactors.Precision;

            if (!_axis.TryGetValue(ax1, out curve1) || !_axis.TryGetValue(ax2, out curve2))
            {
                return(null);
            }
            var hits         = curve1.Intersections(curve2, tolerance);
            var xbimPoint3Ds = hits as XbimPoint3D[] ?? hits.ToArray();

            if (!xbimPoint3Ds.Any())
            {
                return(null);
            }
            var pos    = xbimPoint3Ds.FirstOrDefault();
            var offset = intersect.OffsetDistances.AsTriplet();

            pos = pos + new XbimVector3D(offset.A, offset.B, offset.C);
            return(pos);
        }