Beispiel #1
0
        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);
        }