//************************************************************************************************ // Создание и добавление линии. //************************************************************************************************ //Создание линии. 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 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; }