def addIcosahedron (self, pos, scale): ''' this method generates a icosahedron. Kudos to The little Grasshopper. http://prideout.net/blog/?p=48 @param pos QVector3D @param scale QVector3D ''' p0=pos.x(); p1=pos.y(); p2=pos.z() s0=scale.x(); s1=scale.y(); s2=scale.z() faces = [2,1,0, 3,2,0, 4,3,0, 5,4,0, 1,5,0, 11,6,7, 11,7,8, 11,8,9, 11,9,10, 11,10,6, 1,2,6, 2,3,7, 3,4,8, 4,5,9, 5,1,10, 2,7,6, 3,8,7, 4,9,8, 5,10,9, 1,6,10] verts = [0.0,0.0,1.0, 0.894,0.0,0.447, 0.276,0.851,0.447, -0.724,0.526,0.447, -0.724,-0.526,0.447, 0.276,-0.851,0.447, 0.724,0.526,-0.447, -0.276,0.851,-0.447, -0.894,0.000,-0.447, -0.276,-0.851,-0.447, 0.724,-0.526,-0.447, 0.0,0.0,-1.0] for i in range (0, len(faces), 3): fi = faces[i]*3 fi1 = faces[i+1]*3 fi2 = faces[i+2]*3 a = QVector3D (verts[fi] *s0+p0, verts[fi+1] *s1+p1, verts[fi+2] *s2+p2) b = QVector3D (verts[fi1]*s0+p0, verts[fi1+1]*s1+p1, verts[fi1+2]*s2+p2) c = QVector3D (verts[fi2]*s0+p0, verts[fi2+1]*s1+p1, verts[fi2+2]*s2+p2) self.__poly_list.append ([a, b, c, # 3 vertices QVector3D.normal(a,b), # normal to vector self.getNewId()]) # polygon's id.
def addIcosahedron(self, pos, scale): ''' this method generates a icosahedron. Kudos to The little Grasshopper. http://prideout.net/blog/?p=48 @param pos QVector3D @param scale QVector3D ''' p0 = pos.x() p1 = pos.y() p2 = pos.z() s0 = scale.x() s1 = scale.y() s2 = scale.z() faces = [ 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 1, 5, 0, 11, 6, 7, 11, 7, 8, 11, 8, 9, 11, 9, 10, 11, 10, 6, 1, 2, 6, 2, 3, 7, 3, 4, 8, 4, 5, 9, 5, 1, 10, 2, 7, 6, 3, 8, 7, 4, 9, 8, 5, 10, 9, 1, 6, 10 ] verts = [ 0.0, 0.0, 1.0, 0.894, 0.0, 0.447, 0.276, 0.851, 0.447, -0.724, 0.526, 0.447, -0.724, -0.526, 0.447, 0.276, -0.851, 0.447, 0.724, 0.526, -0.447, -0.276, 0.851, -0.447, -0.894, 0.000, -0.447, -0.276, -0.851, -0.447, 0.724, -0.526, -0.447, 0.0, 0.0, -1.0 ] for i in range(0, len(faces), 3): fi = faces[i] * 3 fi1 = faces[i + 1] * 3 fi2 = faces[i + 2] * 3 a = QVector3D(verts[fi] * s0 + p0, verts[fi + 1] * s1 + p1, verts[fi + 2] * s2 + p2) b = QVector3D(verts[fi1] * s0 + p0, verts[fi1 + 1] * s1 + p1, verts[fi1 + 2] * s2 + p2) c = QVector3D(verts[fi2] * s0 + p0, verts[fi2 + 1] * s1 + p1, verts[fi2 + 2] * s2 + p2) self.__poly_list.append([ a, b, c, # 3 vertices QVector3D.normal(a, b), # normal to vector self.getNewId() ]) # polygon's id.
def addTri(self, a, b, c, apexVertex=None): """Add a triangle. a, b, c -- [x, y, z] The three vertices, given in CCLW winding order. apexVertex -- [x, y, z] The apex vertice, for a cone tip. Must be the same as a, b, c, or None. Return None. """ # triangle normal n = QVector3D.normal(QVector3D(*a), QVector3D(*b), QVector3D(*c)) n = [n.x(), n.y(), n.z()] self._indices.append(self._mesh.addVertex(a, n, self._startIndex, apexVertex == a)) self._indices.append(self._mesh.addVertex(b, n, self._startIndex, apexVertex == b)) self._indices.append(self._mesh.addVertex(c, n, self._startIndex, apexVertex == c)) self._nTris += 1