Skip to content

Commit 62608b7

Browse files
additional fillets, io and operations unit tests
1 parent ce5ea1b commit 62608b7

File tree

3 files changed

+355
-0
lines changed

3 files changed

+355
-0
lines changed

packages/dev/occt/lib/services/fillets.test.ts

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,78 @@ describe("OCCT fillets unit tests", () => {
158158
result.delete();
159159
});
160160

161+
it("should fillet multiple 3D wires with the same radius", () => {
162+
const starOpt1 = new Inputs.OCCT.StarDto(10, 6, 7, [0, 0, 0], [0, 1, 0], 3);
163+
const starOpt2 = new Inputs.OCCT.StarDto(8, 5, 6, [20, 0, 0], [0, 1, 0], 2);
164+
const star1 = wire.createStarWire(starOpt1);
165+
const star2 = wire.createStarWire(starOpt2);
166+
167+
const filletOptions = new Inputs.OCCT.Fillet3DWiresDto<TopoDS_Wire>(
168+
[star1, star2],
169+
0.3,
170+
[0, 1, 0],
171+
);
172+
const results = fillets.fillet3DWires(filletOptions);
173+
174+
expect(results.length).toBe(2);
175+
176+
const edges1 = occHelper.edgesService.getEdgesAlongWire({ shape: results[0] });
177+
const edges2 = occHelper.edgesService.getEdgesAlongWire({ shape: results[1] });
178+
179+
// All edges should be filleted, so we expect more edges than original
180+
expect(edges1.length).toBe(28);
181+
expect(edges2.length).toBe(24);
182+
183+
// Some edges should be short fillet arcs
184+
const edgeLengths1 = edges1.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
185+
const edgeLengths2 = edges2.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
186+
const hasShortEdges1 = edgeLengths1.some(length => length < 1);
187+
const hasShortEdges2 = edgeLengths2.some(length => length < 1);
188+
expect(hasShortEdges1).toBe(true);
189+
expect(hasShortEdges2).toBe(true);
190+
191+
star1.delete();
192+
star2.delete();
193+
edges1.forEach(e => e.delete());
194+
edges2.forEach(e => e.delete());
195+
results.forEach(r => r.delete());
196+
});
197+
198+
it("should fillet multiple 3D wires with indexes", () => {
199+
const starOpt1 = new Inputs.OCCT.StarDto(10, 6, 7, [0, 0, 0], [0, 1, 0], 3);
200+
const starOpt2 = new Inputs.OCCT.StarDto(8, 5, 6, [20, 0, 0], [0, 1, 0], 2);
201+
const star1 = wire.createStarWire(starOpt1);
202+
const star2 = wire.createStarWire(starOpt2);
203+
204+
const filletOptions = new Inputs.OCCT.Fillet3DWiresDto<TopoDS_Wire>(
205+
[star1, star2],
206+
undefined,
207+
[0, 1, 0],
208+
[0.2, 0.4, 0.3],
209+
[1, 3, 5],
210+
);
211+
const results = fillets.fillet3DWires(filletOptions);
212+
213+
expect(results.length).toBe(2);
214+
215+
const edges1 = occHelper.edgesService.getEdgesAlongWire({ shape: results[0] });
216+
const edges2 = occHelper.edgesService.getEdgesAlongWire({ shape: results[1] });
217+
218+
// Check that fillets were applied
219+
const edgeLengths1 = edges1.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
220+
const edgeLengths2 = edges2.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
221+
const hasShortEdges1 = edgeLengths1.some(length => length < 1);
222+
const hasShortEdges2 = edgeLengths2.some(length => length < 1);
223+
expect(hasShortEdges1).toBe(true);
224+
expect(hasShortEdges2).toBe(true);
225+
226+
star1.delete();
227+
star2.delete();
228+
edges1.forEach(e => e.delete());
229+
edges2.forEach(e => e.delete());
230+
results.forEach(r => r.delete());
231+
});
232+
161233
it("should fillet closed 2D wire on various corners", () => {
162234
const starOpt = new Inputs.OCCT.StarDto(10, 6, 7, [0, 0, 0], [0, 1, 0], 0);
163235
const star = wire.createStarWire(starOpt);
@@ -232,6 +304,76 @@ describe("OCCT fillets unit tests", () => {
232304
result.delete();
233305
});
234306

307+
it("should fillet multiple 2D wires with the same radius", () => {
308+
const starOpt1 = new Inputs.OCCT.StarDto(10, 6, 7, [0, 0, 0], [0, 1, 0], 0);
309+
const starOpt2 = new Inputs.OCCT.StarDto(8, 5, 6, [20, 0, 0], [0, 1, 0], 0);
310+
const star1 = wire.createStarWire(starOpt1);
311+
const star2 = wire.createStarWire(starOpt2);
312+
313+
const filletOptions = new Inputs.OCCT.FilletShapesDto<TopoDS_Wire>(
314+
[star1, star2],
315+
0.3,
316+
);
317+
const results = fillets.fillet2dShapes(filletOptions);
318+
319+
expect(results.length).toBe(2);
320+
321+
const edges1 = occHelper.shapeGettersService.getEdges({ shape: results[0] });
322+
const edges2 = occHelper.shapeGettersService.getEdges({ shape: results[1] });
323+
324+
// All edges should be filleted, so we expect more edges than original
325+
expect(edges1.length).toBe(28);
326+
expect(edges2.length).toBe(24);
327+
328+
// Some edges should be short fillet arcs
329+
const edgeLengths1 = edges1.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
330+
const edgeLengths2 = edges2.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
331+
const hasShortEdges1 = edgeLengths1.some(length => length < 1);
332+
const hasShortEdges2 = edgeLengths2.some(length => length < 1);
333+
expect(hasShortEdges1).toBe(true);
334+
expect(hasShortEdges2).toBe(true);
335+
336+
star1.delete();
337+
star2.delete();
338+
edges1.forEach(e => e.delete());
339+
edges2.forEach(e => e.delete());
340+
results.forEach(r => r.delete());
341+
});
342+
343+
it("should fillet multiple 2D wires with indexes and radius list", () => {
344+
const starOpt1 = new Inputs.OCCT.StarDto(10, 6, 7, [0, 0, 0], [0, 1, 0], 0);
345+
const starOpt2 = new Inputs.OCCT.StarDto(8, 5, 6, [20, 0, 0], [0, 1, 0], 0);
346+
const star1 = wire.createStarWire(starOpt1);
347+
const star2 = wire.createStarWire(starOpt2);
348+
349+
const filletOptions = new Inputs.OCCT.FilletShapesDto<TopoDS_Wire>(
350+
[star1, star2],
351+
undefined,
352+
[0.2, 0.4, 0.3],
353+
[1, 3, 5],
354+
);
355+
const results = fillets.fillet2dShapes(filletOptions);
356+
357+
expect(results.length).toBe(2);
358+
359+
const edges1 = occHelper.shapeGettersService.getEdges({ shape: results[0] });
360+
const edges2 = occHelper.shapeGettersService.getEdges({ shape: results[1] });
361+
362+
// Check that fillets were applied
363+
const edgeLengths1 = edges1.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
364+
const edgeLengths2 = edges2.map(e => occHelper.edgesService.getEdgeLength({ shape: e }));
365+
const hasShortEdges1 = edgeLengths1.some(length => length < 1);
366+
const hasShortEdges2 = edgeLengths2.some(length => length < 1);
367+
expect(hasShortEdges1).toBe(true);
368+
expect(hasShortEdges2).toBe(true);
369+
370+
star1.delete();
371+
star2.delete();
372+
edges1.forEach(e => e.delete());
373+
edges2.forEach(e => e.delete());
374+
results.forEach(r => r.delete());
375+
});
376+
235377
it("should fillet a single edge on the solid", () => {
236378
const cube = solid.createCube({ size: 2, center: [0, 0, 0] });
237379
const filRes = fillets.filletEdges({ shape: cube, indexes: [1], radius: 0.5 });

packages/dev/occt/lib/services/io.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,10 @@ describe("OCCT io unit tests", () => {
728728
});
729729

730730
it("should return undefined for unsupported file extension", () => {
731+
const consoleSpy = jest.spyOn(console, "error").mockImplementation(() => {});
731732
const result = io.loadSTEPorIGES({ filetext: "some content", fileName: "file.obj", adjustZtoY: false });
732733
expect(result).toBeUndefined();
734+
expect(consoleSpy).toHaveBeenCalledWith("opencascade can't parse this extension! (yet)");
735+
consoleSpy.mockRestore();
733736
});
734737
});

0 commit comments

Comments
 (0)