Write a plugin for Dentra Viewer
Pistikprogramm lisab Viewerile funktsioone. Sina kirjutad selle, meie proovime, ja kui see meile meeldib, leiavad kõik selle paneelist «Pistikprogrammid».
Sissejuhatus
Pistikprogramme kirjutab kogukond: need on kõigile, kes tahavad Viewerit kohandada või sellele funktsioone lisada. Meie anname keskkonna ja selle dokumentatsiooni.
Pistikprogramm on väike veebileht (HTML, JavaScript ja CSS), mille Viewer avab oma raamis. Raamist räägib pistikprogramm Vieweriga komplekti DentraViewer kaudu, mis on juba laaditud.
Pistikprogramm töötab suletud raamis: see ei näe lehte, kontot ega Dentra andmeid. See saab teha ainult seda, mida oma õigustes küsib, ja hambaarst loeb need enne sisselülitamist läbi.
Mida saad ehitada
- Uued viisid vaate juhtimiseks: käeliigutused veebikaamera ees, mängupuldid, häälkäsklused.
- Mõõtmised ja märkmed: klõpsud mudelil, punktid, jooned ja sildid stseenis.
- Mudelite analüüs: võrgu kontrollid, arvutused, tulemused faili salvestatud.
- Ühendused teiste teenustega: väljast toodud mudelid, telefon kaugjuhtimispuldina.
Alustamine
- 1
Hakka arendajaks
Sul on vaja Dentra kontot. Küsi /app all menüüs «Developer» ligipääsu: meie kinnitame selle.
- 2
Alusta näitest
Laadi alla näidispistikprogramm: neli noolt, mis pööravad mudelit. Selles on kõik, mida vajad.
- 3
Kirjuta oma
Muuda faili dentra-plugin.json (id, name, permissions) ja lehte. Komplekt DentraViewer on juba olemas: seda ei pea importima.
- 4
Proovi seda Vieweris
Paki kaust zip-faili ja laadi see oma Developer alas üles nupuga «Laadi üles mustandina»: seda näed ainult sina ja see ei lähe ülevaatusele. «Proovi Vieweris» avab Vieweri, kus sinu pistikprogramm on sisse lülitatud, kahel näidismudelil või sinu enda mudelitel. Muutsid midagi? Laadi zip-fail sama versiooninumbriga uuesti üles ja proovi uuesti.
- 5
Esita see
Kui see töötab, vajuta mustandi kõrval «Esita ülevaatamiseks». Kui zip-failis on midagi valesti, ütleme sulle kohe, juba üleslaadimisel.
Zip-faili ülesehitus
my-plugin.zip
├── dentra-plugin.json
├── index.html ← "entry"
├── plugin.js
├── style.css
└── icon.png ← "icon" (optional)Zip-failis võivad olla ainult need failitüübid: html, js, mjs, css, json, wasm, png, jpg, jpeg, svg, webp, gif, ico, woff, woff2, txt, md, task, tflite, bin, data, onnx. Kõige rohkem 400 faili ja lahtipakituna 120 MB; zip-fail ise võib olla kuni 40 MB.
dentra-plugin.json
Fail asub zip-faili juurkaustas ja ütleb, mis pistikprogramm see on ja mida see vajab.
{
"id": "click-markers",
"name": "Markers",
"version": "1.0.0",
"description": "Places a numbered marker wherever you click on the model.",
"author": {
"name": "Your name",
"email": "[email protected]",
"website": "https://example.com"
},
"entry": "index.html",
"permissions": [
"pick",
"draw",
"toolbar"
],
"reasons": {
"pick": "To place a marker where you click.",
"draw": "To draw the marker on the model.",
"toolbar": "A button to clear the markers."
},
"platforms": [
"web",
"desktop"
],
"api": 1
}- id
- Tehniline nimi: 3-40 märki väiketähtedest, numbritest ja sidekriipsudest, alguses ja lõpus täht või number. See kuulub kontole, mis selle esimesena üles laadib, ka mustandina: keegi teine seda kasutada ei saa.
- name
- Nimi, mida hambaarst näeb, kuni 40 märki.
- version
- Kolm numbrit, näiteks 1.0.0. Uue versiooni jaoks suurenda seda: juba ülevaatamiseks esitatud number lükatakse tagasi, mustandi saad aga sama numbriga uuesti üles laadida.
- description
- Üks rida selle kohta, mida see teeb, kuni 300 märki.
- author
- Sinu nimi; e-post ja veebileht on vabatahtlikud.
- entry
- HTML-leht, mille Viewer raamis avab. Kui puudub, siis index.html.
- permissions
- Mida see Viewerilt küsib: vaata «Õigused».
- reasons
- Iga õiguse kohta (v.a view) üks rida, miks seda vaja on, kuni 160 märki. Hambaarst loeb selle enne sisselülitamist.
- platforms
- Kus see töötab: web, desktop või mõlemas. Kui puudub, siis mõlemas. Kui internet ja models on koos, ainult desktop.
- send
- Kohustuslik ainult siis, kui küsid internet ja models koos: to (domeen, mis skaneeringud saab, näiteks api.example.com, ilma https://-ta) ja why (miks).
- icon
- Vabatahtlik: .png, .svg või .webp zip-faili sees.
- api
- Komplekti versioon: täna 1.
Õigused
Need kirjutatakse väljale permissions. Iga õigus on üks asi. Enne pistikprogrammi sisselülitamist loeb hambaarst, mida see küsib, koos põhjustega, mille kirjutasid väljale reasons.
- view
- mudelit pöörata, liigutada ja suumida, vaade tagasi seada, teada, kuhu see vaatab.
- pick
- teada, kuhu hambaarst mudelil klõpsab: punkt, pinna suund ja milline mudel.
- draw
- joonistada stseeni punkte, jooni, silte ja pistikprogrammi toodud mudeleid (STL, PLY, OBJ).
- edit
- avatud mudeleid peita, värvida või läbipaistvaks teha.
- models
- lugeda avatud mudelite faile.
- files
- salvestada fail hambaarsti arvutisse.
- toolbar
- panna kuni 4 nuppu Vieweri ribale.
- camera
- saada kaamera pilte. Viewer avab kaamera ja küsib hambaarstilt luba; pistikprogramm saab ainult pildid.
- microphone
- saada mikrofoni heli. Viewer avab mikrofoni ja küsib hambaarstilt luba.
- internet
- ühenduda internetiga. Ilma selleta ei saa pistikprogramm ühegi teise saidiga ühendust võtta.
- clipboard
- kopeerida tekst lõikelauale.
Veeb ja arvutirakendus
Pistikprogramm võib töötada Vieweris veebis (web), arvutirakenduses (desktop) või mõlemas. Sa märgid selle väljale platforms, ja meie näitame seda nimekirjas ja pistikprogrammi lehel. Praegu on pistikprogrammide paneel Vieweris veebis; arvutirakenduses seda praegu veel pole.
Internet ja models koos tähendab, et pistikprogramm võib patsientide skaneeringuid välja saata. See on võimalik ainult arvutirakenduses, kus failid kuuluvad hambaarstile, ja ainult siis, kui märgid väljale send, kuhu need lähevad ja miks. Hambaarst loeb selle selgelt läbi enne sisselülitamist; veebis sellist pistikprogrammi sisse lülitada ei saa.
"platforms": ["web", "desktop"]
// internet + models: desktop only, and you must say where the scans go
"permissions": ["internet", "models"],
"send": { "to": "api.example.com", "why": "Analyses the scan and returns a report." }Komplekti viide
Sinu pistikprogrammi sisenemislehel (entry) on juba window.DentraViewer: Viewer laadib selle ise. await-iga kirjutatud funktsioonid tagastavad Promise'i; teised vastust ei oota. Iga funktsioon vajab näidatud õigust; ilma selleta Viewer ignoreerib seda või Promise ebaõnnestub veaga. DentraViewer on olemas ainult Vieweri sees: kui avad pistikprogrammi lehe eraldi oma arvutist, seda seal pole.
await DentraViewer.ready()ootab Viewerit; tagastab { language, permissions, api }: kasutaja keele, antud õigused ja komplekti versiooni.
DentraViewer.view.move({ rotate: { x, y, z }, pan: { x, y }, zoom })rotate radiaanides ümber ekraani telgede (x üles ja alla, y paremale ja vasakule, z pöörlemine paigal), pan murdosades mudeli suurusest, positiivne zoom toob lähemale (0.1 = 10%). Iga väärtus loeb ühe kutse kohta kõige rohkem 0.5.
Õigus: view
DentraViewer.view.reset()seab vaate tagasi, nagu see oli.
Õigus: view
await DentraViewer.view.get()kuhu kaamera praegu vaatab: position ja target, kumbki [x, y, z].
Õigus: view
DentraViewer.pick.onClick(({ point, normal, model }) => …)iga klõpsu korral mudelil (mitte lohistamisel): point ja normal kujul [x, y, z] ning model, klõpsatud mudeli id või null.
Õigus: pick
DentraViewer.scene.draw(key, { shape, … })joonistab kujundi: shape "points" (points, color, size), "line" (points, color, closed), "text" (point, text, color, size) või "mesh" (data, format stl/ply/obj, color, opacity). Koordinaadid on samad mis pick.onClick'il. Sama key asendab selle. Kuni 500 kujundit, mesh kuni 100 MB.
Õigus: draw
DentraViewer.scene.remove(key) / DentraViewer.scene.clear()eemaldab ühe kujundi või kõik pistikprogrammi kujundid.
Õigus: draw
await DentraViewer.models.list()avatud mudelid: id, name, format.
Õigus: models
await DentraViewer.models.read(id)mudeli fail: data on ArrayBuffer.
Õigus: models
DentraViewer.models.change(id, { visible, opacity, color })näitab või peidab (visible), muudab läbipaistvust (opacity, 0 kuni 1) või värvi (color, "#rrggbb"; null toob tagasi eelmise värvi) avatud mudelil.
Õigus: edit
DentraViewer.files.save(name, data, type)laadib faili arvutisse (string või ArrayBuffer, kuni 200 MB); type on faili tüüp, näiteks "text/csv".
Õigus: files
DentraViewer.toolbar.button(key, label) / toolbar.onPress((key) => …) / toolbar.remove(key)nupp Vieweri ribal (kuni 4, silt kuni 24 märki), mis juhtub, kui seda vajutatakse, ja toolbar.remove(key) selle eemaldamiseks.
Õigus: toolbar
DentraViewer.camera.start({ fps, width }) / camera.onFrame((image, t) => …)lülitab kaamera sisse: fps 1 kuni 30 (vaikimisi 15), width 160 kuni 1280 pikslit (vaikimisi 640). Pildid tulevad kui ImageBitmap; camera.onStatus ütleb, kas see on sees või miks mitte. camera.stop() lülitab selle välja.
Õigus: camera
DentraViewer.microphone.start() / microphone.onAudio((samples, sampleRate) => …)lülitab mikrofoni sisse; heli tuleb Float32Array tükkidena koos diskreetimissagedusega. microphone.onStatus ütleb, kas see on sees või miks mitte; microphone.stop() lülitab selle välja.
Õigus: microphone
await DentraViewer.storage.get() / DentraViewer.storage.set(value)üks JSON-väärtus, salvestatud selles seadmes, ainult sinu pistikprogrammile, kuni 100 KB: suuremat ei salvestata. get() tagastab null, kui midagi pole.
DentraViewer.clipboard.write(text)kopeerib teksti lõikelauale, kuni 2000 märki.
Õigus: clipboard
DentraViewer.panel.height(px)pistikprogrammi raami kõrgus pikslites, 80 kuni 560 (vaikimisi 180).
Täielik näide
// plugin.js: place a numbered marker wherever the dentist clicks
// Permissions in dentra-plugin.json: "pick", "draw", "toolbar" (the manifest above)
let n = 0;
DentraViewer.ready().then(({ language, permissions }) => {
// language: the dentist's language ("it", "en", "de"…), to translate your labels
DentraViewer.panel.height(120);
DentraViewer.toolbar.button("clear", "Clear");
});
DentraViewer.pick.onClick(({ point }) => {
n++;
DentraViewer.scene.draw("dot-" + n, { shape: "points", points: [point], color: "#e5484d", size: 0.6 });
DentraViewer.scene.draw("label-" + n, { shape: "text", point: [point[0], point[1] + 2, point[2]], text: "#" + n });
});
DentraViewer.toolbar.onPress((key) => {
if (key === "clear") { DentraViewer.scene.clear(); n = 0; }
});Ülevaatus ja avaldamine
- Esitad zip-faili oma Developer alas või vajutad juba proovitud mustandi juures «Esita ülevaatamiseks». Faile ja dentra-plugin.json kontrollime kohe, kui zip-faili üles laadid, ka mustandina, ning ütleme, mis puudu on (teated on inglise keeles). Kui see läheb ülevaatusele, saad kinnituse e-kirjaga.
- Proovime seda Vieweris enne avaldamist. Kui see loeb mudeleid ja kasutab internetti, läbib see ka privaatsuskontrolli.
- Kui kinnitame, avaldame selle: see ilmub avalikku pistikprogrammide nimekirja ja Vieweri paneelile. Kui ei, kirjutame sulle, mida muuta, ja sinu Developer alas on see versioon märgitud «Vajab muutmist» koos meie märkusega. Mõlemal juhul saad e-kirja.
- Uue versiooni jaoks, ka pärast tagasilükkamist, suurenda version numbrit ja esita see uuesti: juba esitatud numbrit uuesti kasutada ei saa. Mustandi laadid aga sama numbriga uuesti üles, kuni selle esitad. See läbib sama proovi, ja kuni me seda ei kinnita, jääb Viewerisse eelmine. Kui kinnitame, saavad kõik, kes pistikprogrammi juba sisse lülitasid, uue versiooni automaatselt. Kui see aga küsib õigusi, mida eelmine versioon ei küsinud, leiavad need, kes selle sisse lülitasid, selle peatatuna: Viewer näitab neile uusi õigusi koos sinu põhjendustega ja pistikprogramm töötab uuesti alles siis, kui nad nõustuvad.
Reeglid
- Pistikprogrammid on kasutajatele tasuta.
- Sul on vaja Dentra kontot Developer ligipääsuga, mille meie kinnitame. Seejärel proovime iga pistikprogrammi, ükshaaval.
- Pistikprogramm töötab oma suletud raamis: see ei näe lehte, kontosid ega Dentra andmeid.
- Iga õigus vajab üherealist põhjendust.
- Skaneeringud lähevad välja ainult arvutirakenduses, kui märgid send alla, kuhu ja miks.
- Esitades nõustud, et me proovime seda ja, kui see meile meeldib, avaldame selle Vieweris tasuta. Pistikprogramm jääb sinu omaks.
- Võime pistikprogrammi kataloogist tagasi võtta: turvaprobleemi korral teeme seda kohe, ootamata. Põhjuse saadame sulle e-kirjaga ja leiad selle oma Developer alast; kes selle sisse lülitas, leiab selle välja lülitatuna.
Hakka arendajaks
Sul on vaja Dentra kontot, arveldusandmetega nagu igal kontol. Oma kontolt küsid Developer ligipääsu; kui me selle kinnitame, esitad oma alas pistikprogramme ja näed, kus need on.
Developer ligipääs on algus: tulevikus käivad selle kaudu ka Dentra API-d.