def add_vertices(self, vertices: Iterable['Vertex']) -> Sequence[int]: """ Add new `vertices` only, if no vertex with identical ``(x, y, z)`` coordinates already exist, else the index of the existing vertex is returned as index of the added vertices. Args: vertices: list of vertices, vertex as ``(x, y, z)`` tuple or :class:`~ezdxf.math.Vector` objects Returns: tuple: indices of the `vertices` added to the :attr:`~MeshBuilder.vertices` list """ indices = [] precision = self.precision for vertex in vertices: vertex = Vector(vertex) key = vertex.round(precision) try: index, count = self.ledger[key] except KeyError: # new key index = len(self.vertices) self.vertices.append(vertex) self.ledger[key] = (index, 1) else: # update key entry # calculate new average location average = (self.vertices[index] * count) + vertex count += 1 # update vertex location self.vertices[index] = average / count # update ledger self.ledger[key] = (index, count) indices.append(index) return tuple(indices)