Visual Styling Code Examplesī
Note
đ§ Intermediate / Architecture â Practical code examples for customizing element appearance.
Example 1: Using Hex and Named Colorsī
Create elements with both hexadecimal and named color specifications:
from pyArchimate import Model, ArchiType
model = Model(name="Color Examples")
# Create elements with hex colors
elem1 = model.add_element(
name="Critical System",
element_type=ArchiType.ApplicationService
)
elem1.set_fill_color("#FF5733") # Bright red-orange (hex)
elem1.set_line_color("#8B0000") # Dark red (hex)
elem1.set_line_width(2)
# Create elements with named colors
elem2 = model.add_element(
name="Standard Service",
element_type=ArchiType.ApplicationService
)
elem2.set_fill_color("lightblue") # Named color (case-insensitive)
elem2.set_line_color("darkblue") # Named color
# Create elements with transparency
elem3 = model.add_element(
name="Legacy Service",
element_type=ArchiType.ApplicationService
)
elem3.set_fill_color("#CCCCCC") # Gray
elem3.set_transparency(0.7) # 70% transparent (30% opaque)
# Verify colors were set
print(f"Elem1 fill: {elem1.get_fill_color()}") # #FF5733
print(f"Elem2 fill: {elem2.get_fill_color()}") # lightblue
print(f"Elem3 transparency: {elem3.get_transparency()}") # 0.7
model.write("colors.archimate")
Example 2: Bulk Styling with set_visual_styleī
Apply consistent styling to multiple elements using style dictionaries:
from pyArchimate import Model, ArchiType
model = Model(name="Bulk Styling Example")
# Define a style template
critical_style = {
"fill_color": "#FFE6E6", # Light red
"line_color": "#CC0000", # Bright red
"line_width": 3,
"transparency": 0.0 # Fully opaque
}
normal_style = {
"fill_color": "#E6F2FF", # Light blue
"line_color": "#0066CC", # Bright blue
"line_width": 1,
"transparency": 0.0
}
deprecated_style = {
"fill_color": "#CCCCCC", # Gray
"line_color": "#666666", # Darker gray
"line_width": 1,
"transparency": 0.5 # 50% transparent
}
# Create elements and apply styles based on category
critical_system = model.add_element(
name="Payment Gateway",
element_type=ArchiType.ApplicationService
)
critical_system.set_visual_style(critical_style)
normal_system = model.add_element(
name="Logging Service",
element_type=ArchiType.ApplicationService
)
normal_system.set_visual_style(normal_style)
legacy_system = model.add_element(
name="Legacy API",
element_type=ArchiType.ApplicationService
)
legacy_system.set_visual_style(deprecated_style)
# Verify styles
payment_style = critical_system.get_visual_style()
print(f"Payment Gateway style: {payment_style}")
model.write("bulk_styled.archimate")
Example 3: Model-Wide Theme with Per-Element Overridesī
Set a default theme for the model and override for specific elements:
from pyArchimate import Model, ArchiType
model = Model(name="Themed Model")
# Define and set model-wide default theme
default_theme = {
"fill_color": "#F5F5F5", # Light gray background
"line_color": "#333333", # Dark gray border
"line_width": 1,
"transparency": 0.0
}
model.set_default_theme(default_theme)
# Create elements - they'll use the default theme
process1 = model.add_element(
name="Standard Process",
element_type=ArchiType.BusinessProcess
)
process2 = model.add_element(
name="Critical Process",
element_type=ArchiType.BusinessProcess
)
# Override the critical process with custom styling
override_style = {
"fill_color": "#FFC0C0", # Light pink
"line_color": "#FF0000", # Red
"line_width": 2,
"transparency": 0.0
}
process2.set_visual_style(override_style)
# Add related elements
service1 = model.add_element(
name="Service A",
element_type=ArchiType.ApplicationService
)
service2 = model.add_element(
name="Critical Service",
element_type=ArchiType.ApplicationService
)
service2.set_fill_color("#FF8888") # Highlight with color
# All elements now have styling - some from theme, some overridden
model.write("themed.archimate")
Example 4: Round-Trip Verificationī
Verify that styling is preserved when reading and writing models:
from pyArchimate import Model, ArchiType
# Create and style a model
model = Model(name="Styled Model")
elem = model.add_element(
name="Styled Element",
element_type=ArchiType.BusinessProcess
)
elem.set_fill_color("#FF6B6B")
elem.set_line_color("#C92A2A")
elem.set_line_width(2)
elem.set_transparency(0.2)
# Save the model
model.write("original.archimate")
print("Saved original model with styling")
# Read it back
model2 = Model.read("original.archimate")
elem2 = model2.get_element(elem.id)
# Verify styling was preserved
assert elem2.get_fill_color() == "#FF6B6B", "Fill color not preserved!"
assert elem2.get_line_color() == "#C92A2A", "Line color not preserved!"
assert elem2.get_line_width() == 2, "Line width not preserved!"
assert elem2.get_transparency() == 0.2, "Transparency not preserved!"
print("â All styling preserved in round-trip!")
# Modify and save again
elem2.set_fill_color("#4ECDC4") # Teal
model2.write("modified.archimate")
# Read again to verify second round-trip
model3 = Model.read("modified.archimate")
elem3 = model3.get_element(elem.id)
assert elem3.get_fill_color() == "#4ECDC4", "Updated color not preserved!"
print("â Updated styling preserved in second round-trip!")
Styling Best Practicesī
Use consistent color schemes: Define reusable style dictionaries for different element categories.
Reserve strong colors for important elements: Use bright colors (e.g., red) sparingly to highlight critical systems.
Maintain visual hierarchy: Use transparency and line width to show importance and relationships.
Test round-trip preservation: Always verify that styling survives export and re-import cycles.
Consider accessibility: Ensure color choices provide sufficient contrast for readability (especially for colorblind users).