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); }
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); }