Liigu sisu juurde

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. 1

    Hakka arendajaks

    Sul on vaja Dentra kontot. Küsi /app all menüüs «Developer» ligipääsu: meie kinnitame selle.

  2. 2

    Alusta näitest

    Laadi alla näidispistikprogramm: neli noolt, mis pööravad mudelit. Selles on kõik, mida vajad.

  3. 3

    Kirjuta oma

    Muuda faili dentra-plugin.json (id, name, permissions) ja lehte. Komplekt DentraViewer on juba olemas: seda ei pea importima.

  4. 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. 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

  1. 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.
  2. Proovime seda Vieweris enne avaldamist. Kui see loeb mudeleid ja kasutab internetti, läbib see ka privaatsuskontrolli.
  3. 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.
  4. 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.