public override void Do() { if (IsDone) { throw new Exception("CBuildLineAction already was done (new line id: " + createdLineView.Model.Id + ")"); } bool isAnjoinedLine = IsBuildToLine ? point1.Value.Model.Contains(segment.Value.Owner.Model) : point1.Value.Model.GetCommonLine(point2.Value.Model) != null; if (isAnjoinedLine) // выйти, если новая линия будет совпадать с какой-либо существующей { return; } // если были выбраны точка и отрезок, создать вторую точку if (IsBuildToLine) { divideAction.Do(); var newPoint = segment.Value.Owner.PointAt(segment.Value.IndexInLine + 1); point2 = new CVPointWrap(Owner, newPoint); } CMLine line = Owner.model.CreateLine(point1.Id, point2.Id); var lineView = Owner.lineViewDict[line.Id]; createdLineView = lineView; }
// обработчик события создания прямой модели private void Model_LineCreated(CMShape shape, CMLine line) { // создание вида для очередной линии CVLine lineView = new CVLine(linesObj, line); lineView.Selected += LineView_Selected; for (int j = 0; j < line.PointsCount; j++) { lineView.AddPoint(pointViewDict[line.PointAt(j).Id]); } lineViewDict.Add(line.Id, lineView); }
public CVLine(Transform segmentsOwner, CMLine model) { Model = model; SegmentsOwner = segmentsOwner; }