示例#1
0
        /// <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);
        }
示例#2
0
 /// <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;
 }
示例#3
0
        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);
            }
        }