-
-
-void RS_ActionModifyDeleteFree::mouseReleaseEvent(QMouseEvent* e) {
- if (RS2::qtToRsButtonState(e->button())==RS2::RightButton) {
- init(getStatus()-1);
- } else {
-
- switch (getStatus()) {
- case 0: {
- v1 = snapPoint(e);
- e1 = getKeyEntity();
- if (e1!=NULL) {
- RS_EntityContainer* parent = e1->getParent();
- if (parent!=NULL) {
- if (parent->rtti()==RS2::EntityPolyline) {
- polyline = (RS_Polyline*)parent;
- setStatus(1);
- } else {
- RS_DIALOGFACTORY->commandMessage(
- tr("Parent of first entity is not a polyline"));
- }
- } else {
- RS_DIALOGFACTORY->commandMessage(
- tr("Parent of first entity is NULL"));
- }
- } else {
- RS_DIALOGFACTORY->commandMessage(
- tr("First entity is NULL"));
- }
- }
- break;
-
- case 1: {
- v2 = snapPoint(e);
- e2 = getKeyEntity();
-
- if (e2!=NULL) {
- trigger();
- } else {
- RS_DIALOGFACTORY->commandMessage(tr("Second entity is NULL"));
- }
- }
- break;
- }
- }
+void RS_ActionModifyDeleteFree::trigger()
+{
+ if (e1 != NULL && e2 != NULL)
+ {
+ RS_EntityContainer * parent = e2->getParent();
+
+ if (parent != NULL)
+ {
+ if (parent->rtti() == RS2::EntityPolyline)
+ {
+ if (parent->getId() == polyline->getId())
+ {
+ // deletes whole polyline on screen:
+ graphicView->deleteEntity((RS_Entity *)polyline);
+
+ // splits up the polyline in the container:
+ RS_Polyline * pl1;
+ RS_Polyline * pl2;
+ RS_Modification m(*container);
+ m.splitPolyline(*polyline,
+ *e1, v1,
+ *e2, v2,
+ &pl1, &pl2);
+
+ if (document)
+ {
+ document->startUndoCycle();
+ document->addUndoable(polyline);
+ document->addUndoable(pl1);
+ document->addUndoable(pl2);
+ document->endUndoCycle();
+ }
+
+ // draws the new polylines on the screen:
+ graphicView->drawEntity((RS_Entity *)pl1);
+ graphicView->drawEntity((RS_Entity *)pl2);
+
+ init();
+
+ RS_DIALOGFACTORY->updateSelectionWidget(
+ container->countSelected());
+ }
+ else
+ RS_DIALOGFACTORY->commandMessage(tr("Entities not in the same polyline."));
+ }
+ else
+ RS_DIALOGFACTORY->commandMessage(tr("Parent of second entity is not a polyline"));
+ }
+ else
+ RS_DIALOGFACTORY->commandMessage(tr("Parent of second entity is NULL"));
+ }
+ else
+ RS_DIALOGFACTORY->commandMessage(tr("One of the chosen entities is NULL"));