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