Page Index Toggle Pages: 1 Send TopicPrint
Normal Topic Links between nodes are crossing other nodes (Read 3786 times)
tracy4briski
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 3
Joined: Oct 27th, 2010
Links between nodes are crossing other nodes
Oct 27th, 2010 at 12:07pm
Print Post  
I have a pre-defined flowchart which have links going back to certain points.  The links are crossing over other nodes and this doesn't look good.  Please can anyone help with some examples that  avoid this?  See the code below


     ' create shape nodes
       Dim start As ShapeNode = CreateNode(Shapes.Start, "Client Job Request")
       Dim briefsummary As ShapeNode = CreateNode(Shapes.Process, "Job Definition & Brief Summary")
       Dim assessrisk As ShapeNode = CreateNode(Shapes.Process, "Assess risk & Complexity")
       Dim planjob As ShapeNode = CreateNode(Shapes.Terminator, "PLAN Job")
       Dim acceptjob As ShapeNode = CreateNode(Shapes.Decision, "EHS 4D Accept Brief Summary")
       Dim clarify As ShapeNode = CreateNode(Shapes.Process, "Clarify/amend Job Definition")
       Dim jobbrief As ShapeNode = CreateNode(Shapes.Process, "Create detailed job brief")
       Dim submitbrief As ShapeNode = CreateNode(Shapes.Process, "Submit Brief")
       Dim briefqa As ShapeNode = CreateNode(Shapes.Process, "Brief QA & Content Review")
       Dim acceptbrief As ShapeNode = CreateNode(Shapes.Decision, "EHS 4D Accept Brief")
       Dim revisebrief As ShapeNode = CreateNode(Shapes.Process, "Query/revise Brief")
       Dim dojob As ShapeNode = CreateNode(Shapes.Terminator, "DO Job")
       Dim developextract As ShapeNode = CreateNode(Shapes.Process, "Develop Extract")
       Dim testplan As ShapeNode = CreateNode(Shapes.Process, "Create Testplan")
       Dim unittest As ShapeNode = CreateNode(Shapes.Process, "Unit Test")
       Dim peerreview As ShapeNode = CreateNode(Shapes.Process, "Peer Review")

       start.TextWrapping = TextWrapping.Wrap

       start.ResizeToFitText()

       ' connect the nodes
       diagram.Factory.CreateDiagramLink(start, briefsummary)
       diagram.Factory.CreateDiagramLink(briefsummary, assessrisk)
       diagram.Factory.CreateDiagramLink(assessrisk, planjob)
       diagram.Factory.CreateDiagramLink(planjob, acceptjob)
       ' no
       diagram.Factory.CreateDiagramLink(acceptjob, clarify)
       diagram.Factory.CreateDiagramLink(clarify, briefsummary)

       'yes
       diagram.Factory.CreateDiagramLink(acceptjob, jobbrief)
       diagram.Factory.CreateDiagramLink(jobbrief, submitbrief)
       diagram.Factory.CreateDiagramLink(submitbrief, briefqa)
       diagram.Factory.CreateDiagramLink(briefqa, acceptbrief)
       'no
       diagram.Factory.CreateDiagramLink(acceptbrief, revisebrief)
       diagram.Factory.CreateDiagramLink(revisebrief, jobbrief)
       'yes
       diagram.Factory.CreateDiagramLink(acceptbrief, dojob)
       'side by side with development
       diagram.Factory.CreateDiagramLink(dojob, testplan)
       diagram.Factory.CreateDiagramLink(testplan, peerreview)
       diagram.Factory.CreateDiagramLink(dojob, developextract)
       diagram.Factory.CreateDiagramLink(developextract, unittest)
       diagram.Factory.CreateDiagramLink(unittest, peerreview)




       diagram.LinkCrossings = LinkCrossings.Cut

       planjob.Tag = NodeType.Home
       AddHandler planjob.MouseLeftButtonUp, AddressOf NodeClick



       ' arrange the flowchart
       Dim layout As FlowchartLayout = New FlowchartLayout()
       layout.NodeDistance = 15


       layout.Orientation = MindFusion.Diagramming.Silverlight.Layout.Orientation.Vertical
       layout.Arrange(diagram)



       Dim x As New DropShadowEffect()

       x.Color = Color.FromArgb(0, 0, 100, 100)
       x.ShadowDepth = 5
       x.Direction = 320
       x.Opacity = 0.5
       ' apply shader effects
       For Each item As DiagramItem In diagram.Items

           item.Effect = x

       Next

       diagram.ResizeToFitItems(5)
       diagram.Background.Opacity = 2
       diagram.EndEdit(True)
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: Links between nodes are crossing other nodes
Reply #1 - Oct 27th, 2010 at 1:41pm
Print Post  
This layout method does not support loop links ending outside the if branch from which they start, and ignores them. The layout kind-of expects structural programming and does not support goto-s... If you have such links, you can process them as shown below after running the layout:

