├── LICENSE ├── Node_Based_Shader_Editor_for_Volume_Rendering_in_WebGL.pdf ├── README.md ├── css ├── external │ ├── litegraph.css │ └── w2ui-1.5.rc1.css └── style.css ├── datasets └── ct-torax │ ├── image-00000.dcm │ ├── image-00001.dcm │ ├── image-00002.dcm │ ├── image-00003.dcm │ ├── image-00004.dcm │ ├── image-00005.dcm │ ├── image-00006.dcm │ ├── image-00007.dcm │ ├── image-00008.dcm │ ├── image-00009.dcm │ ├── image-00010.dcm │ ├── image-00011.dcm │ ├── image-00012.dcm │ ├── image-00013.dcm │ ├── image-00014.dcm │ ├── image-00015.dcm │ ├── image-00016.dcm │ ├── image-00017.dcm │ ├── image-00018.dcm │ ├── image-00019.dcm │ ├── image-00020.dcm │ ├── image-00021.dcm │ ├── image-00022.dcm │ ├── image-00023.dcm │ ├── image-00024.dcm │ ├── image-00025.dcm │ ├── image-00026.dcm │ ├── image-00027.dcm │ ├── image-00028.dcm │ ├── image-00029.dcm │ ├── image-00030.dcm │ ├── image-00031.dcm │ ├── image-00032.dcm │ ├── image-00033.dcm │ ├── image-00034.dcm │ ├── image-00035.dcm │ ├── image-00036.dcm │ ├── image-00037.dcm │ ├── image-00038.dcm │ ├── image-00039.dcm │ ├── image-00040.dcm │ ├── image-00041.dcm │ ├── image-00042.dcm │ ├── image-00043.dcm │ ├── image-00044.dcm │ ├── image-00045.dcm │ ├── image-00046.dcm │ ├── image-00047.dcm │ ├── image-00048.dcm │ ├── image-00049.dcm │ ├── image-00050.dcm │ ├── image-00051.dcm │ ├── image-00052.dcm │ ├── image-00053.dcm │ ├── image-00054.dcm │ ├── image-00055.dcm │ ├── image-00056.dcm │ ├── image-00057.dcm │ ├── image-00058.dcm │ ├── image-00059.dcm │ ├── image-00060.dcm │ ├── image-00061.dcm │ ├── image-00062.dcm │ ├── image-00063.dcm │ ├── image-00064.dcm │ ├── image-00065.dcm │ ├── image-00066.dcm │ ├── image-00067.dcm │ ├── image-00068.dcm │ ├── image-00069.dcm │ ├── image-00070.dcm │ ├── image-00071.dcm │ ├── image-00072.dcm │ ├── image-00073.dcm │ ├── image-00074.dcm │ ├── image-00075.dcm │ ├── image-00076.dcm │ ├── image-00077.dcm │ ├── image-00078.dcm │ ├── image-00079.dcm │ ├── image-00080.dcm │ ├── image-00081.dcm │ ├── image-00082.dcm │ ├── image-00083.dcm │ ├── image-00084.dcm │ ├── image-00085.dcm │ ├── image-00086.dcm │ ├── image-00087.dcm │ ├── image-00088.dcm │ ├── image-00089.dcm │ ├── image-00090.dcm │ ├── image-00091.dcm │ ├── image-00092.dcm │ ├── image-00093.dcm │ ├── image-00094.dcm │ ├── image-00095.dcm │ ├── image-00096.dcm │ ├── image-00097.dcm │ ├── image-00098.dcm │ ├── image-00099.dcm │ ├── image-00100.dcm │ ├── image-00101.dcm │ ├── image-00102.dcm │ ├── image-00103.dcm │ ├── image-00104.dcm │ ├── image-00105.dcm │ ├── image-00106.dcm │ ├── image-00107.dcm │ ├── image-00108.dcm │ ├── image-00109.dcm │ ├── image-00110.dcm │ ├── image-00111.dcm │ ├── image-00112.dcm │ ├── image-00113.dcm │ ├── image-00114.dcm │ ├── image-00115.dcm │ ├── image-00116.dcm │ ├── image-00117.dcm │ ├── image-00118.dcm │ ├── image-00119.dcm │ ├── image-00120.dcm │ ├── image-00121.dcm │ ├── image-00122.dcm │ ├── image-00123.dcm │ ├── image-00124.dcm │ ├── image-00125.dcm │ ├── image-00126.dcm │ ├── image-00127.dcm │ ├── image-00128.dcm │ ├── image-00129.dcm │ ├── image-00130.dcm │ ├── image-00131.dcm │ ├── image-00132.dcm │ ├── image-00133.dcm │ ├── image-00134.dcm │ ├── image-00135.dcm │ ├── image-00136.dcm │ ├── image-00137.dcm │ ├── image-00138.dcm │ ├── image-00139.dcm │ ├── image-00140.dcm │ ├── image-00141.dcm │ ├── image-00142.dcm │ ├── image-00143.dcm │ ├── image-00144.dcm │ ├── image-00145.dcm │ ├── image-00146.dcm │ ├── image-00147.dcm │ ├── image-00148.dcm │ ├── image-00149.dcm │ ├── image-00150.dcm │ ├── image-00151.dcm │ ├── image-00152.dcm │ ├── image-00153.dcm │ ├── image-00154.dcm │ ├── image-00155.dcm │ ├── image-00156.dcm │ ├── image-00157.dcm │ ├── image-00158.dcm │ ├── image-00159.dcm │ ├── image-00160.dcm │ ├── image-00161.dcm │ ├── image-00162.dcm │ ├── image-00163.dcm │ ├── image-00164.dcm │ ├── image-00165.dcm │ ├── image-00166.dcm │ ├── image-00167.dcm │ ├── image-00168.dcm │ ├── image-00169.dcm │ ├── image-00170.dcm │ ├── image-00171.dcm │ ├── image-00172.dcm │ ├── image-00173.dcm │ ├── image-00174.dcm │ ├── image-00175.dcm │ ├── image-00176.dcm │ ├── image-00177.dcm │ ├── image-00178.dcm │ ├── image-00179.dcm │ ├── image-00180.dcm │ ├── image-00181.dcm │ ├── image-00182.dcm │ ├── image-00183.dcm │ ├── image-00184.dcm │ ├── image-00185.dcm │ ├── image-00186.dcm │ ├── image-00187.dcm │ ├── image-00188.dcm │ ├── image-00189.dcm │ ├── image-00190.dcm │ ├── image-00191.dcm │ ├── image-00192.dcm │ ├── image-00193.dcm │ └── image-00194.dcm ├── demos ├── demo_case1.html ├── demo_case1.js ├── demo_case2.html └── demo_case2.js ├── img ├── migrid.png └── readme_examples │ ├── example_clouds.PNG │ └── example_torax.PNG ├── index.html ├── js ├── external │ ├── daikon.js │ ├── gl-matrix.js │ ├── jquery-3.5.1.min.js │ ├── jscolor │ │ ├── arrow.gif │ │ ├── cross.gif │ │ ├── demo.html │ │ ├── hs.png │ │ ├── hv.png │ │ └── jscolor.js │ ├── litegl.js │ ├── litegraph.js │ ├── rendeer.js │ ├── volume-base.js │ ├── volume-loader.js │ └── w2ui-1.5.rc1.js ├── sceneTools.js ├── utils.js └── volumeNodes.js ├── main.js ├── readme.html └── shaders.glsl /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Víctor Ubieto 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Node_Based_Shader_Editor_for_Volume_Rendering_in_WebGL.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/Node_Based_Shader_Editor_for_Volume_Rendering_in_WebGL.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node-Based Shader Editor 2 | 3 | This is the result of my final degree project, which consist on a node-based shader editor implemented on web. The framework is based mainly on the usage of this libraries: 4 | 5 | * [Litegl.js](https://github.com/jagenjo/litegl.js) - It helps simplifying working with WebGL. 6 | * [Litegraph.js](https://github.com/jagenjo/litegraph.js) - A library in Javascript to create graphs in the browser. 7 | 8 | ## Functionalities 9 | 10 | This is the list of the most important functionalities of the application. 11 | 12 | * Manipulation of the Volume Render algorithm via nodes. 13 | * Load and visualization of Dicom datasets. In the case you don't have any but you want to try it, I uploaded an anonymized dataset in the repository. More info [here](https://www.dicomlibrary.com/). 14 | * Manipulation of the datasets by editing the transfer function. 15 | * Download of the Vertex Shader and Fragment Shader createds by the graph editor. 16 | * Try an online demo [here](https://victorubieto.github.io/graph_system/). 17 | 18 | ## List of Nodes 19 | 20 | This is the list of the nodes currently available. There are more comming soon, so stay tunned. 21 | 22 | * **Input:** Number, Color, Coordinates. 23 | * **Texture:** Gradient, Noise, Dicom, Transfer Function. 24 | * **Operator:** Math, MixRGB, ColorRamp, Translate, Scale, Rotate, Separate, Combine. 25 | * **Shader:** Volume. 26 | * **Output:** Material Output. 27 | 28 | ## Other libraries used 29 | 30 | * [W2ui.js](https://github.com/vitmalina/w2ui) 31 | * [JsColor.js](https://github.com/EastDesire/jscolor) 32 | * [Rendeer.js](https://github.com/jagenjo/rendeer.js) 33 | * [Volume-base.js](https://github.com/upf-gti/Volumetrics/blob/master/src/volume-base.js) 34 | * [Volume-loader.js](https://github.com/upf-gti/Volumetrics/blob/master/src/volume-loader.js) 35 | * [JQuery.js](https://github.com/jquery/jquery) 36 | * [Gl-Matrix.js](https://github.com/toji/gl-matrix) 37 | * [Daikon.js](https://github.com/rii-mango/Daikon) 38 | 39 | ## Examples 40 | 41 | Clouds Modeling 42 |  43 | 44 | Dicom Visualization 45 |  -------------------------------------------------------------------------------- /css/external/litegraph.css: -------------------------------------------------------------------------------- 1 | /* this CSS contains only the basic CSS needed to run the app and use it */ 2 | 3 | .lgraphcanvas { 4 | /*cursor: crosshair;*/ 5 | user-select: none; 6 | -moz-user-select: none; 7 | -webkit-user-select: none; 8 | } 9 | 10 | .litegraph.litecontextmenu { 11 | font-family: Tahoma, sans-serif; 12 | position: fixed; 13 | top: 100px; 14 | left: 100px; 15 | min-width: 100px; 16 | color: #aaf; 17 | padding: 0; 18 | box-shadow: 0 0 10px black !important; 19 | background-color: #2e2e2e !important; 20 | z-index: 10; 21 | } 22 | 23 | .litegraph.litecontextmenu.dark { 24 | background-color: #000 !important; 25 | } 26 | 27 | .litegraph.litecontextmenu .litemenu-title img { 28 | margin-top: 2px; 29 | margin-left: 2px; 30 | margin-right: 4px; 31 | } 32 | 33 | .litegraph.litecontextmenu .litemenu-entry { 34 | margin: 2px; 35 | padding: 2px; 36 | } 37 | 38 | .litegraph.litecontextmenu .litemenu-entry.submenu { 39 | background-color: #2e2e2e !important; 40 | } 41 | 42 | .litegraph.litecontextmenu.dark .litemenu-entry.submenu { 43 | background-color: #000 !important; 44 | } 45 | 46 | .litegraph .litemenubar ul { 47 | font-family: Tahoma, sans-serif; 48 | margin: 0; 49 | padding: 0; 50 | } 51 | 52 | .litegraph .litemenubar li { 53 | font-size: 14px; 54 | color: #999; 55 | display: inline-block; 56 | min-width: 50px; 57 | padding-left: 10px; 58 | padding-right: 10px; 59 | user-select: none; 60 | -moz-user-select: none; 61 | -webkit-user-select: none; 62 | cursor: pointer; 63 | } 64 | 65 | .litegraph .litemenubar li:hover { 66 | background-color: #777; 67 | color: #eee; 68 | } 69 | 70 | .litegraph .litegraph .litemenubar-panel { 71 | position: absolute; 72 | top: 5px; 73 | left: 5px; 74 | min-width: 100px; 75 | background-color: #444; 76 | box-shadow: 0 0 3px black; 77 | padding: 4px; 78 | border-bottom: 2px solid #aaf; 79 | z-index: 10; 80 | } 81 | 82 | .litegraph .litemenu-entry, 83 | .litemenu-title { 84 | font-size: 12px; 85 | color: #aaa; 86 | padding: 0 0 0 4px; 87 | margin: 2px; 88 | padding-left: 2px; 89 | -moz-user-select: none; 90 | -webkit-user-select: none; 91 | user-select: none; 92 | cursor: pointer; 93 | } 94 | 95 | .litegraph .litemenu-entry .icon { 96 | display: inline-block; 97 | width: 12px; 98 | height: 12px; 99 | margin: 2px; 100 | vertical-align: top; 101 | } 102 | 103 | .litegraph .litemenu-entry.checked .icon { 104 | background-color: #aaf; 105 | } 106 | 107 | .litegraph .litemenu-entry .more { 108 | float: right; 109 | padding-right: 5px; 110 | } 111 | 112 | .litegraph .litemenu-entry.disabled { 113 | opacity: 0.5; 114 | cursor: default; 115 | } 116 | 117 | .litegraph .litemenu-entry.separator { 118 | display: block; 119 | border-top: 1px solid #333; 120 | border-bottom: 1px solid #666; 121 | width: 100%; 122 | height: 0px; 123 | margin: 3px 0 2px 0; 124 | background-color: transparent; 125 | padding: 0 !important; 126 | cursor: default !important; 127 | } 128 | 129 | .litegraph .litemenu-entry.has_submenu { 130 | border-right: 2px solid cyan; 131 | } 132 | 133 | .litegraph .litemenu-title { 134 | color: #dde; 135 | background-color: #111; 136 | margin: 0; 137 | padding: 2px; 138 | cursor: default; 139 | } 140 | 141 | .litegraph .litemenu-entry:hover:not(.disabled):not(.separator) { 142 | background-color: #444 !important; 143 | color: #eee; 144 | transition: all 0.2s; 145 | } 146 | 147 | .litegraph .litemenu-entry .property_name { 148 | display: inline-block; 149 | text-align: left; 150 | min-width: 80px; 151 | min-height: 1.2em; 152 | } 153 | 154 | .litegraph .litemenu-entry .property_value { 155 | display: inline-block; 156 | background-color: rgba(0, 0, 0, 0.5); 157 | text-align: right; 158 | min-width: 80px; 159 | min-height: 1.2em; 160 | vertical-align: middle; 161 | padding-right: 10px; 162 | } 163 | 164 | .litegraph.litesearchbox { 165 | font-family: Tahoma, sans-serif; 166 | position: absolute; 167 | background-color: rgba(0, 0, 0, 0.5); 168 | padding-top: 4px; 169 | } 170 | 171 | .litegraph.litesearchbox input, 172 | .litegraph.litesearchbox select { 173 | margin-top: 3px; 174 | min-width: 60px; 175 | min-height: 1.5em; 176 | background-color: black; 177 | border: 0; 178 | color: white; 179 | padding-left: 10px; 180 | margin-right: 5px; 181 | } 182 | 183 | .litegraph.litesearchbox .name { 184 | display: inline-block; 185 | min-width: 60px; 186 | min-height: 1.5em; 187 | padding-left: 10px; 188 | } 189 | 190 | .litegraph.litesearchbox .helper { 191 | overflow: auto; 192 | max-height: 200px; 193 | margin-top: 2px; 194 | } 195 | 196 | .litegraph.lite-search-item { 197 | font-family: Tahoma, sans-serif; 198 | background-color: rgba(0, 0, 0, 0.5); 199 | color: white; 200 | padding-top: 2px; 201 | } 202 | 203 | .litegraph.lite-search-item:hover, 204 | .litegraph.lite-search-item.selected { 205 | cursor: pointer; 206 | background-color: white; 207 | color: black; 208 | } 209 | 210 | /* OLD */ 211 | 212 | .graphcontextmenu { 213 | padding: 4px; 214 | min-width: 100px; 215 | } 216 | 217 | .graphcontextmenu-title { 218 | color: #dde; 219 | background-color: #222; 220 | margin: 0; 221 | padding: 2px; 222 | cursor: default; 223 | } 224 | 225 | .graphmenu-entry { 226 | box-sizing: border-box; 227 | margin: 2px; 228 | padding-left: 20px; 229 | user-select: none; 230 | -moz-user-select: none; 231 | -webkit-user-select: none; 232 | transition: all linear 0.3s; 233 | } 234 | 235 | .graphmenu-entry.event, 236 | .litemenu-entry.event { 237 | border-left: 8px solid orange; 238 | padding-left: 12px; 239 | } 240 | 241 | .graphmenu-entry.disabled { 242 | opacity: 0.3; 243 | } 244 | 245 | .graphmenu-entry.submenu { 246 | border-right: 2px solid #eee; 247 | } 248 | 249 | .graphmenu-entry:hover { 250 | background-color: #555; 251 | } 252 | 253 | .graphmenu-entry.separator { 254 | background-color: #111; 255 | border-bottom: 1px solid #666; 256 | height: 1px; 257 | width: calc(100% - 20px); 258 | -moz-width: calc(100% - 20px); 259 | -webkit-width: calc(100% - 20px); 260 | } 261 | 262 | .graphmenu-entry .property_name { 263 | display: inline-block; 264 | text-align: left; 265 | min-width: 80px; 266 | min-height: 1.2em; 267 | } 268 | 269 | .graphmenu-entry .property_value, 270 | .litemenu-entry .property_value { 271 | display: inline-block; 272 | background-color: rgba(0, 0, 0, 0.5); 273 | text-align: right; 274 | min-width: 80px; 275 | min-height: 1.2em; 276 | vertical-align: middle; 277 | padding-right: 10px; 278 | } 279 | 280 | .graphdialog { 281 | position: absolute; 282 | top: 10px; 283 | left: 10px; 284 | min-height: 2em; 285 | background-color: #333; 286 | font-size: 1.2em; 287 | box-shadow: 0 0 10px black !important; 288 | z-index: 10; 289 | } 290 | 291 | .graphdialog.rounded { 292 | border-radius: 12px; 293 | padding-right: 2px; 294 | } 295 | 296 | .graphdialog .name { 297 | display: inline-block; 298 | min-width: 60px; 299 | min-height: 1.5em; 300 | padding-left: 10px; 301 | } 302 | 303 | .graphdialog input, 304 | .graphdialog select { 305 | margin: 3px; 306 | min-width: 60px; 307 | min-height: 1.5em; 308 | background-color: black; 309 | border: 0; 310 | color: white; 311 | padding-left: 10px; 312 | outline: none; 313 | } 314 | 315 | .graphdialog button { 316 | margin-top: 3px; 317 | vertical-align: top; 318 | } 319 | 320 | .graphdialog button.rounded, 321 | .graphdialog input.rounded { 322 | border-radius: 0 12px 12px 0; 323 | } 324 | 325 | .graphdialog .helper { 326 | overflow: auto; 327 | max-height: 200px; 328 | } 329 | 330 | .graphdialog .help-item { 331 | padding-left: 10px; 332 | } 333 | 334 | .graphdialog .help-item:hover, 335 | .graphdialog .help-item.selected { 336 | cursor: pointer; 337 | background-color: white; 338 | color: black; 339 | } 340 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | /* Víctor Ubieto 2020 */ 2 | /* this CSS defines the style of the app interface */ 3 | 4 | * { padding: 0; margin: 0; font-family: Arial, Helvetica, sans-serif; overflow: hidden;} 5 | 6 | html, body { 7 | height: 100%; 8 | width: 100%; 9 | } 10 | 11 | #main { 12 | height: calc(100% - 25px); 13 | width: 100%; 14 | } 15 | 16 | #top-bar { 17 | height: 25px; 18 | width: 100%; 19 | padding: 6px; 20 | 21 | background: #1d1d1d; 22 | } 23 | 24 | #top-bar .text { 25 | color: #e4e4e4; 26 | padding-top: 3px; 27 | } 28 | 29 | #top-bar .button { 30 | width: 100px; 31 | height: 25px; 32 | border-radius: 2px; 33 | 34 | border: none; 35 | transition: 0.3s; 36 | 37 | color: #1d1d1d; 38 | background-color: #e4e4e4; 39 | } 40 | 41 | #top-bar .button:hover { 42 | color: #e4e4e4; 43 | background-color: #5c5a5a; 44 | } 45 | 46 | #graph-area { 47 | width: 50%; 48 | height: 100%; 49 | float: left; 50 | 51 | background-color: #464646; 52 | } 53 | 54 | #editor { 55 | width: 100%; 56 | height: 100%; 57 | } 58 | 59 | #view-area { 60 | width: 50%; 61 | height: 100%; 62 | float: right; 63 | 64 | background-color: #00ff9d; 65 | } 66 | 67 | pre { 68 | overflow-x: auto; 69 | white-space: pre-wrap; 70 | white-space: -moz-pre-wrap; 71 | white-space: -pre-wrap; 72 | white-space: -o-pre-wrap; 73 | word-wrap: break-word; 74 | } 75 | 76 | 77 | /* SLIDER */ 78 | 79 | .slidecontainer { 80 | width: 63%; 81 | } 82 | 83 | .slider { 84 | -webkit-appearance: none; 85 | width: 63%; 86 | height: 15px; 87 | background: #e4e4e4; 88 | outline: none; 89 | opacity: 0.7; 90 | -webkit-transition: .2s; 91 | transition: opacity .2s; 92 | border-color: #8d8d8d; 93 | border-style: groove; 94 | } 95 | 96 | .slider:hover { 97 | opacity: 1; 98 | } 99 | 100 | .slider::-webkit-slider-thumb { 101 | -webkit-appearance: none; 102 | appearance: none; 103 | width: 15px; 104 | height: 15px; 105 | background: #272727; 106 | cursor: pointer; 107 | } 108 | 109 | .slider::-moz-range-thumb { 110 | width: 15px; 111 | height: 15px; 112 | background: #272727; 113 | cursor: pointer; 114 | } 115 | 116 | 117 | /* PROGRESS BAR */ 118 | 119 | #myProgress { 120 | width: 75%; 121 | background-color: #ddd; 122 | margin-top: 10px; 123 | margin-left: 3px; 124 | } 125 | 126 | #myBar { 127 | width: 1%; 128 | height: 10px; 129 | background-color: rgb(255, 97, 35);; 130 | text-align: center; 131 | line-height: 10px; 132 | color: white; 133 | } 134 | 135 | 136 | /* DIALOG */ 137 | 138 | .dialog { 139 | position: absolute; 140 | top: 50%; 141 | left: 50%; 142 | margin-top: -150px; 143 | margin-left: -200px; 144 | 145 | background-color: #222222; 146 | 147 | min-width: 300px; 148 | min-height: 200px; 149 | box-shadow: 0 0 4px #111; 150 | border-radius: 6px; 151 | } 152 | 153 | .dialog.settings { 154 | left: 10px; 155 | bottom: 20px; 156 | height: calc( 50% ); 157 | margin: auto; 158 | overflow: auto; 159 | } 160 | 161 | .dialog .close { 162 | float: right; 163 | margin: 4px; 164 | margin-right: 10px; 165 | cursor: pointer; 166 | font-size: 1.4em; 167 | } 168 | 169 | .dialog .close:hover { 170 | color: white; 171 | } 172 | 173 | .dialog .dialog-header { 174 | color: #AAA; 175 | border-bottom: 1px solid #161616; 176 | } 177 | 178 | .dialog .dialog-header { height: 40px; } 179 | .dialog .dialog-footer { height: 30px; padding: 5px; padding-bottom: 0px; border-top: 1px solid #1a1a1a;} 180 | 181 | .dialog .dialog-header .dialog-title { 182 | font: 20px "Arial"; 183 | margin: 4px; 184 | padding: 4px 10px; 185 | display: inline-block; 186 | } 187 | 188 | .dialog .dialog-content { 189 | height: calc(100% - 90px); 190 | width: calc(100% - 10px); 191 | padding: 4px; 192 | display: inline-block; 193 | color: #AAA; 194 | } 195 | 196 | .dialog .dialog-content h3 { 197 | margin: 10px; 198 | } 199 | 200 | .dialog .dialog-content .connections { 201 | flex-direction: row; 202 | } 203 | 204 | .dialog .dialog-content .connections .connections_side { 205 | width: calc(50% - 5px); 206 | min-height: 100px; 207 | background-color: black; 208 | display: flex; 209 | } 210 | 211 | .dialog .node_type { 212 | font-size: 15px; 213 | display: block; 214 | margin: 10px; 215 | } 216 | 217 | .dialog .node_desc { 218 | opacity: 0.5; 219 | font-size: 14px; 220 | display: block; 221 | margin: 10px; 222 | } 223 | 224 | .dialog .separator { 225 | display: block; 226 | width: calc( 100% - 4px ); 227 | height: 1px; 228 | border-top: 1px solid #000; 229 | border-bottom: 1px solid #333; 230 | margin: 10px 2px; 231 | padding: 0; 232 | } 233 | 234 | .dialog .property { 235 | margin-bottom: 2px; 236 | padding: 10px; 237 | padding-top: 5px; 238 | padding-bottom: 5px; 239 | } 240 | 241 | .dialog .property_name { 242 | 243 | color: #737373; 244 | display: inline-block; 245 | text-align: left; 246 | vertical-align: top; 247 | width: 120px; 248 | padding-left: 4px; 249 | overflow: hidden; 250 | } 251 | 252 | .dialog .property_value { 253 | display: inline-block; 254 | text-align: right; 255 | font: 15px "Arial"; 256 | color: #AAA; 257 | background-color: #1A1A1A; 258 | width: calc( 100% - 122px ); 259 | max-height: 300px; 260 | padding: 4px; 261 | padding-right: 12px; 262 | overflow: hidden; 263 | cursor: pointer; 264 | border-radius: 3px; 265 | } 266 | 267 | .dialog .property_value:hover { 268 | color: white; 269 | } 270 | 271 | .dialog .property.boolean .property_value { 272 | padding-right: 30px; 273 | } 274 | 275 | .dialog button { 276 | border-radius: 4px; 277 | border: none; 278 | padding: 4px 20px; 279 | margin-left: 0px; 280 | margin-bottom: 0px; 281 | background-color: #060606; 282 | color: #8e8e8e; 283 | } 284 | 285 | .dialog button:hover { 286 | background-color: #111; 287 | color: #FFF; 288 | } 289 | 290 | .dialog button.delete:hover { 291 | background-color: rgb(255, 97, 35); 292 | color: black; 293 | } 294 | -------------------------------------------------------------------------------- /datasets/ct-torax/image-00000.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00000.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00001.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00001.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00002.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00002.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00003.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00003.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00004.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00004.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00005.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00005.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00006.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00006.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00007.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00007.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00008.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00008.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00009.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00009.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00010.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00010.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00011.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00011.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00012.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00012.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00013.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00013.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00014.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00014.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00015.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00015.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00016.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00016.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00017.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00017.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00018.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00018.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00019.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00019.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00020.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00020.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00021.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00021.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00022.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00022.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00023.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00023.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00024.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00024.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00025.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00025.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00026.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00026.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00027.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00027.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00028.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00028.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00029.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00029.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00030.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00030.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00031.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00031.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00032.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00032.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00033.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00033.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00034.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00034.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00035.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00035.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00036.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00036.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00037.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00037.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00038.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00038.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00039.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00039.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00040.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00040.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00041.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00041.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00042.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00042.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00043.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00043.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00044.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00044.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00045.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00045.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00046.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00046.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00047.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00047.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00048.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00048.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00049.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00049.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00050.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00050.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00051.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00051.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00052.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00052.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00053.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00053.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00054.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00054.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00055.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00055.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00056.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00056.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00057.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00057.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00058.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00058.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00059.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00059.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00060.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00060.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00061.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00061.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00062.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00062.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00063.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00063.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00064.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00064.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00065.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00065.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00066.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00066.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00067.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00067.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00068.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00068.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00069.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00069.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00070.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00070.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00071.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00071.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00072.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00072.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00073.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00073.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00074.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00074.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00075.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00075.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00076.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00076.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00077.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00077.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00078.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00078.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00079.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00079.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00080.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00080.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00081.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00081.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00082.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00082.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00083.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00083.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00084.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00084.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00085.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00085.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00086.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00086.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00087.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00087.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00088.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00088.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00089.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00089.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00090.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00090.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00091.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00091.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00092.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00092.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00093.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00093.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00094.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00094.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00095.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00095.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00096.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00096.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00097.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00097.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00098.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00098.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00099.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00099.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00100.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00100.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00101.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00101.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00102.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00102.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00103.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00103.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00104.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00104.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00105.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00105.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00106.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00106.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00107.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00107.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00108.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00108.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00109.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00109.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00110.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00110.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00111.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00111.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00112.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00112.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00113.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00113.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00114.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00114.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00115.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00115.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00116.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00116.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00117.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00117.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00118.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00118.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00119.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00119.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00120.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00120.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00121.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00121.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00122.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00122.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00123.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00123.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00124.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00124.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00125.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00125.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00126.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00126.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00127.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00127.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00128.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00128.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00129.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00129.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00130.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00130.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00131.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00131.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00132.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00132.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00133.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00133.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00134.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00134.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00135.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00135.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00136.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00136.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00137.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00137.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00138.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00138.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00139.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00139.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00140.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00140.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00141.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00141.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00142.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00142.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00143.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00143.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00144.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00144.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00145.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00145.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00146.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00146.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00147.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00147.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00148.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00148.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00149.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00149.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00150.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00150.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00151.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00151.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00152.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00152.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00153.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00153.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00154.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00154.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00155.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00155.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00156.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00156.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00157.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00157.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00158.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00158.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00159.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00159.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00160.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00160.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00161.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00161.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00162.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00162.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00163.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00163.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00164.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00164.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00165.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00165.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00166.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00166.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00167.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00167.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00168.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00168.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00169.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00169.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00170.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00170.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00171.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00171.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00172.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00172.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00173.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00173.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00174.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00174.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00175.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00175.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00176.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00176.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00177.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00177.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00178.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00178.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00179.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00179.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00180.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00180.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00181.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00181.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00182.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00182.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00183.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00183.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00184.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00184.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00185.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00185.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00186.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00186.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00187.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00187.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00188.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00188.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00189.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00189.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00190.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00190.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00191.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00191.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00192.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00192.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00193.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00193.dcm -------------------------------------------------------------------------------- /datasets/ct-torax/image-00194.dcm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/datasets/ct-torax/image-00194.dcm -------------------------------------------------------------------------------- /demos/demo_case1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |Background Color
115 | 119 | 120 |Mesh Color (surface rendering)
122 | 126 | 127 |Quality:
129 | 130 |Brightness:
141 | 142 | 151 |' + Previous_VS + '' + 164 | '
' + Previous_FS + '', 166 | buttons: '', 167 | onOpen : function () { 168 | console.log('opened'); 169 | } 170 | }); 171 | }, false); 172 | 173 | cleanGraph.addEventListener("click", function(){ 174 | if (confirm("Do you want to clean the editor?")) { 175 | var length = graph._nodes_in_order.length; 176 | for (var i = 0; i < (length - 2); i++){ 177 | var node = graph._nodes_in_order[0]; 178 | node.graph.remove(node); 179 | } 180 | console.log("Existing graph deleted."); 181 | } else { 182 | console.log("Cleaning operation canceled."); 183 | } 184 | }, false); 185 | 186 | aboutButton.addEventListener("click", function(){ 187 | w2popup.load({ 188 | url: 'readme.html', 189 | showMax: true, 190 | width: 600, 191 | height: 500}); 192 | }, false); 193 | 194 | window.addEventListener("resize", resizeView.bind(this)); 195 | 196 | // Get mouse actions 197 | mouse = new Mouse(); 198 | } 199 | 200 | // This function reads the file that contains the shaders and store them 201 | function loadShaderAtlas() 202 | { 203 | GL.loadFileAtlas("../shaders.glsl", function(files){ 204 | shader_atlas = files; //parsed file 205 | }); 206 | } 207 | 208 | // Basic Template that inits the web with the essential nodes 209 | function graphTemplate() 210 | { 211 | var node_tf = LiteGraph.createNode("Texture/Transfer Function"); 212 | node_tf.pos = [50,50]; 213 | graph.add(node_tf); 214 | 215 | var node_dicom = LiteGraph.createNode("Texture/Dicom"); 216 | node_dicom.pos = [50,350]; 217 | graph.add(node_dicom); 218 | 219 | var node_math = LiteGraph.createNode("Operator/Math"); 220 | node_math.pos = [250,350]; 221 | node_math.properties.OP = "*"; 222 | graph.add(node_math); 223 | 224 | var node_rot = LiteGraph.createNode("Operator/Rotate"); 225 | node_rot.pos = [50,575]; 226 | node_rot.setY(-90.0); 227 | graph.add(node_rot); 228 | 229 | var node_tra = LiteGraph.createNode("Operator/Translate"); 230 | node_tra.pos = [300,575]; 231 | graph.add(node_tra); 232 | 233 | var node_grad = LiteGraph.createNode("Texture/Gradient"); 234 | node_grad.pos = [540,575]; 235 | graph.add(node_grad); 236 | 237 | var node_ramp = LiteGraph.createNode("Operator/ColorRamp"); 238 | node_ramp.pos = [500,400]; 239 | node_ramp.setMinValue(0.0); 240 | node_ramp.setMaxValue(1.0); 241 | graph.add(node_ramp); 242 | 243 | var node_volume = LiteGraph.createNode("Shader/Volume"); 244 | node_volume.pos = [350,150]; 245 | graph.add(node_volume); 246 | 247 | var node_out = LiteGraph.createNode("Output/Material Output"); 248 | node_out.pos = [600,200]; 249 | graph.add(node_out); 250 | 251 | //Connections 252 | node_tf.connect(0, node_volume, 0); 253 | node_math.connect(0, node_volume, 1); 254 | node_ramp.connect(0, node_math, 1); 255 | node_grad.connect(1, node_ramp, 0); 256 | node_tra.connect(0, node_grad, 0); 257 | node_rot.connect(0, node_tra, 0); 258 | node_volume.connect(0, node_out, 0); 259 | } 260 | 261 | function createScene() 262 | { 263 | //create camera 264 | camera = new RD.Camera({position: [0,10,10], aspect: gl.canvas.width / gl.canvas.height}); 265 | 266 | //create default mesh 267 | entity = new Entity({type: "cube", size: 2}); 268 | 269 | //adjust camera to mesh bounding 270 | entity.centerInView(camera); 271 | 272 | //Basic shader while the parser hasn't read the other shaders yet 273 | var fastVS = ` 274 | precision highp float; 275 | attribute vec3 a_vertex; 276 | attribute vec3 a_normal; 277 | attribute vec4 a_color; 278 | uniform mat4 u_mvp; 279 | uniform mat4 u_model; 280 | varying vec3 v_normal; 281 | varying vec4 v_color; 282 | void main() { 283 | v_normal = (u_model * vec4(a_normal,0.0)).xyz; 284 | gl_Position = u_mvp * vec4(a_vertex,1.0); 285 | } 286 | `; 287 | var fastFS = ` 288 | precision highp float; 289 | varying vec3 v_normal; 290 | uniform vec4 u_camera_position; 291 | uniform vec4 u_color; 292 | 293 | uniform vec3 u_vertex; 294 | void main() { 295 | vec4 final_color = u_color; 296 | gl_FragColor = vec4( final_color.xyz, 1.0 ); 297 | } 298 | `; 299 | 300 | //Basic shader 301 | shader = new Shader( fastVS, fastFS ); 302 | } 303 | 304 | // ---------------------------------------- RENDER ----------------------------------------------- // 305 | 306 | // Main Loop 307 | function onLoad() 308 | { 309 | window.graph.runStep(); 310 | 311 | time.last = time.now || 0; 312 | time.now = getTime(); 313 | time.dt = (time.now - time.last) * 0.001; 314 | update(time.dt); 315 | render(); 316 | 317 | requestAnimationFrame( onLoad.bind(this) ); 318 | } 319 | 320 | function render() 321 | { 322 | //clear 323 | gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 324 | gl.clearColor(options.color_bg[0], options.color_bg[1], options.color_bg[2], options.color_bg[3]); 325 | 326 | //generic gl flags and settings 327 | gl.disable(gl.DEPTH_TEST); 328 | gl.enable(gl.CULL_FACE); 329 | gl.cullFace(gl.BACK); 330 | 331 | var inv_model = mat4.create(); 332 | mat4.invert(inv_model, entity._model_matrix); 333 | 334 | //get local camera position (makes it easier in the shader) 335 | var aux_vec4 = vec4.fromValues(camera._position[0], camera._position[1], camera._position[2], 1); 336 | vec4.transformMat4(aux_vec4, aux_vec4, inv_model); 337 | var local_cam_pos = vec3.fromValues(aux_vec4[0]/aux_vec4[3], aux_vec4[1]/aux_vec4[3], aux_vec4[2]/aux_vec4[3]); 338 | 339 | if (shader != null) 340 | { 341 | //render mesh using the shader 342 | if(entity._mesh) 343 | shader.uniforms({ 344 | u_camera_position: camera._position, 345 | u_local_camera_position: local_cam_pos, 346 | u_model: entity._model_matrix, 347 | u_obj_size: entity._mesh.size/2.0 || entity._mesh.radius, //divided by 2 because it is centered in 0 348 | u_mvp: camera._viewprojection_matrix, 349 | u_color: options.color_mesh, 350 | u_quality: options.quality, 351 | u_brightness: options.brightness 352 | }).draw(entity._mesh); 353 | } 354 | } 355 | 356 | function update(dt) 357 | { 358 | updateCamera(dt); 359 | } 360 | 361 | function updateCamera(dt) 362 | { 363 | if (mouse._button == 1 || mouse._button == 4) //left,center: orbit 364 | { 365 | if (mouse._drag_state) 366 | { 367 | var yaw = -mouse._delta_x * dt * 0.7; 368 | var pitch = -mouse._delta_y * dt * 0.7; 369 | orbitCamera(yaw, pitch); 370 | 371 | mouse._drag_state = false; 372 | } 373 | } 374 | if (mouse._button == 2) //right: pan 375 | { 376 | if (mouse._drag_state) 377 | { 378 | camera.moveLocal([-mouse._delta_x * dt * 0.3, mouse._delta_y * dt * 0.3, 0], camera._fov/45); 379 | mouse._drag_state = false; 380 | } 381 | } 382 | if (mouse._wheel_state) //wheel: zoom 383 | { 384 | zoomCamera(dt); 385 | mouse._wheel_state = false; 386 | } 387 | 388 | //update camera 389 | mat4.lookAt(camera._view_matrix, camera._position, camera._target, [0,1,0]); 390 | mat4.perspective(camera._projection_matrix, camera._fov * DEG2RAD, camera._aspect, 0.1, 1000); 391 | 392 | //update modelview and projection matrices 393 | mat4.multiply(entity._modelview_matrix, camera._view_matrix, entity._model_matrix); 394 | mat4.multiply(camera._viewprojection_matrix, camera._projection_matrix, camera._view_matrix); 395 | } 396 | 397 | function orbitCamera(yaw, pitch) 398 | { 399 | camera.orbit(yaw, camera._up); 400 | 401 | var front = vec3.create(); 402 | vec3.subtract(front, camera._target, camera._position) 403 | vec3.normalize(front, front); 404 | var up = vec3.clone(camera._up); 405 | vec3.normalize(up, up); 406 | var problem_angle = vec3.dot(front, up); 407 | if(!((problem_angle > 0.99 && pitch > 0) || (problem_angle < -0.99 && pitch < 0))) 408 | { 409 | var right = vec3.create(); 410 | camera.getLocalVector([1.0, 0, 0], right); 411 | camera.orbit(pitch, right); 412 | } 413 | } 414 | 415 | function zoomCamera(dt) 416 | { 417 | camera._fov += -mouse._wheel_value * dt; 418 | camera._fov = Math.max(0.0, camera._fov); 419 | } -------------------------------------------------------------------------------- /demos/demo_case2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
Background Color
115 | 119 | 120 |Mesh Color (surface rendering)
122 | 126 | 127 |Quality:
129 | 130 |Brightness:
141 | 142 | 151 |' + Previous_VS + '' + 164 | '
' + Previous_FS + '', 166 | buttons: '', 167 | onOpen : function () { 168 | console.log('opened'); 169 | } 170 | }); 171 | }, false); 172 | 173 | cleanGraph.addEventListener("click", function(){ 174 | if (confirm("Do you want to clean the editor?")) { 175 | var length = graph._nodes_in_order.length; 176 | for (var i = 0; i < (length - 2); i++){ 177 | var node = graph._nodes_in_order[0]; 178 | node.graph.remove(node); 179 | } 180 | console.log("Existing graph deleted."); 181 | } else { 182 | console.log("Cleaning operation canceled."); 183 | } 184 | }, false); 185 | 186 | aboutButton.addEventListener("click", function(){ 187 | w2popup.load({ 188 | url: 'readme.html', 189 | showMax: true, 190 | width: 600, 191 | height: 500}); 192 | }, false); 193 | 194 | window.addEventListener("resize", resizeView.bind(this)); 195 | 196 | // Get mouse actions 197 | mouse = new Mouse(); 198 | } 199 | 200 | // This function reads the file that contains the shaders and store them 201 | function loadShaderAtlas() 202 | { 203 | GL.loadFileAtlas("../shaders.glsl", function(files){ 204 | shader_atlas = files; //parsed file 205 | }); 206 | } 207 | 208 | // Basic Template that inits the web with the essential nodes 209 | function graphTemplate() 210 | { 211 | var node_color = LiteGraph.createNode("Input/Color"); 212 | node_color.pos = [350,75]; 213 | node_color.setValue([1.0,1.0,1.0]); 214 | graph.add(node_color); 215 | 216 | var node_math = LiteGraph.createNode("Operator/Math"); 217 | node_math.pos = [150,75]; 218 | node_math.properties.OP = "*"; 219 | graph.add(node_math); 220 | 221 | var node_tra1 = LiteGraph.createNode("Operator/Translate"); 222 | node_tra1.pos = [50,530]; 223 | graph.add(node_tra1); 224 | 225 | var node_noise = LiteGraph.createNode("Texture/Noise"); 226 | node_noise.pos = [50,350]; 227 | node_noise.setScale(2.0); 228 | node_noise.setDetail(3.0); 229 | graph.add(node_noise); 230 | 231 | var node_ramp = LiteGraph.createNode("Operator/ColorRamp"); 232 | node_ramp.pos = [50,200]; 233 | graph.add(node_ramp); 234 | 235 | var node_rot = LiteGraph.createNode("Operator/Rotate"); 236 | node_rot.pos = [550,575]; 237 | node_rot.setZ(-90.0); 238 | graph.add(node_rot); 239 | 240 | var node_tra2 = LiteGraph.createNode("Operator/Translate"); 241 | node_tra2.pos = [300,575]; 242 | node_tra2.setY(-0.5); 243 | graph.add(node_tra2); 244 | 245 | var node_grad = LiteGraph.createNode("Texture/Gradient"); 246 | node_grad.pos = [520,420]; 247 | graph.add(node_grad); 248 | 249 | var node_volume = LiteGraph.createNode("Shader/Volume"); 250 | node_volume.pos = [500,175]; 251 | graph.add(node_volume); 252 | 253 | var node_out = LiteGraph.createNode("Output/Material Output"); 254 | node_out.pos = [600,80]; 255 | graph.add(node_out); 256 | 257 | //Connections 258 | node_color.connect(0, node_volume, 0); 259 | node_tra1.connect(0, node_noise, 0); 260 | node_noise.connect(1, node_ramp, 0); 261 | node_ramp.connect(1, node_math, 0); 262 | node_tra2.connect(0, node_rot, 0); 263 | node_rot.connect(0, node_grad, 0); 264 | node_volume.connect(0, node_out, 0); 265 | } 266 | 267 | function createScene() 268 | { 269 | //create camera 270 | camera = new RD.Camera({position: [0,10,10], aspect: gl.canvas.width / gl.canvas.height}); 271 | 272 | //create default mesh 273 | entity = new Entity({type: "cube", size: 2}); 274 | 275 | //adjust camera to mesh bounding 276 | entity.centerInView(camera); 277 | 278 | //Basic shader while the parser hasn't read the other shaders yet 279 | var fastVS = ` 280 | precision highp float; 281 | attribute vec3 a_vertex; 282 | attribute vec3 a_normal; 283 | attribute vec4 a_color; 284 | uniform mat4 u_mvp; 285 | uniform mat4 u_model; 286 | varying vec3 v_normal; 287 | varying vec4 v_color; 288 | void main() { 289 | v_normal = (u_model * vec4(a_normal,0.0)).xyz; 290 | gl_Position = u_mvp * vec4(a_vertex,1.0); 291 | } 292 | `; 293 | var fastFS = ` 294 | precision highp float; 295 | varying vec3 v_normal; 296 | uniform vec4 u_camera_position; 297 | uniform vec4 u_color; 298 | 299 | uniform vec3 u_vertex; 300 | void main() { 301 | vec4 final_color = u_color; 302 | gl_FragColor = vec4( final_color.xyz, 1.0 ); 303 | } 304 | `; 305 | 306 | //Basic shader 307 | shader = new Shader( fastVS, fastFS ); 308 | } 309 | 310 | // ---------------------------------------- RENDER ----------------------------------------------- // 311 | 312 | // Main Loop 313 | function onLoad() 314 | { 315 | window.graph.runStep(); 316 | 317 | time.last = time.now || 0; 318 | time.now = getTime(); 319 | time.dt = (time.now - time.last) * 0.001; 320 | update(time.dt); 321 | render(); 322 | 323 | requestAnimationFrame( onLoad.bind(this) ); 324 | } 325 | 326 | function render() 327 | { 328 | //clear 329 | gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 330 | gl.clearColor(options.color_bg[0], options.color_bg[1], options.color_bg[2], options.color_bg[3]); 331 | 332 | //generic gl flags and settings 333 | gl.disable(gl.DEPTH_TEST); 334 | gl.enable(gl.CULL_FACE); 335 | gl.cullFace(gl.BACK); 336 | 337 | var inv_model = mat4.create(); 338 | mat4.invert(inv_model, entity._model_matrix); 339 | 340 | //get local camera position (makes it easier in the shader) 341 | var aux_vec4 = vec4.fromValues(camera._position[0], camera._position[1], camera._position[2], 1); 342 | vec4.transformMat4(aux_vec4, aux_vec4, inv_model); 343 | var local_cam_pos = vec3.fromValues(aux_vec4[0]/aux_vec4[3], aux_vec4[1]/aux_vec4[3], aux_vec4[2]/aux_vec4[3]); 344 | 345 | if (shader != null) 346 | { 347 | //render mesh using the shader 348 | if(entity._mesh) 349 | shader.uniforms({ 350 | u_camera_position: camera._position, 351 | u_local_camera_position: local_cam_pos, 352 | u_model: entity._model_matrix, 353 | u_obj_size: entity._mesh.size/2.0 || entity._mesh.radius, //divided by 2 because it is centered in 0 354 | u_mvp: camera._viewprojection_matrix, 355 | u_color: options.color_mesh, 356 | u_quality: options.quality, 357 | u_brightness: options.brightness 358 | }).draw(entity._mesh); 359 | } 360 | } 361 | 362 | function update(dt) 363 | { 364 | updateCamera(dt); 365 | } 366 | 367 | function updateCamera(dt) 368 | { 369 | if (mouse._button == 1 || mouse._button == 4) //left,center: orbit 370 | { 371 | if (mouse._drag_state) 372 | { 373 | var yaw = -mouse._delta_x * dt * 0.7; 374 | var pitch = -mouse._delta_y * dt * 0.7; 375 | orbitCamera(yaw, pitch); 376 | 377 | mouse._drag_state = false; 378 | } 379 | } 380 | if (mouse._button == 2) //right: pan 381 | { 382 | if (mouse._drag_state) 383 | { 384 | camera.moveLocal([-mouse._delta_x * dt * 0.3, mouse._delta_y * dt * 0.3, 0], camera._fov/45); 385 | mouse._drag_state = false; 386 | } 387 | } 388 | if (mouse._wheel_state) //wheel: zoom 389 | { 390 | zoomCamera(dt); 391 | mouse._wheel_state = false; 392 | } 393 | 394 | //update camera 395 | mat4.lookAt(camera._view_matrix, camera._position, camera._target, [0,1,0]); 396 | mat4.perspective(camera._projection_matrix, camera._fov * DEG2RAD, camera._aspect, 0.1, 1000); 397 | 398 | //update modelview and projection matrices 399 | mat4.multiply(entity._modelview_matrix, camera._view_matrix, entity._model_matrix); 400 | mat4.multiply(camera._viewprojection_matrix, camera._projection_matrix, camera._view_matrix); 401 | } 402 | 403 | function orbitCamera(yaw, pitch) 404 | { 405 | camera.orbit(yaw, camera._up); 406 | 407 | var front = vec3.create(); 408 | vec3.subtract(front, camera._target, camera._position) 409 | vec3.normalize(front, front); 410 | var up = vec3.clone(camera._up); 411 | vec3.normalize(up, up); 412 | var problem_angle = vec3.dot(front, up); 413 | if(!((problem_angle > 0.99 && pitch > 0) || (problem_angle < -0.99 && pitch < 0))) 414 | { 415 | var right = vec3.create(); 416 | camera.getLocalVector([1.0, 0, 0], right); 417 | camera.orbit(pitch, right); 418 | } 419 | } 420 | 421 | function zoomCamera(dt) 422 | { 423 | camera._fov += -mouse._wheel_value * dt; 424 | camera._fov = Math.max(0.0, camera._fov); 425 | } -------------------------------------------------------------------------------- /img/migrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/img/migrid.png -------------------------------------------------------------------------------- /img/readme_examples/example_clouds.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/img/readme_examples/example_clouds.PNG -------------------------------------------------------------------------------- /img/readme_examples/example_torax.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/victorubieto/graph_system/373bb4a748ed8a9bb40d131b20814cea7cb5e482/img/readme_examples/example_torax.PNG -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
Background Color
115 | 119 | 120 |Mesh Color (surface rendering)
122 | 126 | 127 |Quality:
129 | 130 |Brightness:
141 | 142 | 151 |' + Previous_VS + '' + 164 | '
' + Previous_FS + '', 166 | buttons: '', 167 | onOpen : function () { 168 | console.log('opened'); 169 | } 170 | }); 171 | }, false); 172 | 173 | cleanGraph.addEventListener("click", function(){ 174 | if (confirm("Do you want to clean the editor?")) { 175 | var length = graph._nodes_in_order.length; 176 | for (var i = 0; i < (length - 2); i++){ 177 | var node = graph._nodes_in_order[0]; 178 | node.graph.remove(node); 179 | } 180 | console.log("Existing graph deleted."); 181 | } else { 182 | console.log("Cleaning operation canceled."); 183 | } 184 | }, false); 185 | 186 | aboutButton.addEventListener("click", function(){ 187 | w2popup.load({ 188 | url: 'readme.html', 189 | showMax: true, 190 | width: 600, 191 | height: 500}); 192 | }, false); 193 | 194 | window.addEventListener("resize", resizeView.bind(this)); 195 | 196 | // Get mouse actions 197 | mouse = new Mouse(); 198 | } 199 | 200 | // This function reads the file that contains the shaders and store them 201 | function loadShaderAtlas() 202 | { 203 | GL.loadFileAtlas("shaders.glsl", function(files){ 204 | shader_atlas = files; //parsed file 205 | }); 206 | } 207 | 208 | // Basic Template that inits the web with the essential nodes 209 | function graphTemplate() 210 | { 211 | var node_color = LiteGraph.createNode("Input/Color"); 212 | node_color.pos = [150,75]; 213 | node_color.setValue([1.0,1.0,1.0]); 214 | graph.add(node_color); 215 | 216 | var node_math = LiteGraph.createNode("Operator/Math"); 217 | node_math.pos = [150,250]; 218 | node_math.properties.OP = "*"; 219 | graph.add(node_math); 220 | 221 | var node_tra1 = LiteGraph.createNode("Operator/Translate"); 222 | node_tra1.pos = [50,575]; 223 | node_tra1.setY(-1.0); 224 | graph.add(node_tra1); 225 | 226 | var node_noise = LiteGraph.createNode("Texture/Noise"); 227 | node_noise.pos = [50,400]; 228 | node_noise.setScale(2.0); 229 | node_noise.setDetail(2.0); 230 | graph.add(node_noise); 231 | 232 | var node_rot = LiteGraph.createNode("Operator/Rotate"); 233 | node_rot.pos = [400,575]; 234 | node_rot.setZ(-90.0); 235 | graph.add(node_rot); 236 | 237 | var node_grad = LiteGraph.createNode("Texture/Gradient"); 238 | node_grad.pos = [400,450]; 239 | graph.add(node_grad); 240 | 241 | var node_volume = LiteGraph.createNode("Shader/Volume"); 242 | node_volume.pos = [350,175]; 243 | graph.add(node_volume); 244 | 245 | var node_out = LiteGraph.createNode("Output/Material Output"); 246 | node_out.pos = [600,250]; 247 | graph.add(node_out); 248 | 249 | //Connections 250 | node_color.connect(0, node_volume, 0); 251 | node_math.connect(0, node_volume, 1); 252 | node_tra1.connect(0, node_noise, 0); 253 | node_noise.connect(1, node_math, 0); 254 | node_rot.connect(0, node_grad, 0); 255 | node_grad.connect(1, node_math, 1); 256 | node_volume.connect(0, node_out, 0); 257 | } 258 | 259 | function createScene() 260 | { 261 | //create camera 262 | camera = new RD.Camera({position: [0,10,10], aspect: gl.canvas.width / gl.canvas.height}); 263 | 264 | //create default mesh 265 | entity = new Entity({type: "cube", size: 2}); 266 | 267 | //adjust camera to mesh bounding 268 | entity.centerInView(camera); 269 | 270 | //Basic shader while the parser hasn't read the other shaders yet 271 | var fastVS = ` 272 | precision highp float; 273 | attribute vec3 a_vertex; 274 | attribute vec3 a_normal; 275 | attribute vec4 a_color; 276 | uniform mat4 u_mvp; 277 | uniform mat4 u_model; 278 | varying vec3 v_normal; 279 | varying vec4 v_color; 280 | void main() { 281 | v_normal = (u_model * vec4(a_normal,0.0)).xyz; 282 | gl_Position = u_mvp * vec4(a_vertex,1.0); 283 | } 284 | `; 285 | var fastFS = ` 286 | precision highp float; 287 | varying vec3 v_normal; 288 | uniform vec4 u_camera_position; 289 | uniform vec4 u_color; 290 | 291 | uniform vec3 u_vertex; 292 | void main() { 293 | vec4 final_color = u_color; 294 | gl_FragColor = vec4( final_color.xyz, 1.0 ); 295 | } 296 | `; 297 | 298 | //Basic shader 299 | shader = new Shader( fastVS, fastFS ); 300 | } 301 | 302 | // ---------------------------------------- RENDER ----------------------------------------------- // 303 | 304 | // Main Loop 305 | function onLoad() 306 | { 307 | window.graph.runStep(); 308 | 309 | time.last = time.now || 0; 310 | time.now = getTime(); 311 | time.dt = (time.now - time.last) * 0.001; 312 | update(time.dt); 313 | render(); 314 | 315 | requestAnimationFrame( onLoad.bind(this) ); 316 | } 317 | 318 | function render() 319 | { 320 | //clear 321 | gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 322 | gl.clearColor(options.color_bg[0], options.color_bg[1], options.color_bg[2], options.color_bg[3]); 323 | 324 | //generic gl flags and settings 325 | gl.disable(gl.DEPTH_TEST); 326 | gl.enable(gl.CULL_FACE); 327 | gl.cullFace(gl.BACK); 328 | 329 | var inv_model = mat4.create(); 330 | mat4.invert(inv_model, entity._model_matrix); 331 | 332 | //get local camera position (makes it easier in the shader) 333 | var aux_vec4 = vec4.fromValues(camera._position[0], camera._position[1], camera._position[2], 1); 334 | vec4.transformMat4(aux_vec4, aux_vec4, inv_model); 335 | var local_cam_pos = vec3.fromValues(aux_vec4[0]/aux_vec4[3], aux_vec4[1]/aux_vec4[3], aux_vec4[2]/aux_vec4[3]); 336 | 337 | if (shader != null) 338 | { 339 | //render mesh using the shader 340 | if(entity._mesh) 341 | shader.uniforms({ 342 | u_camera_position: camera._position, 343 | u_local_camera_position: local_cam_pos, 344 | u_model: entity._model_matrix, 345 | u_obj_size: entity._mesh.size/2.0 || entity._mesh.radius, //divided by 2 because it is centered in 0 346 | u_mvp: camera._viewprojection_matrix, 347 | u_color: options.color_mesh, 348 | u_quality: options.quality, 349 | u_brightness: options.brightness 350 | }).draw(entity._mesh); 351 | } 352 | } 353 | 354 | function update(dt) 355 | { 356 | updateCamera(dt); 357 | } 358 | 359 | function updateCamera(dt) 360 | { 361 | if (mouse._button == 1 || mouse._button == 4) //left,center: orbit 362 | { 363 | if (mouse._drag_state) 364 | { 365 | var yaw = -mouse._delta_x * dt * 0.7; 366 | var pitch = -mouse._delta_y * dt * 0.7; 367 | orbitCamera(yaw, pitch); 368 | 369 | mouse._drag_state = false; 370 | } 371 | } 372 | if (mouse._button == 2) //right: pan 373 | { 374 | if (mouse._drag_state) 375 | { 376 | camera.moveLocal([-mouse._delta_x * dt * 0.3, mouse._delta_y * dt * 0.3, 0], camera._fov/45); 377 | mouse._drag_state = false; 378 | } 379 | } 380 | if (mouse._wheel_state) //wheel: zoom 381 | { 382 | zoomCamera(dt); 383 | mouse._wheel_state = false; 384 | } 385 | 386 | //update camera 387 | mat4.lookAt(camera._view_matrix, camera._position, camera._target, [0,1,0]); 388 | mat4.perspective(camera._projection_matrix, camera._fov * DEG2RAD, camera._aspect, 0.1, 1000); 389 | 390 | //update modelview and projection matrices 391 | mat4.multiply(entity._modelview_matrix, camera._view_matrix, entity._model_matrix); 392 | mat4.multiply(camera._viewprojection_matrix, camera._projection_matrix, camera._view_matrix); 393 | } 394 | 395 | function orbitCamera(yaw, pitch) 396 | { 397 | camera.orbit(yaw, camera._up); 398 | 399 | var front = vec3.create(); 400 | vec3.subtract(front, camera._target, camera._position) 401 | vec3.normalize(front, front); 402 | var up = vec3.clone(camera._up); 403 | vec3.normalize(up, up); 404 | var problem_angle = vec3.dot(front, up); 405 | if(!((problem_angle > 0.99 && pitch > 0) || (problem_angle < -0.99 && pitch < 0))) 406 | { 407 | var right = vec3.create(); 408 | camera.getLocalVector([1.0, 0, 0], right); 409 | camera.orbit(pitch, right); 410 | } 411 | } 412 | 413 | function zoomCamera(dt) 414 | { 415 | camera._fov += -mouse._wheel_value * dt; 416 | camera._fov = Math.max(0.0, camera._fov); 417 | } -------------------------------------------------------------------------------- /readme.html: -------------------------------------------------------------------------------- 1 |