(m *Mesh)
| 69 | } |
| 70 | |
| 71 | func newMesh(m *Mesh) (*geometry.Geometry, uint32, error) { |
| 72 | |
| 73 | // If no primitive elements present, it is a mesh of points |
| 74 | if len(m.PrimitiveElements) == 0 { |
| 75 | return newMeshPoints(m) |
| 76 | } |
| 77 | |
| 78 | // All the primitive elements must be of the same type |
| 79 | var etype reflect.Type |
| 80 | for i := 0; i < len(m.PrimitiveElements); i++ { |
| 81 | el := m.PrimitiveElements[i] |
| 82 | if i == 0 { |
| 83 | etype = reflect.TypeOf(el) |
| 84 | } else { |
| 85 | if reflect.TypeOf(el) != etype { |
| 86 | return nil, 0, fmt.Errorf("primitive elements of different types") |
| 87 | } |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | pei := m.PrimitiveElements[0] |
| 92 | switch pet := pei.(type) { |
| 93 | case *Polylist: |
| 94 | return newMeshPolylist(m, m.PrimitiveElements) |
| 95 | case *Triangles: |
| 96 | return newMeshTriangles(m, pet) |
| 97 | case *Lines: |
| 98 | return newMeshLines(m, pet) |
| 99 | case *LineStrips: |
| 100 | return newMeshLineStrips(m, pet) |
| 101 | case *Trifans: |
| 102 | return newMeshTrifans(m, pet) |
| 103 | case *Tristrips: |
| 104 | return newMeshTristrips(m, pet) |
| 105 | default: |
| 106 | return nil, 0, fmt.Errorf("PrimitiveElement:%T not supported", pet) |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | // Creates a geometry from a polylist |
| 111 | // Only triangles are supported |
no test coverage detected