📄 relation.cpp
字号:
#include "StdAfx.h"
#include "Relation.h"
Relation::Relation(CString name,int f,MyEntity* my1,MyEntity* my2,int x1,int y1,int x2,int y2)
{
this->selecting=0;
this->name=name;
this->flag=f;
this->type=2;
this->entity1=my1;
this->entity2=my2;
this->e1=*(new CPoint(x1,y1));
this->e2=*(new CPoint(x2,y2));
this->firstAttribute=NULL;
// this->next=NULL;
this->nextelement=NULL;
this->role1="";
this->role2="";
}
void Relation::addAttribute(Attribute *a)
{
Attribute* first=this->firstAttribute;
if(first==NULL)
{
firstAttribute=a;
return;
}
while(first->next!=NULL)
{
first=first->next;
}
first->next=a;
}
void Relation::removeAttribute(Attribute *a)
{
Attribute* first=this->firstAttribute;
if(first==a)
{
firstAttribute=first->next;
return;
}
while(first->next!=NULL)
{
if(first->next==a)
{
first->next=a->next;
return;
}
first=first->next;
}
}
void Relation::paint(CDC& g)
{
CPen pen(PS_SOLID,2,RGB(255,0,0));
if(this->entity1!=this->entity2)
{
if(this->flag==1)
{
g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"1");
g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"1");
}
else if(this->flag==2||this->flag==5)
{
g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"1");
g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"n");
}
else if(this->flag==3)
{
g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"n");
g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"1");
}
else if(this->flag==4)
{
g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"n");
g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"n");
}
g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
g.LineTo((this->entity1->e1.x+this->entity1->e2.x)/2
,(this->entity1->e1.y+this->entity1->e2.y)/2);
g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
g.LineTo((this->entity2->e1.x+this->entity2->e2.x)/2
,(this->entity2->e1.y+this->entity2->e2.y)/2);
}
else
{
int x1=(e1.x+e2.x)/4+this->entity1->e2.x/2;
int y1=(e1.y+e2.y)/4+this->entity1->e1.y/2;
int y2=(e1.y+e2.y)/4+this->entity1->e2.y/2;
x1=(this->entity1->e2.x+x1)/2;
y1=(this->entity1->e1.y+y1)/2;
y2=(this->entity1->e2.y+y2)/2;
if(this->flag==1)
{
g.TextOut(x1,y1,"1"+role1);
g.TextOut(x1,y2,"1"+role2);
}
else if(this->flag==2)
{
g.TextOut(x1,y1,"1"+role1);
g.TextOut(x1,y2,"n"+role2);
}
else if(this->flag==3)
{
g.TextOut(x1,y1,"n"+role1);
g.TextOut(x1,y2,"1"+role2);
}
else if(this->flag==4)
{
g.TextOut(x1,y1,"n"+role1);
g.TextOut(x1,y2,"n"+role2);
}
g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
g.LineTo(entity1->e2.x,entity1->e1.y);
g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
g.LineTo(entity1->e2.x,entity1->e2.y);
}
if(this->selecting==1)
{
g.SelectObject(&pen);
}
CPoint *p=new CPoint[4];
p[0].x=e1.x-7;p[0].y=(e1.y+e2.y)/2;
p[1].x=(e1.x+e2.x)/2;p[1].y=e1.y-5;
p[2].x=e2.x+7;p[2].y=(e1.y+e2.y)/2;
p[3].x=(e1.x+e2.x)/2;p[3].y=e2.y+5;
g.Polygon(p,4);
if(this->flag==5)
{
p[0].x=p[0].x+7;
p[1].y=p[1].y+5;
p[2].x=p[2].x-7;
p[3].y=p[3].y-5;
g.Polygon(p,4);
}
delete []p;
g.TextOut(e1.x+20,(e1.y+e2.y)/2-10,name);
CPen test_pen;
if(this->selecting==1)
{
test_pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
g.SelectObject(&test_pen);
}
this->entity1->paint(g);
this->entity2->paint(g);
pen.DeleteObject();
test_pen.DeleteObject();
}
int Relation::isDeleted()
{
if(this->firstAttribute==NULL)
{
return 1;
}
else
{
return 0;
}
}
void Relation::Delete()
{
if(this->entity1!=this->entity2)
{
this->entity1->removeRelation(this);
}
this->entity2->removeRelation(this);
}
void Relation::serial(CArchive& ar)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -