@@ -18,6 +18,18 @@ import Cocoa
18
18
import OpenGL. GL3
19
19
import GLKit
20
20
21
+ class TriangleList {
22
+ var triangles = ContiguousArray < GLfloat > ( )
23
+ }
24
+
25
+ class TriangleListsBySubtype {
26
+ var triangleListOfSubtype = [ String: TriangleList] ( )
27
+ }
28
+
29
+ class TriangleListsByTypeAndSubtype {
30
+ var triangleListOfType = [ String: TriangleListsBySubtype] ( )
31
+ }
32
+
21
33
class OpenGLView : NSOpenGLView {
22
34
23
35
var controller : Controller ?
@@ -72,7 +84,7 @@ class OpenGLView: NSOpenGLView {
72
84
let selectionFacesColour : Array < GLfloat > = [ 1.0 , 1.0 , 0.0 , 1.0 ]
73
85
let selectionEdgesColour : Array < GLfloat > = [ 1.0 , 0.0 , 0.0 , 1.0 ]
74
86
75
- var faceTriangles = [ String : [ String : ContiguousArray < GLfloat > ] ] ( )
87
+ var faceTriangles = TriangleListsByTypeAndSubtype ( )
76
88
var edges : ContiguousArray < GLfloat > = ContiguousArray < GLfloat > ( )
77
89
var boundingBox : ContiguousArray < GLfloat > = ContiguousArray < GLfloat > ( )
78
90
var selectionFaces : ContiguousArray < GLfloat > = ContiguousArray < GLfloat > ( )
@@ -352,9 +364,9 @@ class OpenGLView: NSOpenGLView {
352
364
func new( ) {
353
365
Swift . print ( " OpenGLView() " )
354
366
355
- for faceType in faceTriangles {
356
- for faceSubtype in faceType. value {
357
- faceTriangles [ faceType. key] ![ faceSubtype. key] !. removeAll ( )
367
+ for faceType in faceTriangles. triangleListOfType {
368
+ for faceSubtype in faceType. value. triangleListOfSubtype {
369
+ faceTriangles. triangleListOfType [ faceType. key] !. triangleListOfSubtype [ faceSubtype. key] !. triangles . removeAll ( )
358
370
}
359
371
}
360
372
edges. removeAll ( )
@@ -1030,9 +1042,9 @@ class OpenGLView: NSOpenGLView {
1030
1042
maxRange = range. z
1031
1043
}
1032
1044
1033
- for faceType in faceTriangles {
1034
- for faceSubtype in faceType. value {
1035
- faceTriangles [ faceType. key] ![ faceSubtype. key] !. removeAll ( keepingCapacity: true )
1045
+ for faceType in faceTriangles. triangleListOfType {
1046
+ for faceSubtype in faceType. value. triangleListOfSubtype {
1047
+ faceTriangles. triangleListOfType [ faceType. key] !. triangleListOfSubtype [ faceSubtype. key] !. triangles . removeAll ( keepingCapacity: true )
1036
1048
}
1037
1049
}
1038
1050
edges. removeAll ( keepingCapacity: true )
@@ -1068,8 +1080,8 @@ class OpenGLView: NSOpenGLView {
1068
1080
boundingBox. append ( contentsOf: boundingBoxVertices)
1069
1081
1070
1082
for object in dataStorage!. objects {
1071
- if !faceTriangles. keys. contains ( object. type) {
1072
- faceTriangles [ object. type] = [ String : ContiguousArray < GLfloat > ] ( )
1083
+ if !faceTriangles. triangleListOfType . keys. contains ( object. type) {
1084
+ faceTriangles. triangleListOfType [ object. type] = TriangleListsBySubtype ( )
1073
1085
}
1074
1086
1075
1087
if dataStorage!. selection. contains ( object. id) {
@@ -1101,8 +1113,8 @@ class OpenGLView: NSOpenGLView {
1101
1113
( object. edgesBuffer [ 3 * vertexIndex+ 2 ] - midCoordinates. z) / maxRange] )
1102
1114
}
1103
1115
for triangleBufferType in object. triangleBuffersByType. keys {
1104
- if !faceTriangles[ object. type] !. keys. contains ( triangleBufferType) {
1105
- faceTriangles [ object. type] ![ triangleBufferType] = ContiguousArray < GLfloat > ( )
1116
+ if !faceTriangles. triangleListOfType [ object. type] !. triangleListOfSubtype . keys. contains ( triangleBufferType) {
1117
+ faceTriangles. triangleListOfType [ object. type] !. triangleListOfSubtype [ triangleBufferType] = TriangleList ( )
1106
1118
}
1107
1119
let numberOfVertices = object. triangleBuffersByType [ triangleBufferType] !. count/ 6
1108
1120
var temporaryBuffer = ContiguousArray < GLfloat > ( )
@@ -1115,7 +1127,7 @@ class OpenGLView: NSOpenGLView {
1115
1127
currentTriangleBuffer [ 6 * vertexIndex+ 4 ] ,
1116
1128
currentTriangleBuffer [ 6 * vertexIndex+ 5 ] ] )
1117
1129
}
1118
- faceTriangles [ object. type] ![ triangleBufferType] !. append ( contentsOf: temporaryBuffer)
1130
+ faceTriangles. triangleListOfType [ object. type] !. triangleListOfSubtype [ triangleBufferType] !. triangles . append ( contentsOf: temporaryBuffer)
1119
1131
}
1120
1132
}
1121
1133
}
@@ -1125,11 +1137,11 @@ class OpenGLView: NSOpenGLView {
1125
1137
Swift . print ( " There's a previous OpenGL error " )
1126
1138
}
1127
1139
1128
- for faceType in faceTriangles {
1129
- for faceSubtype in faceType. value {
1140
+ for faceType in faceTriangles. triangleListOfType {
1141
+ for faceSubtype in faceType. value. triangleListOfSubtype {
1130
1142
glBindBuffer ( GLenum ( GL_ARRAY_BUFFER) , vboFaces [ faceType. key] ![ faceSubtype. key] !)
1131
- faceSubtype. value. withUnsafeBufferPointer { pointer in
1132
- glBufferData ( GLenum ( GL_ARRAY_BUFFER) , faceSubtype. value. count*MemoryLayout< GLfloat> . size, pointer. baseAddress, GLenum ( GL_STATIC_DRAW) )
1143
+ faceSubtype. value. triangles . withUnsafeBufferPointer { pointer in
1144
+ glBufferData ( GLenum ( GL_ARRAY_BUFFER) , faceSubtype. value. triangles . count*MemoryLayout< GLfloat> . size, pointer. baseAddress, GLenum ( GL_STATIC_DRAW) )
1133
1145
}
1134
1146
if glGetError ( ) != GLenum ( GL_NO_ERROR) {
1135
1147
Swift . print ( " Loading \( faceType. key) \( faceSubtype. key) into memory: some error occurred! " )
@@ -1170,9 +1182,9 @@ class OpenGLView: NSOpenGLView {
1170
1182
}
1171
1183
1172
1184
Swift . print ( " Loaded triangles: " , separator: " " , terminator: " " )
1173
- for faceType in faceTriangles {
1174
- for faceSubtype in faceType. value {
1175
- Swift . print ( " \( faceSubtype. value. count/ 18 ) from \( faceType. key) \( faceSubtype. key) " , separator: " " , terminator: " , " )
1185
+ for faceType in faceTriangles. triangleListOfType {
1186
+ for faceSubtype in faceType. value. triangleListOfSubtype {
1187
+ Swift . print ( " \( faceSubtype. value. triangles . count/ 18 ) from \( faceType. key) \( faceSubtype. key) " , separator: " " , terminator: " , " )
1176
1188
}
1177
1189
}
1178
1190
Swift . print ( " and \( selectionFaces. count/ 18 ) from selected objects. " )
0 commit comments