public EditTernaryRelationship(RelationshipShape relationship)
        {
            InitializeComponent();

            Relationship = new RelationshipShape(relationship.sName, new Point(panelDoubleBuffered1.Width / 2, panelDoubleBuffered1.Height / 2), relationship.type);
            SelectedEntity1 = new EntityShape(relationship.cardinalities[0].Entity.sName, new Point(panelDoubleBuffered1.Width / 2, ThongSo.ShapeH / 2), relationship.cardinalities[0].Entity.type);
            SelectedEntity2 = new EntityShape(relationship.cardinalities[1].Entity.sName, new Point(panelDoubleBuffered1.Width / 2 - ThongSo.ShapeW * 3/2, panelDoubleBuffered1.Height - ThongSo.ShapeH/2), relationship.cardinalities[1].Entity.type);
            SelectedEntity3 = new EntityShape(relationship.cardinalities[2].Entity.sName, new Point(panelDoubleBuffered1.Width / 2 + ThongSo.ShapeW * 3/2, panelDoubleBuffered1.Height - ThongSo.ShapeH/2), relationship.cardinalities[2].Entity.type);

            cardi1 = Relationship.CreateCardinality(SelectedEntity1, relationship.cardinalities[0].MinCardinality, relationship.cardinalities[0].MaxCardinality);
            cardi2 = Relationship.CreateCardinality(SelectedEntity2, relationship.cardinalities[1].MinCardinality, relationship.cardinalities[1].MaxCardinality);
            cardi3 = Relationship.CreateCardinality(SelectedEntity3, relationship.cardinalities[2].MinCardinality, relationship.cardinalities[2].MaxCardinality);

            panelDoubleBuffered1.Controls.Add(Relationship);
            panelDoubleBuffered1.Controls.Add(SelectedEntity1);
            panelDoubleBuffered1.Controls.Add(SelectedEntity2);
            panelDoubleBuffered1.Controls.Add(SelectedEntity3);
            panelDoubleBuffered1.Refresh();

            int min1, max1, min2, max2, min3, max3;
            min1 = Relationship.cardinalities[0].MinCardinality;
            max1 = Relationship.cardinalities[0].MaxCardinality;

            min2 = Relationship.cardinalities[1].MinCardinality;
            max2 = Relationship.cardinalities[1].MaxCardinality;

            min3 = Relationship.cardinalities[2].MinCardinality;
            max3 = Relationship.cardinalities[2].MaxCardinality;

            setCardinality(min1, max1, imageComboBoxEdit1);
            setCardinality(min2, max2, imageComboBoxEdit2);
            setCardinality(min3, max3, imageComboBoxEdit3);

            showText();
        }
