📄 treeviewmain.cpp
字号:
}
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 + -