Skip to content

Commit 9b5542d

Browse files
authored
Merge pull request #147 from remcoder/tube-line-width
Tube's diameter set by an Extrusion Width parameter
2 parents 29f38fe + d2d5823 commit 9b5542d

3 files changed

Lines changed: 22 additions & 1 deletion

File tree

demo/index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@ <h1>GCode Preview</h1>
8484
id="line-width"
8585
/>
8686
</div>
87+
<div class="controls">
88+
<label>Tube width <output id="extrusion-width-value" ></output></label>&nbsp;<input
89+
type="range"
90+
min="0.05"
91+
max="3.0"
92+
value="0.6"
93+
step="0.05"
94+
id="extrusion-width"
95+
/>
96+
</div>
8797
<div class="controls">
8898
<label for="single-layer-mode">Single layer mode</label
8999
><input type="checkbox" id="single-layer-mode" />

demo/js/demo.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ const endLayer = document.getElementById('end-layer');
1616
const endLayerValue = document.getElementById('end-layer-value');
1717
const lineWidth = document.getElementById('line-width');
1818
const lineWidthValue = document.getElementById('line-width-value');
19+
const extrusionWidth = document.getElementById('extrusion-width');
20+
const extrusionWidthValue = document.getElementById('extrusion-width-value');
1921
const toggleSingleLayerMode = document.getElementById('single-layer-mode');
2022
const toggleExtrusion = document.getElementById('extrusion');
2123
const toggleRenderTubes = document.getElementById('render-tubes');
@@ -193,6 +195,12 @@ function initDemo() {
193195
preview.render();
194196
});
195197

198+
extrusionWidth.addEventListener('input', function () {
199+
preview.extrusionWidth = +extrusionWidth.value;
200+
extrusionWidthValue.innerText = extrusionWidth.value;
201+
preview.render();
202+
});
203+
196204
toggleSingleLayerMode.addEventListener('click', function () {
197205
changeSingleLayerMode(!!toggleSingleLayerMode.checked);
198206
preview.render();

src/webgl-preview.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export type GCodePreviewOptions = {
7272
travelColor?: ColorRepresentation;
7373
toolColors?: Record<number, ColorRepresentation>;
7474
disableGradient?: boolean;
75+
extrusionWidth?: number;
7576
};
7677

7778
const target = {
@@ -93,6 +94,7 @@ export class WebGLPreview {
9394
renderExtrusion = true;
9495
renderTravel = false;
9596
renderTubes = false;
97+
extrusionWidth = 0.6;
9698
lineWidth?: number;
9799
startLayer?: number;
98100
endLayer?: number;
@@ -140,6 +142,7 @@ export class WebGLPreview {
140142
this.renderTravel = opts.renderTravel ?? this.renderTravel;
141143
this.nonTravelmoves = opts.nonTravelMoves ?? this.nonTravelmoves;
142144
this.renderTubes = opts.renderTubes ?? this.renderTubes;
145+
this.extrusionWidth = opts.extrusionWidth ?? this.extrusionWidth;
143146

144147
if (opts.extrusionColor !== undefined) {
145148
this.extrusionColor = opts.extrusionColor;
@@ -626,7 +629,7 @@ export class WebGLPreview {
626629
const material = new MeshLambertMaterial({ color: color });
627630
this.disposables.push(material);
628631
const segments = Math.ceil(curve.getLength() * 2);
629-
const geometry = new TubeGeometry(curve, segments, 0.3, 4, false);
632+
const geometry = new TubeGeometry(curve, segments, this.extrusionWidth / 2, 4, false);
630633
this.disposables.push(geometry);
631634
const lineSegments = new Mesh(geometry, material);
632635

0 commit comments

Comments
 (0)