@@ -118,22 +118,28 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
118118
119119 private void MapGeometryBuffer ( )
120120 {
121+ // Dispose and clear all previous buffers before remapping
122+ foreach ( var buffer in _faceBuffers ) buffer . Dispose ( ) ;
123+ foreach ( var buffer in _edgeBuffers ) buffer . Dispose ( ) ;
124+ _faceBuffers . Clear ( ) ;
125+ _edgeBuffers . Clear ( ) ;
126+
121127 foreach ( var solid in VisualizeGeometries )
122128 {
123129 var scaledSolid = RenderGeometryHelper . ScaleSolid ( solid , _scale ) ;
124130
125- var faceIndex = 0 ;
126131 foreach ( Face face in scaledSolid . Faces )
127132 {
128- var buffer = CreateOrUpdateBuffer ( _faceBuffers , faceIndex ++ ) ;
133+ var buffer = new RenderingBufferStorage ( ) ;
129134 MapFaceBuffers ( buffer , face ) ;
135+ _faceBuffers . Add ( buffer ) ;
130136 }
131137
132- var edgeIndex = 0 ;
133138 foreach ( Edge edge in scaledSolid . Edges )
134139 {
135- var buffer = CreateOrUpdateBuffer ( _edgeBuffers , edgeIndex ++ ) ;
140+ var buffer = new RenderingBufferStorage ( ) ;
136141 MapEdgeBuffers ( buffer , edge ) ;
142+ _edgeBuffers . Add ( buffer ) ;
137143 }
138144 }
139145 }
@@ -150,22 +156,6 @@ private static void MapEdgeBuffers(RenderingBufferStorage buffer, Edge edge)
150156 RenderHelper . MapCurveBuffer ( buffer , mesh ) ;
151157 }
152158
153- private static RenderingBufferStorage CreateOrUpdateBuffer ( List < RenderingBufferStorage > buffers , int index )
154- {
155- RenderingBufferStorage buffer ;
156- if ( buffers . Count > index )
157- {
158- buffer = buffers [ index ] ;
159- }
160- else
161- {
162- buffer = new RenderingBufferStorage ( ) ;
163- buffers . Add ( buffer ) ;
164- }
165-
166- return buffer ;
167- }
168-
169159 private void UpdateEffects ( )
170160 {
171161 foreach ( var buffer in _faceBuffers )
@@ -181,4 +171,12 @@ private void UpdateEffects()
181171 buffer . EffectInstance . SetColor ( _edgeColor ) ;
182172 }
183173 }
174+
175+ protected override void DisposeBuffers ( )
176+ {
177+ foreach ( var buffer in _faceBuffers ) buffer . Dispose ( ) ;
178+ foreach ( var buffer in _edgeBuffers ) buffer . Dispose ( ) ;
179+ _faceBuffers . Clear ( ) ;
180+ _edgeBuffers . Clear ( ) ;
181+ }
184182}
0 commit comments