public new void Create(CarriageWay carriageWay, RoadCentreLine centreLine)
 {
     if (centreLine.Road.LeftPavementActive)
     {
         base.Create(carriageWay, centreLine);
     }
 }
        public bool IsValid(RoadCentreLine centre, double distance)
        {
            if (!(centre.GetCurve() is Arc arc))
            {
                return(true);
            }

            return(arc.Radius > distance && distance > 0);
        }
Beispiel #3
0
        protected virtual void Create(CarriageWay carriageWay, RoadCentreLine centreLine)
        {
            var db               = Application.DocumentManager.MdiActiveDocument.Database;
            var acTrans          = TransactionFactory.CreateFromTop();
            var blockTable       = (BlockTable)acTrans.GetObject(db.BlockTableId, OpenMode.ForRead);
            var blockTableRecord = (BlockTableRecord)acTrans.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
            var offsetDist       = DistanceFromCarriageWay(carriageWay);

            foreach (ObjectId obj in carriageWay.Curves.Collection)
            {
                var entity = acTrans.GetObject(obj, OpenMode.ForRead) as Entity;
                if (entity is Curve curve)
                {
                    var curveOffset = curve.CreateOffset(Side, offsetDist);
                    if (curveOffset != null)
                    {
                        curveOffset.Layer = Constants.LAYER_DEF_POINTS;

                        Curves.Add(blockTableRecord.AppendEntity(curveOffset));
                        acTrans.AddNewlyCreatedDBObject(curveOffset, true);
                    }
                }
            }
        }
Beispiel #4
0
        public virtual void Create(RoadCentreLine centreLine)
        {
            var keepList    = new List <Curve>();
            var wasteList   = new List <Curve>();
            var offsetCurve = centreLine.GetCurve().CreateOffset(Side, DistanceFromCentre);

            if (Intersections.Count == 0 & Ignore)
            {
                return;
            }
            keepList.Add(offsetCurve);

            foreach (var intersection in Intersections)
            {
                var hasIntersected = false;

                foreach (var r in keepList.ToList())
                {
                    var splitSets = r.TrySplit(intersection.Point);
                    if (splitSets == null)
                    {
                        continue;
                    }

                    hasIntersected = true;
                    keepList.Remove(r);

                    var beforeCurve = splitSets[0] as Curve;
                    var afterCurve  = splitSets[1] as Curve;

                    if (intersection.Before)
                    {
                        if (beforeCurve != null)
                        {
                            keepList.Add(beforeCurve);
                        }
                        if (afterCurve != null)
                        {
                            wasteList.Add(afterCurve);
                        }
                    }
                    else
                    {
                        if (beforeCurve != null)
                        {
                            wasteList.Add(beforeCurve);
                        }
                        if (afterCurve != null)
                        {
                            keepList.Add(afterCurve);
                        }
                    }
                }

                if (hasIntersected)
                {
                    continue;
                }

                foreach (var w in wasteList.ToList())
                {
                    var splitSets = w.TrySplit(intersection.Point);
                    if (splitSets == null)
                    {
                        continue;
                    }

                    wasteList.Remove(w);

                    var beforeCurve = splitSets[0] as Curve;
                    var afterCurve  = splitSets[1] as Curve;
                    if (intersection.Before)
                    {
                        if (beforeCurve != null)
                        {
                            keepList.Add(beforeCurve);
                        }
                        if (afterCurve != null)
                        {
                            wasteList.Add(afterCurve);
                        }
                    }
                    else
                    {
                        if (beforeCurve != null)
                        {
                            wasteList.Add(beforeCurve);
                        }
                        if (afterCurve != null)
                        {
                            keepList.Add(afterCurve);
                        }
                    }
                }
            }

            var db               = Application.DocumentManager.MdiActiveDocument.Database;
            var acTrans          = TransactionFactory.CreateFromTop();
            var blockTable       = (BlockTable)acTrans.GetObject(db.BlockTableId, OpenMode.ForRead);
            var blockTableRecord = (BlockTableRecord)acTrans.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

            foreach (var curve in keepList)
            {
                curve.Layer = Constants.LAYER_DEF_POINTS;

                Curves.Add(blockTableRecord.AppendEntity(curve));
                acTrans.AddNewlyCreatedDBObject(curve, true);
            }
        }
 public override void Create(RoadCentreLine centreLine)
 {
     base.Create(centreLine);
     Pavement.Create(this, centreLine);
 }