def __init__(self, sources, material, polygons, xmlnode=None): """A Polygons should not be created manually. Instead, call the :meth:`collada.geometry.Geometry.createPolygons` method after creating a geometry instance. """ max_offset = max([ max([input[0] for input in input_type_array]) for input_type_array in sources.itervalues() if len(input_type_array) > 0]) vcounts = numpy.zeros(len(polygons), dtype=numpy.int32) for i, poly in enumerate(polygons): vcounts[i] = len(poly) / (max_offset + 1) indices = numpy.concatenate(polygons) super(Polygons, self).__init__(sources, material, indices, vcounts, xmlnode) if xmlnode is not None: self.xmlnode = xmlnode else: acclen = len(polygons) self.xmlnode = E.polygons(count=str(acclen), material=self.material) all_inputs = [] for semantic_list in self.sources.itervalues(): all_inputs.extend(semantic_list) for offset, semantic, sourceid, set, src in all_inputs: inpnode = E.input(offset=str(offset), semantic=semantic, source=sourceid) if set is not None: inpnode.set('set', str(set)) self.xmlnode.append(inpnode) for poly in polygons: self.xmlnode.append(E.p(' '.join(map(str, poly.flatten().tolist()))))