Nástroje používateľa

Nástoje správy stránok


dev:omega:dicom

Rozdiely

Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verziou danej stránky.

Odkaz na tento prehľad zmien

Both sides previous revision Previous revision
Next revision
Previous revision
dev:omega:dicom [2017/03/08 12:56]
Boris Duchaj [Show in Browser]
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 |}}
Riadok 12: Riadok 18:
 ==== 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} &#8226; {/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>​
  
  
  
dev/omega/dicom.1488974180.txt.gz · Posledná úprava: 2017/03/08 12:56 od Boris Duchaj