Code
Select All
Dim link As DiagramLink
For Each link In diagram.Links
	If link.Origin.Bounds.Y > link.Destination.Bounds.Y Then
		Dim p As Point = link.ControlPoints(0)
		p.X = link.Origin.Bounds.X
		link.ControlPoints(0) = p
		p = link.ControlPoints(link.ControlPoints.Count - 1)
		p.X = link.Destination.Bounds.X
		link.ControlPoints(link.ControlPoints.Count - 1) = p
		link.Route()
	End If
Next 



I hope that helps,
Stoyan
  
Back to top
 
IP Logged
 
tracy4briski
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 3
Joined: Oct 27th, 2010
Re: Links between nodes are crossing other nodes
Reply #2 - Oct 28th, 2010 at 6:21am
Print Post  
Thanks Stoyan that's solved the problem Grin
  
Back to top
 
IP Logged
 
tracy4briski
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 3
Joined: Oct 27th, 2010
Re: Links between nodes are crossing other nodes
Reply #3 - Oct 28th, 2010 at 7:51am
Print Post  
I've extended the flow but the code now doesn't work for all the links but I can't understand why.  Please see below

CreateNode(Shapes.Process, "Business Review")
       Dim managementreview As ShapeNode = CreateNode(Shapes.Process, "Management Review")
       Dim extverification As ShapeNode = CreateNode(Shapes.Process, "External Verification")
       Dim releasecounts As ShapeNode = CreateNode(Shapes.Terminator, "RELEASE COUNTS")
       Dim countsaccepted As ShapeNode = CreateNode(Shapes.Decision, "Counts Accepted")
       Dim releaseextract As ShapeNode = CreateNode(Shapes.Terminator, "RELEASE EXTRACT")
       Dim deliver As ShapeNode = CreateNode(Shapes.Process, "Deliver data for execution")
       Dim releaseextract2 As ShapeNode = CreateNode(Shapes.Process, "RELEASE EXTRACT")
       Dim close As ShapeNode = CreateNode(Shapes.Terminator, "CLOSE JOB")

       Dim countsanalysis As ShapeNode = CreateNode(Shapes.Decision, "Counts Discrepancy analysis")
       Dim raisedefect As ShapeNode = CreateNode(Shapes.Decision, "Raise Defects")
       Dim signoffdefect As ShapeNode = CreateNode(Shapes.Decision, "Sign off Defects?")
       Dim briefcodedefect As ShapeNode = CreateNode(Shapes.Decision, "Brief or code Defect?")
       Dim briefchange As ShapeNode = CreateNode(Shapes.Decision, "Brief Change request")

       start.TextWrapping = TextWrapping.Wrap

       start.ResizeToFitText()

       ' connect the nodes
       'request
       diagram.Factory.CreateDiagramLink(start, briefsummary)
       diagram.Factory.CreateDiagramLink(briefsummary, assessrisk)
       diagram.Factory.CreateDiagramLink(assessrisk, planjob)
       diagram.Factory.CreateDiagramLink(planjob, acceptjob)
       ' no to accept job
       diagram.Factory.CreateDiagramLink(acceptjob, clarify)
       diagram.Factory.CreateDiagramLink(clarify, briefsummary)
       'specify
       'yes
       diagram.Factory.CreateDiagramLink(acceptjob, jobbrief)
       diagram.Factory.CreateDiagramLink(jobbrief, submitbrief)
       diagram.Factory.CreateDiagramLink(submitbrief, briefqa)
       diagram.Factory.CreateDiagramLink(briefqa, acceptbrief)
       'no to accept brief
       diagram.Factory.CreateDiagramLink(acceptbrief, revisebrief)
       diagram.Factory.CreateDiagramLink(revisebrief, jobbrief)
       'execute
       'yes
       diagram.Factory.CreateDiagramLink(acceptbrief, dojob)
       diagram.Factory.CreateDiagramLink(dojob, developextract)
       diagram.Factory.CreateDiagramLink(developextract, unittest)
       diagram.Factory.CreateDiagramLink(unittest, peerreview)
       'side by side with development
       diagram.Factory.CreateDiagramLink(dojob, testplan)
       diagram.Factory.CreateDiagramLink(testplan, peerreview)

       'testing
       diagram.Factory.CreateDiagramLink(peerreview, extverification)
       diagram.Factory.CreateDiagramLink(extverification, businnessreview)
       diagram.Factory.CreateDiagramLink(extverification, managementreview)
       diagram.Factory.CreateDiagramLink(businnessreview, managementreview)

       diagram.Factory.CreateDiagramLink(managementreview, releasecounts)
       diagram.Factory.CreateDiagramLink(releasecounts, countsaccepted)

       'no to counts
       diagram.Factory.CreateDiagramLink(countsaccepted, countsanalysis)
       'error in code
       diagram.Factory.CreateDiagramLink(countsanalysis, developextract)
       'error in brief
       diagram.Factory.CreateDiagramLink(countsanalysis, briefchange)
       diagram.Factory.CreateDiagramLink(briefchange, jobbrief)
       diagram.Factory.CreateDiagramLink(briefchange, assessrisk)


       'error found
       diagram.Factory.CreateDiagramLink(businnessreview, raisedefect)
       diagram.Factory.CreateDiagramLink(raisedefect, briefcodedefect)
       diagram.Factory.CreateDiagramLink(briefcodedefect, developextract)
       diagram.Factory.CreateDiagramLink(briefcodedefect, jobbrief)


       'no to code/brief error
       diagram.Factory.CreateDiagramLink(briefcodedefect, signoffdefect)


       'no to raise defects
       diagram.Factory.CreateDiagramLink(raisedefect, signoffdefect)
       diagram.Factory.CreateDiagramLink(signoffdefect, releasecounts)




       'complete
       'yes
       diagram.Factory.CreateDiagramLink(countsaccepted, releaseextract)
       diagram.Factory.CreateDiagramLink(releaseextract, deliver)
       diagram.Factory.CreateDiagramLink(deliver, close)


Should I be coding this in a different way? 
Thanks again
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: Links between nodes are crossing other nodes
Reply #4 - Oct 29th, 2010 at 8:33am
Print Post  
Hi,

That's very far from the format expected by FlowchartLayout. You could check the JavaScript sample from the WinForms or WPF version to see the kind of expected flowchart structure. We'll check if some other layout method can be adapted to your diagram.

Stoyan
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: Links between nodes are crossing other nodes
Reply #5 - Nov 1st, 2010 at 5:36pm
Print Post  
Hi,

Check the OrthogonalLayout and LayeredLayout results from this sample, using the included v2.0 assemblies:
https://mindfusion.eu/_samples/LayoutTest.zip

I hope that helps,
Stoyan
  
Back to top
 
IP Logged
 
Page Index Toggle Pages: 1
Send TopicPrint