@@ -112,13 +112,14 @@ export function buildShape(options: {
112
112
data : IParsedShape ;
113
113
clippingPlanes : THREE . Plane [ ] ;
114
114
selected : boolean ;
115
+ isSolid : boolean ;
115
116
guidata ?: IDict ;
116
117
} ) : {
117
118
meshGroup : THREE . Group ;
118
119
mainMesh : THREE . Mesh < THREE . BufferGeometry , THREE . MeshPhongMaterial > ;
119
120
edgesMeshes : LineSegments2 [ ] ;
120
121
} | null {
121
- const { objName, data, guidata, clippingPlanes, selected } = options ;
122
+ const { objName, data, guidata, isSolid , clippingPlanes, selected } = options ;
122
123
const { faceList, edgeList, jcObject } = data ;
123
124
124
125
const vertices : Array < number > = [ ] ;
@@ -191,34 +192,39 @@ export function buildShape(options: {
191
192
meshGroup . name = `${ objName } -group` ;
192
193
meshGroup . visible = visible ;
193
194
194
- const baseMat = new THREE . MeshBasicMaterial ( ) ;
195
- baseMat . depthWrite = false ;
196
- baseMat . depthTest = false ;
197
- baseMat . colorWrite = false ;
198
- baseMat . stencilWrite = true ;
199
- baseMat . stencilFunc = THREE . AlwaysStencilFunc ;
200
-
201
- // back faces
202
- const mat0 = baseMat . clone ( ) ;
203
- mat0 . side = THREE . BackSide ;
204
- mat0 . clippingPlanes = clippingPlanes ;
205
- mat0 . stencilFail = THREE . IncrementWrapStencilOp ;
206
- mat0 . stencilZFail = THREE . IncrementWrapStencilOp ;
207
- mat0 . stencilZPass = THREE . IncrementWrapStencilOp ;
208
- const backFaces = new THREE . Mesh ( geometry , mat0 ) ;
209
- backFaces . name = `${ objName } -back` ;
210
- meshGroup . add ( backFaces ) ;
211
-
212
- // front faces
213
- const mat1 = baseMat . clone ( ) ;
214
- mat1 . side = THREE . FrontSide ;
215
- mat1 . clippingPlanes = clippingPlanes ;
216
- mat1 . stencilFail = THREE . DecrementWrapStencilOp ;
217
- mat1 . stencilZFail = THREE . DecrementWrapStencilOp ;
218
- mat1 . stencilZPass = THREE . DecrementWrapStencilOp ;
219
- const frontFaces = new THREE . Mesh ( geometry , mat1 ) ;
220
- frontFaces . name = `${ objName } -front` ;
221
- meshGroup . add ( frontFaces ) ;
195
+ // We only build the stencil logic for solid meshes
196
+ if ( isSolid ) {
197
+ const baseMat = new THREE . MeshBasicMaterial ( ) ;
198
+ baseMat . depthWrite = false ;
199
+ baseMat . depthTest = false ;
200
+ baseMat . colorWrite = false ;
201
+ baseMat . stencilWrite = true ;
202
+ baseMat . stencilFunc = THREE . AlwaysStencilFunc ;
203
+
204
+ // back faces
205
+ const mat0 = baseMat . clone ( ) ;
206
+ mat0 . side = THREE . BackSide ;
207
+ mat0 . clippingPlanes = clippingPlanes ;
208
+ mat0 . stencilFail = THREE . IncrementWrapStencilOp ;
209
+ mat0 . stencilZFail = THREE . IncrementWrapStencilOp ;
210
+ mat0 . stencilZPass = THREE . IncrementWrapStencilOp ;
211
+ const backFaces = new THREE . Mesh ( geometry , mat0 ) ;
212
+ backFaces . name = `${ objName } -back` ;
213
+ meshGroup . add ( backFaces ) ;
214
+
215
+ // front faces
216
+ const mat1 = baseMat . clone ( ) ;
217
+ mat1 . side = THREE . FrontSide ;
218
+ mat1 . clippingPlanes = clippingPlanes ;
219
+ mat1 . stencilFail = THREE . DecrementWrapStencilOp ;
220
+ mat1 . stencilZFail = THREE . DecrementWrapStencilOp ;
221
+ mat1 . stencilZPass = THREE . DecrementWrapStencilOp ;
222
+ const frontFaces = new THREE . Mesh ( geometry , mat1 ) ;
223
+ frontFaces . name = `${ objName } -front` ;
224
+ meshGroup . add ( frontFaces ) ;
225
+ } else {
226
+ material . side = THREE . DoubleSide ;
227
+ }
222
228
223
229
const mainMesh = new THREE . Mesh ( geometry , material ) ;
224
230
mainMesh . name = objName ;
0 commit comments