public static void AddEdgeAttrs()

in GraphLayout/tools/Dot2Graph/AttributeValuePair.cs [695:785]


        public static void AddEdgeAttrs(ArrayList arrayList, Edge edge) {        
            var label = new Label();
            var edgeAttr = new EdgeAttr();
                
            foreach (AttributeValuePair attrVal in arrayList) {
                if (AddAttributeKeyVal(new CoupleLabelBaseAttr(label, edgeAttr), attrVal))
                    continue;
                switch (attrVal.attributeTypeEnum) {
                    case AttributeTypeEnum.LabelLocation:
                        var posData = (PosData) attrVal.val;
                        var cpList = posData.ControlPoints as List<P2>;
                        if (cpList != null)
                            label.GeometryLabel.Center = cpList[0];
                        break;
                    case AttributeTypeEnum.Arrowhead:
                        edgeAttr.ArrowheadAtTarget = (ArrowStyle) attrVal.val;
                        break;
                    case AttributeTypeEnum.Id:
                        edgeAttr.Id = attrVal.val as String;
                        break;
                    case AttributeTypeEnum.ArrowTail:
                        edgeAttr.ArrowheadAtSource = (ArrowStyle) attrVal.val;
                        break;
                    case AttributeTypeEnum.RGBColor:
                        edgeAttr.Color = StringToMsaglColor((string) attrVal.val);
                        break;
                    case AttributeTypeEnum.Label:
                        label.Text = attrVal.val as String;
                        break;
                    case AttributeTypeEnum.Color:
                        edgeAttr.Color = StringToMsaglColor((string) attrVal.val);
                        break;
                    case AttributeTypeEnum.Fontcolor:
                        label.FontColor = StringToMsaglColor((string) attrVal.val);
                        break;
                    case AttributeTypeEnum.Pos: {
                        posData = (PosData) attrVal.val; //consider creating a Microsoft.Msagl.Splines.ICurve here
                        InitGeomEdge(edge);
                        if (posData.ArrowAtSource)
                            edge.GeometryEdge.EdgeGeometry.SourceArrowhead = new Arrowhead {
                                TipPosition = posData.ArrowAtSourcePosition
                            };
                        if (posData.ArrowAtTarget)
                            edge.GeometryEdge.EdgeGeometry.TargetArrowhead = new Arrowhead {
                                TipPosition = posData.ArrowAtTargetPosition
                            };

                        var list = posData.ControlPoints as List<P2>;
                        if (list != null && list.Count%3 == 1)
                            AddBezieSegsToEdgeFromPosData(edge, list);

                        break;
                    }
                    case AttributeTypeEnum.Style:
                        AddStyles(edgeAttr, attrVal.val);
                        break;
                    case AttributeTypeEnum.EdgeDirection:
                        if ((EdgeDirection)attrVal.val == EdgeDirection.Both)
                            edgeAttr.ArrowheadAtSource = ArrowStyle.Normal;
                        break;
                    case AttributeTypeEnum.Weight: 
                        if(attrVal.val is String)
                          edgeAttr.Weight=Int32.Parse( attrVal.val as String,AttributeBase.USCultureInfo);
                        else
                          edgeAttr.Weight=(int) attrVal.val;                    
                        break;
                    case AttributeTypeEnum.Ignore: {}
                        break;
                    case AttributeTypeEnum.ArrowSize: 
                        //Bug                    
                        break;
                    case AttributeTypeEnum.SameTail: 
                        //edgeAttr.Sametail=attrVal.val as String;                    
                        break;
                    case AttributeTypeEnum.SameHead: 
                        //edgeAttr.Samehead=attrVal.val as String;                    
                        break;
                    case AttributeTypeEnum.Constraint: 
                        //do nothing
                        //edgeAttr.Constraint=(bool)attrVal.val;                    
                        break;
                    default:
                        throw new Exception(string.Format("The attribute \"{0}\" is not supported for edges", attrVal.attributeTypeEnum));
                }
            }

            edge.Attr = edgeAttr;
            if (!String.IsNullOrEmpty(label.Text))
                edge.Label = new Label(label.Text) { Owner = edge };
            
        }