IP Library Granted Patent US 12,197,843
Granted Patent B2
US 12,197,843 · App. 17/216,010 · Granted Jan 14, 2025

Automatic layout of elements in a process flow on a 2-D canvas based on representations of flow logic

Inventor: Michael Patrick Rodgers (Lake Oswego, OR)
Assignee: ORACLE INTERNATIONAL CORPORATION
G06F40/14G06F40/103
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,197,843
App. No.
17/216,010
Granted
Jan 14, 2025
Kind
B2
Abstract

Layouts for elements of a flowchart or flow diagram may use recursive algorithms that trace along each parent-child pathway to ensure that child elements always occur after parent elements in a horizontal spacing. Vertical spacing requirements may then be calculated for each element, along with a vertical space above a center line and a vertical space below a center line for each element. These vertical spacing requirements may then be used by a recursive algorithm to assign vertical positions to each of the elements. The vertical spacing may ensure that lanes created for each branch element are not crossed by later elements in the process flow, which ensures that connections between elements may be clearly distinguished from each other.

Claims (56)

1. A non-transitory computer-readable medium comprising instructions that, when executed by one or more processors, cause the one or more processors to perform operations comprising:

accessing a data structure comprising a plurality of nodes organized in a hierarchy to generate a flowchart display;

assigning positions to the plurality of nodes, wherein child nodes in the hierarchy follow parent nodes in the first direction;

calculating dimensions in a second direction for the plurality of nodes, wherein each of the dimensions in the second direction represents an amount of space occupied in the second direction by a node and by branching child nodes of the node that follow after the node in the flowchart display;

assigning positions to the plurality of nodes in the second direction based on the dimensions in the second direction of the plurality of nodes, wherein assigning the positions to the plurality of nodes in the second direction comprises:

identifying a branch node in the plurality of nodes;

identifying a join node in the plurality of nodes that joins branches created by the branch node; and

assigning a position in the second direction to the branch node and the join node, wherein a line in the first direction between the position of the branch node and the position of the join node does not intersect with any connectors between any of the plurality of nodes; and

causing the flowchart display to be generated using the positions of the plurality of nodes in the first direction and the positions of the plurality of nodes in the second direction.

2. The non-transitory computer-readable medium of claim 1 , wherein assigning positions to the plurality of nodes in the first direction comprises:

assigning an index to a parent node in the plurality of nodes;

incrementing the index; and

recursively passing the index to child nodes of the parent node after the index has been incremented.

3. The non-transitory computer-readable medium of claim 2 , wherein assigning positions to the plurality of nodes in the first direction further comprises:

assigning the index to the child nodes unless the child nodes have already been assigned a larger index.

4. The non-transitory computer-readable medium of claim 2 , wherein values of the index indicate positions in the first direction, wherein the positions are dynamically sized to fit an assigned node having a largest associated icon.

5. The non-transitory computer-readable medium of claim 1 , wherein the plurality of nodes comprises process nodes that receive input data and generate output data.

6. The non-transitory computer-readable medium of claim 1 , wherein the plurality of nodes comprises branch nodes that have at least two child nodes.

7. The non-transitory computer-readable medium of claim 1 , wherein the plurality of nodes comprises join nodes that have at least two parent nodes and have fewer child nodes than parent nodes.

8. The non-transitory computer-readable medium of claim 1 , wherein the data structure comprises an extensible Markup Language (XML) file that describes the plurality of nodes and relationships between the plurality of nodes in the hierarchy.

9. The non-transitory computer-readable medium of claim 1 , wherein calculating dimensions in the second direction for the plurality of nodes comprises:

recursively calculating the dimensions in the second direction for child nodes in the hierarchy; and

calculating the dimensions in the second direction for parent nodes as sums of the dimensions in the second direction for the child nodes.

10. The non-transitory computer-readable medium of claim 1 , wherein calculating dimensions in the second direction for the plurality of nodes comprises:

calculating distances above and below center lines for the plurality of nodes.

11. The non-transitory computer-readable medium of claim 1 , wherein calculating dimensions in the second direction for the plurality of nodes further comprises:

