/// <summary> /// Compute the distance between two planar faces. /// </summary> /// <param name="face1">Face 1</param> /// <param name="face2">Face 2</param> /// <returns>Distance of the two planar faces</returns> private static double GetDistance(PlanarFace face1, PlanarFace face2) { BoundingBoxUV boxUV = face2.GetBoundingBox(); UV center = (boxUV.Max + boxUV.Min) * 0.5; XYZ centerPt = face2.Evaluate(center); IntersectionResult result = face1.Project(centerPt); return(face1.Project(centerPt).Distance); }
/// <summary> /// Compute the distance between two planar faces. /// </summary> /// <param name="face1">Face 1</param> /// <param name="face2">Face 2</param> /// <returns>Distance of the two planar faces</returns> private static double GetDistance(PlanarFace face1, PlanarFace face2) { BoundingBoxUV boxUV = face2.GetBoundingBox(); UV center = (boxUV.Max + boxUV.Min) * 0.5; XYZ centerPt = face2.Evaluate(center); IntersectionResult result = face1.Project(centerPt); return face1.Project(centerPt).Distance; }
private XYZ GetOrigin(PlanarFace planarFace , double volumeParametrA , string nameRebarShape) { double otherCoverDistance = (doc.GetElement(host.get_Parameter (BuiltInParameter.CLEAR_COVER_OTHER).AsElementId()) as RebarCoverType) .CoverDistance; double topCoverDistance = (doc.GetElement(host.get_Parameter (BuiltInParameter.CLEAR_COVER_TOP).AsElementId()) as RebarCoverType) .CoverDistance; if (nameRebarShape == "Стж_Г") { double x = planarFace.Origin.X; double y = planarFace.Origin.Y; double z = planarFace.Origin.Z + planarFace.GetBoundingBox().Max.U - topCoverDistance; if (planarFace.FaceNormal.X > 0) { x = x - Math.Abs(planarFace.FaceNormal.X * (volumeParametrA + otherCoverDistance)); } if (planarFace.FaceNormal.X < 0) { x = x + Math.Abs(planarFace.FaceNormal.X * (volumeParametrA + otherCoverDistance)); } if (planarFace.FaceNormal.Y > 0) { y = y - Math.Abs(planarFace.FaceNormal.Y * (volumeParametrA + otherCoverDistance)); } if (planarFace.FaceNormal.Y < 0) { y = y + Math.Abs(planarFace.FaceNormal.Y * (volumeParametrA + otherCoverDistance)); } return(new XYZ(x, y, z)); } if (nameRebarShape == "Стж_П") { double x = planarFace.Origin.X; double y = planarFace.Origin.Y; if (planarFace.FaceNormal.X < 0) { x = x + Math.Abs(planarFace.FaceNormal.X * ((VolumeParametrA + otherCoverDistance - 500) / coof)); } if (planarFace.FaceNormal.X > 0) { x = x - Math.Abs(planarFace.FaceNormal.X * ((VolumeParametrA + otherCoverDistance - 500) / coof)); } if (planarFace.FaceNormal.Y < 0) { y = y + Math.Abs(planarFace.FaceNormal.Y * ((VolumeParametrA + otherCoverDistance - 500) / coof)); } if (planarFace.FaceNormal.Y > 0) { y = y - Math.Abs(planarFace.FaceNormal.Y * ((VolumeParametrA + otherCoverDistance - 500) / coof)); } double z = planarFace.Origin.Z + planarFace.GetBoundingBox().Max.U - topCoverDistance; return(new XYZ(x, y, z)); } else { return(null); } }