Esempio n. 1
0
        public static List <MassFormModel> GetMassFormModels(ExternalCommandData commandData, string massFamilyName)
        {
            var massForms = FamilyInstanceUtils.GetAllTheFamilyInstancesOfFamily(commandData, massFamilyName);

            var massFormModels = new List <MassFormModel>();

            foreach (var massFormInstance in massForms)
            {
                var massFormModelItem = new MassFormModel
                {
                    Model = massFormInstance,
                    Faces = massFormInstance.GetFacesFromElement()
                };
                massFormModels.Add(massFormModelItem);
            }
            return(massFormModels);
        }
Esempio n. 2
0
        private static PipeAndMassIntersectionModel GetIntersection(
            PipeModel pipeModel,
            MassFormModel massFormModel,
            List <XYZ> fittingPointList)
        {
            var intersectionsInstance = new PipeAndMassIntersectionModel {
                Pipe = pipeModel, MassForm = massFormModel
            };
            var pipeCurveStartPoint = pipeModel.StarPoint;
            var pipeCurveEndPoint   = pipeModel.EndPoint;

            foreach (var massFace in massFormModel.Faces)
            {
                IntersectionResultArray intersectionResultArray = null;
                massFace.Intersect(pipeModel.Curve, out intersectionResultArray);
                if (intersectionResultArray == null)
                {
                    continue;
                }
                foreach (IntersectionResult intResult in intersectionResultArray)
                {
                    if (intResult.XYZPoint == null)
                    {
                        continue;
                    }
                    var intersectPoint = intResult.XYZPoint;

                    //Проверяем совпадает ли точка пересечения с точкой коннектора фитинга
                    bool isFittingPointMatch = false;
                    foreach (var fittingPoint in fittingPointList)
                    {
                        if (intersectPoint.IsEqualByXYZ(fittingPoint, 5))
                        {
                            isFittingPointMatch = true;
                            break;
                        }
                    }

                    if (isFittingPointMatch)
                    {
                        continue;
                    }

                    //Если точка коннектора трубы совпадает с точкой пересечения, то улетаем
                    if (intersectPoint.IsEqualByXYZ(pipeCurveStartPoint, 5) ||
                        intersectPoint.IsEqualByXYZ(pipeCurveEndPoint, 5))
                    {
                        continue;
                    }

                    //проверяем находится ли точка на линии по ХУ и по высотной отметке Z
                    bool isIntersectPointInRange
                        = NumberUtils.IsInRange(
                              intersectPoint.Z,
                              Math.Min(pipeCurveStartPoint.Z, pipeCurveEndPoint.Z),
                              Math.Max(pipeCurveStartPoint.Z, pipeCurveEndPoint.Z));

                    if (intersectPoint.IsPointBetweenOtherPoints(pipeCurveEndPoint, pipeCurveStartPoint, 5) &&
                        isIntersectPointInRange)
                    {
                        intersectionsInstance.IntersectionPoints.Add(intersectPoint);
                    }
                }
            }

            return((intersectionsInstance.IntersectionPoints.Count > 0) ? intersectionsInstance : null);
        }
        private static CableTrayAndMassIntersectionModel GetIntersection(CableTrayModel CableTrayModel, MassFormModel massFormModel)
        {
            var intersectionsInstance = new CableTrayAndMassIntersectionModel
            {
                CableTray = CableTrayModel,
                MassForm  = massFormModel
            };

            var cableTrayCurveStartPoint = CableTrayModel.StarPoint;
            var cableTrayCurveEndPoint   = CableTrayModel.EndPoint;

            foreach (var massFace in massFormModel.Faces)
            {
                IntersectionResultArray intersectionResultArray = null;
                massFace.Intersect(CableTrayModel.Curve, out intersectionResultArray);
                if (intersectionResultArray == null)
                {
                    continue;
                }
                foreach (IntersectionResult intResult in intersectionResultArray)
                {
                    if (intResult.XYZPoint == null)
                    {
                        continue;
                    }



                    var intersectPoint = intResult.XYZPoint;

                    bool isIntersectPointInRange
                        = NumberUtils.IsInRange(
                              intersectPoint.Z,
                              Math.Min(cableTrayCurveStartPoint.Z, cableTrayCurveStartPoint.Z),
                              Math.Max(cableTrayCurveEndPoint.Z, cableTrayCurveEndPoint.Z));

                    //проверяем находится ли точка на линии
                    if (GeomShark.PointUtils.IsPointBetweenOtherTwoPoints(
                            cableTrayCurveStartPoint.X, cableTrayCurveStartPoint.Y,
                            cableTrayCurveEndPoint.X, cableTrayCurveEndPoint.Y,
                            intersectPoint.X, intersectPoint.Y, 4))
                    {
                        intersectionsInstance.IntersectionPoints.Add(intersectPoint);
                    }
                }
            }

            return((intersectionsInstance.IntersectionPoints.Count > 0) ? intersectionsInstance : null);
        }