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 };
}