C++ Builder CEのIDEでgit cloneする

Publicなリモートレポジトリをgit cloneしてみる

前記事で作ったGitlab.comのPublicなレポジトリへのURLは、

でした。これを指定して、IDE内部からgit cloneしてみます。まずはIDEのトップメニューのファイルから、

上図のように”バージョン管理レポジトリから開く”を選択。続いて、

gitを確認しておけ

ここのソースにclone urlをペーストして。保存先を適宜設定。

ここではいかにもな”fringe-clone-test”を選択。”OK”をクリック。

無事cloneできて選択すべきプロジェクトが表示されているので、“OK”をクリック。

プロジェクトが読み込まれた状態なので、例えば“F9”を押す。無事にコンパイル、リンク、起動され、

となればオケです。“Make It So”ボタンを押してみて。

ソースの一部だけ解説します。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int     vpos;
        double  dmax,dmin;
        char    visibility[100];

        min = StrToInt(Edit1->Text);
        max = StrToInt(Edit2->Text);
        pitch = StrToInt(Edit3->Text);

        dmax = max;
        dmin = min;

        amp = max - min;
        offset = min;
        angle = 3.1415*2.0/pitch;

        sprintf(visibility,"%5.4g",(dmax-dmin)/(dmax+dmin));

        Label4->Caption = AnsiString(visibility);

        Image1->Picture->Bitmap->Height = Image1->Height;
        Image1->Picture->Bitmap->Width = Image1->Width;
        
        Image1->Picture->Bitmap->PixelFormat = pf24bit;

        Image2->Canvas->Pen->Color =  clBlack;
        Image2->Canvas->Brush->Color = clWhite; // back ground is clBtnFace
        Image2->Canvas->FillRect(Rect(0,0,Image2->Width-1,Image2->Height-1));


        Image2->Canvas->MoveTo(0,0);
        Image2->Canvas->LineTo(0,Image2->Height-1);
        Image2->Canvas->LineTo(Image2->Width-1,Image2->Height-1);
        Image2->Canvas->LineTo(Image2->Width-1,0);
        Image2->Canvas->LineTo(0,0);

        Image2->Canvas->Pen->Color =  clRed;

        for( int row = 0 ; row < Image1->Height ; row++ ){
                BYTE *scanPtr = (BYTE *)Image1->Picture->Bitmap->ScanLine[row];
                for( int col = 0 ; col < Image1->Width ; col++ ){
                        BYTE* tempPtr = scanPtr+col*3;
                        double  intensity;
                        double  dist;

                        if(CheckBox1->Checked ){
                                dist = sqrt((row-160)*(row-160)+(col-200)*(col-200));
                                intensity = offset + amp*((1.0+cos(angle*dist))/2.0);
                        }
                        else
                                intensity = offset + amp*((1.0+cos(angle*(double)col))/2.0);


                        if( intensity < 0 )
                                intensity = 0;
                        if( intensity > 255 )
                                intensity = 255;

                        BYTE val =  (BYTE)intensity;

						if( RadioButton1->Checked ) {
                                tempPtr[0] = 0;
                                tempPtr[1] = 0;
                                tempPtr[2] = val;
                        }
						else if( RadioButton2->Checked){
								tempPtr[0] = val;
								tempPtr[1] = 0;
								tempPtr[2] = 0;
						}
                        else if( RadioButton3->Checked){
                                tempPtr[0] = 0;
                                tempPtr[1] = val;
                                tempPtr[2] = 0;


                        }
                        else {
                                tempPtr[0] = val;
                                tempPtr[1] = val;
                                tempPtr[2] = val;
                        }

                 }
        }

        int row = 160;
                for( int col = 0 ; col < Image1->Width ; col++ ){
                        double  intensity;
                        double  dist;

                        if(CheckBox1->Checked ){
                                dist = sqrt((row-160)*(row-160)+(col-200)*(col-200));
                                intensity = offset + amp*((1.0+cos(angle*dist))/2.0);
                        }
                        else
                                intensity = offset + amp*((1.0+cos(angle*(double)col))/2.0);


                        if( intensity < 0 )
                                intensity = 0;
                        if( intensity > 255 )
                                intensity = 255;

                        vpos = intensity*160/256;
                        vpos = 160 - vpos;
                        if( col == 0 )
                                Image2->Canvas->MoveTo(0,vpos);
                        else
                                Image2->Canvas->LineTo(col,vpos);
                }

        Image1->Refresh();
        Image2->Refresh();

}

波長をRGB値に変換するのはテキトーです。便宜的にHe-Neレーザ(赤)の場合は、Rのみ、以下488.0nmならBのみ等々です。波長からRGBをきちんと計算することも可能のようですが、筆者の記憶と大きな差がないので、そのままです。真面目に扱うと、

始め色々とgoogleできます。

コメント