コード例 #1
0
ファイル: point.c プロジェクト: AsgerPetersen/mapserver
/* {{{ 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);
}
コード例 #2
0
ファイル: cluster.c プロジェクト: AdRiley/mapserver
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);
      }
}
コード例 #3
0
ファイル: label.c プロジェクト: aboudreault/mapserver
/* {{{ 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);
}
コード例 #4
0
ファイル: symbol.c プロジェクト: bb1ackwe11/mapserver
/* {{{ 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);    
}
コード例 #5
0
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);
  }
}
コード例 #6
0
ファイル: image.c プロジェクト: bb1ackwe11/mapserver
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);
}
コード例 #7
0
ファイル: image.c プロジェクト: bb1ackwe11/mapserver
/* {{{ 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);

}