public static List <ConduitModel> GetConduitModels(ExternalCommandData commandData) { var condModelList = new List <ConduitModel>(); var conduits = GenericSelectionUtils <Conduit> .GetObjectsByType(commandData); foreach (var oConduit in conduits) { var startEndPoints = oConduit.GetStartAndEndPoint(); var connectors = oConduit.GetConnectors(); if (startEndPoints.Count < 2 || connectors.Count < 2) { continue; } var condModel = new ConduitModel { Model = oConduit, Curve = oConduit.GetCurve(), StarPoint = startEndPoints[0], EndPoint = startEndPoints[1], ConnectorFirst = connectors[0], ConnectorSecond = connectors[1] }; condModelList.Add(condModel); } return(condModelList); }
private static ConduitAndMassIntersectionModel GetIntersection(ConduitModel ConduitModel, MassFormModel massFormModel) { var intersectionsInstance = new ConduitAndMassIntersectionModel { Conduit = ConduitModel, MassForm = massFormModel }; var conduitCurveStartPoint = ConduitModel.StarPoint; var conduitCurveEndPoint = ConduitModel.EndPoint; foreach (var massFace in massFormModel.Faces) { IntersectionResultArray intersectionResultArray = null; massFace.Intersect(ConduitModel.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(conduitCurveStartPoint.Z, conduitCurveStartPoint.Z), Math.Max(conduitCurveEndPoint.Z, conduitCurveEndPoint.Z)); //проверяем находится ли точка на линии if (GeomShark.PointUtils.IsPointBetweenOtherTwoPoints( conduitCurveStartPoint.X, conduitCurveStartPoint.Y, conduitCurveEndPoint.X, conduitCurveEndPoint.Y, intersectPoint.X, intersectPoint.Y, 4)) { intersectionsInstance.IntersectionPoints.Add(intersectPoint); } } } return((intersectionsInstance.IntersectionPoints.Count > 0) ? intersectionsInstance : null); }