void RS_ActionModifyMirror::coordinateEvent(RS_CoordinateEvent* e) { if (e==NULL) { return; } RS_Vector mouse = e->getCoordinate(); switch (getStatus()) { case SetAxisPoint1: axisPoint1 = mouse; setStatus(SetAxisPoint2); graphicView->moveRelativeZero(mouse); break; case SetAxisPoint2: axisPoint2 = mouse; setStatus(ShowDialog); graphicView->moveRelativeZero(mouse); if (RS_DIALOGFACTORY) { if (RS_DIALOGFACTORY->requestMirrorDialog(*data)) { data->axisPoint1 = axisPoint1; data->axisPoint2 = axisPoint2; deletePreview(); trigger(); finish(false); } } break; default: break; } }
void RS_ActionDimLeader::trigger() { RS_PreviewActionInterface::trigger(); if (points.count()>0) { RS_Leader* leader = new RS_Leader(container, RS_LeaderData(true)); leader->setLayerToActive(); leader->setPenToActive(); for (RS_Vector* v=points.first(); v!=NULL; v=points.next()) { leader->addVertex(*v); } container->addEntity(leader); // upd. undo list: if (document!=NULL) { document->startUndoCycle(); document->addUndoable(leader); document->endUndoCycle(); } deletePreview(); clearPreview(); deleteSnapper(); RS_Vector rz = graphicView->getRelativeZero(); graphicView->moveRelativeZero(RS_Vector(0.0,0.0)); graphicView->drawEntity(leader); graphicView->moveRelativeZero(rz); //drawSnapper(); RS_DEBUG->print("RS_ActionDimLeader::trigger(): leader added: %d", leader->getId()); } }
void RS_ActionDrawEllipseInscribe::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDrawEllipse4Line::mouseMoveEvent begin"); if(getStatus() == SetLine4) { RS_Entity* en = catchEntity(e, RS2::EntityLine, RS2::ResolveAll); if(!en) return; if(!(en->isVisible() && en->rtti()== RS2::EntityLine)) return; for(auto p: lines){ if(en == p) return; //do not pull in the same line again } if(en->getParent() && en->getParent()->ignoredOnModification()){ return; } deletePreview(); clearLines(true); lines.push_back(static_cast<RS_Line*>(en)); if(preparePreview()) { lines.back()->setHighlighted(true); graphicView->drawEntity(lines.back()); RS_Ellipse* e=new RS_Ellipse(preview.get(), *eData); preview->addEntity(e); drawPreview(); } } RS_DEBUG->print("RS_ActionDrawEllipse4Line::mouseMoveEvent end"); }
void RS_ActionDimLeader::trigger() { RS_PreviewActionInterface::trigger(); if (points.count()>0) { RS_Leader* leader = new RS_Leader(container, RS_LeaderData(true)); leader->setLayerToActive(); leader->setPenToActive(); for (int i = 0; i < points.size(); ++i) { leader->addVertex(points.at(i)); } container->addEntity(leader); // upd. undo list: if (document!=NULL) { document->startUndoCycle(); document->addUndoable(leader); document->endUndoCycle(); } deletePreview(); RS_Vector rz = graphicView->getRelativeZero(); graphicView->redraw(RS2::RedrawDrawing); graphicView->moveRelativeZero(rz); //drawSnapper(); RS_DEBUG->print("RS_ActionDimLeader::trigger(): leader added: %d", leader->getId()); } }
void RS_ActionDrawLineBisector::mouseReleaseEvent(QMouseEvent* e) { if (e->button()==Qt::RightButton) { deletePreview(); init(getStatus()-1); } else { RS_Vector mouse = RS_Vector(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); switch (getStatus()) { case SetLine1: { coord1 = mouse; RS_Entity* en = catchEntity(e, RS2::ResolveAll); if (en!=NULL && en->rtti()==RS2::EntityLine) { line1 = (RS_Line*)en; } } setStatus(SetLine2); break; case SetLine2: coord2 = mouse; trigger(); setStatus(SetLine1); break; } } }
void QC_ActionGetPoint::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("QC_ActionGetPoint::mouseMoveEvent begin"); if (getStatus()==SetReferencePoint || getStatus()==SetTargetPoint) { RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetReferencePoint: targetPoint = mouse; break; case SetTargetPoint: if (referencePoint.valid) { targetPoint = mouse; deletePreview(); RS_Line *line =new RS_Line(preview, RS_LineData(referencePoint, mouse)); line->setPen(RS_Pen(RS_Color(0,0,0), RS2::Width00, RS2::DotLine )); preview->addEntity(line); RS_DEBUG->print("QC_ActionGetPoint::mouseMoveEvent: draw preview"); drawPreview(); preview->addSelectionFrom(*container); } break; default: break; } } RS_DEBUG->print("QC_ActionGetPoint::mouseMoveEvent end"); }
void RS_ActionDimAngular::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDimAngular::mouseMoveEvent begin"); RS_Vector mouse(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); switch (getStatus()) { case SetLine1: drawSnapper(); break; case SetLine2: drawSnapper(); break; case SetPos: if (line1!=NULL && line2!=NULL && center.valid) { RS_Vector mouse = snapPoint(e); edata.definitionPoint4 = mouse; RS_DimAngular* d = new RS_DimAngular(preview, data, edata); deletePreview(); preview->addEntity(d); d->update(); drawPreview(); } break; default: break; } RS_DEBUG->print("RS_ActionDimAngular::mouseMoveEvent end"); }
void RS_ActionDrawMText::init(int status) { RS_ActionInterface::init(status); if (RS_DIALOGFACTORY) { switch (status) { case ShowDialog: { reset(); RS_MText tmp(NULL, *data); if (RS_DIALOGFACTORY->requestMTextDialog(&tmp)) { data.reset(new RS_MTextData(tmp.getData())); setStatus(SetPos); showOptions(); } else { hideOptions(); finish(true); } } break; case SetPos: RS_DIALOGFACTORY->requestOptions(this, true, true); deletePreview(); preview->setVisible(true); preparePreview(); break; default: break; } } }
void RS_ActionInfoDist2::mouseReleaseEvent(RS_MouseEvent* e) { if (RS2::qtToRsButtonState(e->button())==RS2::LeftButton) { switch (getStatus()) { case SetEntity: entity = catchEntity(e); if (entity!=NULL) { setStatus(SetPoint); } break; case SetPoint: { RS_CoordinateEvent ce(snapPoint(e)); coordinateEvent(&ce); } break; default: break; } } else if (RS2::qtToRsButtonState(e->button())==RS2::RightButton) { deletePreview(); deleteSnapper(); init(getStatus()-1); } }
void RS_ActionModifyMove::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionModifyMove::mouseMoveEvent begin"); if (getStatus()==SetReferencePoint || getStatus()==SetTargetPoint) { RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetReferencePoint: pPoints->referencePoint = mouse; break; case SetTargetPoint: if (pPoints->referencePoint.valid) { pPoints->targetPoint = mouse; deletePreview(); preview->addSelectionFrom(*container); preview->move(pPoints->targetPoint-pPoints->referencePoint); drawPreview(); } break; default: break; } } RS_DEBUG->print("RS_ActionModifyMove::mouseMoveEvent end"); }
void RS_ActionDrawMText::commandEvent(RS_CommandEvent* e) { QString c = e->getCommand().toLower(); if (checkCommand("help", c)) { if (RS_DIALOGFACTORY) { RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() + getAvailableCommands().join(", ")); } return; } switch (getStatus()) { case SetPos: if (checkCommand("text", c)) { deletePreview(); graphicView->disableCoordinateInput(); setStatus(SetText); } break; case SetText: { setText(e->getCommand()); if (RS_DIALOGFACTORY) { RS_DIALOGFACTORY->requestOptions(this, true, true); } graphicView->enableCoordinateInput(); setStatus(SetPos); } break; default: break; } }
void RS_ActionDrawLineTangent2::mouseMoveEvent(QMouseEvent* e) { // RS_DEBUG->print("RS_ActionDrawLineTangent2::mouseMoveEvent begin"); if(getStatus() != SetCircle2) return; circle2= catchEntity(e, circleType, RS2::ResolveAll); if(circle2==NULL) return; if(circle2->rtti()!=RS2::EntityCircle && circle2->rtti()!=RS2::EntityEllipse && circle2->rtti()!=RS2::EntityArc ) { circle2=NULL; return; } RS_Creation creation(NULL, NULL); RS_Vector mouse(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); tangent.reset(creation.createTangent2(mouse, circle1, circle2)); if(tangent.get()==NULL) { valid=false; return; } valid=true; lineData.reset(new RS_LineData(tangent->getData())); deletePreview(); preview->addEntity(new RS_Line(preview.get(), *lineData)); drawPreview(); }
void RS_ActionDrawSpline::undo() { if (history.size()>1) { history.removeLast(); //bHistory.removeLast(); deletePreview(); //graphicView->setCurrentAction( // new RS_ActionEditUndo(true, *container, *graphicView)); if (!history.isEmpty()) { //point = *history.last(); } if (spline!=NULL) { spline->removeLastControlPoint(); if (!history.isEmpty()) { RS_Vector v = history.last(); graphicView->moveRelativeZero(v); } graphicView->redraw(RS2::RedrawDrawing); } } else { RS_DIALOGFACTORY->commandMessage( tr("Cannot undo: " "Not enough entities defined yet.")); } }
void RS_ActionModifyMirror::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionModifyMirror::mouseMoveEvent begin"); if (getStatus()==SetAxisPoint1 || getStatus()==SetAxisPoint2) { RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetAxisPoint1: axisPoint1 = mouse; break; case SetAxisPoint2: if (axisPoint1.valid) { axisPoint2 = mouse; deletePreview(); preview->addSelectionFrom(*container); preview->mirror(axisPoint1, axisPoint2); preview->addEntity(new RS_Line(preview.get(), RS_LineData(axisPoint1, axisPoint2))); drawPreview(); } break; default: break; } } RS_DEBUG->print("RS_ActionModifyMirror::mouseMoveEvent end"); }
void RS_ActionDrawPolyline::coordinateEvent(RS_CoordinateEvent* e) { if (e==NULL) { return; } RS_Vector mouse = e->getCoordinate(); double bulge=solveBulge(mouse); if (calculatedSegment) mouse=calculatedEndpoint; switch (getStatus()) { case SetStartpoint: // data.startpoint = mouse; //printf ("SetStartpoint\n"); point = mouse; history.clear(); history.append(mouse); bHistory.clear(); bHistory.append(0.0); start = point; setStatus(SetNextPoint); graphicView->moveRelativeZero(mouse); updateMouseButtonHints(); break; case SetNextPoint: graphicView->moveRelativeZero(mouse); point = mouse; history.append(mouse); bHistory.append(bulge); if (polyline==NULL) { //printf("polyline==NULL\n"); polyline = new RS_Polyline(container, data); polyline->addVertex(start, 0.0); } if (polyline!=NULL) { polyline->setNextBulge(bulge); polyline->addVertex(mouse, 0.0); polyline->setEndpoint(mouse); if (polyline->count()==1) { polyline->setLayerToActive(); polyline->setPenToActive(); container->addEntity(polyline); } deletePreview(); // clearPreview(); deleteSnapper(); graphicView->drawEntity(polyline); drawSnapper(); } //trigger(); //data.startpoint = data.endpoint; updateMouseButtonHints(); //graphicView->moveRelativeZero(mouse); break; default: break; } }
void RS_ActionDrawLinePolygonCenCor::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDrawLinePolygon::mouseMoveEvent begin"); RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetCenter: break; case SetCorner: if (pPoints->center.valid) { pPoints->corner = mouse; deletePreview(); RS_Creation creation(preview.get(), nullptr, false); creation.createPolygon(pPoints->center, pPoints->corner, number); drawPreview(); } break; default: break; } }
void RS_ActionDrawPolyline::undo() { if (history.size()>1) { history.removeLast(); bHistory.removeLast(); deletePreview(); point = history.last(); if(history.size()==1){ graphicView->moveRelativeZero(history.at(0)); //remove polyline from container, //container calls delete over polyline container->removeEntity(polyline); polyline = NULL; graphicView->drawEntity(polyline); } if (polyline!=NULL) { polyline->removeLastVertex(); graphicView->moveRelativeZero(polyline->getEndpoint()); graphicView->drawEntity(polyline); } } else { RS_DIALOGFACTORY->commandMessage( tr("Cannot undo: " "Not enough entities defined yet.")); } }
void RS_ActionDimDiametric::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDimDiametric::mouseMoveEvent begin"); switch (getStatus()) { case SetPos: if (entity) { *pos = snapPoint(e); preparePreview(); RS_DimDiametric* d = new RS_DimDiametric(preview.get(), *data, *edata); deletePreview(); preview->addEntity(d); d->update(); drawPreview(); } break; default: break; } RS_DEBUG->print("RS_ActionDimDiametric::mouseMoveEvent end"); }
void RS_ActionDrawLineParallel::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDrawLineParallel::mouseMoveEvent begin"); coord = RS_Vector(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); entity = catchEntity(e, RS2::ResolveAll); switch (getStatus()) { case SetEntity: { deletePreview(); RS_Creation creation(preview.get(), nullptr, false); creation.createParallel(coord, distance, number, entity); drawPreview(); } break; default: break; } RS_DEBUG->print("RS_ActionDrawLineParallel::mouseMoveEvent end"); }
void RS_ActionInfoAngle::mouseReleaseEvent(QMouseEvent* e) { if (e->button()==Qt::LeftButton) { RS_Vector mouse(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); switch (getStatus()) { case SetEntity1: entity1 = catchEntity(e, RS2::ResolveAll); if (entity1 && entity1->rtti()==RS2::EntityLine) { point1 = entity1->getNearestPointOnEntity(mouse); setStatus(SetEntity2); } break; case SetEntity2: entity2 = catchEntity(e, RS2::ResolveAll); if (entity2 && entity2->rtti()==RS2::EntityLine) { point2 = entity2->getNearestPointOnEntity(mouse); trigger(); setStatus(SetEntity1); } break; default: break; } } else if (e->button()==Qt::RightButton) { deletePreview(); init(getStatus()-1); } }
void RS_ActionDimLeader::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDimLeader::mouseMoveEvent begin"); RS_Vector mouse = snapPoint(e); if (getStatus()==SetEndpoint && !points.isEmpty()) { deletePreview(); // fill in lines that were already set: RS_Vector last(false); for (int i = 0; i < points.size(); ++i) { RS_Vector v = points.at(i); if (last.valid) { preview->addEntity(new RS_Line(preview, RS_LineData(last, v))); } last = v; } if ( !points.isEmpty() ) { RS_Vector p = points.last(); preview->addEntity(new RS_Line(preview, RS_LineData(p, mouse))); } drawPreview(); } RS_DEBUG->print("RS_ActionDimLeader::mouseMoveEvent end"); }
void RS_ActionModifyRound::mouseReleaseEvent(QMouseEvent* e) { RS_Vector mouse = graphicView->toGraph(e->x(), e->y()); RS_Entity* se = catchEntity(e, eType, RS2::ResolveAll); if (e->button()==Qt::LeftButton) { switch (getStatus()) { case SetEntity1: entity1 = se; coord1 = mouse; if (entity1 && entity1->isAtomic() && RS_Information::isTrimmable(entity1)) { setStatus(SetEntity2); } break; case SetEntity2: entity2 = se; coord2 = mouse; if (entity2 && entity2->isAtomic() && RS_Information::isTrimmable(entity1, entity2)) { //setStatus(ChooseRounding); trigger(); } break; default: break; } } else if (e->button()==Qt::RightButton) { deletePreview(); init(getStatus()-1); } }
void RS_ActionDrawCircleInscribe::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDrawCircle4Line::mouseMoveEvent begin"); if(getStatus() == SetLine3) { RS_Entity* en = catchEntity(e, RS2::EntityLine, RS2::ResolveAll); if(!en) return; if(!(en->isVisible() && en->rtti()== RS2::EntityLine)) return; for(int i=0;i<getStatus();i++) { if(en->getId() == lines[i]->getId()) return; //do not pull in the same line again } if(en->getParent() && en->getParent()->ignoredOnModification()) return; coord= graphicView->toGraph(e->x(), e->y()); deletePreview(); while(lines.size()==3){ lines.back()->setHighlighted(false); graphicView->drawEntity(lines.back()); lines.pop_back(); } en->setHighlighted(true); lines.push_back(static_cast<RS_Line*>(en)); graphicView->drawEntity(lines.back()); if(preparePreview()) { RS_Circle* e=new RS_Circle(preview.get(), *cData); preview->addEntity(e); drawPreview(); } } RS_DEBUG->print("RS_ActionDrawCircle4Line::mouseMoveEvent end"); }
void RS_ActionModifyRound::trigger() { RS_DEBUG->print("RS_ActionModifyRound::trigger()"); if (entity1 && entity1->isAtomic() && entity2 && entity2->isAtomic()) { deletePreview(); RS_Modification m(*container, graphicView); m.round(coord2, coord1, (RS_AtomicEntity*)entity1, coord2, (RS_AtomicEntity*)entity2, *data); //coord = RS_Vector(false); coord1 = RS_Vector(false); entity1 = nullptr; coord2 = RS_Vector(false); entity2 = nullptr; setStatus(SetEntity1); if (RS_DIALOGFACTORY) { RS_DIALOGFACTORY->updateSelectionWidget(container->countSelected(),container->totalSelectedLength()); } } }
void RS_ActionDimLeader::mouseMoveEvent(RS_MouseEvent* e) { RS_DEBUG->print("RS_ActionDimLeader::mouseMoveEvent begin"); RS_Vector mouse = snapPoint(e); if (getStatus()==SetEndpoint && points.last()!=NULL) { deletePreview(); clearPreview(); // fill in lines that were already set: RS_Vector last(false); for (RS_Vector* v=points.first(); v!=NULL; v=points.next()) { if (last.valid) { preview->addEntity(new RS_Line(preview, RS_LineData(last, *v))); } last = *v; } RS_Vector p = *points.last(); preview->addEntity(new RS_Line(preview, RS_LineData(p, mouse))); drawPreview(); } RS_DEBUG->print("RS_ActionDimLeader::mouseMoveEvent end"); }
void RS_ActionDrawLineTangent2::mouseMoveEvent(QMouseEvent* e) { // RS_DEBUG->print("RS_ActionDrawLineTangent2::mouseMoveEvent begin"); e->accept(); if(getStatus() != SetCircle2) return; RS_Entity* en= catchEntity(e, circleType, RS2::ResolveAll); if(!en || en==circle1) return; if(circle2){ circle2->setHighlighted(false); graphicView->drawEntity(circle2); } circle2=en; circle2->setHighlighted(true); graphicView->drawEntity(circle2); RS_Creation creation(nullptr, nullptr); RS_Vector mouse(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); tangent.reset(creation.createTangent2(mouse, circle1, circle2)); if(!tangent.get()){ valid=false; return; } valid=true; lineData.reset(new RS_LineData(tangent->getData())); deletePreview(); preview->addEntity(new RS_Line(preview.get(), *lineData)); drawPreview(); }
void RS_ActionDimRadial::mouseMoveEvent(RS_MouseEvent* e) { RS_DEBUG->print("RS_ActionDimRadial::mouseMoveEvent begin"); //RS_Vector mouse(graphicView->toGraphX(e->x()), // graphicView->toGraphY(e->y())); switch (getStatus()) { case SetEntity: entity = catchEntity(e, RS2::ResolveAll); break; case SetPos: if (entity!=NULL) { pos = snapPoint(e); preparePreview(); RS_DimRadial* d = new RS_DimRadial(preview, data, edata); d->update(); deletePreview(); preview->addEntity(d); drawPreview(); } break; default: break; } RS_DEBUG->print("RS_ActionDimRadial::mouseMoveEvent end"); }
void RS_ActionDrawLineTangent2::mouseReleaseEvent(QMouseEvent* e) { if (e->button()==Qt::RightButton) { deletePreview(); init(getStatus()-1); if(getStatus()>=0){ clearHighlighted(); } return; } switch (getStatus()) { case SetCircle1: { circle1 = catchEntity(e, circleType, RS2::ResolveAll); if(!circle1) return; circle1->setHighlighted(true); graphicView->drawEntity(circle1); setStatus(getStatus()+1); } break; case SetCircle2: if(valid) trigger(); break; } }
void RS_ActionDrawEllipseInscribe::trigger() { RS_PreviewActionInterface::trigger(); RS_Ellipse* ellipse=new RS_Ellipse(container, *eData); deletePreview(); container->addEntity(ellipse); // upd. undo list: if (document) { document->startUndoCycle(); document->addUndoable(ellipse); document->endUndoCycle(); } for(RS_Line*const p: lines) { if(!p) continue; p->setHighlighted(false); graphicView->drawEntity(p); } drawSnapper(); clearLines(false); setStatus(SetLine1); RS_DEBUG->print("RS_ActionDrawEllipse4Line::trigger():" " entity added: %d", ellipse->getId()); }
void RS_ActionDrawCircleInscribe::trigger() { RS_PreviewActionInterface::trigger(); RS_Circle* circle=new RS_Circle(container, *cData); deletePreview(); container->addEntity(circle); // upd. undo list: if (document!=NULL) { document->startUndoCycle(); document->addUndoable(circle); document->endUndoCycle(); } for(auto p: lines){ if(p) p->setHighlighted(false); } graphicView->redraw(RS2::RedrawDrawing); // drawSnapper(); lines.clear(); setStatus(SetLine1); RS_DEBUG->print("RS_ActionDrawCircle4Line::trigger():" " entity added: %d", circle->getId()); }