⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeviewmain.cpp

📁 著名的基因芯片表达数据聚类软件。esein编写
💻 CPP
📖 第 1 页 / 共 4 页
字号:
}

int GeneTreeSize   = 200;
int ArrayTreeSize  = 200;
int GeneNameSize   = 0;
int ArrayNameSize  = 0;

double Factor;

    unsigned char *Color;
    Color = new unsigned char[3];

    DWORD DPositiveColor = ColorToRGB(PositiveColor);
    unsigned char *Positive;
    //Positive = new unsigned char[3];
    Positive = (unsigned char *)&DPositiveColor;

    DWORD DZeroColor = ColorToRGB(ZeroColor);
    unsigned char *Zero;
    //Zero = new unsigned char[3];
    Zero = (unsigned char *)&DZeroColor;

    DWORD DNegativeColor = ColorToRGB(NegativeColor);
    unsigned char *Negative;
    //Negative = new unsigned char[3];
    Negative = (unsigned char *)&DNegativeColor;

    DWORD DMissingColor = ColorToRGB(MissingColor);
    unsigned char *Missing;
    //Missing = new unsigned char[3];
    Missing = (unsigned char *)&DMissingColor;

TStringList *File = new TStringList();

//
// PostScript Header
//

File->Add("%!PS-Adobe-3.0");
File->Add("%%Creator: GeneClust1.0");
File->Add("%%CreationDate: Fri Jul 31 12:35:39 1998");
File->Add("%%Pages: (atend)");
File->Add("%%EndComments");
File->Add("%%BeginSetup");
File->Add("/ln { newpath moveto lineto stroke closepath } bind def");
File->Add("/tx { newpath moveto show closepath } bind def");
File->Add("/sl { setlinewidth } def");
File->Add("/sc { setlinecap } def");
File->Add("/sr { setrgbcolor } def");
File->Add("/sf { exch findfont exch scalefont setfont } def");
File->Add("/tr { translate } def");
File->Add("/sp { 1 sc 1 sl 0.0 0.0 0.0 sr 18.00000 13.00000 tr 0.96000 0.98205 scale tr } def");

AnsiString Temp = "/fillbox {newpath moveto " +
    AnsiString(ScaleX) + " 0 rlineto 0 " +
    AnsiString(ScaleY) + " rlineto -" +
    AnsiString(ScaleX) + " 0 rlineto closepath fill} def";

File->Add(Temp);

File->Add("%%EndSetup");
File->Add("%%Page: tree 1");
File->Add("%%PageResources: (atend)");
File->Add("%%BeginPageSetup");
File->Add("/pgsave save def");
File->Add("%%EndPageSetup");
File->Add("0 setlinewidth");
File->Add("/Courier findfont");
Temp =  AnsiString(ScaleY) + " scalefont";
File->Add(Temp);
File->Add("setfont");

// Generate Color Diagram

int i,j,k,x,y;

int GeneTreeBuffer = 200;

double Red, Green, Blue, Val;

AnsiString Name;

    float H,S,B;

    H = 0;
    S = 1.0;
    B = 1.0;

    for (j=0;j<Cluster->Columns;j++)
    {
            x = GeneTreeBuffer + j * ScaleX;
            y = (MaxC-MinC + 2) * ScaleY;

            if (j < 93)
            {
                H = 0;
            }
            else if (j < 154)
            {
                H = 0.2;
            }
            else if (j < 167)
            {
                H = 0.4;
            }
            else if (j < 227)
            {
                H = 0.6;
            }
            else
            {
                H = 0.8;
            }

            if (Cluster->Arrays->Strings[j] != "Blank")
            {
            TFloatFormat Format     = ffFixed;
            AnsiString HString  = FloatToStrF(H,Format,6,4);
            AnsiString SString    = FloatToStrF(S,Format,6,4);
            AnsiString BString   = FloatToStrF(B,Format,6,4);
            Temp = HString + " " + SString + " " + BString + " sethsbcolor";
            File->Add(Temp);
            Temp = AnsiString(x) + " " + AnsiString(y) + " fillbox";
            File->Add(Temp);
            }
            else
            {
            //H += .025;
            }
    }

