public bool IsValid(RoadCentreLine centre, double distance) { if (!(centre.GetCurve() is Arc arc)) { return(true); } return(arc.Radius > distance && distance > 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); } }