NumberedPoses generatePoses(tf::Pose& object_center,const int circle_points, const int circle_rings, const double pitch_step, const double radius)
{
    std::vector<NumberedPose> poses;
    const int pose_id_max = circle_points * circle_rings;
    int pose_id = 0;
    double angle_step = 2* M_PI / circle_points;
    double pitch_angle_lower = pitch_step * -1 * floor(circle_rings/2);

    for (double yaw_pos = 0; yaw_pos < circle_points; yaw_pos++)
    {
        for (int altitude_pos = 0; altitude_pos < circle_rings; altitude_pos++)
        {
            pose_id++;

            // Pitch angle
            double angle_pitch = pitch_angle_lower + (pitch_step * (double)altitude_pos);

            double angle_yaw_offset = (angle_step / circle_rings)*altitude_pos;
            double angle_yaw = M_PI + angle_step * yaw_pos + angle_yaw_offset;

            NumberedPose pose = generatePose(object_center, pose_id, pose_id_max, radius, angle_pitch, angle_yaw);
            poses.push_back(pose);
        }
    }

    return poses;
}
Exemple #2
0
Motion *SKFRegion::generateMotion() {
	float framedt = canvas->getMotion( 0 )->getFrameTime();

	std::vector<Pose *> poseList;

	for( unsigned i = 0; i < selectionPath.size(); i++ ) {
		poseList.push_back( generatePose( selectionPath[i] ) );
	}

	return new Motion( poseList, selectionTimes, framedt );
}
Exemple #3
0
void SKFRegion::mouseMove( Point2D p ) {
	if( drawingBounds ) {
		return;
	}
	
	if( !drawingBounds && dragging )
	{
		displayPose = new CanvasPose( *generatePose( p ), p, *canvas );
		canvas->displayPose( *displayPose );
		//delete displayPose;
	}

	if( drawingMotion ) {//!poses.empty() && dragging && contains( p ) && canvas->isDragging() ) {
        selectionPath.push_back( p );
		selectionTimes.push_back( clock() );
	}
}
Exemple #4
0
void SKFRegion::mouseDown( int button, Point2D p, bool doubleClick ) {
	if( contains( p ) ) {
		dragging = true;

		if( selectionPath.contains( p ) ) {
			if( selectionPath.size() == 1 ) {
				displayPose->setDragging();
				canvas->addElement( displayPose );
				displayPose = NULL;
				selectionPath.erase( selectionPath.begin(), selectionPath.end() );
			    selectionTimes.erase( selectionTimes.begin(), selectionTimes.end() );
		    } else if( selectionPath.size() > 1 ) {
				tAdd = clock();
				mAdd = generateMotion();
				pAdd = p;
				canvas->addMotion( mAdd );
				selectionPath.erase( selectionPath.begin(), selectionPath.end() );
			    selectionTimes.erase( selectionTimes.begin(), selectionTimes.end() );
		    }
		} else if( !poses.empty() ) {
		    selectionPath.erase( selectionPath.begin(), selectionPath.end() );
			selectionTimes.erase( selectionTimes.begin(), selectionTimes.end() );
		    selectionPath.push_back( p );
			selectionTimes.push_back( clock() );

			//delete displayPose;

			displayPose = new CanvasPose( *generatePose( p ), p, *canvas );

			if( button == CanvasItem::MOUSE_BTN_RIGHT )
			{
				drawingMotion = true;
			}
		}

		canvas->displayPose( *displayPose );
	}
}