//************************************************************************************************ // Создание и добавление линии. //************************************************************************************************ //Создание линии. public LineGraph createLine(PlaceForLine placeFrom) { //Параметры добавляемой линии. int id = countID; int type = TYPE_OBJECT.LINE;; ObjectGraph objectFrom = placeFrom.getObject(); Point startPoint = new Point(placeFrom.getPointForLine().X, placeFrom.getPointForLine().Y); //Создание линии. LineGraph lineGraph = new LineGraph(id, type, objectFrom, startPoint, null, new Size(8, 8)); //Добавление линии в список объектов. aObjectGraph.Add(lineGraph); //Привязка линии к объекту. placeFrom.setLine(lineGraph, true); //Присоединение линии к месту. placeFrom.setLocked(true); //Место занято. placeFrom.setColorContour(Color.Black); //Снятие выделения места. return(lineGraph); }
//Определение положения текста линии. private Point getPointTextLine(VertexGraph vertexFrom, PlaceForLine placeFrom) { //Если условная вершина то выбор положения текста относительно места для вывода линии. if (isCondition(vertexFrom) == true) { Point pointPlace = placeFrom.getPointArea(); switch (placeFrom.getID()) { case 0: return(new Point(pointPlace.X + placeFrom.getSizeArea().Width, pointPlace.Y - 20)); //Справа. case 1: return(new Point(pointPlace.X + 5, pointPlace.Y)); //Снизу. case 2: return(new Point(pointPlace.X - 3, pointPlace.Y - 20)); //Слева. default: return(new Point(0, 0)); } } else { return(new Point(0, 0)); } }
//Нажатие мыши. private void pictureBoxGraph_MouseDown(object sender, MouseEventArgs e) { Point cursor = new Point(e.X, e.Y); ObjectGraph bufferObject = detectorObject.getBufferObject(); //Нажатие клавиши для выбора начального места для вершины. if (bufferCreatedVertex != null) { addVertex(); } //Если кнопка нажата на объекте. if (bufferObject != null) { switch (bufferObject.getType()) { ///////////////////////////////////////////////////////////////////////////////////////////////// //Удаление сегмента линии. case TYPE_OBJECT.LINE: { LineGraph line = (LineGraph)bufferObject; //Приведение типов. if (line.getObjectFrom() != null) { if (line.getObjectFrom().getType() == TYPE_OBJECT.VERTEX) { VertexGraph vertexFrom = (VertexGraph)(line.getObjectFrom()); //Получение вершины, из которой выходила линия. checkingDeletedTransition(line); //Проверка удаленного разорванного пути. originalBitmap = constructorLine.deleteSegmentLine(line, originalBitmap, cursor); //Удаление сегментов линии с отображенеим на холсте. pictureBoxGraph.Image = originalBitmap; //Отображение изменения на холсте. detectorObject.setOriginalBitmap(originalBitmap); //В распознаватель объектов посылаем новый холст. this.Cursor = Cursors.Default; //Изменение курсора мыши на обычный. //Проверяем необходимость разблокировки заблокированного 3 места. if (isCondition(vertexFrom) == true) { checkUnLockPlaceFromCondition(vertexFrom); } } } break; } ///////////////////////////////////////////////////////////////////////////////////////////////// //Построение линии. case TYPE_OBJECT.PLACE_FOR_LINE: { PlaceForLine place = (PlaceForLine)detectorObject.getBufferObject(); //Если место для линии принадлежит линии, то продолжаем линию. if (place.getObject().getType() == TYPE_OBJECT.LINE) { pictureBoxGraph.Image = constructorLine.preparation((LineGraph)place.getObject(), originalBitmap); } //Если место для линии не принадлежит линии, то создаем новую линию. else { detectorObject.getBufferObject().setColorContour(Color.Black); //Снимаем выделение у места для вывода линии. pictureBoxGraph.Image = constructorLine.preparation(createLine(place), originalBitmap); //Проверяем необходимость блокировки 3 места, если это условие. if (isCondition(place.getObject()) == true) { checkLockPlaceFromCondition((VertexGraph)place.getObject()); } countID++; //Увеличиваем индекс первого свободного идентификатора. } break; } ///////////////////////////////////////////////////////////////////////////////////////////////// //Перемещение объекта. default: { pictureBoxGraph.Image = moveVertex.preparation(detectorObject.getBufferObject(), detectorObject.getDrawBitmap(), cursor); break; } ///////////////////////////////////////////////////////////////////////////////////////////////// } } //Установка флага зажатой клавиши мыши. mousePress = true; }