Exemplo n.º 1
0
// Render scene
void display() {
	glClear(GL_COLOR_BUFFER_BIT);

    // Draw the points
    pointSet();

	// Swap front and back buffers
	glfwSwapBuffers();
}
// -----------------------------------------------------------------------------
// CTestSDKStylusPopupMenu::TestSPMSetPositionTL
// -----------------------------------------------------------------------------
//
TInt CTestSDKStylusPopupMenu::TestSPMSetPositionTL( CStifItemParser& /*aItem*/ )
    {
    CTestSDKMenuObserver* observer = CTestSDKMenuObserver::NewL();
    CleanupStack::PushL( observer );
    STIF_ASSERT_NOT_NULL( observer );
    
    TPoint point;
    CAknStylusPopUpMenu* menu = CAknStylusPopUpMenu::NewLC( observer, point, NULL );
    STIF_ASSERT_NOT_NULL( menu );
    
    TPoint pointSet( KPoint, KPoint );
    menu->SetPosition( pointSet, CAknStylusPopUpMenu::EPositionTypeRightTop );
    
    CleanupStack::PopAndDestroy( menu );
    CleanupStack::PopAndDestroy( observer );
    
    return KErrNone;
    
    }
/**
 * create geometry for any list of 2D points
 * @param drawType: [Input] An integer indicating how to connect points, such as osg::PrimitiveSet::LINE_LOOP
 * @param pointVector: [Input] An vector contains 2D verteces
 * @param color: [Input] Color of these primitives
 * @return: A created OGS geometry
 */
