Skip to content

Commit 169183d

Browse files
introduced various methods to create occt geometry from simple base types, such as line, segment, polyline, triangle and mesh. Extended line recognition to digest segments using this type [Point3, Point3]
1 parent 3de2220 commit 169183d

File tree

18 files changed

+570
-93
lines changed

18 files changed

+570
-93
lines changed

packages/dev/babylonjs/lib/api/bitbybit/draw.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export class Draw extends DrawCore {
163163
drawAny(inputs: Inputs.Draw.DrawAny): BABYLON.Mesh {
164164
let result;
165165
const entity = inputs.entity;
166-
if (!inputs.babylonMesh) {
166+
if (!inputs.babylonMesh && !(entity instanceof BABYLON.Mesh)) {
167167
if (this.detectLine(entity)) {
168168
result = this.handleLine(inputs);
169169
} else if (this.detectPoint(entity)) {
@@ -409,10 +409,20 @@ export class Draw extends DrawCore {
409409
if (!inputs.options && inputs.babylonMesh && inputs.babylonMesh.metadata.options) {
410410
options = inputs.babylonMesh.metadata.options;
411411
}
412-
const lines = inputs.entity as Inputs.Base.Line3[];
412+
const lines = inputs.entity as Inputs.Base.Line3[] | Inputs.Base.Segment3[];
413+
const pts: Inputs.Base.Point3[][] = [];
414+
if (lines && lines[0] && lines[0]["start"]) {
415+
lines.forEach(e => {
416+
pts.push([e.start, e.end]);
417+
});
418+
} else {
419+
lines.forEach(line => {
420+
pts.push(line as Inputs.Base.Segment3);
421+
});
422+
}
413423
const result = this.drawHelper.drawPolylinesWithColours({
414424
polylinesMesh: inputs.babylonMesh as BABYLON.GreasedLineMesh,
415-
polylines: lines.map(e => ({ points: [e.start, e.end] })),
425+
polylines: pts.map(e => ({ points: [...e] })),
416426
...options as Inputs.Draw.DrawBasicGeometryOptions
417427
});
418428
this.applyGlobalSettingsAndMetadataAndShadowCasting(Inputs.Draw.drawingTypes.lines, options, result);
@@ -508,10 +518,16 @@ export class Draw extends DrawCore {
508518
if (!inputs.options && inputs.babylonMesh && inputs.babylonMesh.metadata.options) {
509519
options = inputs.babylonMesh.metadata.options;
510520
}
511-
const line = inputs.entity as Inputs.Base.Line3;
521+
const line = inputs.entity as Inputs.Base.Line3 | Inputs.Base.Segment3;
522+
const pts: Inputs.Base.Point3[] = [];
523+
if (line && line["start"]) {
524+
pts.push((line as Inputs.Base.Line3).start, (line as Inputs.Base.Line3).end);
525+
} else {
526+
pts.push(...line as Inputs.Base.Segment3);
527+
}
512528
const result = this.drawHelper.drawPolylinesWithColours({
513529
polylinesMesh: inputs.babylonMesh as BABYLON.GreasedLineMesh,
514-
polylines: [{ points: [line.start, line.end] }],
530+
polylines: [{ points: pts }],
515531
...options as Inputs.Draw.DrawBasicGeometryOptions
516532
});
517533
this.applyGlobalSettingsAndMetadataAndShadowCasting(Inputs.Draw.drawingTypes.line, options, result);

packages/dev/base/lib/api/services/line.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,21 @@ export class Line {
112112
};
113113
}
114114

115+
/**
116+
* Create the segment
117+
* @param inputs start and end points of the segment
118+
* @returns segment
119+
* @group create
120+
* @shortname segment
121+
* @drawable true
122+
*/
123+
createSegment(inputs: Inputs.Line.LinePointsDto): Inputs.Base.Segment3 {
124+
return [
125+
inputs.start,
126+
inputs.end,
127+
];
128+
}
129+
115130
/**
116131
* Gets the point on the line segment at a given param
117132
* @param inputs line

packages/dev/base/lib/api/services/polyline.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export class Polyline {
9292
create(inputs: Inputs.Polyline.PolylineCreateDto): Inputs.Polyline.PolylinePropertiesDto {
9393
return {
9494
points: inputs.points,
95+
isClosed: inputs.isClosed ?? false,
9596
};
9697
}
9798

packages/dev/core/lib/api/draw-core.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class DrawCore {
1212
}
1313

1414
detectLine(entity: any): boolean {
15-
return entity.start && entity.end && Array.isArray(entity.start) && Array.isArray(entity.end);
15+
return (entity.start && entity.end && Array.isArray(entity.start) && Array.isArray(entity.end)) || (Array.isArray(entity) && entity.length === 2 && this.checkIfElementsInArrayAreNumbers(entity[0]) && entity[0].length === 3 && this.checkIfElementsInArrayAreNumbers(entity[1]) && entity[1].length === 3);
1616
}
1717

1818
detectLines(entity: any): boolean {

packages/dev/occt-worker/lib/api/occt/shapes/edge.ts

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,102 @@ export class OCCTEdge {
99
) {
1010
}
1111

12+
/**
13+
* Creates linear edge from base line format {start: Point3, end: Point3}
14+
* @param inputs base line
15+
* @returns OpenCascade edge
16+
* @group from base
17+
* @shortname edge from base line
18+
* @drawable true
19+
*/
20+
fromBaseLine(inputs: Inputs.OCCT.LineBaseDto): Promise<Inputs.OCCT.TopoDSEdgePointer> {
21+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBaseLine", inputs);
22+
}
23+
24+
/**
25+
* Creates linear edges from base lines format {start: Point3, end: Point3}[]
26+
* @param inputs base lines
27+
* @returns OpenCascade edges
28+
* @group from base
29+
* @shortname edges from base lines
30+
* @drawable true
31+
*/
32+
fromBaseLines(inputs: Inputs.OCCT.LineBaseDto): Promise<Inputs.OCCT.TopoDSEdgePointer[]> {
33+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBaseLines", inputs);
34+
}
35+
36+
/**
37+
* Creates linear edge from base segment format [Point3, Point3]
38+
* @param inputs base segment
39+
* @returns OpenCascade edge
40+
* @group from base
41+
* @shortname edge from base segment
42+
* @drawable true
43+
*/
44+
fromBaseSegment(inputs: Inputs.OCCT.SegmentBaseDto): Promise<Inputs.OCCT.TopoDSEdgePointer> {
45+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBaseSegment", inputs);
46+
}
47+
48+
/**
49+
* Creates linear edge from base segments format [Point3, Point3][]
50+
* @param inputs base segments
51+
* @returns OpenCascade edges
52+
* @group from base
53+
* @shortname edges from base segments
54+
* @drawable true
55+
*/
56+
fromBaseSegments(inputs: Inputs.OCCT.SegmentsBaseDto): Promise<Inputs.OCCT.TopoDSEdgePointer[]> {
57+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBaseSegments", inputs);
58+
}
59+
60+
/**
61+
* Creates linear edges from collection of points
62+
* @param inputs Points
63+
* @returns OpenCascade edges
64+
* @group from base
65+
* @shortname edges from points
66+
* @drawable true
67+
*/
68+
fromPoints(inputs: Inputs.OCCT.PointsDto) : Promise<Inputs.OCCT.TopoDSEdgePointer[]> {
69+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromPoints", inputs);
70+
}
71+
72+
/**
73+
* Creates linear edges from polyline definition
74+
* @param inputs Polyline
75+
* @returns OpenCascade edges
76+
* @group from base
77+
* @shortname edges from polyline
78+
* @drawable true
79+
*/
80+
fromBasePolyline(inputs: Inputs.OCCT.PolylineBaseDto) : Promise<Inputs.OCCT.TopoDSEdgePointer[]> {
81+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBasePolyline", inputs);
82+
}
83+
84+
/**
85+
* Creates linear edges from triangle definition
86+
* @param inputs Triangle
87+
* @returns OpenCascade edges
88+
* @group from base
89+
* @shortname edges from triangle
90+
* @drawable true
91+
*/
92+
fromBaseTriangle(inputs: Inputs.OCCT.TriangleBaseDto) : Promise<Inputs.OCCT.TopoDSEdgePointer[]> {
93+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBaseTriangle", inputs);
94+
}
95+
96+
/**
97+
* Creates linear edges from mesh definition
98+
* @param inputs Mesh
99+
* @returns OpenCascade edges
100+
* @group from base
101+
* @shortname edges from mesh
102+
* @drawable true
103+
*/
104+
fromBaseMesh(inputs: Inputs.OCCT.MeshBaseDto) : Promise<Inputs.OCCT.TopoDSEdgePointer[]> {
105+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.edge.fromBaseMesh", inputs);
106+
}
107+
12108
/**
13109
* Creates linear edge between two points
14110
* @param inputs Two points between which edge should be created

packages/dev/occt-worker/lib/api/occt/shapes/face.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,30 @@ export class OCCTFace {
88
) {
99
}
1010

11+
/**
12+
* Creates face from triangle definition
13+
* @param inputs Triangle
14+
* @returns OpenCascade face
15+
* @group from base
16+
* @shortname face from triangle
17+
* @drawable true
18+
*/
19+
fromBaseTriangle(inputs: Inputs.OCCT.TriangleBaseDto): Promise<Inputs.OCCT.TopoDSFacePointer> {
20+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.face.fromBaseTriangle", inputs);
21+
}
22+
23+
/**
24+
* Creates faces from mesh definition
25+
* @param inputs Mesh
26+
* @returns OpenCascade faces
27+
* @group from base
28+
* @shortname faces from mesh
29+
* @drawable true
30+
*/
31+
fromBaseMesh(inputs: Inputs.OCCT.MeshBaseDto): Promise<Inputs.OCCT.TopoDSFacePointer[]> {
32+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.face.fromBaseMesh", inputs);
33+
}
34+
1135
/**
1236
* Creates a faces from wires on face
1337
* @param inputs OpenCascade wires and guiding face

packages/dev/occt-worker/lib/api/occt/shapes/wire.ts

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,102 @@ export class OCCTWire {
88
) {
99
}
1010

11+
/**
12+
* Creates linear wire from base line format {start: Point3, end: Point3}
13+
* @param inputs base line
14+
* @returns OpenCascade wire
15+
* @group from base
16+
* @shortname wire from base line
17+
* @drawable true
18+
*/
19+
fromBaseLine(inputs: Inputs.OCCT.LineBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer> {
20+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBaseLine", inputs);
21+
}
22+
23+
/**
24+
* Creates linear wires from base lines format {start: Point3, end: Point3}[]
25+
* @param inputs base lines
26+
* @returns OpenCascade wires
27+
* @group from base
28+
* @shortname wires from base lines
29+
* @drawable true
30+
*/
31+
fromBaseLines(inputs: Inputs.OCCT.LineBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer[]> {
32+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBaseLines", inputs);
33+
}
34+
35+
/**
36+
* Creates linear wire from base segment format [Point3, Point3]
37+
* @param inputs base segment
38+
* @returns OpenCascade wire
39+
* @group from base
40+
* @shortname wire from base segment
41+
* @drawable true
42+
*/
43+
fromBaseSegment(inputs: Inputs.OCCT.SegmentBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer> {
44+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBaseSegment", inputs);
45+
}
46+
47+
/**
48+
* Creates linear wires from base segments format [Point3, Point3][]
49+
* @param inputs base segments
50+
* @returns OpenCascade wires
51+
* @group from base
52+
* @shortname wires from base segments
53+
* @drawable true
54+
*/
55+
fromBaseSegments(inputs: Inputs.OCCT.SegmentsBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer[]> {
56+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBaseSegments", inputs);
57+
}
58+
59+
/**
60+
* Creates wire from collection of points
61+
* @param inputs Points
62+
* @returns OpenCascade wire
63+
* @group from base
64+
* @shortname wire from points
65+
* @drawable true
66+
*/
67+
fromPoints(inputs: Inputs.OCCT.PointsDto): Promise<Inputs.OCCT.TopoDSWirePointer> {
68+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromPoints", inputs);
69+
}
70+
71+
/**
72+
* Creates wire from polyline definition
73+
* @param inputs Polyline
74+
* @returns OpenCascade wire
75+
* @group from base
76+
* @shortname wire from polyline
77+
* @drawable true
78+
*/
79+
fromBasePolyline(inputs: Inputs.OCCT.PolylineBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer> {
80+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBasePolyline", inputs);
81+
}
82+
83+
/**
84+
* Creates wire from triangle definition
85+
* @param inputs Triangle
86+
* @returns OpenCascade wire
87+
* @group from base
88+
* @shortname wire from triangle
89+
* @drawable true
90+
*/
91+
fromBaseTriangle(inputs: Inputs.OCCT.TriangleBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer> {
92+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBaseTriangle", inputs);
93+
}
94+
95+
/**
96+
* Creates wires from mesh definition
97+
* @param inputs Mesh
98+
* @returns OpenCascade wires
99+
* @group from base
100+
* @shortname wires from mesh
101+
* @drawable true
102+
*/
103+
fromBaseMesh(inputs: Inputs.OCCT.MeshBaseDto): Promise<Inputs.OCCT.TopoDSWirePointer[]> {
104+
return this.occWorkerManager.genericCallToWorkerPromise("shapes.wire.fromBaseMesh", inputs);
105+
}
106+
11107
/**
12108
* Creates OpenCascade Polygon wire
13109
* @param inputs Polygon points

0 commit comments

Comments
 (0)