예제 #1
0
/**

We calculate the effective area for the first time
*/
void ptarray_calc_areas(EFFECTIVE_AREAS *ea, int avoid_collaps, int set_area, double trshld)
{
	LWDEBUG(2, "Entered  ptarray_calc_areas");
	int i;
	int npoints=ea->inpts->npoints;
	int is3d = FLAGS_GET_Z(ea->inpts->flags);
	double area;
	
	const double *P1;
	const double *P2;
	const double *P3;	
		
	P1 = (double*)getPoint_internal(ea->inpts, 0);
	P2 = (double*)getPoint_internal(ea->inpts, 1);
	
	/*The first and last point shall always have the maximum effective area. We use float max to not make trouble for bbox*/
	ea->initial_arealist[0].area=ea->initial_arealist[npoints-1].area=FLT_MAX;
	ea->res_arealist[0]=ea->res_arealist[npoints-1]=FLT_MAX;
	
	ea->initial_arealist[0].next=1;
	ea->initial_arealist[0].prev=0;
	
	for (i=1;i<(npoints)-1;i++)
	{
		ea->initial_arealist[i].next=i+1;
		ea->initial_arealist[i].prev=i-1;
		P3 = (double*)getPoint_internal(ea->inpts, i+1);

		if(is3d)
			area=triarea3d(P1, P2, P3);
		else
			area=triarea2d(P1, P2, P3);
		
		LWDEBUGF(4,"Write area %lf to point %d on address %p",area,i,&(ea->initial_arealist[i].area));
		ea->initial_arealist[i].area=area;
		P1=P2;
		P2=P3;
		
	}	
		ea->initial_arealist[npoints-1].next=npoints-1;
		ea->initial_arealist[npoints-1].prev=npoints-2;
	
	for (i=1;i<(npoints)-1;i++)
	{
		ea->res_arealist[i]=FLT_MAX;
	}
	
	tune_areas(ea,avoid_collaps,set_area, trshld);
	return ;
}
예제 #2
0
/**
 * We calculate the effective area for the first time
 */
void ptarray_calc_areas( EFFECTIVE_AREAS *ea, int avoid_collaps, int set_area, double trshld )
{
    //LWDEBUG( 2, "Entered  ptarray_calc_areas" );
    int i;
    int npoints = ea->inpts.size();
    double area;

    QgsPointV2 P1;
    QgsPointV2 P2;
    QgsPointV2 P3;
    P1 = ea->inpts.at( 0 );
    P2 = ea->inpts.at( 1 );

    // The first and last point shall always have the maximum effective area. We use float max to not make trouble for bbox
    ea->initial_arealist[0].area = ea->initial_arealist[npoints - 1].area = FLT_MAX;
    ea->res_arealist[0] = ea->res_arealist[npoints - 1] = FLT_MAX;

    ea->initial_arealist[0].next = 1;
    ea->initial_arealist[0].prev = 0;

    for ( i = 1; i < ( npoints ) - 1; i++ )
    {
        ea->initial_arealist[i].next = i + 1;
        ea->initial_arealist[i].prev = i - 1;
        P3 = ea->inpts.at( i + 1 );

        if ( ea->is3d )
            area = triarea3d( P1, P2, P3 );
        else
            area = triarea2d( P1, P2, P3 );

        //LWDEBUGF( 4, "Write area %lf to point %d on address %p", area, i, &( ea->initial_arealist[i].area ) );
        ea->initial_arealist[i].area = area;
        P1 = P2;
        P2 = P3;
    }
    ea->initial_arealist[npoints - 1].next = npoints - 1;
    ea->initial_arealist[npoints - 1].prev = npoints - 2;

    for ( i = 1; i < ( npoints ) - 1; i++ )
    {
        ea->res_arealist[i] = FLT_MAX;
    }
    tune_areas( ea, avoid_collaps, set_area, trshld );
}