Fw: [LIBART] Maybe a bug in art_rgb_svp_alpha or art_svp_union



This patch could make the program render the "correct" figure, but it doesn't solve the problem. It just connects the last point to the first. If we have a segment with 3 points, instead of a line with 2 segments, we would have a triangle rendered. The example I gave actually is part of a large project where other cases occur.
 
----- Original Message -----
From: Walker
Sent: Monday, November 12, 2001 9:54 PM
Subject: Re: [LIBART] Maybe a bug in art_rgb_svp_alpha or art_svp_union

hi may you can try this :   
 
    art_vpath_add_point(&pVPath, &iPoints, &iPointsMax, ART_MOVETO, vPoint[0].x, vPoint[0].y);
     for(int i=1; i<vPoint.size(); i++)
        art_vpath_add_point(&pVPath, &iPoints, &iPointsMax,ART_LINETO, vPoint[i].x, vPoint[i].y);
    //------------------------------------------------------------------------------
    art_vpath_add_point(&pVPath, &iPoints, &iPointsMax, ART_LINETOTO, vPoint[0].x, vPoint[0].y);
    //-----------------------------------------------------------------------------------------------------------------------------------------
    art_vpath_add_point(&pVPath, &iPoints, &iPointsMax,ART_END, 0, 0);
 
 
Walker
 
 
----- Original Message -----
Sent: Tuesday, November 13, 2001 7:37 AM
Subject: [LIBART] Maybe a bug in art_rgb_svp_alpha or art_svp_union

Hi everyone, I have been using libart for 2 months (not so long, still a newbie) and I'm having some problems with the alpha blended rendering. The following code should render a 160x160 image as in figure 1, but unfortunately what is being rendered is in figure 2. I'll also attach the code to make it easy to know what I am trying to expect and, if you run the code, what I'm getting. What's the deal here? It's my fault? It's libart's?
 
Peace,
Rodolfo.
 
/* Code */
 
#include <vector>
#include <libart_lgpl\libart.h>
 
using namespace std;
 
struct FPoint
{
    FPoint(double X, double Y) : x(X), y(Y) {};
    FPoint() : x(0), y(0) {};
    double x,y;
};
 
void AddSeg(ArtSVP *&_pSVP, vector<FPoint> &vPoint, int iEsp)
{
    int iPoints=0, iPointsMax=50;
    ArtVpath *pVPath =  art_new(ArtVpath, iPointsMax);
 
    // Create ArtVpath from vector<FPoint>
    art_vpath_add_point(&pVPath, &iPoints, &iPointsMax, ART_MOVETO, vPoint[0].x, vPoint[0].y);
    for(int i=1; i<vPoint.size(); i++)
        art_vpath_add_point(&pVPath, &iPoints, &iPointsMax,ART_LINETO, vPoint[i].x, vPoint[i].y);
    art_vpath_add_point(&pVPath, &iPoints, &iPointsMax,ART_END, 0, 0);
 
    ArtSVP *pSVP = art_svp_vpath_stroke(pVPath,ART_PATH_STROKE_JOIN_ROUND,ART_PATH_STROKE_CAP_ROUND,iEsp,5,2);
    art_free(pVPath);
 
    if(_pSVP != NULL)
    {
        ArtSVP *pSVPaux = art_svp_union(pSVP,_pSVP);    // Maybe the bug is in art_svp_union
        art_free(_pSVP);
        art_free(pSVP);
        _pSVP = pSVPaux; 
    }
    else
        _pSVP = pSVP;
}
 
int void main()
{
    vector<vector<FPoint> > vvParte; 
    vvParte.push_back(vector<FPoint>()); 
    vvParte[0].push_back(FPoint(-8,135));
    vvParte[0].push_back(FPoint(78,136));
 
    vvParte.push_back(vector<FPoint>()); 
    vvParte[1].push_back(FPoint(78,136));
    vvParte[1].push_back(FPoint(78,81));
   
    vvParte.push_back(vector<FPoint>()); 
    vvParte[2].push_back(FPoint(78,136));
    vvParte[2].push_back(FPoint(82,136));
    vvParte[2].push_back(FPoint(159,135));
 
    vvParte.push_back(vector<FPoint>()); 
    vvParte[3].push_back(FPoint(78,196));
    vvParte[3].push_back(FPoint(78,136));
 
    ArtSVP *pSVP = NULL;
 
    for(int p=0; p<vvParte.size(); ++p)  
        AddSeg(pSVP,vvParte[p],11);
 
    unsigned char pBuffer[160][160];
    art_rgb_svp_alpha(pSVP,0,0,160,160,RGB(255,0,255),pBuffer, 160, NULL); // Maybe the bug is here
    // PS: when we change art_rgb_svp_alpha to art_rgb_svp_aa the output looks right
 
    // Render pBuffer on screen
    RenderBuffer(pBuffer);    // Operational system dependent function, make your own...
 
    return 0;
}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]