recursively calculating distances above and below center lines for child nodes of branch nodes in the hierarchy; and

calculating the dimensions in the second direction for the branch nodes based on the distances above and below the center lines for the child nodes.

12. The non-transitory computer-readable medium of claim 1 , wherein assigning the positions to the plurality of nodes in the second direction comprises:

assigning a position in the second direction to a current node; and

recursively assigning positions in the second direction to child nodes of the current node based on the position of the current node.

13. The non-transitory computer-readable medium of claim 12 , wherein recursively assigning the positions in the second direction to the child nodes of the current node comprises:

passing a first child node the position of the current node minus a distance in the first direction occupied by the first child node below a center line of the first child node; and

passing a second child node the position of the current node plus a distance in the first direction occupied by the second child node above a center line of the second child node.

14. The non-transitory computer-readable medium of claim 1 , wherein parallel execution paths in the hierarchy occupy a same position in the first direction.

15. The non-transitory computer-readable medium of claim 1 , wherein the operations further comprise translating the data structure comprising the plurality of nodes into a linked list.

16. A method of generating a layout for a flowchart, the method comprising:

accessing a data structure comprising a plurality of nodes organized in a hierarchy to generate a flowchart display;

assigning positions to the plurality of nodes, wherein child nodes in the hierarchy follow parent nodes in the first direction;

calculating dimensions in a second direction for the plurality of nodes, wherein each of the dimensions in the second direction represents an amount of space occupied in the second direction by a node and by branching child nodes of the node that follow after the node in the flowchart display;

assigning positions to the plurality of nodes in the second direction based on the dimensions in the second direction of the plurality of nodes, wherein assigning the positions to the plurality of nodes in the second direction comprises:

identifying a branch node in the plurality of nodes;

identifying a join node in the plurality of nodes that joins branches created by the branch node; and

assigning a position in the second direction to the branch node and the join node, wherein a line in the first direction between the position of the branch node and the position of the join node does not intersect with any connectors between any of the plurality of nodes; and

causing the flowchart display to be generated using the positions of the plurality of nodes in the first direction and the positions of the plurality of nodes in the second direction.

17. A system comprising:

one or more processors; and

one or more memory devices comprising instructions that, when executed by the one or more processors, cause the one or more processors to perform operations comprising:

accessing a data structure comprising a plurality of nodes organized in a hierarchy to generate a flowchart display;

assigning positions to the plurality of nodes, wherein child nodes in the hierarchy follow parent nodes in the first direction;

calculating dimensions in a second direction for the plurality of nodes, wherein each of the dimensions in the second direction represents an amount of space occupied in the second direction by a node and by branching child nodes of the node that follow after the node in the flowchart display;

assigning positions to the plurality of nodes in the second direction based on the dimensions in the second direction of the plurality of nodes, wherein assigning the positions to the plurality of nodes in the second direction comprises:

identifying a branch node in the plurality of nodes;

identifying a join node in the plurality of nodes that joins branches created by the branch node; and

assigning a position in the second direction to the branch node and the join node, wherein a line in the first direction between the position of the branch node and the position of the join node does not intersect with any connectors between any of the plurality of nodes; and

