diff --git a/FeatureRenderer.pyt b/FeatureRenderer.pyt index 257b073..d7e74ab 100644 --- a/FeatureRenderer.pyt +++ b/FeatureRenderer.pyt @@ -378,7 +378,7 @@ class FeatureRenderer: # Print message if symbol could not be found if not symbol_found: messages.AddMessage( - f"Could not find symbol {symbol_key} for {leg_id}" + f"Could not find symbol in gallery {symbol_key}" ) # Add user defined labels @@ -393,27 +393,76 @@ class FeatureRenderer: # Retrieve stroke symbol properties stroke_symbol_props = {} - for group in cim_lyr.renderer.groups: - for unique_value_class in group.classes: - if unique_value_class.values[0].fieldValues[0] != "": - leg_id = str( + if layer_shape_type == "Polygon": + for group in cim_lyr.renderer.groups: + for unique_value_class in group.classes: + if ( unique_value_class.values[0].fieldValues[0] - ) - else: - leg_id = None - - stroke_symbol_props[leg_id] = { - "color": None, - "width": None, - } - - for ( - symbol_layer - ) in unique_value_class.symbol.symbol.symbolLayers: - if isinstance( - symbol_layer, - arcpy.cim.CIMSymbols.CIMSolidStroke, + != "" ): + leg_id = str( + unique_value_class.values[0].fieldValues[0] + ) + else: + leg_id = None + + stroke_symbol_props[leg_id] = { + "color": None, + "width": None, + } + + for ( + symbol_layer + ) in unique_value_class.symbol.symbol.symbolLayers: + if isinstance( + symbol_layer, + arcpy.cim.CIMSymbols.CIMSolidStroke, + ): + if leg_id in outline_codes: + # Set user defined outline color + outline_code = outline_codes[leg_id] + color_value = get_symbol_color(outline_code) + color = ( + arcpy.cim.CreateCIMObjectFromClassName( + "CIMCMYKColor", "V3" + ) + ) + color.values = color_value["CMYK"] + stroke_symbol_props[leg_id]["color"] = color + else: + if symbol_layer.color: + # Set color as it was before + stroke_symbol_props[leg_id][ + "color" + ] = symbol_layer.color + else: + # Set default color + color = arcpy.cim.CreateCIMObjectFromClassName( + "CIMCMYKColor", "V3" + ) + color.values = [40, 40, 40, 10, 100] + stroke_symbol_props[leg_id][ + "color" + ] = color + + if draw_outlines: + if symbol_layer.width: + # Set width as it was before + stroke_symbol_props[leg_id][ + "width" + ] = symbol_layer.width + else: + # Set default width + stroke_symbol_props[leg_id][ + "width" + ] = DEFAULT_LINE_WIDTH + else: + stroke_symbol_props[leg_id]["width"] = 0 + + break + + # In case the layer did not have a stroke symbol layer or outline color + if not stroke_symbol_props[leg_id]["color"]: if leg_id in outline_codes: # Set user defined outline color outline_code = outline_codes[leg_id] @@ -424,65 +473,21 @@ class FeatureRenderer: color.values = color_value["CMYK"] stroke_symbol_props[leg_id]["color"] = color else: - if symbol_layer.color: - # Set color as it was before - stroke_symbol_props[leg_id][ - "color" - ] = symbol_layer.color - else: - # Set default color - color = ( - arcpy.cim.CreateCIMObjectFromClassName( - "CIMCMYKColor", "V3" - ) - ) - color.values = [40, 40, 40, 10, 100] - stroke_symbol_props[leg_id]["color"] = color + # Set default color + color = arcpy.cim.CreateCIMObjectFromClassName( + "CIMCMYKColor", "V3" + ) + color.values = [40, 40, 40, 10, 100] + stroke_symbol_props[leg_id]["color"] = color + if not stroke_symbol_props[leg_id]["width"]: if draw_outlines: - if symbol_layer.width: - # Set width as it was before - stroke_symbol_props[leg_id][ - "width" - ] = symbol_layer.width - else: - # Set default width - stroke_symbol_props[leg_id][ - "width" - ] = DEFAULT_LINE_WIDTH + stroke_symbol_props[leg_id][ + "width" + ] = DEFAULT_LINE_WIDTH else: stroke_symbol_props[leg_id]["width"] = 0 - break - - # In case the layer did not have a stroke symbol layer or outline color - if not stroke_symbol_props[leg_id]["color"]: - if leg_id in outline_codes: - messages.AddMessage("Add color") - # Set user defined outline color - outline_code = outline_codes[leg_id] - color_value = get_symbol_color(outline_code) - color = arcpy.cim.CreateCIMObjectFromClassName( - "CIMCMYKColor", "V3" - ) - color.values = color_value["CMYK"] - stroke_symbol_props[leg_id]["color"] = color - else: - # Set default color - color = arcpy.cim.CreateCIMObjectFromClassName( - "CIMCMYKColor", "V3" - ) - color.values = [40, 40, 40, 10, 100] - stroke_symbol_props[leg_id]["color"] = color - - if not stroke_symbol_props[leg_id]["width"]: - if draw_outlines: - stroke_symbol_props[leg_id][ - "width" - ] = DEFAULT_LINE_WIDTH - else: - stroke_symbol_props[leg_id]["width"] = 0 - new_groups = [] for group in cim_lyr.renderer.groups: for unique_value_class in group.classes: @@ -505,7 +510,7 @@ class FeatureRenderer: color_value = code_components["color"] symbol_color_value = code_components["symbol_color"] - has_color = False + has_background_color = False for ( symbol_layer ) in unique_value_class.symbol.symbol.symbolLayers: @@ -516,14 +521,14 @@ class FeatureRenderer: ) if color_value: - # Update colors + # Update background colors if layer_shape_type == "Polygon": if isinstance( symbol_layer, arcpy.cim.CIMSymbols.CIMSolidFill, ): update_color(symbol_layer, color_value) - has_color = True + has_background_color = True if isinstance( symbol_layer, @@ -536,23 +541,8 @@ class FeatureRenderer: stroke_symbol_props[leg_id]["color"] ) - elif layer_shape_type == "Polyline": - if isinstance( - symbol_layer, - arcpy.cim.CIMSymbols.CIMSolidStroke, - ): - update_color(symbol_layer, color_value) - has_color = True - elif layer_shape_type == "Point": - if isinstance( - symbol_layer, - arcpy.cim.CIMSymbols.CIMMarker, - ): - update_color(symbol_layer, color_value) - has_color = True - # Draw symbol background colors - if not has_color and color_value: + if not has_background_color and color_value: if layer_shape_type == "Polygon": # Add fill symbol layer fill_symbol = arcpy.cim.CIMSolidFill() @@ -574,20 +564,6 @@ class FeatureRenderer: unique_value_class.symbol.symbol.symbolLayers.append( stroke_symbol ) - elif layer_shape_type == "Polyline": - # Add stroke symbol layer - stroke_symbol = arcpy.cim.CIMSolidStroke() - update_color(stroke_symbol, color_value) - unique_value_class.symbol.symbol.symbolLayers.append( - stroke_symbol - ) - elif layer_shape_type == "Point": - # Add marker symbol layer - marker_symbol = arcpy.cim.CIMMarker() - update_color(marker_symbol, color_value) - unique_value_class.symbol.symbol.symbolLayers.append( - marker_symbol - ) # Regroup items if heading_field: @@ -638,6 +614,9 @@ def update_color(symbol_layer, color_value): def update_symbol_layer_colors(symbol_layer, symbol_color_value): + if isinstance(symbol_layer, arcpy.cim.CIMSymbols.CIMSolidStroke): + update_color(symbol_layer, symbol_color_value) + if isinstance( symbol_layer, arcpy.cim.CIMSymbols.CIMCharacterMarker, @@ -675,6 +654,14 @@ def get_code_components(code): "symbol_key": "", "symbol_color": {}, } + if code_len == 7: + return { + "color": {}, + "symbol_key": code[0:7], + "symbol_color": { + "CMYK": [0, 0, 0, 100, 100], + }, + } elif code_len == 10: return { "color": {},