topologicpy 0.4.94__py3-none-any.whl → 0.4.96__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.
- topologicpy/Cell.py +42 -136
- topologicpy/CellComplex.py +4 -20
- topologicpy/Cluster.py +46 -3
- topologicpy/Edge.py +43 -27
- topologicpy/Face.py +42 -288
- topologicpy/Graph.py +237 -74
- topologicpy/Plotly.py +41 -34
- topologicpy/Shell.py +32 -115
- topologicpy/Topology.py +340 -161
- topologicpy/Vector.py +243 -6
- topologicpy/Vertex.py +216 -30
- topologicpy/Wire.py +118 -210
- topologicpy/__init__.py +1 -1
- {topologicpy-0.4.94.dist-info → topologicpy-0.4.96.dist-info}/METADATA +1 -1
- {topologicpy-0.4.94.dist-info → topologicpy-0.4.96.dist-info}/RECORD +18 -18
- {topologicpy-0.4.94.dist-info → topologicpy-0.4.96.dist-info}/LICENSE +0 -0
- {topologicpy-0.4.94.dist-info → topologicpy-0.4.96.dist-info}/WHEEL +0 -0
- {topologicpy-0.4.94.dist-info → topologicpy-0.4.96.dist-info}/top_level.txt +0 -0
topologicpy/Graph.py
CHANGED
@@ -359,7 +359,11 @@ class Graph:
|
|
359
359
|
new_vertices.append(nv)
|
360
360
|
new_edge = Edge.ByVertices([new_vertices[0], new_vertices[1]], tolerance=tolerance)
|
361
361
|
if transferEdgeDictionaries == True:
|
362
|
-
|
362
|
+
d = Topology.Dictionary(edge)
|
363
|
+
keys = Dictionary.Keys(d)
|
364
|
+
if isinstance(keys, list):
|
365
|
+
if len(keys) > 0:
|
366
|
+
_ = Topology.SetDictionary(new_edge, d)
|
363
367
|
graph_edges.append(new_edge)
|
364
368
|
new_graph = Graph.ByVerticesEdges(graph_vertices, graph_edges)
|
365
369
|
return new_graph
|
@@ -2303,7 +2307,7 @@ class Graph:
|
|
2303
2307
|
return [vertices, edges]
|
2304
2308
|
|
2305
2309
|
def processFace(item):
|
2306
|
-
from
|
2310
|
+
from topologicpy.Face import Face
|
2307
2311
|
topology, others, outpostsKey, idKey, direct, directApertures, viaSharedTopologies, viaSharedApertures, toExteriorTopologies, toExteriorApertures, toContents, toOutposts, useInternalVertex, storeBRep, tolerance = item
|
2308
2312
|
graph = None
|
2309
2313
|
vertices = []
|
@@ -3003,27 +3007,91 @@ class Graph:
|
|
3003
3007
|
return topologic.Graph.ByVerticesEdges(vertices, edges)
|
3004
3008
|
|
3005
3009
|
@staticmethod
|
3006
|
-
def
|
3010
|
+
def ChromaticNumber(graph: topologic.Graph, maxColors: int = 3, silent: bool = False):
|
3007
3011
|
"""
|
3008
|
-
|
3012
|
+
Returns the chromatic number of the input graph. See https://en.wikipedia.org/wiki/Graph_coloring.
|
3009
3013
|
|
3010
3014
|
Parameters
|
3011
3015
|
----------
|
3012
3016
|
graph : topologic.Graph
|
3013
3017
|
The input graph.
|
3014
|
-
|
3015
|
-
The
|
3016
|
-
|
3017
|
-
|
3018
|
-
|
3019
|
-
|
3018
|
+
maxColors : int , optional
|
3019
|
+
The desired maximum number of colors to test against. The default is 3.
|
3020
|
+
silent : bool , optional
|
3021
|
+
If set to False, error and warning messages are printed. Otherwise, they are not. The default is False.
|
3022
|
+
|
3023
|
+
Returns
|
3024
|
+
-------
|
3025
|
+
int
|
3026
|
+
The chromatic number of the input graph.
|
3027
|
+
|
3028
|
+
"""
|
3029
|
+
# This is based on code from https://www.geeksforgeeks.org/graph-coloring-applications/
|
3030
|
+
|
3031
|
+
def is_safe(graph, v, color, c):
|
3032
|
+
for i in range(len(graph)):
|
3033
|
+
if graph[v][i] == 1 and color[i] == c:
|
3034
|
+
return False
|
3035
|
+
return True
|
3036
|
+
|
3037
|
+
def graph_coloring(graph, m, color, v):
|
3038
|
+
V = len(graph)
|
3039
|
+
if v == V:
|
3040
|
+
return True
|
3041
|
+
|
3042
|
+
for c in range(1, m + 1):
|
3043
|
+
if is_safe(graph, v, color, c):
|
3044
|
+
color[v] = c
|
3045
|
+
if graph_coloring(graph, m, color, v + 1):
|
3046
|
+
return True
|
3047
|
+
color[v] = 0
|
3048
|
+
|
3049
|
+
return False
|
3050
|
+
|
3051
|
+
def chromatic_number(graph):
|
3052
|
+
V = len(graph)
|
3053
|
+
color = [0] * V
|
3054
|
+
m = 1
|
3055
|
+
|
3056
|
+
while True:
|
3057
|
+
if graph_coloring(graph, m, color, 0):
|
3058
|
+
return m
|
3059
|
+
m += 1
|
3060
|
+
|
3061
|
+
if not isinstance(graph, topologic.Graph):
|
3062
|
+
if not silent:
|
3063
|
+
print("Graph.ChromaticNumber - Error: The input graph parameter is not a valid graph. Returning None.")
|
3064
|
+
return None
|
3065
|
+
if maxColors < 1:
|
3066
|
+
if not silent:
|
3067
|
+
print("Graph.ChromaticNumber - Error: The input maxColors parameter is not a valid positive number. Returning None.")
|
3068
|
+
return None
|
3069
|
+
adj_matrix = Graph.AdjacencyMatrix(graph)
|
3070
|
+
return chromatic_number(adj_matrix)
|
3071
|
+
|
3072
|
+
@staticmethod
|
3073
|
+
def Color(graph, oldKey: str = "color", newKey: str = "color", maxColors: int = None, tolerance: float = 0.0001):
|
3074
|
+
"""
|
3075
|
+
Colors the input vertices within the input graph. The saved value is an integer rather than an actual color. See Color.ByValueInRange to convert to an actual color.
|
3076
|
+
Any vertices that have been pre-colored will not be affected. See https://en.wikipedia.org/wiki/Graph_coloring.
|
3077
|
+
|
3078
|
+
Parameters
|
3079
|
+
----------
|
3080
|
+
graph : topologic.Graph
|
3081
|
+
The input graph.
|
3082
|
+
oldKey : str , optional
|
3083
|
+
The existing dictionary key to use to read any pre-existing color information. The default is "color".
|
3084
|
+
newKey : str , optional
|
3085
|
+
The new dictionary key to use to write out new color information. The default is "color".
|
3086
|
+
maxColors : int , optional
|
3087
|
+
The desired maximum number of colors to use. If set to None, the chromatic number of the graph is used. The default is None.
|
3020
3088
|
tolerance : float , optional
|
3021
3089
|
The desired tolerance. The default is 0.0001.
|
3022
3090
|
|
3023
3091
|
Returns
|
3024
3092
|
-------
|
3025
|
-
|
3026
|
-
The
|
3093
|
+
topologic.Graph
|
3094
|
+
The input graph, but with its vertices colored.
|
3027
3095
|
|
3028
3096
|
"""
|
3029
3097
|
from topologicpy.Vertex import Vertex
|
@@ -3032,76 +3100,171 @@ class Graph:
|
|
3032
3100
|
from topologicpy.Topology import Topology
|
3033
3101
|
import math
|
3034
3102
|
|
3035
|
-
|
3103
|
+
def is_safe(v, graph, colors, c):
|
3104
|
+
# Check if the color 'c' is safe for the vertex 'v'
|
3105
|
+
for i in range(len(graph)):
|
3106
|
+
if graph[v][i] and c == colors[i]:
|
3107
|
+
return False
|
3108
|
+
return True
|
3036
3109
|
|
3037
|
-
def
|
3038
|
-
|
3039
|
-
|
3040
|
-
else:
|
3041
|
-
for j in used_colors:
|
3042
|
-
if abs(j-i) < delta:
|
3043
|
-
return False
|
3110
|
+
def graph_coloring_util(graph, m, colors, v):
|
3111
|
+
# Base case: If all vertices are assigned a color, return true
|
3112
|
+
if v == len(graph):
|
3044
3113
|
return True
|
3045
|
-
def color_graph(graph, vertices, key, delta):
|
3046
|
-
# Create a dictionary to store the colors of each vertex
|
3047
|
-
colors = {}
|
3048
|
-
# Iterate over each vertex in the graph
|
3049
|
-
for j, vertex in enumerate(vertices):
|
3050
|
-
d = Topology.Dictionary(vertex)
|
3051
|
-
color_value = Dictionary.ValueAtKey(d, key)
|
3052
|
-
if color_value != None:
|
3053
|
-
colors[j] = color_value
|
3054
|
-
# Initialize an empty set of used colors
|
3055
|
-
used_colors = set()
|
3056
|
-
|
3057
|
-
# Iterate over each neighbor of the vertex
|
3058
|
-
for neighbor in Graph.AdjacentVertices(graph, vertex):
|
3059
|
-
# If the neighbor has already been colored, add its color to the used colors set
|
3060
|
-
index = Vertex.Index(neighbor, vertices)
|
3061
|
-
if index in colors:
|
3062
|
-
used_colors.add(colors[index])
|
3063
|
-
|
3064
|
-
if color_value == None:
|
3065
|
-
# Choose the smallest unused color for the vertex
|
3066
|
-
for i in range(0,int(math.ceil(len(vertices)*int(math.ceil(delta)))), int(math.ceil(delta))):
|
3067
|
-
#if i not in used_colors:
|
3068
|
-
if satisfiesCondition(i, used_colors, int(math.ceil(delta))):
|
3069
|
-
v_d = Topology.Dictionary(vertex)
|
3070
|
-
if not v_d == None:
|
3071
|
-
keys = Dictionary.Keys(v_d)
|
3072
|
-
values = Dictionary.Values(v_d)
|
3073
|
-
else:
|
3074
|
-
keys = []
|
3075
|
-
values = []
|
3076
|
-
if len(keys) > 0:
|
3077
|
-
keys.append(key)
|
3078
|
-
values.append(i)
|
3079
|
-
else:
|
3080
|
-
keys = [key]
|
3081
|
-
values = [i]
|
3082
|
-
d = Dictionary.ByKeysValues(keys, values)
|
3083
|
-
vertex = Topology.SetDictionary(vertex, d)
|
3084
|
-
colors[j] = i
|
3085
|
-
break
|
3086
3114
|
|
3087
|
-
|
3115
|
+
# Try different colors for the current vertex 'v'
|
3116
|
+
for c in range(1, m + 1):
|
3117
|
+
# Check if assignment of color 'c' to 'v' is fine
|
3118
|
+
if is_safe(v, graph, colors, c):
|
3119
|
+
colors[v] = c
|
3120
|
+
|
3121
|
+
# Recur to assign colors to the rest of the vertices
|
3122
|
+
if graph_coloring_util(graph, m, colors, v + 1):
|
3123
|
+
return True
|
3124
|
+
|
3125
|
+
# If assigning color 'c' doesn't lead to a solution, remove it
|
3126
|
+
colors[v] = 0
|
3127
|
+
|
3128
|
+
# If no color can be assigned to this vertex, return false
|
3129
|
+
return False
|
3130
|
+
|
3131
|
+
def graph_coloring(graph, m, colors):
|
3132
|
+
|
3133
|
+
# Call graph_coloring_util() for vertex 0
|
3134
|
+
if not graph_coloring_util(graph, m, colors, 0):
|
3135
|
+
return None
|
3136
|
+
return [x-1 for x in colors]
|
3088
3137
|
|
3089
3138
|
if not isinstance(graph, topologic.Graph):
|
3090
3139
|
print("Graph.Color - Error: The input graph is not a valid graph. Returning None.")
|
3091
3140
|
return None
|
3092
|
-
|
3093
|
-
|
3094
|
-
|
3095
|
-
|
3096
|
-
|
3097
|
-
|
3098
|
-
|
3099
|
-
|
3100
|
-
|
3101
|
-
|
3102
|
-
|
3103
|
-
|
3141
|
+
|
3142
|
+
vertices = Graph.Vertices(graph)
|
3143
|
+
adj_mat = Graph.AdjacencyMatrix(graph)
|
3144
|
+
# Isolate vertices that have pre-existing colors as they shouldn't affect graph coloring.
|
3145
|
+
for i, v in enumerate(vertices):
|
3146
|
+
d = Topology.Dictionary(v)
|
3147
|
+
c = Dictionary.ValueAtKey(d, oldKey)
|
3148
|
+
if not c == None:
|
3149
|
+
adj_mat[i] = [0] * len(vertices)
|
3150
|
+
for j in range(len(adj_mat)):
|
3151
|
+
row = adj_mat[j]
|
3152
|
+
row[i] = 0
|
3153
|
+
temp_graph = Graph.ByAdjacencyMatrix(adj_mat)
|
3154
|
+
# If the maximum number of colors are not provided, compute it using the graph's chromatic number.
|
3155
|
+
if maxColors == None:
|
3156
|
+
maxColors = Graph.ChromaticNumber(temp_graph)
|
3157
|
+
print("MaxColors:", maxColors)
|
3158
|
+
colors = [0] * len(vertices)
|
3159
|
+
colors = graph_coloring(adj_mat, maxColors, colors)
|
3160
|
+
print("Colors:", colors)
|
3161
|
+
for i, v in enumerate(vertices):
|
3162
|
+
d = Topology.Dictionary(v)
|
3163
|
+
d = Dictionary.SetValueAtKey(d, newKey, colors[i])
|
3164
|
+
v = Topology.SetDictionary(v,d)
|
3165
|
+
return graph
|
3166
|
+
|
3167
|
+
@staticmethod
|
3168
|
+
def ContractEdge(graph, edge, vertex=None, tolerance=0.0001):
|
3169
|
+
"""
|
3170
|
+
Contracts the input edge in the input graph into a single vertex. Please note that the dictionary of the edge is transferred to the
|
3171
|
+
vertex that replaces it. See https://en.wikipedia.org/wiki/Edge_contraction
|
3104
3172
|
|
3173
|
+
Parameters
|
3174
|
+
----------
|
3175
|
+
graph : topologic.Graph
|
3176
|
+
The input graph.
|
3177
|
+
edge : topologic.Edge
|
3178
|
+
The input graph edge that needs to be contracted.
|
3179
|
+
vertex : topollogic.Vertex , optional
|
3180
|
+
The vertex to replace the contracted edge. If set to None, the centroid of the edge is chosen. The default is None.
|
3181
|
+
tolerance : float , optional
|
3182
|
+
The desired tolerance. The default is 0.0001.
|
3183
|
+
|
3184
|
+
Returns
|
3185
|
+
-------
|
3186
|
+
topologic.Graph
|
3187
|
+
The input graph, but with input edge contracted into a single vertex.
|
3188
|
+
|
3189
|
+
"""
|
3190
|
+
from topologicpy.Edge import Edge
|
3191
|
+
from topologicpy.Topology import Topology
|
3192
|
+
from topologicpy.Dictionary import Dictionary
|
3193
|
+
|
3194
|
+
def OppositeVertex(edge, vertex, tolerance=0.0001):
|
3195
|
+
sv = Edge.StartVertex(edge)
|
3196
|
+
ev = Edge.EndVertex(edge)
|
3197
|
+
d1 = Vertex.Distance(vertex, sv)
|
3198
|
+
d2 = Vertex.Distance(vertex, ev)
|
3199
|
+
if d1 < d2:
|
3200
|
+
return [ev,1]
|
3201
|
+
return [sv,0]
|
3202
|
+
if not isinstance(graph, topologic.Graph):
|
3203
|
+
print("Graph.ContractEdge - Error: The input graph parameter is not a valid graph. Returning None.")
|
3204
|
+
return None
|
3205
|
+
if not isinstance(edge, topologic.Edge):
|
3206
|
+
print("Graph.ContractEdge - Error: The input edge parameter is not a valid edge. Returning None.")
|
3207
|
+
return None
|
3208
|
+
if vertex == None:
|
3209
|
+
vertex = Topology.Centroid(edge)
|
3210
|
+
sv = Edge.StartVertex(edge)
|
3211
|
+
ev = Edge.EndVertex(edge)
|
3212
|
+
vd = Topology.Dictionary(vertex)
|
3213
|
+
sd = Topology.Dictionary(sv)
|
3214
|
+
dictionaries = []
|
3215
|
+
keys = Dictionary.Keys(vd)
|
3216
|
+
if isinstance(keys, list):
|
3217
|
+
if len(keys) > 0:
|
3218
|
+
dictionaries.append(vd)
|
3219
|
+
keys = Dictionary.Keys(sd)
|
3220
|
+
if isinstance(keys, list):
|
3221
|
+
if len(keys) > 0:
|
3222
|
+
dictionaries.append(sd)
|
3223
|
+
ed = Topology.Dictionary(ev)
|
3224
|
+
keys = Dictionary.Keys(ed)
|
3225
|
+
if isinstance(keys, list):
|
3226
|
+
if len(keys) > 0:
|
3227
|
+
dictionaries.append(ed)
|
3228
|
+
if len(dictionaries) == 1:
|
3229
|
+
vertex = Topology.SetDictionary(vertex, dictionaries[0])
|
3230
|
+
elif len(dictionaries) > 1:
|
3231
|
+
cd = Dictionary.ByMergedDictionaries(dictionaries)
|
3232
|
+
vertex = Topology.SetDictionary(vertex, cd)
|
3233
|
+
graph = Graph.RemoveEdge(graph, edge, tolerance=tolerance)
|
3234
|
+
graph = Graph.AddVertex(graph, vertex, tolerance=tolerance)
|
3235
|
+
adj_edges_sv = Graph.Edges(graph, [sv])
|
3236
|
+
adj_edges_ev = Graph.Edges(graph, [ev])
|
3237
|
+
new_edges = []
|
3238
|
+
for adj_edge_sv in adj_edges_sv:
|
3239
|
+
ov, flag = OppositeVertex(adj_edge_sv, sv)
|
3240
|
+
if flag == 0:
|
3241
|
+
new_edge = Edge.ByVertices([ov, vertex])
|
3242
|
+
else:
|
3243
|
+
new_edge = Edge.ByVertices([vertex, ov])
|
3244
|
+
d = Topology.Dictionary(adj_edge_sv)
|
3245
|
+
keys = Dictionary.Keys(d)
|
3246
|
+
if isinstance(keys, list):
|
3247
|
+
if len(keys) > 0:
|
3248
|
+
new_edge = Topology.SetDictionary(new_edge, d)
|
3249
|
+
new_edges.append(new_edge)
|
3250
|
+
for adj_edge_ev in adj_edges_ev:
|
3251
|
+
ov, flag = OppositeVertex(adj_edge_ev, ev)
|
3252
|
+
if flag == 0:
|
3253
|
+
new_edge = Edge.ByVertices([ov, vertex])
|
3254
|
+
else:
|
3255
|
+
new_edge = Edge.ByVertices([vertex, ov])
|
3256
|
+
d = Topology.Dictionary(adj_edge_ev)
|
3257
|
+
keys = Dictionary.Keys(d)
|
3258
|
+
if isinstance(keys, list):
|
3259
|
+
if len(keys) > 0:
|
3260
|
+
new_edge = Topology.SetDictionary(new_edge, d)
|
3261
|
+
new_edges.append(new_edge)
|
3262
|
+
for new_edge in new_edges:
|
3263
|
+
graph = Graph.AddEdge(graph, new_edge, transferVertexDictionaries=True, transferEdgeDictionaries=True, tolerance=tolerance)
|
3264
|
+
graph = Graph.RemoveVertex(graph,sv, tolerance=tolerance)
|
3265
|
+
graph = Graph.RemoveVertex(graph,ev, tolerance=tolerance)
|
3266
|
+
return graph
|
3267
|
+
|
3105
3268
|
@staticmethod
|
3106
3269
|
def ClosenessCentrality(graph, vertices=None, tolerance = 0.0001):
|
3107
3270
|
"""
|
topologicpy/Plotly.py
CHANGED
@@ -840,59 +840,66 @@ class Plotly:
|
|
840
840
|
if not isinstance(topology, topologic.Topology):
|
841
841
|
return None
|
842
842
|
|
843
|
-
|
844
843
|
intensityList = []
|
844
|
+
alt_intensities = []
|
845
845
|
data = []
|
846
|
+
v_list = []
|
846
847
|
|
847
848
|
if topology.Type() == topologic.Vertex.Type():
|
848
849
|
tp_vertices = [topology]
|
849
850
|
else:
|
850
851
|
tp_vertices = Topology.Vertices(topology)
|
852
|
+
|
851
853
|
if isinstance(intensities, list):
|
852
854
|
if len(intensities) == 0:
|
853
855
|
intensities = None
|
854
|
-
|
855
|
-
intensities = []
|
856
|
-
for i, tp_v in enumerate(tp_vertices):
|
857
|
-
d = Topology.Dictionary(tp_v)
|
858
|
-
if d:
|
859
|
-
v = Dictionary.ValueAtKey(d, key=intensityKey)
|
860
|
-
if not v == None:
|
861
|
-
intensities.append(v)
|
862
|
-
else:
|
863
|
-
intensities.append(0)
|
864
|
-
else:
|
865
|
-
intensities.append(0)
|
856
|
+
|
866
857
|
if not (tp_vertices == None or tp_vertices == []):
|
867
858
|
vertices = []
|
868
859
|
v_dictionaries = []
|
869
860
|
intensityList = []
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
max_i = max(intensities)
|
861
|
+
|
862
|
+
if intensityKey:
|
863
|
+
for i, tp_v in enumerate(tp_vertices):
|
864
|
+
vertices.append([tp_v.X(), tp_v.Y(), tp_v.Z()])
|
865
|
+
d = Topology.Dictionary(tp_v)
|
876
866
|
if d:
|
877
867
|
v = Dictionary.ValueAtKey(d, key=intensityKey)
|
878
868
|
if not v == None:
|
879
|
-
|
880
|
-
|
881
|
-
if (max_i - min_i) == 0:
|
882
|
-
value = 0
|
883
|
-
else:
|
884
|
-
value = (value - min_i)/(max_i - min_i)
|
885
|
-
intensityList.append(value)
|
869
|
+
alt_intensities.append(v)
|
870
|
+
v_list.append(v)
|
886
871
|
else:
|
887
|
-
|
872
|
+
alt_intensities.append(0)
|
873
|
+
v_list.append(0)
|
888
874
|
else:
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
875
|
+
alt_intensities.append(0)
|
876
|
+
v_list.append(0)
|
877
|
+
alt_intensities = list(set(alt_intensities))
|
878
|
+
alt_intensities.sort()
|
879
|
+
if isinstance(intensities, list):
|
880
|
+
if len(intensities) > 0:
|
881
|
+
alt_intensities = intensities
|
882
|
+
min_i = min(alt_intensities)
|
883
|
+
max_i = max(alt_intensities)
|
884
|
+
for i, tp_v in enumerate(tp_vertices):
|
885
|
+
v = v_list[i]
|
886
|
+
ci = closest_index(v_list[i], alt_intensities)
|
887
|
+
value = intensities[ci]
|
888
|
+
if (max_i - min_i) == 0:
|
889
|
+
value = 0
|
890
|
+
else:
|
891
|
+
value = (value - min_i)/(max_i - min_i)
|
892
|
+
intensityList.append(value)
|
893
|
+
if all(x == 0 for x in intensityList):
|
894
|
+
intensityList = None
|
895
|
+
if showVertices:
|
896
|
+
if len(vertices) == 0:
|
897
|
+
for i, tp_v in enumerate(tp_vertices):
|
898
|
+
if vertexLabelKey or vertexGroupKey:
|
899
|
+
d = Topology.Dictionary(tp_v)
|
900
|
+
v_dictionaries.append(d)
|
901
|
+
vertices.append([tp_v.X(), tp_v.Y(), tp_v.Z()])
|
902
|
+
data.append(vertexData(vertices, dictionaries=v_dictionaries, color=vertexColor, size=vertexSize, labelKey=vertexLabelKey, groupKey=vertexGroupKey, minGroup=vertexMinGroup, maxGroup=vertexMaxGroup, groups=vertexGroups, legendLabel=vertexLegendLabel, legendGroup=vertexLegendGroup, legendRank=vertexLegendRank, showLegend=showVertexLegend, colorScale=colorScale))
|
896
903
|
|
897
904
|
if showEdges and topology.Type() > topologic.Vertex.Type():
|
898
905
|
if topology.Type() == topologic.Edge.Type():
|