mi-flatland 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. flatland/__init__.py +1 -0
  2. flatland/__main__.py +162 -0
  3. flatland/configuration/__init__.py +0 -0
  4. flatland/configuration/configDB.py +51 -0
  5. flatland/configuration/connector_type.yaml +65 -0
  6. flatland/configuration/diagram_type.yaml +223 -0
  7. flatland/configuration/frame.yaml +102 -0
  8. flatland/configuration/layout_specification.yaml +42 -0
  9. flatland/configuration/metadata.yaml +20 -0
  10. flatland/configuration/name_placement.yaml +83 -0
  11. flatland/configuration/notation.yaml +99 -0
  12. flatland/configuration/sheet.yaml +22 -0
  13. flatland/configuration/titleblock.yaml +50 -0
  14. flatland/connector_subsystem/__init__.py +0 -0
  15. flatland/connector_subsystem/anchored_leaf_stem.py +19 -0
  16. flatland/connector_subsystem/anchored_stem.py +92 -0
  17. flatland/connector_subsystem/anchored_tree_stem.py +28 -0
  18. flatland/connector_subsystem/bending_binary_connector.py +188 -0
  19. flatland/connector_subsystem/binary_connector.py +32 -0
  20. flatland/connector_subsystem/branch.py +76 -0
  21. flatland/connector_subsystem/connector.py +131 -0
  22. flatland/connector_subsystem/floating_binary_stem.py +60 -0
  23. flatland/connector_subsystem/floating_leaf_stem.py +24 -0
  24. flatland/connector_subsystem/floating_stem.py +30 -0
  25. flatland/connector_subsystem/grafted_branch.py +112 -0
  26. flatland/connector_subsystem/interpolated_branch.py +65 -0
  27. flatland/connector_subsystem/rut_branch.py +35 -0
  28. flatland/connector_subsystem/stem.py +263 -0
  29. flatland/connector_subsystem/straight_binary_connector.py +183 -0
  30. flatland/connector_subsystem/ternary_stem.py +71 -0
  31. flatland/connector_subsystem/tree_connector.py +249 -0
  32. flatland/connector_subsystem/trunk_stem.py +38 -0
  33. flatland/connector_subsystem/unary_connector.py +87 -0
  34. flatland/database/__init__.py +0 -0
  35. flatland/database/flatland_db.py +100 -0
  36. flatland/database/instances/__init__.py +0 -0
  37. flatland/database/instances/connector_subsystem.py +73 -0
  38. flatland/database/instances/node_subsystem.py +50 -0
  39. flatland/database/instances/sheet_subsystem.py +103 -0
  40. flatland/database/pop_connector_subsys.py +234 -0
  41. flatland/database/pop_layout_spec.py +37 -0
  42. flatland/database/pop_node_subsys.py +95 -0
  43. flatland/database/pop_sheet_subsys.py +307 -0
  44. flatland/database/relvars.py +455 -0
  45. flatland/datatypes/__init__.py +0 -0
  46. flatland/datatypes/command_interface.py +69 -0
  47. flatland/datatypes/connection_types.py +138 -0
  48. flatland/datatypes/general_types.py +16 -0
  49. flatland/datatypes/geometry_types.py +34 -0
  50. flatland/exceptions.py +309 -0
  51. flatland/geometry_domain/__init__.py +0 -0
  52. flatland/geometry_domain/linear_geometry.py +139 -0
  53. flatland/log.conf +42 -0
  54. flatland/makeframe.py +35 -0
  55. flatland/names.py +3 -0
  56. flatland/node_subsystem/__init__.py +0 -0
  57. flatland/node_subsystem/canvas.py +193 -0
  58. flatland/node_subsystem/compartment.py +118 -0
  59. flatland/node_subsystem/diagram.py +81 -0
  60. flatland/node_subsystem/grid.py +434 -0
  61. flatland/node_subsystem/node.py +146 -0
  62. flatland/node_subsystem/single_cell_node.py +71 -0
  63. flatland/node_subsystem/spanning_node.py +79 -0
  64. flatland/sheet_subsystem/__init__.py +0 -0
  65. flatland/sheet_subsystem/frame.py +197 -0
  66. flatland/sheet_subsystem/sheet.py +65 -0
  67. flatland/sheet_subsystem/titleblock_placement.py +45 -0
  68. flatland/text/__init__.py +0 -0
  69. flatland/text/text_block.py +72 -0
  70. flatland/xuml/__init__.py +0 -0
  71. flatland/xuml/xuml_classdiagram.py +530 -0
  72. flatland/xuml/xuml_statemachine_diagram.py +327 -0
  73. mi_flatland-2.0.0.dist-info/METADATA +84 -0
  74. mi_flatland-2.0.0.dist-info/RECORD +77 -0
  75. mi_flatland-2.0.0.dist-info/WHEEL +5 -0
  76. mi_flatland-2.0.0.dist-info/entry_points.txt +2 -0
  77. mi_flatland-2.0.0.dist-info/top_level.txt +1 -0
