Change color code X to transparent

This commit is contained in:
Fuhrmann 2025-02-21 10:07:53 +01:00
parent 5bdad0ea44
commit 19ed988760

View file

@ -288,13 +288,13 @@ class FeatureRenderer:
for layer in map_layers: for layer in map_layers:
if layer.name == input_layer: if layer.name == input_layer:
layers_to_render.append(layer.name) layers_to_render.append(layer)
present = True present = True
break break
if not present: if not present:
added_layer = active_map.addDataFromPath(input_layer) added_layer = active_map.addDataFromPath(input_layer)
layers_to_render.append(added_layer.name) layers_to_render.append(added_layer)
# Retrieve styles that are currently in the project # Retrieve styles that are currently in the project
project_styles = project.styles project_styles = project.styles
@ -345,7 +345,9 @@ class FeatureRenderer:
custom_labels[row[0]] = f"{row[1]}{label_delimieter}{row[2]}" custom_labels[row[0]] = f"{row[1]}{label_delimieter}{row[2]}"
elif len(fields) == 2: elif len(fields) == 2:
if label_field_1 == primary_key_field: if label_field_1 == primary_key_field:
custom_labels[row[0]] = f"{row[0]}{label_delimieter}{row[1]}" custom_labels[row[0]] = (
f"{row[0]}{label_delimieter}{row[1]}"
)
else: else:
custom_labels[row[0]] = f"{row[1]}" custom_labels[row[0]] = f"{row[1]}"
elif len(fields) == 1: elif len(fields) == 1:
@ -378,8 +380,7 @@ class FeatureRenderer:
outline_codes[str(row[0])] = row[1] outline_codes[str(row[0])] = row[1]
# Start rendering process # Start rendering process
for layer in map_layers: for layer in layers_to_render:
if layer.name in layers_to_render:
messages.AddMessage(f"Rendering layer: {layer.name}") messages.AddMessage(f"Rendering layer: {layer.name}")
sym = layer.symbology sym = layer.symbology
@ -404,9 +405,7 @@ class FeatureRenderer:
if symbol_code == "#": if symbol_code == "#":
continue continue
code_components = get_code_components( code_components = get_code_components(symbol_code, leg_id)
symbol_code, leg_id
)
symbol_key = code_components["symbol_key"] symbol_key = code_components["symbol_key"]
if symbol_key: if symbol_key:
@ -443,10 +442,7 @@ class FeatureRenderer:
if layer_shape_type == "Polygon": if layer_shape_type == "Polygon":
for group in cim_lyr.renderer.groups: for group in cim_lyr.renderer.groups:
for unique_value_class in group.classes: for unique_value_class in group.classes:
if ( if unique_value_class.values[0].fieldValues[0] != "<Null>":
unique_value_class.values[0].fieldValues[0]
!= "<Null>"
):
leg_id = str( leg_id = str(
unique_value_class.values[0].fieldValues[0] unique_value_class.values[0].fieldValues[0]
) )
@ -469,18 +465,14 @@ class FeatureRenderer:
# Set user defined outline color # Set user defined outline color
outline_code = outline_codes[leg_id] outline_code = outline_codes[leg_id]
if ( if (not outline_code) or outline_code == "#":
not outline_code
) or outline_code == "#":
outline_code = CODE_BLK outline_code = CODE_BLK
color_value = get_symbol_color(outline_code) color_value = get_symbol_color(outline_code)
color = ( color = arcpy.cim.CreateCIMObjectFromClassName(
arcpy.cim.CreateCIMObjectFromClassName(
"CIMCMYKColor", "V3" "CIMCMYKColor", "V3"
) )
)
color.values = color_value["CMYK"] color.values = color_value["CMYK"]
stroke_symbol_props[leg_id]["color"] = color stroke_symbol_props[leg_id]["color"] = color
else: else:
@ -491,13 +483,13 @@ class FeatureRenderer:
] = symbol_layer.color ] = symbol_layer.color
else: else:
# Set default color # Set default color
color = arcpy.cim.CreateCIMObjectFromClassName( color = (
arcpy.cim.CreateCIMObjectFromClassName(
"CIMCMYKColor", "V3" "CIMCMYKColor", "V3"
) )
)
color.values = DEFAULT_COLOR color.values = DEFAULT_COLOR
stroke_symbol_props[leg_id][ stroke_symbol_props[leg_id]["color"] = color
"color"
] = color
# Get symbol layer line width # Get symbol layer line width
if symbol_layer.width: if symbol_layer.width:
@ -534,9 +526,7 @@ class FeatureRenderer:
# Set outline width # Set outline width
if draw_outlines: if draw_outlines:
if outline_width: if outline_width:
stroke_symbol_props[leg_id][ stroke_symbol_props[leg_id]["width"] = outline_width
"width"
] = outline_width
else: else:
if not stroke_symbol_props[leg_id]["width"]: if not stroke_symbol_props[leg_id]["width"]:
stroke_symbol_props[leg_id][ stroke_symbol_props[leg_id][
@ -550,9 +540,7 @@ class FeatureRenderer:
for unique_value_class in group.classes: for unique_value_class in group.classes:
if unique_value_class.values[0].fieldValues[0] != "<Null>": if unique_value_class.values[0].fieldValues[0] != "<Null>":
leg_id = str( leg_id = str(unique_value_class.values[0].fieldValues[0])
unique_value_class.values[0].fieldValues[0]
)
else: else:
leg_id = None leg_id = None
@ -563,9 +551,7 @@ class FeatureRenderer:
if symbol_code == "#": if symbol_code == "#":
continue continue
code_components = get_code_components( code_components = get_code_components(symbol_code, leg_id)
symbol_code, leg_id
)
color_value = code_components["color"] color_value = code_components["color"]
symbol_color_value = code_components["symbol_color"] symbol_color_value = code_components["symbol_color"]
@ -592,12 +578,12 @@ class FeatureRenderer:
symbol_layer, symbol_layer,
arcpy.cim.CIMSymbols.CIMSolidStroke, arcpy.cim.CIMSymbols.CIMSolidStroke,
): ):
symbol_layer.width = ( symbol_layer.width = stroke_symbol_props[
stroke_symbol_props[leg_id]["width"] leg_id
) ]["width"]
symbol_layer.color = ( symbol_layer.color = stroke_symbol_props[
stroke_symbol_props[leg_id]["color"] leg_id
) ]["color"]
# Draw symbol background colors # Draw symbol background colors
if not has_background_color and color_value: if not has_background_color and color_value:
@ -677,7 +663,9 @@ def update_symbol_layer_colors(symbol_layer, symbol_color_value):
if isinstance(symbol_layer, arcpy.cim.CIMSymbols.CIMSolidStroke): if isinstance(symbol_layer, arcpy.cim.CIMSymbols.CIMSolidStroke):
update_color(symbol_layer, symbol_color_value) update_color(symbol_layer, symbol_color_value)
if isinstance(symbol_layer, arcpy.cim.CIMSymbols.CIMHatchFill) and hasattr(symbol_layer, "lineSymbol"): if isinstance(symbol_layer, arcpy.cim.CIMSymbols.CIMHatchFill) and hasattr(
symbol_layer, "lineSymbol"
):
for sub_symbol_layer in symbol_layer.lineSymbol.symbolLayers: for sub_symbol_layer in symbol_layer.lineSymbol.symbolLayers:
update_color(sub_symbol_layer, symbol_color_value) update_color(sub_symbol_layer, symbol_color_value)
@ -710,6 +698,7 @@ def get_symbol_code_for_shape(shape_type, symbol_codes):
) )
# code has three components: fill color, symbol key, symbol color
def get_code_components(code, leg_id): def get_code_components(code, leg_id):
code_len = len(code) code_len = len(code)
if code_len == 4: if code_len == 4:
@ -749,6 +738,16 @@ def get_code_components(code, leg_id):
def decode_color(color_string, leg_id): def decode_color(color_string, leg_id):
if color_string[3] == "X":
return {
"CMYK": [
0,
0,
0,
0,
],
}
else:
return { return {
"CMYK": [ "CMYK": [
get_percentage_from_letter(color_string[0], leg_id), get_percentage_from_letter(color_string[0], leg_id),