示例#1
0
region_container* get_polygon(const mxArray * input) {
    
    region_container* p = NULL;
	double *r = (double*)mxGetPr(input);
    int l = mxGetN(input);
    
    if (l % 2 == 0 && l > 6) {
        
        p = region_create_polygon(l / 2);
        
        for (int i = 0; i < p->data.polygon.count; i++) {
            p->data.polygon.x[i] = r[i*2];
            p->data.polygon.y[i] = r[i*2+1];
        }
        
    } else if (l == 4) {
        
        region_container* t = NULL;

        t = region_create_rectangle(r[0], r[1], r[2], r[3]);
        
        p = region_convert(t, POLYGON);
   
        region_release(&t);

    }  
    
    return p;
    
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {

	region_type format;
	region_container* p;
	region_container* c;

	if( nrhs != 2 ) mexErrMsgTxt("Two vector arguments (region and format) required.");
	if( nlhs != 1 ) mexErrMsgTxt("Exactly one output argument required.");

	if (mxGetClassID(prhs[0]) != mxDOUBLE_CLASS)
		mexErrMsgTxt("First input argument must be of type double");

	if ( mxGetNumberOfDimensions(prhs[0]) > 2 || mxGetM(prhs[0]) > 1 ) mexErrMsgTxt("First input argument must be a vector");

    char* codestr = get_string(prhs[1]);

	if (!get_region_code(codestr, format)) {
        free(codestr);
		mexErrMsgTxt("Not a valid format");
    }

    free(codestr);

	p = array_to_region(prhs[0]);

	if (!p)
		mexErrMsgTxt("Not a valid region vector");

	c = region_convert(p, format);

	if (!c) {
		if (p) region_release(&p);
		mexErrMsgTxt("Unable to convert region");
	}

    plhs[0] = region_to_array(c);

	if (c) region_release(&c);
	if (p) region_release(&p);
}