osg::ref_ptr<osg::Geometry> AugmentationEnvironment::createPrimitiveGeometry(const int drawType, const vector<cv::Point2f>& pointVector, const osg::Vec4& color)
{
	osg::ref_ptr<osg::Geometry> pointSet (new osg::Geometry());
	osg::ref_ptr<osg::Vec3Array> vertices (new osg::Vec3Array());
	osg::ref_ptr<osg::Vec4Array> overallColor = new osg::Vec4Array;
	overallColor->push_back(color);

	for (unsigned int j = 0 ; j < pointVector.size() ; j++)
	{
		vertices->push_back (osg::Vec3 ( pointVector[j].x, pointVector[j].y, 0.0));
	}

	pointSet->setVertexArray (vertices.get());
	pointSet->addPrimitiveSet(new osg::DrawArrays(drawType,0,vertices->size()));
	pointSet->setColorArray(overallColor.get());
	pointSet->setColorBinding(osg::Geometry::BIND_OVERALL);
	pointSet->getOrCreateStateSet()->setAttribute( new osg::Point( 3.0f ), osg::StateAttribute::ON );

	return (pointSet.get());
}
Exemplo n.º 4
0
// ax + by + cz = d; a^2 + b^2 + c^2 = 1;
void CalPlane(vector<Point3D>& cPointSet, GridMap &cgridmap)
{
    int pointNum = cPointSet.size();
    MatrixXf pointSet(pointNum,3);
    Matrix3f A(3,3);
    A<<0, 0, 0, 0, 0, 0, 0, 0, 0;

    for(int i = 0; i < pointNum; i++)
    {
        pointSet(i,0) = cPointSet[i].X;
        pointSet(i,1) = cPointSet[i].Y;
        pointSet(i,2) = cPointSet[i].Z;
    }

    float xBar = pointSet.col(0).sum()/pointNum;
    float yBar = pointSet.col(1).sum()/pointNum;
    float zBar = pointSet.col(2).sum()/pointNum;

    for(int i = 0; i < pointNum; i++)
    {
        A(0, 0) += (pointSet(i,0) - xBar)*(pointSet(i,0) - xBar);
        A(0, 1) += (pointSet(i,0) - xBar)*(pointSet(i,1) - yBar);
        A(0, 2) += (pointSet(i,0) - xBar)*(pointSet(i,2) - zBar);
        A(1, 0) += (pointSet(i,1) - yBar)*(pointSet(i,0) - xBar);
        A(1, 1) += (pointSet(i,1) - yBar)*(pointSet(i,1) - yBar);
        A(1, 2) += (pointSet(i,1) - yBar)*(pointSet(i,2) - zBar);
        A(2, 0) += (pointSet(i,2) - zBar)*(pointSet(i,0) - xBar);
        A(2, 1) += (pointSet(i,2) - zBar)*(pointSet(i,1) - yBar);
        A(2, 2) += (pointSet(i,2) - zBar)*(pointSet(i,2) - zBar);
    }

    EigenSolver<MatrixXf> es(A);

    VectorXcf eigvals = es.eigenvalues();
    Vector3f eigvalues;
    eigvalues<<real(eigvals(0)), real(eigvals(1)), real(eigvals(2));

    MatrixXcf eigvect = es.eigenvectors();
    Matrix3f eigvectors;
    eigvectors <<real(eigvect(0,0)), real(eigvect(0,1)), real(eigvect(0,2)), real(eigvect(1,0)), real(eigvect(1,1)), real(eigvect(1,2)),
            real(eigvect(2,0)), real(eigvect(2,1)), real(eigvect(2,2));

    float minValue = eigvalues(0);
    int minNum = 0;

    for(int i = 1; i < 3; i++)
    {
        if(eigvalues(i) < minValue)
        {
            minValue = eigvalues(i);
            minNum = i;
        }
    }

    float planePara[4] = {0, 0, 0, 0};

    planePara[0] = eigvectors(0, minNum);
    planePara[1] = eigvectors(1, minNum);
    planePara[2] = eigvectors(2, minNum);

    planePara[3] = planePara[0]*xBar + planePara[1]*yBar + planePara[2]*zBar;

    if(planePara[0] < 0)
    {
        for(int i = 0; i < 4; i++)
        {
            cgridmap.planePara[i] = -planePara[i];
        }
    }
    else
    {
        for(int i = 0; i < 4; i++)
        {
            cgridmap.planePara[i] = planePara[i];
        }
    }

    float distance1 = 0;
    float distance2 = sqrt(cgridmap.planePara[0]*cgridmap.planePara[0] + cgridmap.planePara[1]*cgridmap.planePara[1] + cgridmap.planePara[2]*cgridmap.planePara[2]);

    for(int i = 0; i < pointNum; i++)
    {
        distance1 += fabs(cgridmap.planePara[0]*pointSet(i,0) + cgridmap.planePara[1]*pointSet(i,1) + cgridmap.planePara[2]*pointSet(i,2) - cgridmap.planePara[3]);
    }

    cgridmap.planeDegree = distance1/distance2/pointNum;
    cgridmap.normalVector = acos(cgridmap.planePara[1]/distance2)/3.1415926*180;
}
Exemplo n.º 5
0
GeometryPtr 
Overlay::process(const Polyline2DPtr& p1, const Polyline2DPtr& p2)
{
	if (!p1 || !p2 || p1->getPointListSize() < 2 || p2->getPointListSize() < 2) return GeometryPtr();
#ifdef WITH_CGAL

  // Construct the first arrangement, containing a polyline 1.
  Arrangement_2          arr1;

  for (Point2Array::const_iterator it1 = p1->getPointList()->begin()+1; it1 != p1->getPointList()->end(); ++it1)
	insert_non_intersecting_curve(arr1,toSegment(*(it1-1),*it1));

  // to be a closed face, first and last point should be exactly the same.
  // However we should not duplicate the same point twice at the end.
  Vector2& fp1 = p1->getPointList()->getAt(0);
  Vector2& lp1 = *(p1->getPointList()->end()-1);
  if (fp1.x() != lp1.x() || fp1.y() != lp1.y())
	insert_non_intersecting_curve(arr1,toSegment(lp1,fp1));

  // std::cerr << arr1.number_of_vertices() << " " << arr1.number_of_edges() << " " << arr1.number_of_faces() << std::endl;

  // Mark just the bounded face.
  Arrangement_2::Face_iterator   fit;

  CGAL_assertion (arr1.number_of_faces() == 2);
  for (fit = arr1.faces_begin(); fit != arr1.faces_end(); ++fit)
    fit->set_data (fit != arr1.unbounded_face());

  // Construct the second arrangement.
  Arrangement_2          arr2;

  for (Point2Array::const_iterator it2 = p2->getPointList()->begin()+1; it2 != p2->getPointList()->end(); ++it2)
	 	insert(arr2,toSegment(*(it2-1),*it2));

  // to be a closed face, first and last point should be exactly the same.
  // However we should not duplicate the same point twice at the end.
  Vector2& fp2 = p2->getPointList()->getAt(0);
  Vector2& lp2 = *(p2->getPointList()->end()-1);
  if (fp2.x() != lp2.x() || fp2.y() != lp2.y())
	insert(arr2,toSegment(lp2,fp2)); 

  // std::cerr << arr2.number_of_vertices() << " " << arr2.number_of_edges() << " " << arr2.number_of_faces() << std::endl;

  CGAL_assertion (arr2.number_of_faces() == 2);
  for (fit = arr2.faces_begin(); fit != arr2.faces_end(); ++fit)
    fit->set_data (fit != arr2.unbounded_face());

  // Compute the overlay of the two arrangements.
  Arrangement_2          overlay_arr;
  Overlay_traits         overlay_traits;

  overlay (arr1, arr2, overlay_arr, overlay_traits);

  // std::cerr << overlay_arr.number_of_vertices() << " " << overlay_arr.number_of_edges() << " " << overlay_arr.number_of_faces() << std::endl;

  // conversion between cgal structures and plantgl ones.
  GeometryArrayPtr geomarray(new GeometryArray(0));
  for (Arrangement_2::Face_iterator face = overlay_arr.faces_begin(); face != overlay_arr.faces_end(); ++face)
  {
    if (face->is_fictitious () || face->is_unbounded())
		continue;
    if (! face->data())
      continue;
   
    Arrangement_2::Ccb_halfedge_circulator curr = face->outer_ccb();
	Point2ArrayPtr pointSet( new Point2Array(1,toVec2(curr->source()->point())));
    do
    {
	  pointSet->push_back(toVec2(curr->target()->point()));
      ++curr;
    } while (curr != face->outer_ccb());
	if (pointSet->size() == 1){
		geomarray->push_back(GeometryPtr(new PointSet2D(pointSet)));
	}
	else if(pointSet->size() > 1){
		geomarray->push_back(GeometryPtr(new Polyline2D(pointSet)));
	}
  }
  if (geomarray->empty())return GeometryPtr();
  else if (geomarray->size() == 1) return geomarray->getAt(0);
  else return GeometryPtr(new Group(geomarray));

#else
#ifdef _MSC_VER
#pragma message("CGAL not included. Overlay routine will not work.")
#else
#warning "CGAL not included. Overlay routine will not work."
#endif
	pglError("CGAL not included. Overlay routine will not work.");
	return GeometryPtr();
#endif

}