flatland/__init__.py ADDED
@@ -0,0 +1 @@
1
+ version = "2.0.0"
flatland/__main__.py ADDED
@@ -0,0 +1,162 @@
1
+ """
2
+ Flatland Diagram Editor
3
+
4
+ """
5
+ # System
6
+ import logging
7
+ import logging.config
8
+ import sys
9
+ import atexit
10
+ import argparse
11
+ from pathlib import Path
12
+
13
+ # Flatland
14
+ from flatland.xuml.xuml_classdiagram import XumlClassDiagram
15
+ from flatland.xuml.xuml_statemachine_diagram import XumlStateMachineDiagram
16
+ from flatland.database.flatland_db import FlatlandDB
17
+ from flatland import version
18
+
19
+ _logpath = Path("flatland.log")
20
+
21
+ def clean_up():
22
+ """Normal and exception exit activities"""
23
+ _logpath.unlink(missing_ok=True)
24
+
25
+ def get_logger():
26
+ """Initiate the logger"""
27
+ log_conf_path = Path(__file__).parent / 'log.conf' # Logging configuration is in this file
28
+ logging.config.fileConfig(fname=log_conf_path, disable_existing_loggers=False)
29
+ return logging.getLogger(__name__) # Create a logger for this module
30
+
31
+ # Configure the expected parameters and actions for the argparse module
32
+ def parse(cl_input):
33
+ parser = argparse.ArgumentParser(description='Flatland model diagram generator')
34
+ parser.add_argument('-m', '--model', action='store',
35
+ help='xuml model file name defining model connectivity without any layout information')
36
+ parser.add_argument('-l', '--layout', action='store',
37
+ help='Flatland layout file defining all layout information with light\
38
+ references to model file.')
39
+ parser.add_argument('-d', '--diagram', action='store', default='diagram.pdf',
40
+ help='Name of file to generate, .pdf extension automatically added')
41
+ parser.add_argument('-D', '--docs', action='store_true',
42
+ help='Copy the project documentation directory into the local directory')
43
+ parser.add_argument('-CF', '--configuration', action='store_true',
44
+ help="Create a new configuration directory in user's flatland home")
45
+ parser.add_argument('-E', '--examples', action='store_true',
46
+ help='Create a directory of examples in the current directory')
47
+ parser.add_argument('-L', '--log', action='store_true',
48
+ help='Generate a diagnostic flatland.log file')
49
+ parser.add_argument('-N', '--nodes_only', action='store_true',
50
+ help='Do not draw any connectors. Helpful to diagnose connector failures due\
51
+ to bad node cplace.')
52
+ parser.add_argument('-NC', '--no_color', action='store_true',
53
+ help='Use white instead of the specified sheet color. Useful when creating printer output.'),
54
+ parser.add_argument('-V', '--version', action='store_true',
55
+ help='Print the current version of flatland')
56
+ parser.add_argument('-G', '--grid', action='store_true',
57
+ help='Print the grid so you can diagnose output with row and column boundaries visible')
58
+ parser.add_argument('-RT', '--show_ref_types', action='store_true',
59
+ help='Display referential attribute types on class diagrams')
60
+ parser.add_argument('-RUL', '--rulers', action='store_true',
61
+ help='Print the ruler grid so you check canvas positions')
62
+ parser.add_argument('-R', '--rebuild', action='store_true',
63
+ help='Rebuild the flatland database. Necessary only if corrupted.')
64
+ return parser.parse_args(cl_input)
65
+
66
+
67
+ def main():
68
+ # Start logging
69
+ logger = get_logger()
70
+ logger.info(f'Flatland version: {version}')
71
+
72
+ # Keep track of whether or not Config has been run by some command line option so we don't re-run it
73
+ already_configured = False
74
+
75
+ # Parse the command line args
76
+ args = parse(sys.argv[1:])
77
+
78
+ if not args.log:
79
+ # If no log file is requested, remove the log file before termination
80
+ atexit.register(clean_up)
81
+
82
+ if args.version:
83
+ # Just print the version and quit
84
+ print(f'Flatland version: {version}')
85
+ sys.exit(0)
86
+
87
+ # if args.examples:
88
+ # # Copy the entire example directory into the users local dir if it does not already exist
89
+ # import shutil
90
+ # ex_path = Path(__file__).parent / 'examples'
91
+ # local_ex_path = Path.cwd() / 'examples'
92
+ # if local_ex_path.exists():
93
+ # logger.warning("Examples already exist in the current directory. Delete or move it if you want the latest.")
94
+ # else:
95
+ # logger.info("Copying example directory users local directory")
96
+ # shutil.copytree(ex_path, local_ex_path) # Copy the example directory
97
+ # test_gen_path = Path(__file__).parent / 'tests' / 'gen_example_diagrams.py'
98
+ # shutil.copy(test_gen_path, local_ex_path) # Copy the gen_example file into the copied example dir
99
+ #
100
+ # if args.docs:
101
+ # # Copy the entire docs directory into the users local dir if it does not already exist
102
+ # import shutil
103
+ # docs_path = Path(__file__).parent / 'documentation'
104
+ # local_docs_path = Path.cwd() / 'documentation'
105
+ # if local_docs_path.exists():
106
+ # logger.warning("Documentation already exists in the current directory.\
107
+ # Delete or move it if you want the latest.")
108
+ # else:
109
+ # logger.info("Copying doc directory to users local directory")
110
+ # shutil.copytree(docs_path, local_docs_path)
111
+ #
112
+ if args.model and not args.layout:
113
+ logger.error("A layout file must be specified for your model.")
114
+ sys.exit(1)
115
+
116
+ if args.layout and not args.model:
117
+ logger.error("A model file must be specified to layout.")
118
+ sys.exit(1)
119
+
120
+ # At this point we either have both model and layout or neither
121
+ # If neither, the only thing we might do at this point is rebuild the database if requested
122
+
123
+ # Do any configuration tasks necessary before starting up the app
124
+ # The database will be rebuilt if requested
125
+ if not already_configured:
126
+ FlatlandDB.create_db(rebuild=args.rebuild)
127
+
128
+ # if args.model and args.layout: # Just making sure we have them both
129
+ model_path = Path(args.model)
130
+ layout_path = Path(args.layout)
131
+ diagram_path = Path(args.diagram)
132
+
133
+ # Generate the xuml class diagram (we don't do anything with the returned variable yet)
134
+ mtype = model_path.suffix
135
+ if mtype == '.xcm':
136
+ XumlClassDiagram(
137
+ xuml_model_path=model_path,
138
+ flatland_layout_path=layout_path,
139
+ diagram_file_path=diagram_path,
140
+ show_grid=args.grid,
141
+ nodes_only=args.nodes_only,
142
+ no_color=args.no_color,
143
+ show_rulers=args.rulers,
144
+ show_ref_types=args.show_ref_types
145
+ )
146
+ elif mtype == '.xsm':
147
+ statemodel_diagram = XumlStateMachineDiagram(
148
+ xuml_model_path=model_path,
149
+ flatland_layout_path=layout_path,
150
+ diagram_file_path=diagram_path,
151
+ show_grid=args.grid,
152
+ nodes_only=args.nodes_only,
153
+ show_rulers=args.rulers,
154
+ no_color=args.no_color,
155
+ )
156
+
157
+ logger.info("No problemo") # We didn't die on an exception, basically
158
+ print("No problemo")
159
+
160
+
161
+ if __name__ == "__main__":
162
+ main()
File without changes
@@ -0,0 +1,51 @@
1
+ """ configDB.py - Load configuration data """
2
+
3
+ # System
4
+ from pathlib import Path
5
+ from collections import namedtuple
6
+ from typing import NamedTuple
7
+
8
+ # Model Integration
9
+ from mi_config.config import Config
10
+
11
+ # Flatland
12
+ from flatland.names import app
13
+
14
+ ConfigItem = namedtuple('ConfigItem', 'name collector')
15
+
16
+ class SheetData(NamedTuple):
17
+ standard: str
18
+ height: float
19
+ width: float
20
+ size_group: str
21
+
22
+ class ConfigDB:
23
+ """
24
+ A set of yaml config files are processed to build a dictionary of
25
+ config item data
26
+ """
27
+
28
+ config_path = Path(__file__).parent # Location of the system yaml files
29
+
30
+ item_data = {}
31
+
32
+ config_items = [ # Yaml file prefix and tuple, if any, to load data from file
33
+ ConfigItem(name="metadata", collector=None),
34
+ ConfigItem(name="sheet", collector=SheetData),
35
+ ConfigItem(name="titleblock", collector=None),
36
+ ConfigItem(name="frame", collector=None),
37
+ ConfigItem(name="notation", collector=None),
38
+ ConfigItem(name="layout_specification", collector=None),
39
+ ConfigItem(name="diagram_type", collector=None),
40
+ ConfigItem(name="connector_type", collector=None),
41
+ ConfigItem(name="name_placement", collector=None),
42
+ ]
43
+
44
+ @classmethod
45
+ def __init__(cls):
46
+ """
47
+ Load all config items in corresponding yaml files into item_data dictionary
48
+ """
49
+ for item in cls.config_items:
50
+ c = Config(app_name=app, lib_config_dir=cls.config_path, fspec={item.name:item.collector})
51
+ cls.item_data[item.name] = c.loaded_data[item.name]
@@ -0,0 +1,65 @@
1
+ # cconnector_type_name.yaml – Connector type data
2
+
3
+ # Diagram type / Connector Type / Stem Type, etc
4
+
5
+ # TODO: clarify meaning of stem type geometry in comment below
6
+
7
+ class: # Diagram type
8
+ stem semantics: [ Mc mult, 1c mult, 1 mult, M mult, superclass, ordinal ] # stem semantics
9
+ connector types:
10
+ binary association: # Connector type
11
+ geometry: binary # unary, binary, or tree
12
+ about: Connects an anchor point on one node to an anchor point on the same or another node
13
+ stem positions:
14
+ class face: # Name of stem position
15
+ about: How many instances may be associated
16
+ minimum length: 20
17
+ stretch: fixed # fixed, hanging, or free
18
+ association:
19
+ about: How many association class instances per pair of associated instances
20
+ minimum length: 24
21
+ stretch: hanging
22
+ generalization:
23
+ geometry: tree
24
+ about: A superset class compeletely split into disjoint subset classes
25
+ stem positions:
26
+ superclass face:
27
+ about: The superset of all subclass instances
28
+ minimum length: 15
29
+ stretch: fixed
30
+ subclass face:
31
+ about: A disjoint subset of the superclass set of instances
32
+ minimum length: 10
33
+ stretch: fixed
34
+
35
+ state machine:
36
+ stem semantics: [ target state, initial pseudo state, final pseudo state ] # stem semantics
37
+ connector types:
38
+ initial transition:
39
+ geometry: unary
40
+ about: Designates an initial state
41
+ stem positions:
42
+ to initial state:
43
+ about: Points to a designated state as an initial state
44
+ minimum length: 60
45
+ stretch: free
46
+ deletion transition:
47
+ geometry: unary
48
+ about: Designates implicit instance deletion after a state executes its activity
49
+ stem positions:
50
+ from final state:
51
+ about: Points away from a final state to indicate deletion
52
+ minimum length: 10
53
+ stretch: free
54
+ transition:
55
+ geometry: binary
56
+ about: Defines a path from one state to another
57
+ stem positions:
58
+ from state:
59
+ about: Points to the source state in a transition
60
+ minimum length: 10
61
+ stretch: fixed
62
+ to state:
63
+ about: Points to the destination state in a transition
64
+ minimum length: 15
65
+ stretch: fixed
@@ -0,0 +1,223 @@
1
+ # diagram_type.yaml – Diagram Types
2
+
3
+ class: # Diagram type name (class diagram)
4
+ abbreviation: CD
5
+ about: >
6
+ Show data, logic and constraints in a domain
7
+ notations: # Supported notations
8
+ - Starr
9
+ - xUML
10
+ - Shlaer-Mellor
11
+ node types: # The kinds of nodes that can be drawn on this diagram type
12
+ class: # Node type name (a class node)
13
+ about: >
14
+ Abstraction of a set of things with the same properties, behavior,
15
+ and subject to the same rules and constraints
16
+ default size:
17
+ height: 80 # Default size if text fits and user has not specified otherwise
18
+ width: 110
19
+ max size:
20
+ height: 180 # Will not be drawn larger than this size
21
+ width: 144
22
+ compartment types: # The types of compartments that may be stacked inside this node
23
+ name: # Name of the compartment, in this case the name/title of a class
24
+ alignment: # How the text is aligned within this compartment
25
+ horizontal: center
26
+ vertical: center
27
+ padding: # Margin between internal text and external boundary
28
+ top: 5
29
+ bottom: 10
30
+ left: 5
31
+ right: 5
32
+ stack order: 1 # Appearance of compartment with 1 at the top, descending vertically
33
+ attribute:
34
+ alignment:
35
+ horizontal: left
36
+ vertical: top
37
+ padding:
38
+ top: 5
39
+ bottom: 10
40
+ left: 5
41
+ right: 5
42
+ stack order: 2
43
+ method:
44
+ alignment:
45
+ horizontal: left
46
+ vertical: top
47
+ padding:
48
+ top: 5
49
+ bottom: 4
50
+ left: 5
51
+ right: 5
52
+ stack order: 3
53
+
54
+ imported class:
55
+ about: >
56
+ Used when you have a relationship to a class in some other
57
+ subsystem of your domain.
58
+ default size:
59
+ height: 80
60
+ width: 110
61
+ max size:
62
+ height: 180
63
+ width: 144
64
+ compartment types:
65
+ name:
66
+ alignment:
67
+ horizontal: center
68
+ vertical: center
69
+ padding:
70
+ top: 5
71
+ bottom: 10
72
+ left: 5
73
+ right: 5
74
+ stack order: 1
75
+ attribute:
76
+ alignment:
77
+ horizontal: left
78
+ vertical: top
79
+ padding:
80
+ top: 5
81
+ bottom: 10
82
+ left: 5
83
+ right: 5
84
+ stack order: 2
85
+
86
+ state machine:
87
+ abbreviation: SMD
88
+ about: >
89
+ Lifecycle of a class or assigner relationship
90
+ notations:
91
+ - xUML
92
+ node types:
93
+ state name only:
94
+ about: >
95
+ A state with no activity, distinct node type since it is drawn with different padding for the state name
96
+ default size:
97
+ height: 50
98
+ width: 110
99
+ max size:
100
+ height: 100
101
+ width: 300
102
+ compartment types:
103
+ name:
104
+ alignment:
105
+ horizontal: center
106
+ vertical: center
107
+ padding:
108
+ top: 20
109
+ bottom: 20
110
+ left: 10
111
+ right: 10
112
+ stack order: 1
113
+ state:
114
+ about: >
115
+ A context of some duration during an instance's existence
116
+ default size:
117
+ height: 50
118
+ width: 110
119
+ max size:
120
+ height: 100
121
+ width: 300
122
+ compartment types:
123
+ name:
124
+ alignment:
125
+ horizontal: center
126
+ vertical: center
127
+ padding:
128
+ top: 5
129
+ bottom: 10
130
+ left: 10
131
+ right: 10
132
+ stack order: 1
133
+ activity:
134
+ alignment:
135
+ horizontal: left
136
+ vertical: top
137
+ padding:
138
+ top: 4
139
+ bottom: 10
140
+ left: 5
141
+ right: 5
142
+ stack order: 2
143
+
144
+ class collaboration:
145
+ abbreviation: CCD
146
+ about: >
147
+ Shows interactions among classes and external entities in a domain
148
+ notations:
149
+ - Starr
150
+ - xUML
151
+ node types:
152
+ overview class:
153
+ about: >
154
+ Used to represent class in a collaboration or other non-class diagram
155
+ default size:
156
+ height: 25
157
+ width: 100
158
+ max size:
159
+ height: 60
160
+ width: 300
161
+ compartment types:
162
+ name:
163
+ alignment:
164
+ horizontal: center
165
+ vertical: center
166
+ padding:
167
+ top: 5
168
+ bottom: 5
169
+ left: 5
170
+ right: 5
171
+ stack order: 1
172
+ external entity:
173
+ about: >
174
+ Proxy for an external domain or some aspect of an external domain
175
+ default size:
176
+ height: 25
177
+ width: 100
178
+ max size:
179
+ height: 60
180
+ width: 300
181
+ compartment types:
182
+ name:
183
+ alignment:
184
+ horizontal: center
185
+ vertical: center
186
+ padding:
187
+ top: 5
188
+ bottom: 5
189
+ left: 5
190
+ right: 5
191
+ stack order: 1
192
+
193
+ domain:
194
+ abbreviation: DD
195
+ about: >
196
+ Illustrates the diverse subject matters in your project
197
+ as a network of platform independent domains with requirements dependencies
198
+ notations:
199
+ - Starr
200
+ - xUML
201
+ node types:
202
+ domain:
203
+ about: >
204
+ A distinct subject matter with its own vocabulary and rules
205
+ like "Linear Algebra" or "Configuration Management"
206
+ default size:
207
+ height: 60
208
+ width: 100
209
+ max size:
210
+ height: 110
211
+ width: 300
212
+ compartment types:
213
+ name:
214
+ alignment:
215
+ horizontal: center
216
+ vertical: center
217
+ padding:
218
+ top: 5
219
+ bottom: 5
220
+ left: 5
221
+ right: 5
222
+ stack order: 1
223
+
@@ -0,0 +1,102 @@
1
+ # system/frame.yaml – System defined frames
2
+
3
+ Model Integration Snippet: # Frame name
4
+ # Frame for small model examples, no title block to maximize space
5
+
6
+ # Each Fitted Frame keyed by sheet name-orientation for the above Frame
7
+ letter-landscape: # name-orientation (name defined in sheets.yaml, orientation either portrait or landscape)
8
+ fields: # positioned freely on sheet outside of any title block (Free Field)
9
+ # Each key is a Metadata Item defined in metadata.yaml
10
+ Title: { x: 8, y: 202, max width: 254, max height: 13 }
11
+ Copyright notice: { x: 8, y: 31, max width: 254, max height: 57 }
12
+ Organization logo: { x: 5, y: 4, max width: 180, max height: 24 }
13
+ Author: { x: 280, y: 22, max width: 20, max height: 5 }
14
+ Modification date: { x: 230, y: 18, max width: 20, max height: 5 }
15
+ Document ID: { x: 230, y: 14, max width: 20, max height: 5 }
16
+ Version: { x: 230, y: 10, max width: 20, max height: 5 }
17
+
18
+ letter-portrait:
19
+ fields:
20
+ Title: { x: 8, y: 265, max width: 254, max height: 13 }
21
+ Copyright notice: { x: 10, y: 31, max width: 254, max height: 57 }
22
+ Organization logo: { x: 8, y: 5, max width: 180, max height: 24 }
23
+ Author: { x: 170, y: 22, max width: 20, max height: 5 }
24
+ Modification date: { x: 170, y: 18, max width: 20, max height: 5 }
25
+ Document ID: { x: 170, y: 14, max width: 20, max height: 5 }
26
+ Version: { x: 170, y: 10, max width: 20, max height: 5 }
27
+
28
+ Model Integration Diagram:
29
+ # Frame for medium ot large diagrams with a Title Block in the lower right corner
30
+
31
+ # All Fitted Frames below will use this Title Block Pattern
32
+ title-block-pattern:
33
+ - SE Simple # Name of the Title Block Pattern defined in titleblock.yaml
34
+
35
+ # Each key below is the Name of a data box defined in titleblock.yaml
36
+ # Each value is one or more Metadata Items defined in metadata.yaml
37
+ - bottom:
38
+ - Organization # Put the org name in Data Box 3
39
+ main:
40
+ - Title
41
+ rtop:
42
+ - Author
43
+ - Modification date # Stack these two in Data Box 6 with Author on top and Modification date underneath
44
+ rbottom:
45
+ - Document ID
46
+ - Version
47
+
48
+ tabloid-landscape:
49
+ title block placement: { x: 275, y: 9 }
50
+ fields: # Note that the Title is displayed both in a Data Box and in a Free Field for easy visibility
51
+ Title: { x: 8, y: 264, max width: 254, max height: 13 }
52
+ Copyright notice: { x: 8, y: 28, max width: 254, max height: 57 }
53
+ Organization logo: { x: 8, y: 9, max width: 180, max height: 24 }
54
+
55
+ tabloid-portrait:
56
+ title block placement: { x: 150, y: 9 }
57
+ fields:
58
+ Title: { x: 10, y: 415, max width: 254, max height: 13 }
59
+ Copyright notice: { x: 8, y: 25, max width: 254, max height: 57 }
60
+ Organization logo: { x: 5, y: 10, max width: 180, max height: 24 }
61
+
62
+ C-landscape:
63
+ title block placement: { x: 1190, y: 35 }
64
+ fields:
65
+ Title: { x: 72, y: 1240, max width: 254, max height: 25 }
66
+ Copyright notice: { x: 72, y: 270, max width: 254, max height: 57 }
67
+ Organization logo: { x: 72, y: 70, max width: 191, max height: 25 }
68
+
69
+ C-portrait:
70
+ title block placement: { x: 700, y: 25 }
71
+ fields:
72
+ Title: { x: 18, y: 584, max width: 254, max height: 25 }
73
+ Copyright notice: { x: 400, y: 38, max width: 254, max height: 57 }
74
+ Organization logo: { x: 19, y: 18, max width: 191, max height: 25 }
75
+
76
+ D-landscape:
77
+ title block placement: { x: 2050, y: 100 }
78
+ fields:
79
+ Title: { x: 72, y: 1650, max width: 254, max height: 25 }
80
+ Copyright notice: { x: 850, y: 220, max width: 254, max height: 57 }
81
+ Organization logo: { x: 70, y: 150, max width: 191, max height: 25 }
82
+
83
+ D-portrait:
84
+ title block placement: { x: 553, y: 38 }
85
+ fields:
86
+ Title: { x: 18, y: 584, max width: 254, max height: 25 }
87
+ Copyright notice: { x: 400, y: 38, max width: 254, max height: 57 }
88
+ Organization logo: { x: 19, y: 18, max width: 191, max height: 25 }
89
+
90
+ E-landscape:
91
+ title block placement: { x: 1025, y: 38 }
92
+ fields:
93
+ Title: { x: 30, y: 884, max width: 254, max height: 25 }
94
+ Copyright notice: { x: 500, y: 38, max width: 254, max height: 57 }
95
+ Organization logo: { x: 30, y: 38, max width: 191, max height: 25 }
96
+
97
+ E-portrait:
98
+ title block placement: { x: 740, y: 25 }
99
+ fields:
100
+ Title: { x: 30, y: 1180, max width: 254, max height: 25 }
101
+ Copyright notice: { x: 220, y: 30, max width: 254, max height: 57 }
102
+ Organization logo: { x: 30, y: 30, max width: 191, max height: 25 }
@@ -0,0 +1,42 @@
1
+ # layout_specification.yaml – Overall diagram layout parameters
2
+
3
+ - standard: # Name of the system default diagram layout parameters
4
+ # Diagram layout
5
+ default margin: # Distance from edge of diagram area to nearest drawn element on the diagram
6
+ top: 10
7
+ bottom: 10
8
+ left: 10
9
+ right: 10
10
+ default diagram origin: # Lower left corner of the diagram relative to the Canvas area
11
+ x: 0 # This origin can be overriden by the user in the mls file with padding values
12
+ y: 0
13
+ # Grid/node layout
14
+ default cell padding: # Gaps between cell and node edges, forms a margin around a node within a cell
15
+ top: 5
16
+ bottom: 5
17
+ left: 5
18
+ right: 5
19
+ default cell alignment: # Node is aligned this way by default, user can override in mls file
20
+ vertical: center
21
+ horizontal: center
22
+ # Connector layout
23
+
24
+ # For a Stem that has no graphic decoration, such as an xUML class binary association connection or a xUML subclass
25
+ # connection, this is the minimum distance from the node face to either a bend or the opposing Stem end. It prevents
26
+ # a bend too close to a Node face or a connection too close to another Node.
27
+ undecorated stem clearance: 11
28
+ default cname positions: 5 # The number of connector name positions along a bend
29
+ default stem positions: 5 # Number of positions wher a connector can anchor on a face of a node
30
+ default rut positions: 5 # Number of positions a connector can follow within a row or column
31
+ default new path row height: 100 # Minimum space required for a connector traveling outside the
32
+ default new path col width: 150 # furthest occupied row or column to bend around to its destination face
33
+
34
+ stem spec:
35
+ vertical access buffer:
36
+ horizontal access buffer:
37
+ vertical end buffer:
38
+ horizontal end buffer:
39
+ default name:
40
+ optional:
41
+
42
+ # Add your own named variations below
@@ -0,0 +1,20 @@
1
+ # metadata.yaml – System defined metadata
2
+
3
+ # This is a complete list of all Metadata Items that can be positioned within a Frame
4
+ # These are positioned within Frames in the frame.yaml file
5
+ # Their values are specified in Flatland .mls (model layout sheet) files
6
+
7
+ text: # Text item
8
+ - Organization
9
+ - Creation date
10
+ - Modification date
11
+ - Author
12
+ - Reviewer
13
+ - Version
14
+ - Copyright
15
+ - Title
16
+ - Document ID
17
+
18
+ image: # Graphic item such as a *.png file
19
+ - Organization logo
20
+ - Copyright notice