init
commit
f99c568576
|
@ -0,0 +1,2 @@
|
|||
dist
|
||||
node_modules/
|
|
@ -0,0 +1,32 @@
|
|||
.PHONY: dev-deploy pretty build build-src build-png build-assets default-target clean
|
||||
|
||||
|
||||
|
||||
default-target: build
|
||||
|
||||
clean:
|
||||
rm -rf dist node_modules
|
||||
|
||||
dev-deploy: build
|
||||
rsync -rv dist/* shnbk.de:domains/3dcalc.shnbk.de/htdocs/
|
||||
|
||||
pretty:
|
||||
prettier -w src/**/*.html **/*.md
|
||||
|
||||
dist:
|
||||
mkdir dist
|
||||
|
||||
build: build-assets build-png build-src
|
||||
|
||||
build-src: dist
|
||||
minify -ar src/ -o dist
|
||||
|
||||
build-png: dist
|
||||
pngcrush -q -d dist src/*.png
|
||||
|
||||
build-assets: dist node_modules
|
||||
minify node_modules/bulma/css/bulma.min.css -o dist/bulma.min.css
|
||||
|
||||
node_modules: package.json
|
||||
npm i
|
||||
touch node_modules
|
|
@ -0,0 +1,29 @@
|
|||
# Filament 3D Coast Calculator
|
||||
|
||||
Hiermit werden Druckkosten beim C3re berechnet.
|
||||
|
||||
Die Berechnung Basiert auf 4 Festen werten und 2-3 Userwerten.
|
||||
|
||||
Der user gibt ein (Werte aus dem Slicer):
|
||||
|
||||
- Druckdauer
|
||||
- Ob er Pool-Filament nutzen will und wenn ja:
|
||||
- Wie viel in g
|
||||
|
||||
Mit diesen Angaben werden die Kosten berechnet.
|
||||
|
||||
Die Fixwerte sind in der index.html relativ weit oben angegeben.
|
||||
|
||||
Berechnet wird, wenn kein Filament genutzt wird
|
||||
|
||||
```
|
||||
Druckdauer * `pricePerPrintingHourInEuro`
|
||||
```
|
||||
|
||||
Mit Pool-Filament wird berechnet:
|
||||
|
||||
```
|
||||
Druckdauer * `pricePerPrintingHourInEuro` + `pricePerGrammPoolFilamentInEuro` * `poolFilamentInGramm`
|
||||
```
|
||||
|
||||
In beiden Fällen wird dann auf die nächsten vollen wert von `roundUpStep` aufgerundet und dann wird noch identifierAddition dazu addiert.
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"name": "filament_3d_coast_calculater",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "filament_3d_coast_calculater",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"bulma": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/bulma": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/bulma/-/bulma-1.0.2.tgz",
|
||||
"integrity": "sha512-D7GnDuF6seb6HkcnRMM9E739QpEY9chDzzeFrHMyEns/EXyDJuQ0XA0KxbBl/B2NTsKSoDomW61jFGFaAxhK5A=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"bulma": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/bulma/-/bulma-1.0.2.tgz",
|
||||
"integrity": "sha512-D7GnDuF6seb6HkcnRMM9E739QpEY9chDzzeFrHMyEns/EXyDJuQ0XA0KxbBl/B2NTsKSoDomW61jFGFaAxhK5A=="
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"name": "filament_3d_coast_calculater",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"bulma": "^1.0.2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,227 @@
|
|||
<html class="theme-light">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>3D-Druck Kostenrechner</title>
|
||||
<script>
|
||||
// THIS IS CONFIGURATION
|
||||
const pricePerPrintingHourInEuro = 0.3;
|
||||
const pricePerMaterialGrammInEuro = 0.025;
|
||||
const roundUpStep = 0.5;
|
||||
const identifierAddition = 0.03;
|
||||
</script>
|
||||
<link rel="stylesheet" href="./bulma.min.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="block" id="filamentcalc">
|
||||
<style>
|
||||
body {
|
||||
padding: 2em;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
.box {
|
||||
border: 0.125em solid #dbdbdb;
|
||||
}
|
||||
#logo {
|
||||
float: right;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
.selected {
|
||||
filter: brightness(90%);
|
||||
text-decoration: underline;
|
||||
}
|
||||
.box {
|
||||
margin: 2em auto 0;
|
||||
max-width: 50em;
|
||||
}
|
||||
.b button {
|
||||
float: right;
|
||||
margin-right: 1em;
|
||||
}
|
||||
input {
|
||||
margin-left: 1em;
|
||||
width: 5em;
|
||||
}
|
||||
h2 {
|
||||
margin-bottom: 0.5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
</style>
|
||||
<section class="hero">
|
||||
<div class="hero-body">
|
||||
<h1 class="title">3D-Druck Filamentkostenrechner</h1>
|
||||
<p id="logo" class="image is-128x128">
|
||||
<img src="logo.png" />
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<!--todo: frage und antwortbuttons in eine box packen-->
|
||||
<div class="columns box">
|
||||
<div class="column is-full b">
|
||||
Wo kommt dein Filament her?
|
||||
<button class="button" id="pool_filament">Pool Filament</button>
|
||||
|
||||
<button class="button" id="own_filament">
|
||||
Eigenes/Spenden- Filament
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns box step2">
|
||||
<div class="column">
|
||||
<label for="printtime_h">Druckzeit</label>
|
||||
</div>
|
||||
<div class="column">
|
||||
<input
|
||||
id="printtime_h"
|
||||
class="half"
|
||||
type="number"
|
||||
min="0"
|
||||
max="1000"
|
||||
step="1"
|
||||
placeholder="0"
|
||||
/>
|
||||
<label for="printtime_h">h</label>
|
||||
|
||||
<input
|
||||
id="printtime_m"
|
||||
class="half"
|
||||
type="number"
|
||||
min="0"
|
||||
max="5000"
|
||||
step="1"
|
||||
placeholder="0"
|
||||
/>
|
||||
<label for="printtime_m">m</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="columns box step2 material">
|
||||
<div class="column">
|
||||
<label for="material">Materialmenge</label>
|
||||
</div>
|
||||
<div class="column">
|
||||
<input
|
||||
id="material"
|
||||
type="number"
|
||||
min="0"
|
||||
max="1000"
|
||||
step="1"
|
||||
placeholder="0"
|
||||
/>
|
||||
<label for="material">g</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns box step2">
|
||||
<div class="column"><label for="cost_euro">Kosten in €</label></div>
|
||||
<div class="column">
|
||||
<input id="cost_euro" type="text" aria-disabled="true" disabled />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="columns box step2">
|
||||
<div class="column is-two">
|
||||
<h2>Wie entsteht der Preis?</h2>
|
||||
<ul>
|
||||
<li>
|
||||
Pro Druckstunde fallen <span id="pricePerHour">...</span> € Kosten
|
||||
für Strom und Verschleiß an.
|
||||
</li>
|
||||
<li>
|
||||
Pool-Filament wird mit <span id="pricePerMaterial">...</span> €
|
||||
pro kg berechnet.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Beide Kosten werden addiert und auf die nächsten
|
||||
<span id="roundUpLimit">...</span> € aufgerundet.<span
|
||||
id="idtext"
|
||||
>
|
||||
(Zusätzlich wird <span id="idval"></span> € addiert damit wir
|
||||
auf der Abrechnung den Verwendungszweck erkennen können.)</span
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const pool_filament = document.getElementById("pool_filament");
|
||||
const own_filament = document.getElementById("own_filament");
|
||||
const step1 = document.getElementsByClassName("step1");
|
||||
const step2 = document.getElementsByClassName("step2");
|
||||
|
||||
const printtime_h = document.getElementById("printtime_h");
|
||||
const printtime_m = document.getElementById("printtime_m");
|
||||
const material = document.getElementById("material");
|
||||
const cost_euro = document.getElementById("cost_euro");
|
||||
|
||||
let ownFilament;
|
||||
pool_filament.addEventListener("click", function () {
|
||||
for (let i = 0; i < step2.length; i++) {
|
||||
step2[i].style.display = "flex";
|
||||
}
|
||||
ownFilament = false;
|
||||
updateCost();
|
||||
});
|
||||
|
||||
own_filament.addEventListener("click", function () {
|
||||
for (let i = 0; i < step2.length; i++) {
|
||||
const el = step2[i];
|
||||
if (el.classList.contains("material")) {
|
||||
el.style.display = "none";
|
||||
} else {
|
||||
el.style.display = "flex";
|
||||
}
|
||||
}
|
||||
ownFilament = true;
|
||||
updateCost();
|
||||
});
|
||||
printtime_h.addEventListener("input", updateCost);
|
||||
printtime_m.addEventListener("input", updateCost);
|
||||
material.addEventListener("input", updateCost);
|
||||
function updateCost() {
|
||||
pricePerHour.innerHTML = pricePerPrintingHourInEuro.toFixed(2);
|
||||
pricePerMaterial.innerHTML = (
|
||||
pricePerMaterialGrammInEuro * 1000
|
||||
).toFixed(2);
|
||||
roundUpLimit.innerHTML = roundUpStep.toFixed(2);
|
||||
idval.innerHTML = identifierAddition.toFixed(2);
|
||||
if (identifierAddition === 0) {
|
||||
idtext.style.display = "none";
|
||||
} else {
|
||||
idtext.style.display = "inherit";
|
||||
}
|
||||
const printtime =
|
||||
parseInt("0" + printtime_h.value) * 60 +
|
||||
parseInt("0" + printtime_m.value);
|
||||
const materialcost =
|
||||
parseInt("0" + material.value) * pricePerMaterialGrammInEuro;
|
||||
let totalcost = (printtime * pricePerPrintingHourInEuro) / 60;
|
||||
if (!ownFilament) {
|
||||
totalcost += materialcost;
|
||||
}
|
||||
totalcost = Math.ceil(totalcost / roundUpStep) * roundUpStep;
|
||||
if (totalcost > 0) {
|
||||
totalcost += identifierAddition;
|
||||
}
|
||||
console.log(totalcost);
|
||||
cost_euro.value = totalcost.toFixed(2) + " €";
|
||||
|
||||
if (ownFilament) {
|
||||
own_filament.classList.add("selected");
|
||||
pool_filament.classList.remove("selected");
|
||||
} else {
|
||||
pool_filament.classList.add("selected");
|
||||
own_filament.classList.remove("selected");
|
||||
}
|
||||
}
|
||||
updateCost();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Loading…
Reference in New Issue