graph.cpp

来自「QAM module to use in Java with an easy i」· C++ 代码 · 共 114 行

CPP
114
字号
//---------------------------------------------------------------------------


#pragma hdrstop

#include "Graph.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

Graph::Graph()
{
        pdparraysize=0;
        pdp=0;
}


void __fastcall Graph::AttachPlot(Plotdata *pd)
{
        Plotdata **tpdpa;
        tpdpa = new Plotdata *[pdparraysize];
        for(int i=0;i<pdparraysize;i++)
        {
                tpdpa[i]=pdp[i];
        }
        if(pdp){delete [] pdp;pdp=0;}

        pdp=new Plotdata *[pdparraysize+1];

        for(int i=0;i<pdparraysize;i++)
        {
                pdp[i]=tpdpa[i];
        }
        delete [] tpdpa;
        pdp[pdparraysize]=pd;
        pdparraysize++;
}

void __fastcall Graph::DisplayGraph(TImage *imgage)
{
        int ix,iy;
        Graphics::TBitmap *bm = new Graphics::TBitmap;
        bm->Width = imgage->Width;
        bm->Height = imgage->Height;
        bm->HandleType = bmDIB;
        bm->Canvas->Pen->Color=clGray;
        switch (gSettings.DemodMajor.ConstalationSize)
        {
                case 16:
                        //16QAM constelation
                        bm->Canvas->MoveTo(bm->Width/2,0);
                        bm->Canvas->LineTo(bm->Width/2,bm->Height);
                        bm->Canvas->MoveTo(0,bm->Height/2);
                        bm->Canvas->LineTo(bm->Width,bm->Height/2);
                        bm->Canvas->MoveTo(bm->Width/4,0);
                        bm->Canvas->LineTo(bm->Width/4,bm->Height);
                        bm->Canvas->MoveTo(0,bm->Height/4);
                        bm->Canvas->LineTo(bm->Width,bm->Height/4);
                        bm->Canvas->MoveTo(0.75*bm->Width,0);
                        bm->Canvas->LineTo(0.75*bm->Width,bm->Height);
                        bm->Canvas->MoveTo(0,0.75*bm->Height);
                        bm->Canvas->LineTo(bm->Width,0.75*bm->Height);
                        for(int j=0;j<pdparraysize;j++)
                        {
                                for(int i=0;i<pdp[j]->size;i++)
                                {
                                        ix=bm->Width/2+(int)(0.530330085*bm->Width*pdp[j]->x[i]);  //0.5*3*sqrt(2)/4
                                        iy=bm->Height/2-(int)(0.530330085*bm->Height*pdp[j]->y[i]);
                                        if((ix>0)&&(iy>0)&&(ix<bm->Width)&&(iy<bm->Height))bm->Canvas->Pixels[ix][iy]=pdp[j]->color;
                                }
                        }
                break;
                case 64:
                //for 64 symbol constelation
                for(int i=1;i<=7;i++)
                {
                        bm->Canvas->MoveTo((double)i*(double)bm->Width/8,0);
                        bm->Canvas->LineTo((double)i*(double)bm->Width/8,bm->Height);
                        bm->Canvas->MoveTo(0,(double)i*(double)bm->Height/8);
                        bm->Canvas->LineTo(bm->Width,(double)i*(double)bm->Height/8);

                        for(int j=0;j<pdparraysize;j++)
                        {
                                for(int i=0;i<pdp[j]->size;i++)
                                {
                                        ix=bm->Width/2+(int)(0.618718433*bm->Width*pdp[j]->x[i]);  //0.5*7*sqrt(2)/8
                                        iy=bm->Height/2-(int)(0.618718433*bm->Height*pdp[j]->y[i]);
                                        if((ix>0)&&(iy>0)&&(ix<bm->Width)&&(iy<bm->Height))bm->Canvas->Pixels[ix][iy]=pdp[j]->color;
                                }
                        }
                }
                break;
                default :
                // Process for all other cases.
                ;
        }
        imgage->Picture->Bitmap=bm;
        delete bm;
        pdparraysize=0;
        if(pdp){delete [] pdp;pdp=0;}
}







Graph::~Graph()
{
        if(pdp){delete [] pdp;pdp=0;}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?