for (i=0;i<=MaxC-MinC;i++)
{
    if (SavePSAllForm->SavePictureCheckBox->Checked == true)
    {
        for (j=0;j<Cluster->Columns;j++)
        {
            x = GeneTreeBuffer + j * ScaleX;
            y = (MaxC-MinC - i ) * ScaleY;

            for (k=0;k<3;k++)
            {
                Color[k] =  Missing[k];
            }

            Val = 0;

            if (((TGeneTreeNode *)Cluster->Genes->Objects[i+MinC])->Data->Mask[j])
            {

                Val = ((TGeneTreeNode *)Cluster->Genes->Objects[i+MinC])->Data->Data[j];

                if (Val > 0)
                {
                    Factor =  min(1.0, Val / ImageContrast);
                    for (k=0;k<3;k++)
                    {
                        Color[k] =  Factor * Positive[k] + (1.0 - Factor) * Zero[k];
                    }
                }
                else
                {
                    Factor =  min(1.0, -Val / ImageContrast);
                    for (k=0;k<3;k++)
                    {
                        Color[k] =  Factor * Negative[k] + (1.0 - Factor) * Zero[k];
                    }
                }
            }

            Red   = (double) Color[0] / 256.0;
            Green = (double) Color[1] / 256.0;
            Blue  = (double) Color[2] / 256.0;

            TFloatFormat Format     = ffFixed;
            AnsiString GreenString  = FloatToStrF(Green,Format,6,4);
            AnsiString RedString    = FloatToStrF(Red,Format,6,4);
            AnsiString BlueString   = FloatToStrF(Blue,Format,6,4);
            Temp = RedString + " " + GreenString + " " + BlueString + " setrgbcolor";
            File->Add(Temp);

            /*
            Temp = AnsiString(x) + " " + AnsiString(y) + " fillbox";
            File->Add(Temp);   */

            int Size = Val * 100;

            Temp = "newpath " + AnsiString(x) + " " + AnsiString(y) + " moveto " +
            AnsiString(ScaleX) + " 0 rlineto " +
            "0 " + AnsiString(Size) + " rlineto " +
            "-" + AnsiString(ScaleX) + " 0 rlineto closepath fill";
            File->Add(Temp);
        }
    }


    if (SavePSAllForm->SaveGeneLabelsCheckBox->Checked == true)
    {
        Name = ((TGeneTreeNode *)Cluster->Genes->Objects[i+MinC])->Data->Name;
        TReplaceFlags Flags;
        Flags << rfReplaceAll;
        Name = StringReplace(Name,"(","",Flags);
        Name = StringReplace(Name,")","",Flags);

        GeneNameSize = max(ScaleY*Name.Length(),GeneNameSize);

        x = GeneTreeSize + ScaleX * Cluster->Columns + 10;
        y = (MaxC-MinC - i )  * ScaleY;

        File->Add("0.0 setgray");
        Temp = AnsiString(x) + " " + AnsiString(y) + " moveto";
        File->Add(Temp);
        Temp = "(" + Name + ") show";
        File->Add(Temp);
    }
}
File->Add("0.0 setgray");

if (SavePSAllForm->SaveArrayLabelsCheckBox->Checked == true)
{
for (j=0;j<Cluster->Columns;j++)
{
        x = GeneTreeSize + ScaleX * (j + 1);
        y = ((MaxC-MinC)+4)*ScaleY;

        File->Add("newpath");
        File->Add("gsave");
        Temp = AnsiString(x) + " " + AnsiString(y) + " moveto";
        File->Add(Temp);
        File->Add("90 rotate");
        Name = Cluster->Arrays->Strings[j];
        TReplaceFlags Flags;
        Flags << rfReplaceAll;
        Name = StringReplace(Name,"(","",Flags);
        Name = StringReplace(Name,")","",Flags);
        Temp = "(" + Name + ") show";
        File->Add(Temp);
        File->Add("grestore");
        File->Add("closepath");

        ArrayNameSize = max(ScaleY*Name.Length(),ArrayNameSize);
}
}

