Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verziou danej stránky.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
dev:omega:dicom [2017/03/08 12:55] Boris Duchaj |
dev:omega:dicom [2017/03/08 16:18] (aktuálne) Boris Duchaj |
||
|---|---|---|---|
| Riadok 1: | Riadok 1: | ||
| ====== Dicom Viewer a Dicom TimeLine ====== | ====== Dicom Viewer a Dicom TimeLine ====== | ||
| - | V dennej operatíve dva nové prvky **Dicom viewer** a **Dicom - Timeline**. | + | //vetva v gite duch/merge8//**Tučné** |
| + | |||
| + | <color red>Dôležité pre fungovanie týchto prvkov je nutné mať spustený, nakonfigurovaný Orthanc server, nastavenú komunikáciu s PACS serverom a dostupný DCMTK toolkit.</color> | ||
| + | |||
| + | |||
| + | V dennej operatíve sú dva nové prvky **Dicom viewer** a **Dicom - Timeline**. | ||
| {{ :dev:omega:dicom:addele.png?direct&400 |}} | {{ :dev:omega:dicom:addele.png?direct&400 |}} | ||
| ===== Dicom viewer ===== | ===== Dicom viewer ===== | ||
| - | slúži na zobrazovanie jednotlivých **DICOM obrázkov** v okne tabu. Pomocou klasického ovládania môže byť zväčšovaný alebo zmenšovaný. DICOM obrázok sa následne proporcionálne zmenší/zväčší. | + | Primitívny náhľadový priehľadač snímok z RTG, CT a pod... |
| + | Slúži na zobrazovanie jednotlivých **DICOM obrázkov** v okne tabu. Pomocou klasického ovládania môže byť zväčšovaný alebo zmenšovaný. DICOM obrázok sa následne proporcionálne zmenší/zväčší. | ||
| V prípade zobrazenie obrázka sa zobrazí aj v pravom hornom rohu, jednoduché kontextové menu. | V prípade zobrazenie obrázka sa zobrazí aj v pravom hornom rohu, jednoduché kontextové menu. | ||
| {{ :dev:omega:dicom:contemenu.png?direct&400 |}} | {{ :dev:omega:dicom:contemenu.png?direct&400 |}} | ||
| ==== Show in Browser ==== | ==== Show in Browser ==== | ||
| - | zobrazí aktuálne zobrazenú DICOM inštanciu v plnej veľkosti v okne prehliadača. Vrátane základných //DICOM tagov// | + | zobrazí aktuálne zobrazenú DICOM inštanciu v plnej veľkosti v okne prehliadača, vo formáte HTML. Vrátane základných //DICOM tagov// |
| ==== Full Size/Normal Size ==== | ==== Full Size/Normal Size ==== | ||
| - | zobrazí DICOM inštanciu v dennej operatíve v plnej veľkosti a pomocou dragovania ju možné prezerať v okne prehliadača detialnejšie | + | zobrazí DICOM inštanciu v **Dennej operatíve** v plnej veľkosti a pomocou dragovania ju možné prezerať v okne prehliadača detialnejšie |
| ==== Windows ==== | ==== Windows ==== | ||
| - | zmení Window Center a Window Width pri CT štúdiach, zatiaľ len na Bone, Brain, Lung, Mediastinum, Abdomen. Poažiadavka sa posiela na server, kde sa spracuje... | + | zmení Window Center a Window Width pri CT štúdiach, zatiaľ len na Bone, Brain, Lung, Mediastinum, Abdomen. Požiadavka sa posiela na server, kde sa spracuje... |
| ==== Nastavenia ==== | ==== Nastavenia ==== | ||
| Riadok 22: | Riadok 28: | ||
| * Update na udalosti (napr. e_dicom) | * Update na udalosti (napr. e_dicom) | ||
| + | ===== Dicom TimeLine ===== | ||
| + | Vychádza zo základnej TimeLine-y a slúži na zobrazenie jednotlivých štúdii, zoradených chronologicky (dľa nastavenia) pre daného pacientka alebo pre daný výber štúdii. | ||
| + | |||
| + | Zakladné nastavenie v XML (Controls Layout) | ||
| + | |||
| + | <code xml> | ||
| + | <layout version="5" updated="2017-01-31"> | ||
| + | <contentTemplate type="DICOM_STUDY" insert="append" clear="yes"> | ||
| + | {include file="dailyop:dicom/study_content1"} | ||
| + | </contentTemplate> | ||
| + | <trigger group="rowSlotExtraContent"> | ||
| + | {$rowType}-ec:{$hasExtraHeaderContent} | ||
| + | </trigger> | ||
| + | <trigger group="rowBase"> | ||
| + | {$rowType}-d:{$$display} | ||
| + | </trigger> | ||
| + | <declare> | ||
| + | * extra_header_content_mc | ||
| + | Extra obsah, napr. z modulov. | ||
| + | |||
| + | * base1_mc | ||
| + | Základňa pre výpočet výšky elementu. | ||
| + | |||
| + | * line1_mc | ||
| + | Deliaca čiara. | ||
| + | |||
| + | |||
| + | * date_mc | ||
| + | Informácie o čase medického záznamu. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="date_mc"]/data[@id="base"] | ||
| + | Základné vizuálne nastavenie. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="date_mc"][@date="date"] | ||
| + | Bude vždy zobrazený dátum. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="date_mc"][@date="human"] | ||
| + | Dnes a včera bude ako text. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="date_mc"][@time="hide"] | ||
| + | Skrytie času. | ||
| + | |||
| + | |||
| + | * title_mc | ||
| + | Názov štúdie. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="date_mc"][@display="patient"] | ||
| + | S nazvom studie sa zobrazi aj meno pacienta. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="title_mc"]/data[@id="base"] | ||
| + | Základné vizuálne nastavenie. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="title_mc"]/data[@id="study"] | ||
| + | Základné vizuálne nastavenie pre nazov studie. | ||
| + | |||
| + | //row/contentFunction/control[@controlId="title_mc"]/data[@id="base"] | ||
| + | Základné vizuálne nastavenie pre meno pacienta. | ||
| + | </declare> | ||
| + | <row> | ||
| + | <trigger group="rowSlotExtraContent" id="dicom_study-ec:1" /> | ||
| + | <contentFunction> | ||
| + | <control controlId="extra_header_content_mc" /> | ||
| + | </contentFunction> | ||
| + | <control controlId="extra_header_content_mc" left="6" top="16" visible="yes" xscale="90" rightBase="__row.right" right="0" _border="yes" initFirst="yes" /> | ||
| + | <control controlId="base1_mc" topBase="extra_header_content_mc.bottom" top="0" /> | ||
| + | <control controlId="line1_mc" topBase="extra_header_content_mc.bottom" top="0" /> | ||
| + | </row> | ||
| + | <row> | ||
| + | <trigger group="rowSlotExtraContent" id="dicom_study-ec:0" /> | ||
| + | <control controlId="base1_mc" top="27" /> | ||
| + | <control controlId="line1_mc" top="27" /> | ||
| + | <control controlId="extra_header_content_mc" top="15" visible="no" /> | ||
| + | </row> | ||
| + | <row> | ||
| + | <trigger group="rowBase" id="dicom_study-d:header" /> | ||
| + | <trigger group="rowBase" id="dicom_study-d:full" /> | ||
| + | <trigger group="rowBase" id="dicom_study-d:teaser" /> | ||
| + | <contentFunction> | ||
| + | <control controlId="date_mc" date="human" runLater="yes" /> | ||
| + | <control controlId="title_mc" _display="patient" runLater="yes" /> | ||
| + | <control controlId="patient_mc" runLater="yes" /> | ||
| + | <control controlId="init_handlers" runLater="yes" /> | ||
| + | </contentFunction> | ||
| + | <control controlId="__row" height="28" elementHeight="28" rightBase="__panel.right" right="-19"> | ||
| + | <background> | ||
| + | <key color="#ffcc00" position="0" /> | ||
| + | <key color="#ffffcc" position="53" /> | ||
| + | </background> | ||
| + | </control> | ||
| + | <control controlId="__row" heightBase="base1_mc.top" height="1" elementHeightBase="base1_mc.top" elementHeight="0" rightBase="__panel.right" right="-19" /> | ||
| + | <control controlId="report_mc" visible="no" /> | ||
| + | <control controlId="line1_mc" visible="no" /> | ||
| + | <control controlId="title_mc" left="6" top="0" width="150" xscale="85" visible="yes" _border="1" /> | ||
| + | <control controlId="date_mc" leftBase="title_mc.right" left="2" top="0" rightBase="__row.right" right="-4" visible="yes" _border="1" /> | ||
| + | <control controlId="patient_mc" _leftBase="title_mc.right" left="6" top="14" width="100" xscale="85" visible="yes" border="0" /> | ||
| + | </row> | ||
| + | <row> | ||
| + | <trigger group="rowBase" id="dicom_study-d:teaser" /> | ||
| + | <contentFunction> | ||
| + | <control controlId="fill_content" type="teaser" /> | ||
| + | </contentFunction> | ||
| + | <control controlId="__row" heightBase="base1_mc.top" height="0" elementHeightUnset="yes" /> | ||
| + | <control controlId="line1_mc" left="10" rightBase="__row.right" right="-10" visible="no" /> | ||
| + | <control controlId="report_mc" left="8" topBase="base1_mc.top" width="200" top="1" bottomBase="__row.bottom" bottom="0" rightBase="__row.right" right="-1" visible="yes" /> | ||
| + | </row> | ||
| + | <row> | ||
| + | <trigger group="rowBase" id="dicom_study-d:full" /> | ||
| + | <contentFunction> | ||
| + | <control controlId="fill_content" type="full" /> | ||
| + | </contentFunction> | ||
| + | <control controlId="line1_mc" left="10" rightBase="__row.right" right="-10" visible="yes" /> | ||
| + | <control controlId="report_mc" left="8" topBase="base1_mc.top" top="1" width="200" rightBase="__row.right" right="-8" visible="yes" selectable="yes" _border="1" /> | ||
| + | <control controlId="__row" heightBase="report_mc.bottom" height="2" elementHeightUnset="yes" /> | ||
| + | </row> | ||
| + | </layout> | ||
| + | </code> | ||
| + | |||
| + | a pre zobrazenie jedotlivých sérií ppo rozkliknutí štúdie je nutné mať template v databáze omegy t.j. | ||
| + | <code php> | ||
| + | {include file="dailyop:dicom/study_content1"} | ||
| + | </code> | ||
| + | je nutné mať v tabuľke **st2_dailyop_library** nahratý riadok s daným templatom | ||
| + | <code php> | ||
| + | {*$smarty.now*} | ||
| + | {strip} | ||
| + | <b>{*$series_name|escape*}</b> | ||
| + | {foreach from=$series_data item=serie key=k} | ||
| + | |||
| + | {assign var="description" value=$serie.MainDicomTags.SeriesDescription} | ||
| + | {assign var="modality" value=$serie.MainDicomTags.Modality} | ||
| + | <a href="asfunction:_DAILY_OPERATIONS_FORM.runControl,c_24|series|{$serie.ID}"><b><u> | ||
| + | {if $description} | ||
| + | {$description} | ||
| + | {else} | ||
| + | {$modality} | ||
| + | {/if} | ||
| + | </b></u></i> ({$serie.Instances|@count})</a> | ||
| + | {if $k < $series_data|@count-1} • {/if} | ||
| + | {/foreach} | ||
| + | {/strip} | ||
| + | </code> | ||
| + | |||
| + | Takto tu bude vyzerať po rozkliknutí | ||
| + | {{ :dev:omega:dicom:timeline.png?direct&400 |}} | ||
| + | |||
| + | Vyššie uvedený kód ma na starosti správne zobrazenie jednotlivých serií vrámci štúdie. Po kliknutí na danú sériu sa táto načíta do Dicom Viewera, a pre tento účel je nutné vytvoriť na ploche tab-u **Action Control** a do //Actions// tohoto prvku vložiť následovný kód. Taktiež je nutné do Control ID vložiť názov, ktorý používame vo vyššie uvedenom template (napr. c_24) | ||
| + | |||
| + | <code xml> | ||
| + | <runFunction controlId="dicom_view" function="setType" pass="arguments"> | ||
| + | <param valueHelperDataId="_runControlArg0" /> | ||
| + | </runFunction> | ||
| + | <runFunction controlId="dicom_view" function="setUuid" pass="arguments"> | ||
| + | <param valueHelperDataId="_runControlArg1" /> | ||
| + | </runFunction> | ||
| + | <updateControl controlId="dicom_view" /> | ||
| + | </code> | ||
| + | |||
| + | Na to aby sa pri preklikavan9 jednotlivých štúdii premazal obsah Dicom Viewera je nutné vytvorenie Action Control, ktoré bude počúvať na udalosť z timeline-y (broadcast on select) a bude obsahovať nasledovaný kód v tab-e Actions | ||
| + | |||
| + | <code xml> | ||
| + | <runFunction controlId="dicom_view" function="clear" /> | ||
| + | </code> | ||
| + | |||
| + | ==== Tlačidlá s požiadavku na zobrazenie dľa parametrov ==== | ||
| + | * Na ploche vytvoríme nový Button Control. | ||
| + | * Nastavíme broadcast on click | ||
| + | * do Actions vložíme nasledovné | ||
| + | |||
| + | <code xml> | ||
| + | <runFunction controlId="sel_pacient" function="clearFnc" /> | ||
| + | <runFunction controlId="dicomTl1" function="setDicomSearchParameters" pass="arguments"> | ||
| + | <param type="object"> | ||
| + | <param key="type" value="date_word" /> | ||
| + | <param key="query" value="lastHour" /> | ||
| + | <param key="modality" value="CR" /> | ||
| + | </param> | ||
| + | </runFunction> | ||
| + | </code> | ||
| + | Prvý riadok na starosti to, že ak sme mali vybraného pacienta pomocou smartSearchu tento sa premaže. | ||
| + | Druhý riadok zavolá funkciu v DicomTimeline, do ktorej pošleme argument typu object | ||
| + | |||
| + | <code xml> | ||
| + | <param key="type" value="date_word" /> | ||
| + | </code> | ||
| + | |||
| + | ^ key ^ value ^ | ||
| + | | type | date_word //(hľadá podľa dátumu slova)// | | ||
| + | | type | patient //(hľadá podľa pacienta)// | | ||
| + | |||
| + | <code xml> | ||
| + | <param key="query" value="lastHour" /> | ||
| + | </code> | ||
| + | |||
| + | ^ key ^ value ^ | ||
| + | | query | lastHour //(hľadá dľa slovného výrazu, v PHP je to názov funkcie)// | | ||
| + | |||
| + | <code xml> | ||
| + | <param key="modality" value="CR" /> | ||
| + | </code> | ||
| + | ^ key ^ value ^ | ||
| + | | modality | CR //(napr. CR, CT, PT, XA a pod, modalita v DICOMe)// <color red>len jedna modalita</color> | | ||
| - | + | Uvedený príklad vyhľadá všetky klasické RTG snímky za poslednú hodinu | |
| + | <color red> Pozor!!!! Pre ďalšie je nutné dorobenie funkcie v PHP (nie je nutná kompilácia flashu)</color> | ||
| + | ==== Vyhľadávanie pomocu smartSearch-u ==== | ||
| + | Na plochu vložíme **Medic Patient Select Control**, nastavíme mu Data ID a to vložime aj do DicomTimeLine-y do Patient Data ID. | ||
| + | <color red> Nezabudnúť ošetriť zmazanie DicomViewera cez runControl tag a funckciu clear....</color> | ||
| + | ==== Vyhľadávanie podľa vloženého mena alebo rodného čísla ==== | ||
| + | Na plochu vložíme InputBox control a nastavíme Data ID napr. na inputbin_txt. Ďalej vytvoríme Button control, zapneme Broadcast on click a do tabu actions vložime následovný xml kód | ||
| + | <code xml> | ||
| + | <runFunction controlId="sel_pacient" function="clearFnc" /> | ||
| + | <runFunction controlId="dicomTl1" function="setDicomSearchParameters" pass="arguments"> | ||
| + | <param type="object"> | ||
| + | <param key="type" value="patient" /> | ||
| + | <param key="query" value="bin" /> | ||
| + | <param key="binNum" valueFormDataId="inputbin_txt" /> | ||
| + | </param> | ||
| + | </runFunction> | ||
| + | <updateControl controlId="dicomTl1" /> | ||
| + | </code> | ||