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