Ejemplo n.º 1
0
        public GOM_Link(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            m_startStyle	= GOMLib.GOM_Terminal_Style.None;
            m_endStyle		= GOMLib.GOM_Terminal_Style.Triangle;
            m_drawingStyle	= new GOMLib.GOM_Style_Drawing();
            m_linkingStyle	= GOM_Linking_Style.Line;
            m_keyPts		= new GOM_Points();

            m_drawingStyle.id = "default";

            LoadFromXML(node, resources);
        }
Ejemplo n.º 2
0
        public GOM_Link(GOM_Interface_Graphic_Object startObj, GOM_Point startPt, GOM_Interface_Graphic_Object endObj, GOM_Point endPt, GOM_Style_Drawing drawingStyle, GOM_Linking_Style linkingStyle, GOM_Terminal_Style startStyle, GOM_Terminal_Style endStyle)
        {
            m_startObj		= startObj;
            m_endObj		= endObj;
            m_startPt		= startPt;
            m_endPt			= endPt;
            m_startStyle	= startStyle;
            m_endStyle		= endStyle;
            m_drawingStyle	= drawingStyle;
            m_linkingStyle	= linkingStyle;
            m_keyPts		= new GOM_Points();

            m_drawingStyle.id = "default";
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Draws link's terminal ponit.
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="style"></param>
        /// <param name="pt1"></param>
        /// <param name="pt2"></param>
        private void DrawTerminal(System.Drawing.Graphics canvas, GOM_Terminal_Style style, System.Drawing.PointF pt1, System.Drawing.PointF pt2)
        {
            System.Drawing.Drawing2D.Matrix	matrix;
            float angle;

            angle	= (float)(System.Math.Atan2(pt2.Y - pt1.Y, pt2.X - pt1.X) / System.Math.PI) * 180;
            matrix	= canvas.Transform;

            canvas.TranslateTransform(pt1.X, pt1.Y);
            canvas.RotateTransform(angle);
            switch (style)
            {
                case GOM_Terminal_Style.Circle:
                {
                    canvas.FillEllipse(new System.Drawing.SolidBrush(m_drawingStyle.drawingStyle.Color), -5, -5, 10, 10);
                    break;
                }
                case GOM_Terminal_Style.Arrow:
                {
                    canvas.DrawLine(m_drawingStyle.drawingStyle, 0, 0, 10, 5);
                    canvas.DrawLine(m_drawingStyle.drawingStyle, 0, 0, 10, -5);
                    break;
                }
                case GOM_Terminal_Style.Triangle:
                {
                    System.Drawing.Point[] rgPts;

                    rgPts = new System.Drawing.Point[3];
                    rgPts[0].X = 0;
                    rgPts[0].Y = 0;
                    rgPts[1].X = 10;
                    rgPts[1].Y = 5;
                    rgPts[2].X = 10;
                    rgPts[2].Y = -5;

                    canvas.FillPolygon(new System.Drawing.SolidBrush(m_drawingStyle.drawingStyle.Color), rgPts);
                    break;
                }
                case GOM_Terminal_Style.Diamond:
                {
                    System.Drawing.Point[] rgPts;

                    rgPts = new System.Drawing.Point[4];
                    rgPts[0].X = 0;
                    rgPts[0].Y = 0;
                    rgPts[1].X = 5;
                    rgPts[1].Y = 5;
                    rgPts[2].X = 10;
                    rgPts[2].Y = 0;
                    rgPts[3].X = 5;
                    rgPts[3].Y = -5;

                    canvas.FillPolygon(new System.Drawing.SolidBrush(m_drawingStyle.drawingStyle.Color), rgPts);
                    break;
                }
            }
            canvas.Transform = matrix;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Load the link from XmlNode.
        /// </summary>
        /// <param name="node">The XmlNode.</param>
        /// <param name="resources">GOM resource.</param>
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Utility.VerifyXmlNode(node, GOM_TAGS.CONNECTION);

            for( int i=0; i<node.Attributes.Count; i++ )
            {
            //				if ( string.Compare(node.Attributes[i].Name,GOM_TAGS.DRAWING_STYLE) == 0 )
            //				{
            //					this.m_drawingStyle = resources.DrawingStyles[node.Attributes[i].Value];
            //				}
                if ( string.Compare(node.Attributes[i].Name,GOM_TAGS.LINKING_STYLE) == 0 )
                {
                    this.m_linkingStyle = ConvertStringToLinkingStyle(node.Attributes[i].Value);
                }
            }

            GOM_Utility.VerifyXmlNode(node.ChildNodes[0], GOM_TAGS.POINT);
            GOM_Utility.VerifyXmlNode(node.ChildNodes[1], GOM_TAGS.POINT);
            // 1st pass
            //   objectID
            for( int i=0; i<node.ChildNodes[0].Attributes.Count; i++ )
            {
                if ( string.Compare(node.ChildNodes[0].Attributes[i].Name, GOM_TAGS.OBJECTID) == 0 )
                {
                    this.m_startObj = GOM_Utility.RecursiveFindObject(node.ChildNodes[0].Attributes[i].Value, resources.Objects);
                }
            }
            for( int i=0; i<node.ChildNodes[1].Attributes.Count; i++ )
            {
                if ( string.Compare(node.ChildNodes[1].Attributes[i].Name, GOM_TAGS.OBJECTID) == 0 )
                {
                    this.m_endObj = GOM_Utility.RecursiveFindObject(node.ChildNodes[1].Attributes[i].Value, resources.Objects);
                }
            }
            if ( m_startObj==null || m_endObj==null )
            {
                throw new System.Xml.XmlException("Missing points in the connection.");
            }

            //			if ( !(m_startObj is GOM_Object_Primitive) || !(m_endObj is GOM_Object_Primitive) )
            //			{
            //				throw new System.Xml.XmlException("Terminal points' objects are not all primitives.");
            //			}

            // 2nd pass
            //   pointID
            //   terminalStyle
            for( int i=0; i<node.ChildNodes[0].Attributes.Count; i++ )
            {
                if ( string.Compare(node.ChildNodes[0].Attributes[i].Name, GOM_TAGS.POINTID) == 0 )
                {
                    this.m_startPt = m_startObj.GetPointByName(node.ChildNodes[0].Attributes[i].Value);
                }
                if ( string.Compare(node.ChildNodes[0].Attributes[i].Name, GOM_TAGS.TERMINAL_STYLE) == 0 )
                {
                    this.m_startStyle = ConvertStringToTerminalStyle(node.ChildNodes[0].Attributes[i].Value);
                }
            }
            for( int i=0; i<node.ChildNodes[1].Attributes.Count; i++ )
            {
                if ( string.Compare(node.ChildNodes[1].Attributes[i].Name, GOM_TAGS.POINTID) == 0 )
                {
                    this.m_endPt = m_endObj.GetPointByName(node.ChildNodes[1].Attributes[i].Value);
                }
                if ( string.Compare(node.ChildNodes[1].Attributes[i].Name, GOM_TAGS.TERMINAL_STYLE) == 0 )
                {
                    this.m_endStyle = ConvertStringToTerminalStyle(node.ChildNodes[1].Attributes[i].Value);
                }
            }

            if ( m_startPt==null || m_endPt==null )
            {
                throw new System.Xml.XmlException("Cannot find find terminal points.");
            }

            // Drawing style
            this.m_drawingStyle.LoadFromXML( node.ChildNodes[2], resources );

            // Key points
            GOM_Utility.VerifyXmlNode(node.ChildNodes[3], GOM_TAGS.KEYPOINTS);
            for(int i=0; i<node.ChildNodes[3].ChildNodes.Count; i++ )
            {
                if ( string.Compare(node.ChildNodes[3].ChildNodes[i].Name, GOM_TAGS.POINT, true) == 0 )
                {
                    GOM_Point keyPoint = new GOM_Point();
                    for(int j=0; j<node.ChildNodes[3].ChildNodes[i].Attributes.Count; j++ )
                    {
                        if ( string.Compare(node.ChildNodes[3].ChildNodes[i].Attributes[j].Name, GOM_TAGS.X, true) == 0 )
                        {
                            keyPoint.x = float.Parse(node.ChildNodes[3].ChildNodes[i].Attributes[j].Value);
                        }
                        if ( string.Compare(node.ChildNodes[3].ChildNodes[i].Attributes[j].Name, GOM_TAGS.Y, true) == 0 )
                        {
                            keyPoint.y = float.Parse(node.ChildNodes[3].ChildNodes[i].Attributes[j].Value);
                        }
                    }
                    m_keyPts.Add(keyPoint);
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Convert the TerminalStyle to a string.
 /// </summary>
 /// <param name="terminalStyle">The TermianlStyel.</param>
 /// <returns>A string.</returns>
 public string ConvertTerminalStyleToString( GOM_Terminal_Style terminalStyle )
 {
     switch(terminalStyle)
     {
         case GOM_Terminal_Style.None:
             return "none";
         case GOM_Terminal_Style.Circle:
             return "circle";
         case GOM_Terminal_Style.Arrow:
             return "arrow";
         case GOM_Terminal_Style.Triangle:
             return "triangle";
         case GOM_Terminal_Style.Diamond:
             return "diamond";
     }
     throw new ArgumentException("Unknown TerminalStyle["+terminalStyle.ToString()+"].");
 }