コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}
コード例 #4
0
ファイル: testApp.cpp プロジェクト: Dewb/ProCamToolkit
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);
}
コード例 #5
0
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();
    }

}
コード例 #6
0
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;
    }

}
コード例 #7
0
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);
    }
}
コード例 #8
0
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");
}
コード例 #9
0
bool RS_ActionDrawCircleTan2_1P::preparePreview(){
	if( getCenters() ==false) return false;
	cData->center=centers.getClosest(coord);
	cData->radius=point.distanceTo(cData->center);
    return true;
}