Example #1
0
        public static List <CableTrayModel> GetCableTrayModels(ExternalCommandData commandData)
        {
            var condModelList = new List <CableTrayModel>();
            var cableTrays    = GenericSelectionUtils <CableTray> .GetObjectsByType(commandData);

            foreach (var oCableTray in cableTrays)
            {
                var startEndPoints = oCableTray.GetStartAndEndPoint();
                var connectors     = oCableTray.GetConnectors();

                if (startEndPoints.Count < 2 || connectors.Count < 2)
                {
                    continue;
                }

                var condModel = new CableTrayModel
                {
                    Model           = oCableTray,
                    Curve           = oCableTray.GetCurve(),
                    StarPoint       = startEndPoints[0],
                    EndPoint        = startEndPoints[1],
                    ConnectorFirst  = connectors[0],
                    ConnectorSecond = connectors[1]
                };
                condModelList.Add(condModel);
            }
            return(condModelList);
        }
        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);
        }
Example #3
0
 public void CreateCableTraysFromIntersectionPoints(
     List <CableTrayAndMassIntersectionModel> cableTrayAndMassFormIntersectionList,
     ExternalCommandData commandData)
 {
     foreach (var cableTrayAndMassInt in cableTrayAndMassFormIntersectionList)
     {
         //Выбираем точки, по которым будем создавать трубы
         var pointsToCreateCableTrays = new List <XYZ>();
         pointsToCreateCableTrays.Add(cableTrayAndMassInt.CableTray.StarPoint);
         pointsToCreateCableTrays.AddRange(cableTrayAndMassInt.IntersectionPoints
                                           .OrderBy(p => p.DistanceTo(cableTrayAndMassInt.CableTray.StarPoint)).ToList());
         pointsToCreateCableTrays.Add(cableTrayAndMassInt.CableTray.EndPoint);
         bool isNewCableTrayCreated = false;
         for (int i = 0; i < pointsToCreateCableTrays.Count; i++)
         {
             if (i == 0)
             {
                 continue;
             }
             var currentPoint = pointsToCreateCableTrays[i];
             var prevPoint    = pointsToCreateCableTrays[i - 1];
             if (currentPoint.IsEqualByXYZ(prevPoint, 5))
             {
                 continue;
             }
             //Создаём новую трубу по новым точкам, но присваивая свойства прошлой трубы
             var newCableTray = CableTraysUtils.CreateNewCableTrayByTypeOfExisted(
                 cableTrayAndMassInt.CableTray.Model, currentPoint, prevPoint, commandData);
             if (newCableTray == null)
             {
                 continue;
             }
             var newCableTrayModel = CableTrayModel.Create(newCableTray);
             if (newCableTrayModel != null)
             {
                 CableTrays.Add(newCableTrayModel);
                 isNewCableTrayCreated = true;
             }
         }
         //если создавался новый элемент на основе старого, то старый удаляем.
         if (isNewCableTrayCreated)
         {
             DeleteUtils.DeleteElements(commandData, new List <Element> {
                 cableTrayAndMassInt.CableTray.Model
             });
         }
     }
 }