сделал graphml

This commit is contained in:
Nikitin Aleksandr
2023-08-15 17:53:27 +03:00
parent 0165d10680
commit 76dd373369
8 changed files with 165 additions and 81 deletions
+6 -7
View File
@@ -6,7 +6,6 @@ import (
"github.com/ManyakRus/image_packages/internal/packages_folder"
"github.com/ManyakRus/image_packages/internal/parse_go"
"github.com/ManyakRus/image_packages/pkg/xgml"
"github.com/ManyakRus/image_packages/pkg/xml"
"github.com/ManyakRus/starter/folders"
"github.com/ManyakRus/starter/log"
"github.com/beevik/etree"
@@ -34,7 +33,7 @@ func StartFillAll(FileName string) {
//xgml.AddDirectory(buffer, FolderRoot.Name)
DocXML := xml.CreateDocXGML()
DocXML := xgml.CreateDocument()
ElementGraph := DocXML.FindElement("/section/section")
//заполним каталоги и пакеты
@@ -68,7 +67,7 @@ func FillLinks(ElementGraph *etree.Element) {
//log.Panic("MapPackagesElements[PackageImport] error: ok =false")
continue
}
xgml.CreateLinkXGML(ElementGraph, ElementFrom.Index(), ElementImport.Index())
xgml.CreateElement_Edge(ElementGraph, ElementFrom.Index(), ElementImport.Index())
}
}
}
@@ -97,7 +96,7 @@ func FillLinks_goroutine(ElementGraph *etree.Element) {
ElementImport = ElementFrom
}
label := Go_func_name
xgml.CreateLinkXGML_blue(ElementGraph, ElementFrom.Index(), ElementImport.Index(), label)
xgml.CreateElement_Edge_blue(ElementGraph, ElementFrom.Index(), ElementImport.Index(), label)
}
//ElementImport, ok := MapPackageIDElements[PackageImport.ID]
@@ -106,7 +105,7 @@ func FillLinks_goroutine(ElementGraph *etree.Element) {
// //log.Panic("MapPackagesElements[PackageImport] error: ok =false")
// continue
//}
//xgml.CreateLinkXGML(ElementGraph, ElementFrom.Index(), ElementImport.Index())
//xgml.CreateElement_Edge(ElementGraph, ElementFrom.Index(), ElementImport.Index())
}
}
}
@@ -138,10 +137,10 @@ func FillFolder(ElementGraph, ElementGroup *etree.Element, Folder *folders.Folde
}
//добавим группа (каталог)
ElementGroup = xgml.CreateGroupXGML(ElementGraph, ElementGroup, GroupName)
ElementGroup = xgml.CreateElement_Group(ElementGraph, ElementGroup, GroupName)
if PackageName != "" {
//добавим пакет(package)
ElementShape := xgml.CreateElementXGML_Shape(ElementGraph, ElementGroup, PackageName)
ElementShape := xgml.CreateElement_Shape(ElementGraph, ElementGroup, PackageName)
MapPackagesElements[PackageFolder1.Package] = ElementShape
MapPackageIDElements[PackageFolder1.Package.ID] = ElementShape
//MapPackagesElements[&PackageFolder1] = ElementShape
+78
View File
@@ -236,3 +236,81 @@ func findMaxLenRow(ElementName string) int {
return Otvet
}
// CreateDocument - создаёт новый документ .xgml
func CreateDocument() *etree.Document {
DocXML := etree.NewDocument()
DocXML.CreateProcInst("xml", `version="1.0" encoding="UTF-8" standalone="no"`)
ElementGraphMl := DocXML.CreateElement("graphml")
ElementGraphMl.CreateAttr("xmlns", "http://graphml.graphdrawing.org/xmlns")
ElementGraphMl.CreateAttr("xmlns:java", "http://www.yworks.com/xml/yfiles-common/1.0/java")
ElementGraphMl.CreateAttr("xmlns:sys", "http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0")
ElementGraphMl.CreateAttr("xmlns:x", "http://www.yworks.com/xml/yfiles-common/markup/2.0")
ElementGraphMl.CreateAttr("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
ElementGraphMl.CreateAttr("xmlns:y", "http://www.yworks.com/xml/graphml")
ElementGraphMl.CreateAttr("xmlns:y", "http://www.yworks.com/xml/graphml")
ElementGraphMl.CreateAttr("xmlns:yed", "http://www.yworks.com/xml/yed/3")
ElementGraphMl.CreateAttr("xsi:schemaLocation", "http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd")
ElementD0 := ElementGraphMl.CreateElement("key")
ElementD0.CreateAttr("for", "port")
ElementD0.CreateAttr("id", "d0")
ElementD0.CreateAttr("yfiles.type", "portgraphics")
ElementD1 := ElementGraphMl.CreateElement("key")
ElementD1.CreateAttr("for", "port")
ElementD1.CreateAttr("id", "d1")
ElementD1.CreateAttr("yfiles.type", "portgeometry")
ElementD2 := ElementGraphMl.CreateElement("key")
ElementD2.CreateAttr("for", "port")
ElementD2.CreateAttr("id", "d2")
ElementD2.CreateAttr("yfiles.type", "portuserdata")
ElementD3 := ElementGraphMl.CreateElement("key")
ElementD3.CreateAttr("attr.name", "url")
ElementD3.CreateAttr("attr.type", "string")
ElementD3.CreateAttr("for", "node")
ElementD3.CreateAttr("id", "d3")
ElementD4 := ElementGraphMl.CreateElement("key")
ElementD4.CreateAttr("attr.name", "description")
ElementD4.CreateAttr("attr.type", "string")
ElementD4.CreateAttr("for", "node")
ElementD4.CreateAttr("id", "d4")
ElementD5 := ElementGraphMl.CreateElement("key")
ElementD5.CreateAttr("for", "node")
ElementD5.CreateAttr("id", "d5")
ElementD5.CreateAttr("yfiles.type", "nodegraphics")
ElementD6 := ElementGraphMl.CreateElement("key")
ElementD6.CreateAttr("for", "graphml")
ElementD6.CreateAttr("id", "d6")
ElementD6.CreateAttr("yfiles.type", "resources")
ElementD7 := ElementGraphMl.CreateElement("key")
ElementD7.CreateAttr("attr.name", "url")
ElementD7.CreateAttr("attr.type", "string")
ElementD7.CreateAttr("for", "edge")
ElementD7.CreateAttr("id", "d7")
ElementD8 := ElementGraphMl.CreateElement("key")
ElementD8.CreateAttr("attr.name", "description")
ElementD8.CreateAttr("attr.type", "string")
ElementD8.CreateAttr("for", "edge")
ElementD8.CreateAttr("id", "d8")
ElementD9 := ElementGraphMl.CreateElement("key")
ElementD9.CreateAttr("for", "edge")
ElementD9.CreateAttr("id", "d9")
ElementD9.CreateAttr("yfiles.type", "edgegraphics")
ElementGraph := ElementGraphMl.CreateElement("graph")
ElementGraph.CreateAttr("edgedefault", "directed")
ElementGraph.CreateAttr("id", "G")
return DocXML
}
+11 -12
View File
@@ -1,26 +1,25 @@
package graphml
import (
"github.com/ManyakRus/image_packages/pkg/xml"
"github.com/ManyakRus/starter/micro"
"testing"
)
func TestCreateNewGraphml(t *testing.T) {
dir := micro.ProgramDir()
DocXML := xml.CreateDocXGML()
ElementGraph := DocXML.FindElement("/section/section")
Group1 := CreateElement_Group(ElementGraph, nil, "GroupCaption1")
Element1 := CreateElement_Shape(ElementGraph, Group1, "Entity1")
Element2 := CreateElement_Shape(ElementGraph, nil, "Entity2")
CreateElement_Edge(ElementGraph, Element1.Index(), Element2.Index())
CreateElement_Edge_blue(ElementGraph, Element1.Index(), Element2.Index(), "test()")
DocXML := CreateDocument()
//ElementGraph := DocXML.FindElement("/section/section")
//
//Group1 := CreateElement_Group(ElementGraph, nil, "GroupCaption1")
//
//Element1 := CreateElement_Shape(ElementGraph, Group1, "Entity1")
//Element2 := CreateElement_Shape(ElementGraph, nil, "Entity2")
//CreateElement_Edge(ElementGraph, Element1.Index(), Element2.Index())
//
//CreateElement_Edge_blue(ElementGraph, Element1.Index(), Element2.Index(), "test()")
FileName := dir + "test" + micro.SeparatorFile() + "test.graphml"
//DocXML.IndentTabs()
DocXML.IndentTabs()
err := DocXML.WriteToFile(FileName)
if err != nil {
t.Error("TestCreateNewXGML() error: ", err)
+45 -30
View File
@@ -20,11 +20,11 @@ var FONT_SIZE_EDGE = 8
//var doc = etree.NewDocument()
// CreateElementXGML_Shape - создаёт элемент xgml - прямоугольник
func CreateElementXGML_Shape(ElementGraph *etree.Element, ElementGroup *etree.Element, ElementName string) *etree.Element {
// CreateElement_Shape - создаёт элемент xgml - прямоугольник
func CreateElement_Shape(ElementGraph *etree.Element, ElementGroup *etree.Element, ElementName string) *etree.Element {
Width := findWidthShape(ElementName)
Height := findHeightShape(ElementName)
Width := findWidth_Shape(ElementName)
Height := findHeight_Shape(ElementName)
//node
ElementNode := xml.AddSectionXML(ElementGraph, "node")
@@ -52,11 +52,11 @@ func CreateElementXGML_Shape(ElementGraph *etree.Element, ElementGroup *etree.El
return ElementNode
}
// CreateGroupXGML - создаёт элемент xgml - группа
func CreateGroupXGML(ElementGraph, ElementGroup *etree.Element, GroupCaption string) *etree.Element {
// CreateElement_Group - создаёт элемент xgml - группа
func CreateElement_Group(ElementGraph, ElementGroup *etree.Element, GroupCaption string) *etree.Element {
Width := findWidthGroup(GroupCaption)
Height := findHeightGroup(GroupCaption)
Width := findWidth_Group(GroupCaption)
Height := findHeight_Group(GroupCaption)
//node
ElementNode := xml.AddSectionXML(ElementGraph, "node")
@@ -91,15 +91,15 @@ func CreateGroupXGML(ElementGraph, ElementGroup *etree.Element, GroupCaption str
return ElementNode
}
// CreateElementXGML_UML - создаёт элемент xgml - UML
func CreateElementXGML_UML(ElementGraph *etree.Element, ElementGroup *etree.Element, ElementId, ElementName string) *etree.Element {
// CreateElement_UML - создаёт элемент xgml - UML
func CreateElement_UML(ElementGraph *etree.Element, ElementGroup *etree.Element, ElementId, ElementName string) *etree.Element {
if ElementId == "" {
ElementId = ElementName
}
Width := findWidthShape(ElementName)
Height := findHeightShape(ElementName)
Width := findWidth_Shape(ElementName)
Height := findHeight_Shape(ElementName)
//node
ElementNode := xml.AddSectionXML(ElementGraph, "node")
@@ -149,8 +149,8 @@ func CreateElementXGML_UML(ElementGraph *etree.Element, ElementGroup *etree.Elem
return ElementNode
}
// CreateLinkXGML - создаёт элемент xgml - стрелка
func CreateLinkXGML(ElementGraph *etree.Element, IndexElementFrom, IndexElementTo int) {
// CreateElement_Edge - создаёт элемент xgml - стрелка
func CreateElement_Edge(ElementGraph *etree.Element, IndexElementFrom, IndexElementTo int) {
//edge
ElementEdge := xml.AddSectionXML(ElementGraph, "edge")
@@ -164,11 +164,11 @@ func CreateLinkXGML(ElementGraph *etree.Element, IndexElementFrom, IndexElementT
}
// CreateLinkXGML - создаёт элемент xgml - стрелка синяя с заголовком
func CreateLinkXGML_blue(ElementGraph *etree.Element, IndexElementFrom, IndexElementTo int, label string) {
// CreateElement_Edge_blue - создаёт элемент xgml - стрелка синяя с заголовком
func CreateElement_Edge_blue(ElementGraph *etree.Element, IndexElementFrom, IndexElementTo int, label string) {
Width := float64(findWidthEdge(label))
Height := float64(findHeightEdge(label))
Width := float64(findWidth_Edge(label))
Height := float64(findHeight_Edge(label))
//edge
ElementEdge := xml.AddSectionXML(ElementGraph, "edge")
@@ -195,8 +195,8 @@ func CreateLinkXGML_blue(ElementGraph *etree.Element, IndexElementFrom, IndexEle
}
// findWidthShape - возвращает число - ширину элемента
func findWidthShape(ElementName string) int {
// findWidth_Shape - возвращает число - ширину элемента
func findWidth_Shape(ElementName string) int {
Otvet := FONT_SIZE_SHAPE * 2
LenMax := findMaxLenRow(ElementName)
@@ -207,8 +207,8 @@ func findWidthShape(ElementName string) int {
return Otvet
}
// findHeightShape - возвращает число - высоту элемента
func findHeightShape(ElementName string) int {
// findHeight_Shape - возвращает число - высоту элемента
func findHeight_Shape(ElementName string) int {
Otvet := 10 + FONT_SIZE_SHAPE*3
@@ -220,8 +220,8 @@ func findHeightShape(ElementName string) int {
}
// findWidthGroup - возвращает число - ширину элемента
func findWidthGroup(ElementName string) int {
// findWidth_Group - возвращает число - ширину элемента
func findWidth_Group(ElementName string) int {
Otvet := 10
LenMax := findMaxLenRow(ElementName)
@@ -232,8 +232,8 @@ func findWidthGroup(ElementName string) int {
return Otvet
}
// findHeightGroup - возвращает число - высоту элемента
func findHeightGroup(ElementName string) int {
// findHeight_Group - возвращает число - высоту элемента
func findHeight_Group(ElementName string) int {
Otvet := 30
@@ -245,8 +245,8 @@ func findHeightGroup(ElementName string) int {
}
// findWidthEdge - возвращает число - ширину элемента
func findWidthEdge(Label string) int {
// findWidth_Edge - возвращает число - ширину элемента
func findWidth_Edge(Label string) int {
Otvet := 10
LenMax := findMaxLenRow(Label)
@@ -257,8 +257,8 @@ func findWidthEdge(Label string) int {
return Otvet
}
// findHeightEdge - возвращает число - высоту элемента
func findHeightEdge(Label string) int {
// findHeight_Edge - возвращает число - высоту элемента
func findHeight_Edge(Label string) int {
Otvet := 30
@@ -294,3 +294,18 @@ func findMaxLenRow(ElementName string) int {
return Otvet
}
// CreateDocument - создаёт новый документ .xgml
func CreateDocument() *etree.Document {
DocXML := etree.NewDocument()
DocXML.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
ElementXGML := DocXML.CreateElement("section")
ElementXGML.CreateAttr("name", "xgml")
ElementGraph := xml.AddSectionXML(ElementXGML, "graph")
xml.AddAttributeXML(ElementGraph, "hierarchic", "int", "1")
return DocXML
}
+6 -7
View File
@@ -1,23 +1,22 @@
package xgml
import (
"github.com/ManyakRus/image_packages/pkg/xml"
"github.com/ManyakRus/starter/micro"
"testing"
)
func TestCreateNewXGML(t *testing.T) {
dir := micro.ProgramDir()
DocXML := xml.CreateDocXGML()
DocXML := CreateDocument()
ElementGraph := DocXML.FindElement("/section/section")
Group1 := CreateGroupXGML(ElementGraph, nil, "GroupCaption1")
Group1 := CreateElement_Group(ElementGraph, nil, "GroupCaption1")
Element1 := CreateElementXGML_Shape(ElementGraph, Group1, "Entity1")
Element2 := CreateElementXGML_Shape(ElementGraph, nil, "Entity2")
CreateLinkXGML(ElementGraph, Element1.Index(), Element2.Index())
Element1 := CreateElement_Shape(ElementGraph, Group1, "Entity1")
Element2 := CreateElement_Shape(ElementGraph, nil, "Entity2")
CreateElement_Edge(ElementGraph, Element1.Index(), Element2.Index())
CreateLinkXGML_blue(ElementGraph, Element1.Index(), Element2.Index(), "test()")
CreateElement_Edge_blue(ElementGraph, Element1.Index(), Element2.Index(), "test()")
FileName := dir + "test" + micro.SeparatorFile() + "test.xgml"
//DocXML.IndentTabs()
-19
View File
@@ -5,25 +5,6 @@ import (
"strconv"
)
// CreateDocXGML - создаёт новый документ .xgml
func CreateDocXGML() *etree.Document {
DocXML := etree.NewDocument()
DocXML.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
//DocXML.IndentTabs()
ElementXGML := DocXML.CreateElement("section")
ElementXGML.CreateAttr("name", "xgml")
//ElementXGML := AddSectionXML(DocXML, "xgml")
ElementGraph := AddSectionXML(ElementXGML, "graph")
AddAttributeXML(ElementGraph, "hierarchic", "int", "1")
//log.Info("ElementGraph.GetPath(): ", ElementGraph.GetPath())
return DocXML
}
// AddSectionXML - добавляет секцию в xgml
func AddSectionXML(Element *etree.Element, name string) *etree.Element {
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<key for="port" id="d0" yfiles.type="portgraphics"/>
<key for="port" id="d1" yfiles.type="portgeometry"/>
<key for="port" id="d2" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d3"/>
<key attr.name="description" attr.type="string" for="node" id="d4"/>
<key for="node" id="d5" yfiles.type="nodegraphics"/>
<key for="graphml" id="d6" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d7"/>
<key attr.name="description" attr.type="string" for="edge" id="d8"/>
<key for="edge" id="d9" yfiles.type="edgegraphics"/>
</graphml>
+6 -6
View File
@@ -18,7 +18,7 @@
<y:Geometry height="12.0" width="60.0" x="276.0" y="45.0"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="46.66796875" x="6.666015625" xml:space="preserve" y="-2.984375">Entity2</y:NodeLabel>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.2109375" x="5.39453125" xml:space="preserve" y="-2.984375">Shape2</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
@@ -28,10 +28,10 @@
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="101.96875" width="113.35007999999999" x="7.193472" y="10.015625"/>
<y:Geometry height="101.96875" width="113.35007999999999" x="34.193472" y="-37.984375"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="content" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="sandwich" modelPosition="n" textColor="#000000" verticalTextPosition="bottom" visible="true" width="117.45947265625" x="-2.0546963281250044" xml:space="preserve" y="-21.4609375">GroupCaption1</y:NodeLabel>
<y:NodeLabel alignment="right" autoSizePolicy="content" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="sandwich" modelPosition="n" textColor="#000000" verticalTextPosition="bottom" visible="true" width="59.53955078125" x="26.905264609374996" xml:space="preserve" y="-21.4609375">Group1</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="80.0" closedWidth="100.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
@@ -54,10 +54,10 @@
<node id="n1::n0">
<data key="d5">
<y:ShapeNode>
<y:Geometry height="12.0" width="60.0" x="22.193472" y="28.0"/>
<y:Geometry height="12.0" width="60.0" x="49.193472" y="-20.0"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="46.66796875" x="6.666015625" xml:space="preserve" y="-2.984375">Entity1</y:NodeLabel>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.2109375" x="5.39453125" xml:space="preserve" y="-2.984375">Shape1</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
@@ -71,7 +71,7 @@
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#0000FF" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="two_pos" modelPosition="head" preferredPlacement="anywhere" ratio="0.5" textColor="#0000FF" verticalTextPosition="bottom" visible="true" width="41.55859375" x="76.12396530908205" xml:space="preserve" y="-14.86995370630698">print()<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="two_pos" modelPosition="head" preferredPlacement="anywhere" ratio="0.5" textColor="#0000FF" verticalTextPosition="bottom" visible="true" width="41.833984375" x="71.55028824609377" xml:space="preserve" y="0.5366937401929626">Edge1<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>