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);
        }
 public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     // Basic properties
     for (int i = 0; i < node.Attributes.Count; i++)
     {
         if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ID, true) == 0)
         {
             id = node.Attributes[i].Value;
         }
         if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.X, true) == 0)
         {
             x = float.Parse(node.Attributes[i].Value);
         }
         if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.Y, true) == 0)
         {
             y = float.Parse(node.Attributes[i].Value);
         }
         if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.CONNECTABLE, true) == 0)
         {
             Connectable = bool.Parse(node.Attributes[i].Value);
         }
         if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.CONTROLLABLE, true) == 0)
         {
             Controllable = bool.Parse(node.Attributes[i].Value);
         }
     }
 }
        public void LoadConstraintsFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Interface_Constraint	constraint;
            GOM_Constraint_Set			constraint_set;
            string						editingMode;
            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.ON_POSITION_CHANGE, true) == 0)
                {
                    editingMode = "default";
                    for (int j = 0; j < node.ChildNodes[i].Attributes.Count; j++)
                    {
                        if (System.String.Compare(node.ChildNodes[i].Attributes[j].Name, GOM_TAGS.EDITING_MODE, true) == 0)
                        {
                            editingMode = node.ChildNodes[i].Attributes[j].Value;
                        }
                    }

                    constraint_set = new GOM_Constraint_Set();
                    constraint_set.EditingMode = editingMode;

                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        constraint = GOM_Utility.LoadConstraintFromXML(node.ChildNodes[i].ChildNodes[j],resources.Points);
                        if (constraint != null)
                        {
                            constraint_set.Add(constraint);
                        }
                    }

                    Constraints.Add(constraint_set);
                }
            }
        }
 /// <summary>
 /// Load assignment constraint from xml node.
 /// </summary>
 /// <param name="node">The xml node</param>
 public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     // TODO: LoadFromXML
 }
 public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     m_value = float.Parse(node.InnerText);
 }
        /// <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);
                }
            }
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Point				leftTop		= null;
            GOM_Point				rightDown	= null;
            GOM_Style_Filling		style;

            style = resources.FillingStyles["default"];

            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.STYLE, true) == 0)
                {
                    style = resources.FillingStyles[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.LEFT_TOP, true) == 0)
                {
                    leftTop = resources.Points[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.RIGHT_DOWN, true) == 0)
                {
                    rightDown = resources.Points[node.Attributes[i].Value];
                }
            }

            if ((leftTop == null) || (rightDown == null))
            {
                throw new Exception("Missing points in rectangle filling");
            }

            if (style == null)
            {
                throw new Exception("Missing style in rectangle filling");
            }

            this.m_points.Add(leftTop);
            this.m_points.Add(rightDown);
            this.m_style = style;
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Point			pt;
            GOM_Points			rgPoints;
            GOM_Style_Filling	style;

            style = resources.FillingStyles["default"];
            rgPoints = new GOM_Points();

            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.STYLE, true) == 0)
                {
                    style = resources.FillingStyles[node.Attributes[i].Value];
                }
            }

            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.VERTEX, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].Attributes.Count; j++)
                    {
                        if (System.String.Compare(node.ChildNodes[i].Attributes[j].Name, GOM_TAGS.POINT, true) == 0)
                        {
                            pt = resources.Points[node.ChildNodes[i].Attributes[j].Value];

                            if (pt == null)
                            {
                                throw new Exception("Missing points in polygon filling");
                            }

                            rgPoints.Add(pt);
                        }
                    }
                }
            }

            if (style == null)
            {
                throw new Exception("Missing style in polygon fillin");
            }

            this.m_points = rgPoints;
            this.m_style  = style;
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Point			startPt		= null;
            GOM_Point			endPt		= null;
            GOM_Point			leftTop		= null;
            GOM_Point			rightDown	= null;
            GOM_Style_Drawing	style;

            m_rotateAngle = 0F;
            style = resources.DrawingStyles["default"];

            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.STYLE, true) == 0)
                {
                    style = resources.DrawingStyles[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.START_POINT, true) == 0)
                {
                    startPt = resources.Points[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.END_POINT, true) == 0)
                {
                    endPt = resources.Points[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.LEFT_TOP, true) == 0)
                {
                    leftTop = resources.Points[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.RIGHT_DOWN, true) == 0)
                {
                    rightDown = resources.Points[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ROTATION, true) == 0)
                {
                    m_rotateAngle = float.Parse(node.Attributes[i].Value);
                }
            }

            if ((startPt == null) || (endPt == null) || (leftTop == null) || (rightDown == null))
            {
                throw new Exception("Missing points in arc drawing");
            }

            if (style == null)
            {
                throw new Exception("Missing style in arc drawing");
            }

            m_points.Add(leftTop);
            m_points.Add(rightDown);
            m_points.Add(startPt);
            m_points.Add(endPt);
            m_style = style;
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Utility.VerifyXmlNode(node, GOM_TAGS.GRAPHIC_OBJECT);

            //Load properties of the graphic object
            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ID, true) == 0)
                {
                    id = node.Attributes[i].Value;
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.TYPE, true) == 0)
                {
                    if (!node.Attributes[i].Value.Equals("group"))
                    {
                        throw new Exception("Invalid input. Not a group object node!");
                    }
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.X_OFFSET, true) == 0)
                {
                    m_xOffset = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.Y_OFFSET, true) == 0)
                {
                    m_yOffset = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ROTATION, true) == 0)
                {
                    m_rotation = float.Parse(node.Attributes[i].Value);
                }
            }

            this.rgObjects.Clear();
            GOM_Utility.LoadObjectsFromXML(node.ChildNodes[0], resources, this.rgObjects);

            CalculateBoundingBox();
            SynchronizeConnectorPosition();
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Utility.VerifyXmlNode(node, GOM_TAGS.SKETCH_POINT);

            for( int i=0; i<node.Attributes.Count; i++ )
            {
                if ( string.Compare(node.Attributes[i].Name, GOM_TAGS.X, true) == 0 )
                {
                    x = int.Parse(node.Attributes[i].Value);
                }
                if ( string.Compare(node.Attributes[i].Name, GOM_TAGS.Y, true) == 0 )
                {
                    y = int.Parse(node.Attributes[i].Value);
                }
                if ( string.Compare(node.Attributes[i].Name, GOM_TAGS.TIME, true) == 0 )
                {
                    time = int.Parse(node.Attributes[i].Value);
                }
            }
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            // Basic properties
            for( int i=0; i<node.Attributes.Count; i++ )
            {
                if ( string.Compare(node.Attributes[i].Name, GOM_TAGS.ID, true) == 0 )
                {
                    this.id = node.Attributes[i].Value;
                }
                if ( string.Compare(node.Attributes[i].Name, GOM_TAGS.TYPE, true) == 0 )
                {
                    if ( string.Compare(node.Attributes[i].Value, "sketch", true) != 0 )
                    {
                        throw new Exception("Invalid input. Not a sketch object node!");
                    }
                }
            }

            // 1st pass
            //   sketchStrokes
            //   points]
            GOM_Points points = null;
            for( int i=0; i<node.ChildNodes.Count; i++ )
            {
                if ( string.Compare(node.ChildNodes[i].Name, GOM_TAGS.SKETCH_STROKES, true) == 0 )
                {
                    LoadSketchStrokesFromXML(node.ChildNodes[i]);
                }
                if ( string.Compare(node.ChildNodes[i].Name, GOM_TAGS.POINTS, true) == 0 )
                {
                    points = LoadPointsFromXML(node.ChildNodes[i]);
                }
            }

            // 2nd pass
            //   drawings
            rgDrawings.Clear();
            if ( points != null )
            {
                GOM_Drawing_Styles styles = new GOM_Drawing_Styles();
                styles.Add(strokeStyle);
                GOM_ResourceArrays res = new GOM_ResourceArrays(points,styles,null);
                for( int i=0; i<node.ChildNodes.Count; i++ )
                {
                    if ( string.Compare(node.ChildNodes[i].Name, GOM_TAGS.DRAWINGS, true) == 0 )
                    {
                        for ( int j=0; j<node.ChildNodes[i].ChildNodes.Count; j++ )
                        {
                            GOM_Utility.LoadDrawingFromXML(node.ChildNodes[i].ChildNodes[j], rgDrawings, res);
                        }
                    }
                }
            }

            CalculateBoundingBox();
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Utility.VerifyXmlNode(node, GOM_TAGS.GRAPHIC_OBJECT);

            //Load properties of the graphic object
            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ID, true) == 0)
                {
                    id = node.Attributes[i].Value;
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.TYPE, true) == 0)
                {
                    if (!node.Attributes[i].Value.Equals("primitive"))
                    {
                        throw new Exception("Invalid input. Not a primitive object node!");
                    }
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.X_OFFSET, true) == 0)
                {
                    m_xOffset = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.Y_OFFSET, true) == 0)
                {
                    m_yOffset = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ROTATION, true) == 0)
                {
                    m_rotation = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.TEMPLATE, true) == 0)
                {
                    for (int j = 0; j < resources.Templates.Count; j++)
                    {
                        if (resources.Templates[j].id.Equals(node.Attributes[i].Value))
                        {
                            m_template = resources.Templates[j];
                        }
                    }

                    if (m_template == null)
                    {
                        throw new Exception("Unknown template");
                    }
                }
            }

            if (m_template == null)
            {
                throw new Exception("Can not find template of the graphic object");
            }
            //Initialize the graphic object according to the template
            InitializeFromTemplate(m_template);
            //Update status of the graphic object
            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.POINTS, true) == 0)
                {
                    UpdatePoints(node.ChildNodes[i]);
                }
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.STYLES, true) == 0)
                {
                    UpdateStyles(node.ChildNodes[i]);
                }
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.TEXT, true) == 0)
                {
                    LoadText(node.ChildNodes[i]);
                }
                #region new_modfied
                //Load attribute
                if (System.String.Compare(node.ChildNodes[i].Name, "attribute", true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadVarFromXML(node.ChildNodes[i].ChildNodes[j], j);
                    }
                }
                //Load restrictions
                if (System.String.Compare(node.ChildNodes[i].Name, "restrictions", true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadRestrictionFromXML(node.ChildNodes[i].ChildNodes[j], j);
                    }
                }
                #endregion
            }

            CalculateBoundingBox();
            SynchronizeConnectorPosition();
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Utility.VerifyXmlNode(node, GOM_TAGS.GRAPHIC_OBJECT);

            //Load properties of the graphic object
            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ID, true) == 0)
                {
                    id = node.Attributes[i].Value;
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.TYPE, true) == 0)
                {
                    if (!node.Attributes[i].Value.Equals("linkNode"))
                    {
                        throw new Exception("Invalid input. Not a primitive object node!");
                    }
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.X_OFFSET, true) == 0)
                {
                    m_xOffset = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.Y_OFFSET, true) == 0)
                {
                    m_yOffset = float.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ROTATION, true) == 0)
                {
                    m_rotation = float.Parse(node.Attributes[i].Value);
                }
            }

            //Load m_point
            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.POINTS, true) == 0)
                {
                    for ( int j=0; j<node.ChildNodes[i].ChildNodes.Count; j++ )
                    {
                        m_point.LoadFromXML(node.ChildNodes[i].ChildNodes[j], resources);
                        // Jump out of the loop, since there is only one point.
                        break;
                    }
                }
            }

            CalculateBoundingBox();
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Drawings			drawings;
            GOM_Style_Filling		style;

            style = resources.FillingStyles["default"];
            drawings = new GOM_Drawings();

            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.STYLE, true) == 0)
                {
                    style = resources.FillingStyles[node.Attributes[i].Value];
                }
            }

            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                GOM_Utility.LoadDrawingFromXML(node.ChildNodes[i], drawings, resources);
            }

            if (style == null)
            {
                throw new Exception("Missing style in polygon fillin");
            }

            this.m_style = style;
            this.m_drawings = drawings;
        }
 public GOM_Filling_Polygon(System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     LoadFromXML(node, resources);
 }
 public GOM_Drawing_Bezier(System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     LoadFromXML(node, resources);
 }
 public GOM_Filling_Rectangle(System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     m_points = new GOM_Points();
     LoadFromXML(node, resources);
 }
 public GOM_Drawing_Line( System.Xml.XmlNode node, GOM_ResourceArrays resources)
 {
     m_points = new GOM_Points();
     LoadFromXML(node, resources);
 }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            //Load following attributes for tempalte
            //	id
            //	extScale
            //	extRotate
            //	extConnect
            //	keepAspectRatio
            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.ID, true) == 0)
                {
                    id = node.Attributes[i].Value;
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.EXTERNAL_SCALE, true) == 0)
                {
                    extScale = bool.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.EXTERNAL_ROTATE, true) == 0)
                {
                    extRotate= bool.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.EXTERNAL_CONNECT, true) == 0)
                {
                    extConnect= bool.Parse(node.Attributes[i].Value);
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.KEEP_ASPECT_RATIO, true) == 0)
                {
                    keepAspectRatio= bool.Parse(node.Attributes[i].Value);
                }
            }

            //1st pass load
            //	Basic properties of points
            //	Editing modes
            //	Drawing and filling styles
            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.POINTS, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadPointFromXML(node.ChildNodes[i].ChildNodes[j]);
                    }
                }
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.EDITING_MODES, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadEditingModeFromXML(node.ChildNodes[i].ChildNodes[j]);
                    }
                }
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.STYLES, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadStyleFromXML(node.ChildNodes[i].ChildNodes[j]);
                    }
                }
                #region new_modfied
                if (System.String.Compare(node.ChildNodes[i].Name, "attribute", true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadVarFromXML(node.ChildNodes[i].ChildNodes[j], j);
                    }
                }

                if (System.String.Compare(node.ChildNodes[i].Name, "restrictions", true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadRestrictionFromXML(node.ChildNodes[i].ChildNodes[j], j);
                    }
                }
                #endregion
            }

            //2nd pass load
            //  Constraints of points
            //	Drawing operations
            //	Filling operations
            GOM_ResourceArrays resourceArrays = new GOM_ResourceArrays(rgPoints, rgDrawingStyles, rgFillingStyles);

            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.POINTS, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        LoadPointConstraintFromXML(node.ChildNodes[i].ChildNodes[j]);
                    }
                }
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.DRAWINGS, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        GOM_Utility.LoadDrawingFromXML(node.ChildNodes[i].ChildNodes[j], rgDrawings, resourceArrays);
                    }
                }
                if (System.String.Compare(node.ChildNodes[i].Name, GOM_TAGS.FILLINGS, true) == 0)
                {
                    for (int j = 0; j < node.ChildNodes[i].ChildNodes.Count; j++)
                    {
                        GOM_Utility.LoadFillingFromXML(node.ChildNodes[i].ChildNodes[j], rgFillings, resourceArrays);
                    }
                }
            }
        }
        public void LoadFromXML(System.Xml.XmlNode node, GOM_ResourceArrays resources)
        {
            GOM_Point			startPt	= null;
            GOM_Point			endPt	= null;
            GOM_Style_Drawing	style;

            style = resources.DrawingStyles["default"];

            for (int i = 0; i < node.Attributes.Count; i++)
            {
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.STYLE, true) == 0)
                {
                    style = resources.DrawingStyles[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.START_POINT, true) == 0)
                {
                    startPt = resources.Points[node.Attributes[i].Value];
                }
                if (System.String.Compare(node.Attributes[i].Name, GOM_TAGS.END_POINT, true) == 0)
                {
                    endPt = resources.Points[node.Attributes[i].Value];
                }
            }

            if ((startPt == null) || (endPt == null))
            {
                throw new Exception("Missing points in line drawing");
            }

            if (style == null)
            {
                throw new Exception("Missing style in line drawing");
            }

            this.m_points.Add(startPt);
            this.m_points.Add(endPt);
            m_style = style;
        }