/* {{{ proto int point.distanceToLine(pointObj line_point, pointObj line_point2) Calculates distance between a point and a lined defined by the two points passed in argument. */ PHP_METHOD(pointObj, distanceToLine) { zval *zobj = getThis(); zval *zobj_line_point, *zobj_line_point2; php_point_object *php_point, *php_line_point, *php_line_point2; double distance = -1; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "OO", &zobj_line_point, mapscript_ce_point, &zobj_line_point2, mapscript_ce_point) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); php_line_point = (php_point_object *) zend_object_store_get_object(zobj_line_point TSRMLS_CC); php_line_point2 = (php_point_object *) zend_object_store_get_object(zobj_line_point2 TSRMLS_CC); distance = pointObj_distanceToLine(php_point->point, php_line_point->point, php_line_point2->point); RETURN_DOUBLE(distance); }
PHP_METHOD(clusterObj, __get) { char *property; long property_len = 0; zval *zobj = getThis(); php_cluster_object *php_cluster; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &property, &property_len) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); IF_GET_DOUBLE("maxdistance", php_cluster->cluster->maxdistance) else IF_GET_DOUBLE("buffer", php_cluster->cluster->buffer) else IF_GET_STRING("region", php_cluster->cluster->region) else { mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property); } }
/* {{{ proto styleObj removeStyle(int index) return the styleObj removed. */ PHP_METHOD(labelObj, removeStyle) { zval *zobj = getThis(); long index; styleObj *style; php_label_object *php_label; parent_object parent; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); style = msRemoveLabelStyle(php_label->label, index); /* Return a copy of the class object just removed */ MAPSCRIPT_MAKE_PARENT(NULL, NULL); mapscript_create_style(style, parent, return_value TSRMLS_CC); }
/* {{{ proto void __construct(mapObj map, string symbolname) Create a new symbolObj instance. */ PHP_METHOD(symbolObj, __construct) { zval *zmap; char *symbolName; long symbolName_len; int symbolId = -1; php_symbol_object *php_symbol; php_map_object *php_map; parent_object parent; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Os", &zmap, mapscript_ce_map, &symbolName, &symbolName_len) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC); php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC); symbolId = msAddNewSymbol(php_map->map, symbolName); if (symbolId == -1) { mapscript_throw_mapserver_exception("Unable to construct symbolObj" TSRMLS_CC); return; } php_symbol->symbol = php_map->map->symbolset.symbol[symbolId]; MAPSCRIPT_MAKE_PARENT(zmap, NULL); php_symbol->parent = parent; MAPSCRIPT_ADDREF(zmap); }
PHP_METHOD(labelCacheMemberObj, __set) { char *property; long property_len = 0; zval *value; zval *zobj = getThis(); php_labelcachemember_object *php_labelcachemember; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &property, &property_len, &value) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC); if ( (STRING_EQUAL("classindex", property)) || (STRING_EQUAL("featuresize", property)) || (STRING_EQUAL("layerindex", property)) || (STRING_EQUAL("numstyles", property)) || (STRING_EQUAL("numlabels", property)) || (STRING_EQUAL("shapeindex", property)) || (STRING_EQUAL("status", property)) || (STRING_EQUAL("markerid", property)) || (STRING_EQUAL("tileindex", property)) || (STRING_EQUAL("labels", property)) || (STRING_EQUAL("styles", property)) || (STRING_EQUAL("poly", property)) || (STRING_EQUAL("point", property))) { mapscript_throw_exception("Property '%s' is read-only and cannot be set." TSRMLS_CC, property); } else { mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property); } }
PHP_METHOD(imageObj, saveImage) { zval *zobj = getThis(); zval *zmap = NULL; char *filename = NULL; long filename_len = 0; php_image_object *php_image; php_map_object *php_map; int status = MS_SUCCESS; /* stdout specific vars */ int size=0; void *iptr=NULL; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", &filename, &filename_len, &zmap, mapscript_ce_map) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); if (zmap) php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC); if(filename_len > 0) { if ((status = msSaveImage((zmap ? php_map->map:NULL), php_image->image, filename) != MS_SUCCESS)) { mapscript_throw_mapserver_exception("Failed writing image to %s" TSRMLS_CC, filename); return; } RETURN_LONG(status); } /* no filename - read stdout */ /* if there is no output buffer active, set the header */ //handle changes in PHP 5.4.x #if PHP_VERSION_ID < 50399 if (OG(ob_nesting_level)<=0) { php_header(TSRMLS_C); } #else if (php_output_get_level(TSRMLS_C)<=0) { php_header(TSRMLS_C); } #endif if (MS_RENDERER_PLUGIN(php_image->image->format)) { iptr = (void *)msSaveImageBuffer(php_image->image, &size, php_image->image->format); } else if (php_image->image->format->name && (strcasecmp(php_image->image->format->name, "imagemap")==0)) { iptr = php_image->image->img.imagemap; size = strlen(php_image->image->img.imagemap); } if (size == 0) { mapscript_throw_mapserver_exception("Failed writing image to stdout" TSRMLS_CC); return; } else { php_write(iptr, size TSRMLS_CC); status = MS_SUCCESS; /* status = size; why should we return the size ?? */ msFree(iptr); } RETURN_LONG(status); }
/* {{{ proto void pasteImage(imageObj Src, int transparentColor [[,int dstx, int dsty], int angle]) Pastes another imageObj on top of this imageObj. transparentColor is the color (0xrrggbb) from srcImg that should be considered transparent. Pass transparentColor=-1 if you don't want any transparent color. If optional dstx,dsty are provided then they define the position where the image should be copied (dstx,dsty = top-left corner position). The optional angle is a value between 0 and 360 degrees to rotate the source image counterclockwise. Note that if a rotation is requested then the dstx and dsty coordinates specify the CENTER of the destination area. NOTE : this function only works for 8 bits GD images. */ PHP_METHOD(imageObj, pasteImage) { long transparent=-1, dstx=0, dsty=0, angle=0; int angleSet=MS_FALSE; zval *zimage; zval *zobj = getThis(); php_image_object *php_image, *php_imageSrc; /*int oldTransparentColor, newTransparentColor=-1, r, g, b;*/ rendererVTableObj *renderer = NULL; rasterBufferObj rb; PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Ol|lll", &zimage, mapscript_ce_image, &transparent, &dstx, &dsty, &angle) == FAILURE) { PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); return; } PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); if (ZEND_NUM_ARGS() == 3) { mapscript_report_php_error(E_WARNING, "dstX parameter given but not dstY" TSRMLS_CC); } else angleSet = MS_TRUE; php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); php_imageSrc = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); if (!MS_RENDERER_PLUGIN(php_imageSrc->image->format) || !MS_RENDERER_PLUGIN(php_image->image->format)) { mapscript_throw_exception("PasteImage function should only be used with renderer plugin drivers." TSRMLS_CC); return; } #ifdef undef //USE_AGG if( MS_RENDERER_AGG(php_imageSrc->image->format)) msAlphaAGG2GD(php_imageSrc->image); if( MS_RENDERER_AGG(php_image->image->format)) msAlphaAGG2GD(php_image->image); #endif renderer = MS_IMAGE_RENDERER(php_image->image); memset(&rb,0,sizeof(rasterBufferObj)); renderer->getRasterBufferHandle(php_imageSrc->image, &rb); renderer->mergeRasterBuffer(php_image->image, &rb, 1.0, 0, 0, dstx, dsty, rb.width, rb.height); /* Look for r,g,b in color table and make it transparent. * will return -1 if there is no exact match which will result in * no transparent color in the call to gdImageColorTransparent(). */ /* if (transparent != -1) { r = (transparent / 0x010000) & 0xff; g = (transparent / 0x0100) & 0xff; b = transparent & 0xff; newTransparentColor = gdImageColorExact(php_imageSrc->image->img.gd, r, g, b); } oldTransparentColor = gdImageGetTransparent(php_imageSrc->image->img.gd); gdImageColorTransparent(php_imageSrc->image->img.gd, newTransparentColor); if (!angleSet) gdImageCopy(php_image->image->img.gd, php_imageSrc->image->img.gd, dstx, dsty, 0, 0, php_imageSrc->image->img.gd->sx, php_imageSrc->image->img.gd->sy); else gdImageCopyRotated(php_image->image->img.gd, php_imageSrc->image->img.gd, dstx, dsty, 0, 0, php_imageSrc->image->img.gd->sx, php_imageSrc->image->img.gd->sy, angle); gdImageColorTransparent(php_imageSrc->image->img.gd, oldTransparentColor);*/ RETURN_LONG(MS_SUCCESS); }