|
20 | 20 | /> |
21 | 21 | </g> |
22 | 22 |
|
| 23 | + <g |
| 24 | + id="sync-feedback-buffer-piston" |
| 25 | + fill="none" |
| 26 | + stroke-linecap="round" |
| 27 | + stroke-linejoin="round" |
| 28 | + style="stroke: var(--color-outline); fill: var(--color-outline)" |
| 29 | + > |
| 30 | + <rect |
| 31 | + x="3" |
| 32 | + y="0" |
| 33 | + width="30" |
| 34 | + height="40" |
| 35 | + rx="3" |
| 36 | + ry="3" |
| 37 | + fill="none" |
| 38 | + stroke-width="1.5" |
| 39 | + /> |
| 40 | + <path |
| 41 | + d="M-15 -4 L-6 0 L-15 4 Z" |
| 42 | + stroke-width="1" |
| 43 | + fill-opacity="0.6" |
| 44 | + /> |
| 45 | + <path |
| 46 | + d="M8 40 L 28 40" |
| 47 | + stroke-width="4" |
| 48 | + /> |
| 49 | + <text |
| 50 | + x="-22" |
| 51 | + y="4" |
| 52 | + font-size="11px" |
| 53 | + text-anchor="end" |
| 54 | + > |
| 55 | + {{ syncFeedbackPistonText }} |
| 56 | + </text> |
| 57 | + </g> |
| 58 | + |
| 59 | + <g |
| 60 | + id="sync-feedback-buffer-box" |
| 61 | + fill="none" |
| 62 | + stroke-linecap="round" |
| 63 | + stroke-linejoin="round" |
| 64 | + style="stroke: var(--color-outline)" |
| 65 | + > |
| 66 | + <rect |
| 67 | + x="0" |
| 68 | + y="0" |
| 69 | + width="36" |
| 70 | + height="45" |
| 71 | + rx="3" |
| 72 | + ry="3" |
| 73 | + class="fil-background" |
| 74 | + stroke-width="2" |
| 75 | + fill-opacity="0.6" |
| 76 | + /> |
| 77 | + <path |
| 78 | + d="M-3 10 0 10 M-3 22 0.5 22 M-3 34.5 0 34.5" |
| 79 | + stroke-width="2" |
| 80 | + stroke-opacity="0.6" |
| 81 | + /> |
| 82 | + <path |
| 83 | + d="M8 0 L 28 0" |
| 84 | + stroke-width="4" |
| 85 | + /> |
| 86 | + </g> |
| 87 | + |
23 | 88 | <g |
24 | 89 | id="sissors" |
25 | 90 | style="stroke: var(--color-outline); fill: none; stroke-linecap: round; stroke-linejoin: round;" |
|
93 | 158 | <g transform="matrix(23.2058 0 0 23.2058 329.7195 325.9517)"> |
94 | 159 | <path |
95 | 160 | style=" |
96 | | - stroke: rgb(0, 0, 0); |
97 | | - stroke-width: 0; |
98 | | - stroke-dasharray: none; |
99 | | - stroke-linecap: butt; |
100 | | - stroke-dashoffset: 0; |
101 | | - stroke-linejoin: miter; |
102 | | - stroke-miterlimit: 4; |
103 | | - is-custom-font: none; |
104 | | - font-file-url: none; |
105 | | - fill: rgb(254, 162, 54); |
106 | | - fill-rule: nonzero; |
107 | | - opacity: 1; |
108 | | - " |
| 161 | + stroke: rgb(0, 0, 0); |
| 162 | + stroke-width: 0; |
| 163 | + stroke-dasharray: none; |
| 164 | + stroke-linecap: butt; |
| 165 | + stroke-dashoffset: 0; |
| 166 | + stroke-linejoin: miter; |
| 167 | + stroke-miterlimit: 4; |
| 168 | + is-custom-font: none; |
| 169 | + font-file-url: none; |
| 170 | + fill: rgb(254, 162, 54); |
| 171 | + fill-rule: nonzero; |
| 172 | + opacity: 1; |
| 173 | + " |
109 | 174 | vector-effect="non-scaling-stroke" |
110 | 175 | transform=" translate(-15.4288, -16.4198)" |
111 | 176 | stroke-linecap="round" |
|
352 | 417 | {{ temperatureText }} |
353 | 418 | </text> |
354 | 419 |
|
355 | | - <g v-if="hasSyncFeedback && filamentPos >= FILAMENT_POS_END_BOWDEN"> |
356 | | - <transition name="fade"> |
357 | | - <g |
358 | | - v-if="isSensorTriggered('filament_tension') && isSensorTriggered('filament_compression')" |
359 | | - key="neutral" |
360 | | - > |
361 | | - <text |
362 | | - x="288" |
363 | | - y="240" |
364 | | - >Neutral</text> |
365 | | - <use |
366 | | - xlink:href="#sync-feedback" |
367 | | - transform="translate(286, 247.5) scale(1.0,-1.0) rotate(90)" |
368 | | - /> |
369 | | - </g> |
370 | | - <g |
371 | | - v-else-if="isSensorTriggered('filament_tension')" |
372 | | - key="tension" |
373 | | - > |
374 | | - <text |
375 | | - x="288" |
376 | | - y="240" |
377 | | - >Tension</text> |
378 | | - <use |
379 | | - xlink:href="#sync-feedback" |
380 | | - transform="translate(258, 199) scale(1.2)" |
381 | | - /> |
382 | | - <use |
383 | | - xlink:href="#sync-feedback" |
384 | | - transform="translate(258, 271) scale(1.2,-1.2)" |
385 | | - /> |
386 | | - </g> |
387 | | - <g |
388 | | - v-else-if="isSensorTriggered('filament_compression')" |
389 | | - key="compression" |
390 | | - > |
391 | | - <text |
392 | | - x="288" |
393 | | - y="240" |
394 | | - >Compression</text> |
395 | | - <use |
396 | | - xlink:href="#sync-feedback" |
397 | | - transform="translate(258, 235) scale(1.2)" |
398 | | - /> |
399 | | - <use |
400 | | - xlink:href="#sync-feedback" |
401 | | - transform="translate(258, 235) scale(1.2,-1.2)" |
402 | | - /> |
403 | | - </g> |
404 | | - </transition> |
| 420 | + <g v-if="hasSyncFeedback"> |
| 421 | + <use |
| 422 | + xlink:href="#sync-feedback-buffer-piston" |
| 423 | + :style="{ |
| 424 | + transform: `translate(232px, ${syncFeedbackPistonPos}px)`, |
| 425 | + transition: 'transform 250ms ease', |
| 426 | + }" |
| 427 | + /> |
| 428 | + <use |
| 429 | + xlink:href="#sync-feedback-buffer-box" |
| 430 | + transform="translate(232, 212)" |
| 431 | + /> |
| 432 | + <g v-if="syncFeedbackActive"> |
| 433 | + <transition name="fade"> |
| 434 | + <g |
| 435 | + v-if="isSensorTriggered('filament_tension') && isSensorTriggered('filament_compression')" |
| 436 | + key="neutral" |
| 437 | + > |
| 438 | + <text |
| 439 | + x="298" |
| 440 | + y="240" |
| 441 | + > |
| 442 | + Neutral |
| 443 | + </text> |
| 444 | + <use |
| 445 | + xlink:href="#sync-feedback" |
| 446 | + transform="translate(296, 247.5) scale(1.0,-1.0) rotate(90)" |
| 447 | + /> |
| 448 | + </g> |
| 449 | + <g |
| 450 | + v-else-if="isSensorTriggered('filament_tension')" |
| 451 | + key="tension" |
| 452 | + > |
| 453 | + <text |
| 454 | + x="298" |
| 455 | + y="240" |
| 456 | + > |
| 457 | + Tension |
| 458 | + </text> |
| 459 | + <use |
| 460 | + xlink:href="#sync-feedback" |
| 461 | + transform="translate(272, 199) scale(1.2)" |
| 462 | + /> |
| 463 | + <use |
| 464 | + xlink:href="#sync-feedback" |
| 465 | + transform="translate(272, 271) scale(1.2,-1.2)" |
| 466 | + /> |
| 467 | + </g> |
| 468 | + <g |
| 469 | + v-else-if="isSensorTriggered('filament_compression')" |
| 470 | + key="compression" |
| 471 | + > |
| 472 | + <text |
| 473 | + x="298" |
| 474 | + y="240" |
| 475 | + > |
| 476 | + Compression |
| 477 | + </text> |
| 478 | + <use |
| 479 | + xlink:href="#sync-feedback" |
| 480 | + transform="translate(272, 235) scale(1.2)" |
| 481 | + /> |
| 482 | + <use |
| 483 | + xlink:href="#sync-feedback" |
| 484 | + transform="translate(272, 235) scale(1.2,-1.2)" |
| 485 | + /> |
| 486 | + </g> |
| 487 | + </transition> |
| 488 | + </g> |
405 | 489 | </g> |
406 | 490 | <text |
407 | 491 | x="160" |
@@ -565,7 +649,9 @@ export default class MmuFilamentStatus extends Mixins(StateMixin, MmuMixin) { |
565 | 649 | } |
566 | 650 |
|
567 | 651 | get encoderPosText (): string { |
568 | | - if (this.encoderPos < 10000) return `${this.encoderPos} mm` |
| 652 | + if (this.encoderPos < 10000) { |
| 653 | + return `${this.encoderPos} mm` |
| 654 | + } |
569 | 655 | return `${this.encoderPos}` |
570 | 656 | } |
571 | 657 |
|
@@ -624,9 +710,37 @@ export default class MmuFilamentStatus extends Mixins(StateMixin, MmuMixin) { |
624 | 710 | } |
625 | 711 |
|
626 | 712 | get hasSyncFeedback (): boolean { |
627 | | - return ( |
628 | | - this.syncFeedbackEnabled && (this.hasSensor('filament_compression') || this.hasSensor('filament_tension')) |
629 | | - ) |
| 713 | + return this.hasFilamentCompressionSensor || this.hasFilamentTensionSensor || this.hasFilamentProportionalSensor |
| 714 | + } |
| 715 | +
|
| 716 | + get syncFeedbackActive (): boolean { |
| 717 | + return this.hasSyncFeedback && this.filamentPos >= this.FILAMENT_POS_END_BOWDEN |
| 718 | + } |
| 719 | +
|
| 720 | + get syncFeedbackPistonPos (): number { |
| 721 | + const bias = this.syncFeedbackBiasModelled |
| 722 | + const yPos = bias * 12 + 234 |
| 723 | + return yPos |
| 724 | + } |
| 725 | +
|
| 726 | + get syncFeedbackPistonText (): string { |
| 727 | + if (this.hasFilamentProportionalSensor) { |
| 728 | + const bias = this.syncFeedbackBiasModelled |
| 729 | + return bias.toFixed(2) |
| 730 | + } |
| 731 | + return '' |
| 732 | + } |
| 733 | +
|
| 734 | + get hasFilamentProportionalSensor () { |
| 735 | + return this.hasSensor('filament_proportional') |
| 736 | + } |
| 737 | +
|
| 738 | + get hasFilamentCompressionSensor () { |
| 739 | + return this.hasSensor('filament_compression') |
| 740 | + } |
| 741 | +
|
| 742 | + get hasFilamentTensionSensor () { |
| 743 | + return this.hasSensor('filament_tension') |
630 | 744 | } |
631 | 745 |
|
632 | 746 | get homedToEncoder (): boolean { |
|
0 commit comments