File->Add("0 setlinewidth");
File->Add("0.0 setgray");
if (SavePSAllForm->SaveGeneTreeCheckBox->Checked == true)
{
    Node->DrawPS(File,0.95 * GeneTreeSize,ScaleY,MaxC);
}
File->Add("0 setlinewidth");
File->Add("0.0 setgray");
if (SavePSAllForm->SaveArrayTreeCheckBox->Checked == true)
{
    Cluster->TopArrayNode->DrawPS(File, ScaleX, ArrayTreeSize, GeneTreeSize, ((MaxC)-(MinC)+2)*ScaleY + ArrayNameSize);
}

//Temp = "%%BoundingBox: 0 0 " + AnsiString(Cluster->Columns * ScaleX + GeneTreeSize + GeneNameSize) +
     AnsiString(" ") + AnsiString(ScaleY * ((MaxC)-(MinC)+2) + ArrayNameSize + ArrayTreeSize);

//File->Insert(3,Temp);

File->SaveToFile(PSFileName);
delete File;
}

void __fastcall TTreeViewMainForm::SavePSClick(TObject *Sender)
{
    MakeSimplePS();
}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::S1Click(TObject *Sender)
{
    Cluster->TopNode->WriteList(OptionsForm->CorrSelectCutoffEdit->Text.ToDouble());
}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::SaveAllPS1Click(TObject *Sender)
{
    SavePSAllForm->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::SetOverviewScrollPos()
{
     int index;

     if (Cluster->BestNode != NULL)
     {
         index = (Cluster->BestNode->MinCoor + Cluster->BestNode->MaxCoor)/2;
     }
     else
     {
         index = (Cluster->MinCoor + Cluster->MaxCoor)/2;
     }

     OverviewScrollBox->VertScrollBar->Position = index * ImageScaleY
            - OverviewScrollBox->Height / 2;
}
void __fastcall TTreeViewMainForm::SaveNodeData1Click(TObject *Sender)
{
     if (Cluster->TopNode != NULL)
     {
        SaveNodeDataForm->ShowModal();
     }
}

void __fastcall TTreeViewMainForm::SaveNodeData(AnsiString FileName)
{

        TStringList *NodeDataList = new TStringList();

        int j;

        AnsiString Line;
        Line = "NODE\tNAME\t";

        for (j=0;j<Cluster->Columns;j++)
        {
            Line += "\t" +
            Cluster->Arrays->Strings[j];
        }

        double MinCorrVal = SaveNodeDataForm->MinCorr;
        double MaxCorrVal = SaveNodeDataForm->MaxCorr;
        int MinElements = SaveNodeDataForm->MinElements;

        bool SaveChildren = SaveNodeDataForm->SaveChildrenCheckBox->Checked;
        bool SaveList     = SaveNodeDataForm->SaveListCheckBox->Checked;

        NodeDataList->Add(Line);
        if ((Cluster->BestNode != NULL) && (SaveNodeDataForm->UseSelectedNodeCheckBox->Checked) )
        {
           Cluster->BestNode->SaveData(NodeDataList,MinCorrVal,MaxCorrVal,MinElements,SaveChildren,SaveList);
        }
        else
        {
           Cluster->TopNode->SaveData(NodeDataList,MinCorrVal,MaxCorrVal,MinElements,SaveChildren,SaveList);
        }

        NodeDataList->SaveToFile(FileName);

        delete NodeDataList;
}

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



void __fastcall TTreeViewMainForm::EditURLStringsClick(TObject *Sender)
{
        URLMemoForm->Show();
}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::SaveNotes1Click(TObject *Sender)
{
     if (NoteSaveDialog->Execute())
     {
        TStringList *OutFile = new TStringList();

        for (int i=0;i<Cluster->Rows;i++)
        {
            AnsiString OutString = ((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->ID;
            OutString += "\t" +  ((TGeneTreeNode *)Cluster->Genes->Objects[i])->Data->Note;

            OutFile->Add(OutString);
        }

        OutFile->SaveToFile(NoteSaveDialog->FileName);
     }

}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::ScrollBar1KeyDown(TObject *Sender,
      WORD &Key, TShiftState Shift)
{
      FormKeyDown(Sender,Key,Shift);
}
//---------------------------------------------------------------------------
void __fastcall TTreeViewMainForm::AddNotetoDB1Click(TObject *Sender)
{
     //NoteForm->Show();        
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

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