bool RS_ActionDrawCircleTan1_2P::preparePreview(){ if(centers.size()==0) getCenters(); if(centers.size()==0) return false; cData->center=centers.getClosest(coord); cData->radius=points[0].distanceTo(cData->center); return true; }
bool RS_ActionDrawCircleTan1_2P::preparePreview(){ if (!pPoints->centers.size()) getCenters(); if (!pPoints->centers.size()) return false; pPoints->cData.center=pPoints->centers.getClosest(pPoints->coord); pPoints->cData.radius=pPoints->points[0].distanceTo(pPoints->cData.center); return true; }
bool RS_ActionDrawCircleTan2_1P::preparePreview(){ if( getCenters() ==false) return false; // for(int i=0;i<centers.size();i++){ // double ds2=(centers[i]-point).squared(); // if( (centers[i]-circles[0]).squared()<ds2 // } cData.center=centers.getClosest(coord); cData.radius=point.distanceTo(cData.center); return true; }
void testApp::decodeAndSave(string filename) { cout << "loading " << filename << endl; camImage.allocate(640, 480, OF_IMAGE_GRAYSCALE); camImage.getPixelsRef().set(0); proImage.allocate(1024/2, 768/2, OF_IMAGE_GRAYSCALE); proImage.getPixelsRef().set(0); patternSize = cv::Size(4, 11); getProCamImages(filename + "/", proImage, camImage, 1024/2, 768/2); camImage.saveImage("results/" + filename + "-camImage.png"); camImage.update(); proImage.saveImage("results/" + filename + "-proImage.png"); proImage.update(); camCenters = getCenters(camImage, patternSize); proCenters = getCenters(proImage, patternSize); }
void RS_ActionDrawCircleTan2_1P::coordinateEvent(RS_CoordinateEvent* e) { RS_Vector mouse = e->getCoordinate(); switch(getStatus()){ case SetPoint: point=mouse; coord=mouse; if(getCenters()) { if(centers.size()==1) trigger(); else setStatus(getStatus()+1); } break; default: break; // case SetCenter: // coord=mouse; // trigger(); } }
void RS_ActionDrawCircleTan1_2P::coordinateEvent(RS_CoordinateEvent* e) { RS_Vector mouse = e->getCoordinate(); pPoints->coord=mouse; switch(getStatus()){ case SetPoint1: pPoints->points.clear(); pPoints->points.push_back(mouse); setStatus(getStatus()+1); break; case SetPoint2: // pPoints->points.reserve(1); pPoints->points.push_back(mouse); if(getCenters()) { if(pPoints->centers.size()==1) trigger(); else setStatus(getStatus()+1); } break; } }
void RS_ActionDrawCircleTan2::mouseReleaseEvent(QMouseEvent* e) { // Proceed to next status if (e->button()==Qt::LeftButton) { switch (getStatus()) { case SetCircle1: case SetCircle2: { RS_Entity* en = catchCircle(e); if (en==nullptr) return; circles.resize(getStatus()); circles.push_back(static_cast<RS_AtomicEntity*>(en)); if(getStatus()==SetCircle1 || getCenters()){ circles.at(circles.size()-1)->setHighlighted(true); graphicView->redraw(RS2::RedrawDrawing); setStatus(getStatus()+1); } } break; case SetCenter: coord= graphicView->toGraph(e->x(), e->y()); if( preparePreview()) trigger(); break; default: break; } } else if (e->button()==Qt::RightButton) { // Return to last status: if(getStatus()>0){ circles[getStatus()-1]->setHighlighted(false); circles.pop_back(); graphicView->redraw(RS2::RedrawDrawing); deletePreview(); } init(getStatus()-1); } }
void RS_ActionDrawCircleTan1_2P::mouseMoveEvent(QMouseEvent* e) { RS_DEBUG->print("RS_ActionDrawCircleTan1_2P::mouseMoveEvent begin"); switch(getStatus() ){ case SetPoint1: { RS_Vector&& mouse=snapPoint(e); pPoints->points.clear(); pPoints->points.push_back(mouse); switch(circle->rtti()){ case RS2::EntityArc: case RS2::EntityCircle: { RS_Vector const& dvp=mouse - circle->getCenter(); double rvp=dvp.magnitude(); if(rvp<RS_TOLERANCE2) break; pPoints->cData.radius=(circle->getRadius()+rvp)*0.5; pPoints->cData.center=circle->getCenter()+dvp*(pPoints->cData.radius/rvp); pPoints->cData.radius=fabs(circle->getRadius()-pPoints->cData.radius); } break; case RS2::EntityLine: { RS_Line* line=static_cast<RS_Line*>(circle); RS_Vector&& vp=line->getNearestPointOnEntity(pPoints->points[0],false); if(vp.valid){ pPoints->cData.center=(vp+pPoints->points[0])*0.5; pPoints->cData.radius=vp.distanceTo(pPoints->cData.center); } } break; default: return; } deletePreview(); RS_Circle* e=new RS_Circle(preview.get(), pPoints->cData); preview->addEntity(e); drawPreview(); break; } case SetPoint2: { RS_Vector const& mouse=snapPoint(e); pPoints->points.resize(1); pPoints->points.push_back(mouse); deletePreview(); pPoints->coord=mouse; if (!getCenters()) return; if (preparePreview()) { RS_Circle* e=new RS_Circle(preview.get(), pPoints->cData); preview->addEntity(e); drawPreview(); } break; } case SetCenter: { // RS_Entity* en = catchEntity(e, enTypeList, RS2::ResolveAll); pPoints->coord= graphicView->toGraph(e->x(), e->y()); // circles[getStatus()]=static_cast<RS_Line*>(en); if(preparePreview()) { deletePreview(); RS_Circle* e=new RS_Circle(preview.get(), pPoints->cData); for(size_t i=0; i<pPoints->centers.size(); ++i) preview->addEntity(new RS_Point(preview.get(), RS_PointData(pPoints->centers.at(i)))); preview->addEntity(e); // double r0=cData.radius*0.1; // if(centers.size()>1) // for(unsigned i=0; i< centers.size(); ++i){ // RS_DEBUG->print(RS_Debug::D_ERROR, "center %d: (%g, %g)\n",i,centers.at(i).x,centers.at(i).y); // preview->addEntity(new RS_Circle(preview, RS_CircleData(centers.at(i), r0))); // } drawPreview(); } } break; default: break; } RS_DEBUG->print("RS_ActionDrawCircleTan1_2P::mouseMoveEvent end"); }
bool RS_ActionDrawCircleTan2_1P::preparePreview(){ if( getCenters() ==false) return false; cData->center=centers.getClosest(coord); cData->radius=point.distanceTo(cData->center); return true; }