示例#2
0
        public void UpdateCardinalityPosition()
        {
            for (int i = 0; i < 4; i++)
            {
                //update all cardinality of this entity
                for (int j = 0; j < this.cardinalities[i].Count; j++)
                {
                    CardinalityShape cardi = this.cardinalities[i][j];

                    RelationshipShape rel = cardi.Relationship;

                    int oldEdgeCardiPlace = i + 1;
                    int newEdgeCardiPlace = DrawingSupport.CalculateCardiDirection(this, rel);

                    //Chổ này làm kỹ, không remove ra rồi add đại vô được
                    //không thôi nó giựt wài ghét lắm

                    //Nếu vị trí mới tính được khác vị trí cũ
                    if (oldEdgeCardiPlace != newEdgeCardiPlace)
                    {
                        //remove old and add new
                        this.cardinalities[oldEdgeCardiPlace - 1].Remove(cardi);

                        int index = CalculateCardiPosition(cardi, newEdgeCardiPlace);
                        this.cardinalities[newEdgeCardiPlace - 1].Insert(index, cardi);
                    }
                    else //Nếu vẫn là vị trí cũ, thì tính lại thứ tự trong vị trí đó
                    {
                        //just update the position
                        for (int k = 0; k < this.cardinalities[oldEdgeCardiPlace - 1].Count - 1; k++)
                        {
                            if (oldEdgeCardiPlace == 1 || oldEdgeCardiPlace == 3) //Up hoặc down thì so sánh x
                            {
                                if (this.cardinalities[oldEdgeCardiPlace - 1][k].Relationship.Location.X > this.cardinalities[oldEdgeCardiPlace - 1][k + 1].Relationship.Location.X)
                                {
                                    this.cardinalities[oldEdgeCardiPlace - 1].Reverse(k, 2);
                                }
                            }
                            else //right hoặc left thì so sánh y
                            {
                                if (this.cardinalities[oldEdgeCardiPlace - 1][k].Relationship.Location.Y > this.cardinalities[oldEdgeCardiPlace - 1][k + 1].Relationship.Location.Y)
                                {
                                    this.cardinalities[oldEdgeCardiPlace - 1].Reverse(k, 2);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#3
0
        public AddCardinality(RelationshipShape relationship)
        {
            InitializeComponent();

            Relationship = new RelationshipShape(relationship.sName, new Point(panelDoubleBuffered1.Width / 2, panelDoubleBuffered1.Height / 2), relationship.type);
            SelectedEntity1 = new EntityShape(relationship.cardinalities[0].Entity.sName, new Point(panelDoubleBuffered1.Width / 2 - ThongSo.ShapeW * 3/2, panelDoubleBuffered1.Height / 2), relationship.cardinalities[0].Entity.type);
            SelectedEntity2 = new EntityShape(relationship.cardinalities[1].Entity.sName, new Point(panelDoubleBuffered1.Width / 2 + ThongSo.ShapeW * 3/2, panelDoubleBuffered1.Height / 2), relationship.cardinalities[1].Entity.type);

            cardi1 = Relationship.CreateCardinality(SelectedEntity1, relationship.cardinalities[0].MinCardinality, relationship.cardinalities[0].MaxCardinality);
            cardi2 = Relationship.CreateCardinality(SelectedEntity2, relationship.cardinalities[1].MinCardinality, relationship.cardinalities[1].MaxCardinality);

            panelDoubleBuffered1.Controls.Add(Relationship);
            panelDoubleBuffered1.Controls.Add(SelectedEntity1);
            panelDoubleBuffered1.Controls.Add(SelectedEntity2);
            panelDoubleBuffered1.Refresh();

            int min1, max1, min2, max2;
            min1 = Relationship.cardinalities[0].MinCardinality;
            max1 = Relationship.cardinalities[0].MaxCardinality;

            min2 = Relationship.cardinalities[1].MinCardinality;
            max2 = Relationship.cardinalities[1].MaxCardinality;

            if (min1 == 0 && max1 == 1)
                imageComboBoxEdit1.SelectedIndex = 0;
            if (min1 == 1 && max1 == 1)
                imageComboBoxEdit1.SelectedIndex = 1;
            if (min1 == 0 && max1 == -1)
                imageComboBoxEdit1.SelectedIndex = 2;
            if (min1 == 1 && max1 == -1)
                imageComboBoxEdit1.SelectedIndex = 3;

            if (min2 == 0 && max2 == 1)
                imageComboBoxEdit2.SelectedIndex = 0;
            if (min2 == 1 && max2 == 1)
                imageComboBoxEdit2.SelectedIndex = 1;
            if (min2 == 0 && max2 == -1)
                imageComboBoxEdit2.SelectedIndex = 2;
            if (min2 == 1 && max2 == -1)
                imageComboBoxEdit2.SelectedIndex = 3;

            showText();
        }
示例#4
0
        public override ShapeBase Clone()
        {
            RelationshipShape rel = new RelationshipShape();

            rel.sName = sName;
            rel.type  = type;

            rel.Size     = this.Size;
            rel.Location = Location;

            foreach (AttributeShape att in attributes)
            {
                rel.addAttribute((AttributeShape)att.Clone());
            }

            foreach (CardinalityShape cardi in cardinalities)
            {
                CardinalityShape newcardi = (CardinalityShape)cardi.Clone();
                rel.CreateCardinality(newcardi.Entity, newcardi.MinCardinality, newcardi.MaxCardinality);
            }

            return((ShapeBase)rel);
        }
示例#5
0
        public INotation createNotation()
        {
            RelationshipShape relationship = new RelationshipShape();
            relationship.sName = this.name;
            relationship.type = this.type;
            relationship.Location = new Point(this.x, this.y);
            relationship.Size = new Size(this.w, this.h);

            return (INotation)relationship;
        }
示例#6
0
        private void CreateTernaryRelationship()
        {
            if (FirstEntity == SecondEntity || FirstEntity == ThirdEntity || SecondEntity == ThirdEntity)
            {
                return;
            }

            RelationshipShape rel = new RelationshipShape();
            rel.type = DrawingShapeState;

            //Gán location của relationship mới tạo là điểm giữa của 3 Entity
            int MinX = Math.Min(FirstEntity.CenterPoint.X, Math.Min(SecondEntity.CenterPoint.X, ThirdEntity.CenterPoint.X));
            int MinY = Math.Min(FirstEntity.CenterPoint.Y, Math.Min(SecondEntity.CenterPoint.Y, ThirdEntity.CenterPoint.Y));

            int MaxX = Math.Max(FirstEntity.CenterPoint.X, Math.Max(SecondEntity.CenterPoint.X, ThirdEntity.CenterPoint.X));
            int MaxY = Math.Max(FirstEntity.CenterPoint.Y, Math.Max(SecondEntity.CenterPoint.Y, ThirdEntity.CenterPoint.Y));

            rel.CenterPoint = new Point(MinX + (MaxX - MinX) / 2, MinY + (MaxY - MinY) / 2);

            CardinalityShape car1 = rel.CreateCardinality(FirstEntity, 0, 0);
            CardinalityShape car2 = rel.CreateCardinality(SecondEntity, 0, 0);
            CardinalityShape car3 = rel.CreateCardinality(ThirdEntity, 0, 0);

            if (rel.type != RelationshipType.AssociativeEntity)
            {
                car1.setValue(1, 1);
                car2.setValue(1, 1);
                car3.setValue(1, 1);
            }
            else
            {
                car1.setValue(0, -1);
                car2.setValue(0, -1);
                car3.setValue(0, -1);
            }

            this.Controls.Add(rel);
        }
示例#7
0
        private void CreateBinaryRelationship()
        {
            if (FirstEntity == SecondEntity)
            {
                return;
            }

            RelationshipShape rel = new RelationshipShape();
            rel.type = DrawingShapeState;

            //Gán location của relationship mới tạo là điểm giữa của 2 Entity

            rel.CenterPoint = new Point(Math.Abs(FirstEntity.CenterPoint.X + SecondEntity.CenterPoint.X) / 2, Math.Abs(FirstEntity.CenterPoint.Y + SecondEntity.CenterPoint.Y) / 2);

            CardinalityShape car1 = rel.CreateCardinality(FirstEntity, 0, 0);
            CardinalityShape car2 = rel.CreateCardinality(SecondEntity, 0, 0);

            if (FirstEntity.type != SecondEntity.type)
                rel.type = RelationshipType.Identifier;

            if (rel.type != RelationshipType.AssociativeEntity)
            {
                if (rel.type == RelationshipType.Identifier)
                {
                    if (FirstEntity.type == EntityType.Strong)
                    {
                        car1.setValue(1, 1);
                        car2.setValue(0, -1);
                    }
                    else
                    {
                        car1.setValue(0, -1);
                        car2.setValue(1, 1);
                    }
                }
                else
                {
                    car1.setValue(1, 1);
                    car2.setValue(0, -1);
                }
            }
            else
            {
                car1.setValue(0, -1);
                car2.setValue(0, -1);
            }

            this.Controls.Add(rel);
        }
示例#8
0
        //Create Relationship
        private void CreateUnaryRelationship()
        {
            RelationshipShape rel = new RelationshipShape();
            rel.type = DrawingShapeState;

            rel.Location = new Point(FirstEntity.Location.X + FirstEntity.Width + ThongSo.ShapeW, FirstEntity.Location.Y);

            CardinalityShape car1 = rel.CreateCardinality(FirstEntity, 0, 0);
            CardinalityShape car2 = rel.CreateCardinality(FirstEntity, 0, 0);

            if (rel.type != RelationshipType.AssociativeEntity)
            {
                car1.setValue(1, 1);
                car2.setValue(0, -1);
            }
            else
            {
                car1.setValue(0, -1);
                car2.setValue(0, -1);
            }

            this.Controls.Add(rel);
        }
示例#9
0
        public override ShapeBase Clone()
        {
            RelationshipShape rel = new RelationshipShape();
            rel.sName = sName;
            rel.type = type;

            rel.Size = this.Size;
            rel.Location = Location;

            foreach (AttributeShape att in attributes)
            {
                rel.addAttribute((AttributeShape)att.Clone());
            }

            foreach (CardinalityShape cardi in cardinalities)
            {
                CardinalityShape newcardi = (CardinalityShape)cardi.Clone();
                rel.CreateCardinality(newcardi.Entity, newcardi.MinCardinality, newcardi.MaxCardinality);
            }

            return (ShapeBase)rel;
        }