causing the flowchart display to be generated using the positions of the plurality of nodes in the first direction and the positions of the plurality of nodes in the second direction.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 30, 2021
From: RODGERS, MICHAEL PATRICK
To: ORACLE INTERNATIONAL CORPORATION
Reel/Frame 055760/0806 →
Continuity (2)
Provisional Application 63002130 · Mar 30, 2020
Related Publication 20210303773A1 · Sep 30, 2021
References Cited (51)
US 5596704A · Geddes et al. · 1997 [cited by applicant]
US 7760956B2 · Lin · 2010 [cited by examiner]
US 7810024B1 · Goldman · 2010 [cited by examiner]
US 8205152B2 · Ivarsoy · 2012 [cited by examiner]
US 8489986B2 · Haug, III · 2013 [cited by examiner]
US 8542234B2 · Madden · 2013 [cited by examiner]
US 8717383B2 · Coldicott et al. · 2014 [cited by applicant]
US 9164965B2 · Molesky · 2015 [cited by examiner]
US 9324168B2 · Haug, III · 2016 [cited by examiner]
US 9367201B2 · Song · 2016 [cited by examiner]
US 10360200B1 · Kirby · 2019 [cited by examiner]
US 10387547B2 · Simonyi · 2019 [cited by examiner]
US 20030130977A1 · Oommen · 2003 [cited by examiner]
US 20050071364A1 · Xie · 2005 [cited by examiner]
US 20050289526A1 · Wang · 2005 [cited by examiner]
US 20060136825A1 · Cory · 2006 [cited by examiner]
US 20060236224A1 · Kuznetsov · 2006 [cited by examiner]
US 20070143673A1 · Tolle · 2007 [cited by examiner]
US 20070180408A1 · Rusu · 2007 [cited by examiner]
US 20080010589A1 · Gibson · 2008 [cited by examiner]
US 20080120368A1 · Gale · 2008 [cited by examiner]
US 20080291203A1 · Nachmanson · 2008 [cited by examiner]
US 20090089660A1 · Atkins · 2009 [cited by examiner]
US 20090132566A1 · Ochi · 2009 [cited by examiner]
US 20110214050A1 · Stambaugh · 2011 [cited by examiner]
US 20130124568A1 · Wang · 2013 [cited by examiner]
US 20130124981A1 · Chao · 2013 [cited by examiner]
US 20130278638A1 · Yoshikawa · 2013 [cited by examiner]
US 20140096058A1 · Molesky · 2014 [cited by examiner]
US 20160027197A1 · Beckett · 2016 [cited by examiner]
US 20160054894A1 · Zhang · 2016 [cited by examiner]
US 20160132466A1 · Zhang · 2016 [cited by examiner]
US 20160371168A1 · Chatty · 2016 [cited by examiner]
US 20180189243A1 · Allyn · 2018 [cited by examiner]
US 20190196939A1 · Lengauer · 2019 [cited by examiner]
US 20190332861A1 · Biswas · 2019 [cited by examiner]
US 20190385348A1 · Lee · 2019 [cited by examiner]
CN 103207730 · 2016 [cited by applicant]
CN 110569027 · 2019 [cited by applicant]
CN 106557457 · 2020 [cited by applicant]
KR 20030018722 · 2003 [cited by applicant]
WO 02097727 · 2004 [cited by applicant]
Tomáš Tušla; Layout of hierarchical flow charts; May 2017; Czech Technical University in Prague; pp. 1-46. [cited by examiner]
Jason Brownlee; How to Implement the Decision Tree Algorithm From Scratch in Python; Dec. 11, 2019; machinelearningmastery.com/implement-decision-tree-algorithm-scratch-python; pp. 1-93. [cited by examiner]
Rachel Lim; Algorithm for Drawing Trees; Apr. 20, 2014; Rachel Lim's Blog; rachel53461.wordpress.com/2014/04/20/algorithm-for-drawing-trees; pp. 1-21. [cited by examiner]
“Calculate;” The Free Dictionary; Oct. 21, 2019; thefreedictionary.com/calculate; pp. 1-2. [cited by examiner]
“Coordinate;” Free On-Line Dictionary of Computing; Jul. 9, 1997; pp. 1-2. [cited by examiner]
“Automatic Diagram Layout”, Available online at: https://www.visual-paradigm.com/support/documents/vpuserguide/1283/28/6047_automaticdia.html, Accessed from Internet on: Dec. 28, 2020, 23 pages. [cited by applicant]
“Code2flow”, Available online at: https://code2flow.com/, Accessed from Internet on: Dec. 28, 2020, 2 pages. [cited by applicant]
“Code2flow—Product”, Available online at: https://code2flow.com/product#features-section, Accessed from Internet on: Dec. 28, 2020, 11 pages. [cited by applicant]
“Smartdraw-Flowchart Maker”, Available online at: https://www.smartdraw.com/flowchart/flowchart-maker.htm, Accessed from Internet on: Dec. 28, 2020, 18 pages. [cited by applicant]