Add 2 files
Browse files- index.html +215 -19
- prompts.txt +3 -1
index.html
CHANGED
|
@@ -181,7 +181,7 @@
|
|
| 181 |
<label for="file-input" class="file-input-label">
|
| 182 |
<i class="fas fa-upload mr-2"></i> Importar Foto
|
| 183 |
</label>
|
| 184 |
-
<input type="file" id="file-input" class="file-input" accept="image/*">
|
| 185 |
</div>
|
| 186 |
|
| 187 |
<!-- Imagem será carregada aqui -->
|
|
@@ -235,6 +235,30 @@
|
|
| 235 |
</div>
|
| 236 |
</div>
|
| 237 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 238 |
<!-- Tabela de ângulos para vista anterior -->
|
| 239 |
<div id="anterior-angle-table" class="p-4 border-t border-gray-200 hidden">
|
| 240 |
<h3 class="text-sm font-medium text-gray-700 mb-2">Análise Angular (Vista Anterior)</h3>
|
|
@@ -332,6 +356,78 @@
|
|
| 332 |
</table>
|
| 333 |
</div>
|
| 334 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
<div class="p-4 border-t border-gray-200 flex justify-between">
|
| 336 |
<button id="resetBtn" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition">
|
| 337 |
<i class="fas fa-undo mr-2"></i> Limpar Marcadores
|
|
@@ -424,7 +520,7 @@
|
|
| 424 |
<input type="radio" name="spine" id="spine-kyphosis" class="hidden custom-radio">
|
| 425 |
<label for="spine-kyphosis" class="px-3 py-1 border border-gray-300 rounded-full text-sm cursor-pointer hover:bg-blue-50">Cifose</label>
|
| 426 |
|
| 427 |
-
<input type="radio" name="spine" id="spine-
|
| 428 |
<label for="spine-lordosis" class="px-3 py-1 border border-gray-300 rounded-full text-sm cursor-pointer hover:bg-blue-50">Lordose</label>
|
| 429 |
|
| 430 |
<input type="radio" name="spine" id="spine-scoliosis" class="hidden custom-radio">
|
|
@@ -480,8 +576,12 @@
|
|
| 480 |
const viewTabs = document.querySelectorAll('.view-tab');
|
| 481 |
const anteriorMarkerSelector = document.getElementById('anterior-marker-selector');
|
| 482 |
const posteriorMarkerSelector = document.getElementById('posterior-marker-selector');
|
|
|
|
|
|
|
| 483 |
const anteriorAngleTable = document.getElementById('anterior-angle-table');
|
| 484 |
const posteriorAngleTable = document.getElementById('posterior-angle-table');
|
|
|
|
|
|
|
| 485 |
const markerOptions = document.querySelectorAll('.marker-option');
|
| 486 |
|
| 487 |
let markers = [];
|
|
@@ -509,21 +609,27 @@
|
|
| 509 |
currentView = this.dataset.view;
|
| 510 |
|
| 511 |
// Mostrar/ocultar seletor de marcadores específicos para cada vista
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 512 |
if (currentView === 'anterior') {
|
| 513 |
anteriorMarkerSelector.classList.remove('hidden');
|
| 514 |
anteriorAngleTable.classList.remove('hidden');
|
| 515 |
-
posteriorMarkerSelector.classList.add('hidden');
|
| 516 |
-
posteriorAngleTable.classList.add('hidden');
|
| 517 |
} else if (currentView === 'posterior') {
|
| 518 |
-
anteriorMarkerSelector.classList.add('hidden');
|
| 519 |
-
anteriorAngleTable.classList.add('hidden');
|
| 520 |
posteriorMarkerSelector.classList.remove('hidden');
|
| 521 |
posteriorAngleTable.classList.remove('hidden');
|
| 522 |
-
} else {
|
| 523 |
-
|
| 524 |
-
|
| 525 |
-
|
| 526 |
-
|
|
|
|
| 527 |
}
|
| 528 |
|
| 529 |
// Atualizar imagem exibida
|
|
@@ -558,6 +664,10 @@
|
|
| 558 |
updateAnteriorAngleTable();
|
| 559 |
} else if (currentView === 'posterior') {
|
| 560 |
updatePosteriorAngleTable();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 561 |
}
|
| 562 |
} else {
|
| 563 |
postureImage.classList.add('hidden');
|
|
@@ -591,11 +701,17 @@
|
|
| 591 |
} else if (currentView === 'posterior') {
|
| 592 |
posteriorMarkerSelector.classList.remove('hidden');
|
| 593 |
posteriorAngleTable.classList.remove('hidden');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 594 |
}
|
| 595 |
};
|
| 596 |
|
| 597 |
reader.onerror = function() {
|
| 598 |
-
alert('Ocorreu um erro ao
|
| 599 |
};
|
| 600 |
|
| 601 |
reader.readAsDataURL(file);
|
|
@@ -613,13 +729,13 @@
|
|
| 613 |
const y = e.clientY - rect.top;
|
| 614 |
|
| 615 |
// Verificar se um tipo de marcador foi selecionado (para vistas que requerem)
|
| 616 |
-
if ((currentView === 'anterior' || currentView === 'posterior') && !selectedMarkerType) {
|
| 617 |
alert('Por favor, selecione o tipo de marcador que deseja adicionar.');
|
| 618 |
return;
|
| 619 |
}
|
| 620 |
|
| 621 |
// Verificar se já existe um marcador com o mesmo nome nesta visualização
|
| 622 |
-
if (currentView === 'anterior' || currentView === 'posterior') {
|
| 623 |
const existingMarker = markers.find(m =>
|
| 624 |
m.view === currentView && m.type === selectedMarkerType
|
| 625 |
);
|
|
@@ -652,8 +768,8 @@
|
|
| 652 |
marker.className = `marker ${color} animate-pulse`;
|
| 653 |
markerContainer.appendChild(marker);
|
| 654 |
|
| 655 |
-
// Criar label para o marcador (apenas para vistas
|
| 656 |
-
if ((currentView === 'anterior' || currentView === 'posterior') && selectedMarkerType) {
|
| 657 |
const label = document.createElement('div');
|
| 658 |
label.className = 'marker-label';
|
| 659 |
label.textContent = selectedMarkerType;
|
|
@@ -674,7 +790,7 @@
|
|
| 674 |
x: x,
|
| 675 |
y: y,
|
| 676 |
view: currentView,
|
| 677 |
-
type: (currentView === 'anterior' || currentView === 'posterior') ? selectedMarkerType : null
|
| 678 |
});
|
| 679 |
|
| 680 |
// Configurar arrastar do marcador
|
|
@@ -690,6 +806,10 @@
|
|
| 690 |
updateAnteriorAngleTable();
|
| 691 |
} else if (currentView === 'posterior') {
|
| 692 |
updatePosteriorAngleTable();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 693 |
}
|
| 694 |
}
|
| 695 |
|
|
@@ -748,6 +868,10 @@
|
|
| 748 |
updateAnteriorAngleTable();
|
| 749 |
} else if (currentView === 'posterior') {
|
| 750 |
updatePosteriorAngleTable();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 751 |
}
|
| 752 |
}
|
| 753 |
}, { once: true });
|
|
@@ -778,8 +902,8 @@
|
|
| 778 |
markerElement.className = `marker ${color}`;
|
| 779 |
markerContainer.appendChild(markerElement);
|
| 780 |
|
| 781 |
-
// Adicionar label se for vista
|
| 782 |
-
if ((currentView === 'anterior' || currentView === 'posterior') && marker.type) {
|
| 783 |
const label = document.createElement('div');
|
| 784 |
label.className = 'marker-label';
|
| 785 |
label.textContent = marker.type;
|
|
@@ -900,6 +1024,68 @@
|
|
| 900 |
}
|
| 901 |
}
|
| 902 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 903 |
// Função para calcular ângulo entre dois marcadores
|
| 904 |
function calculateAngle(marker1, marker2) {
|
| 905 |
// Calcular diferença vertical e horizontal
|
|
@@ -938,6 +1124,16 @@
|
|
| 938 |
document.getElementById('post-angle-joelho').textContent = '0º';
|
| 939 |
document.getElementById('post-angle-maleolo-dir').textContent = '0º';
|
| 940 |
document.getElementById('post-angle-maleolo-esq').textContent = '0º';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 941 |
}
|
| 942 |
});
|
| 943 |
|
|
|
|
| 181 |
<label for="file-input" class="file-input-label">
|
| 182 |
<i class="fas fa-upload mr-2"></i> Importar Foto
|
| 183 |
</label>
|
| 184 |
+
<input type="file" id="file-input", class="file-input" accept="image/*">
|
| 185 |
</div>
|
| 186 |
|
| 187 |
<!-- Imagem será carregada aqui -->
|
|
|
|
| 235 |
</div>
|
| 236 |
</div>
|
| 237 |
|
| 238 |
+
<!-- Seletor de marcadores para vista lateral direita -->
|
| 239 |
+
<div id="lateral-direita-marker-selector" class="p-4 border-t border-gray-200 hidden">
|
| 240 |
+
<h3 class="text-sm font-medium text-gray-700 mb-2">Selecione o marcador para adicionar:</h3>
|
| 241 |
+
<div class="grid grid-cols-2 md:grid-cols-3 gap-2">
|
| 242 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Trago Direito">Trago Direito</button>
|
| 243 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Acrômio Direito">Acrômio Direito</button>
|
| 244 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Trocânter Maior Direito">Trocânter Maior Direito</button>
|
| 245 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Linha Articular do Joelho Direito">Linha Articular Joelho D</button>
|
| 246 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Maléolo Lateral Direito">Maléolo Lateral Direito</button>
|
| 247 |
+
</div>
|
| 248 |
+
</div>
|
| 249 |
+
|
| 250 |
+
<!-- Seletor de marcadores para vista lateral esquerda -->
|
| 251 |
+
<div id="lateral-esquerda-marker-selector" class="p-4 border-t border-gray-200 hidden">
|
| 252 |
+
<h3 class="text-sm font-medium text-gray-700 mb-2">Selecione o marcador para adicionar:</h3>
|
| 253 |
+
<div class="grid grid-cols-2 md:grid-cols-3 gap-2">
|
| 254 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Trago Esquerdo">Trago Esquerdo</button>
|
| 255 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Acrômio Esquerdo">Acrômio Esquerdo</button>
|
| 256 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Trocânter Maior Esquerdo">Trocânter Maior Esquerdo</button>
|
| 257 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Linha Articular do Joelho Esquerdo">Linha Articular Joelho E</button>
|
| 258 |
+
<button class="marker-option px-3 py-1 bg-gray-100 text-gray-800 rounded text-sm", data-marker="Maléolo Lateral Esquerdo">Maléolo Lateral Esquerdo</button>
|
| 259 |
+
</div>
|
| 260 |
+
</div>
|
| 261 |
+
|
| 262 |
<!-- Tabela de ângulos para vista anterior -->
|
| 263 |
<div id="anterior-angle-table" class="p-4 border-t border-gray-200 hidden">
|
| 264 |
<h3 class="text-sm font-medium text-gray-700 mb-2">Análise Angular (Vista Anterior)</h3>
|
|
|
|
| 356 |
</table>
|
| 357 |
</div>
|
| 358 |
|
| 359 |
+
<!-- Tabela de ângulos para vista lateral direita -->
|
| 360 |
+
<div id="lateral-direita-angle-table" class="p-4 border-t border-gray-200 hidden">
|
| 361 |
+
<h3 class="text-sm font-medium text-gray-700 mb-2">Análise Angular (Vista Lateral Direita)</h3>
|
| 362 |
+
<table class="angle-table">
|
| 363 |
+
<thead>
|
| 364 |
+
<tr>
|
| 365 |
+
<th>Estruturas</th>
|
| 366 |
+
<th>Diferença Angular</th>
|
| 367 |
+
<th>Normal</th>
|
| 368 |
+
</tr>
|
| 369 |
+
</thead>
|
| 370 |
+
<tbody>
|
| 371 |
+
<tr>
|
| 372 |
+
<td>Trago Direito - Acrômio Direito</td>
|
| 373 |
+
<td id="lat-dir-angle-tragos-acromio">0º</td>
|
| 374 |
+
<td>0º</td>
|
| 375 |
+
</tr>
|
| 376 |
+
<tr>
|
| 377 |
+
<td>Acrômio Direito - Trocânter Maior Direito</td>
|
| 378 |
+
<td id="lat-dir-angle-acromio-trocanter">0º</td>
|
| 379 |
+
<td>0º</td>
|
| 380 |
+
</tr>
|
| 381 |
+
<tr>
|
| 382 |
+
<td>Trocânter Maior Direito - Linha Articular Joelho D</td>
|
| 383 |
+
<td id="lat-dir-angle-trocanter-joelho">0º</td>
|
| 384 |
+
<td>0º</td>
|
| 385 |
+
</tr>
|
| 386 |
+
<tr>
|
| 387 |
+
<td>Linha Articular Joelho D - Maléolo Lateral Direito</td>
|
| 388 |
+
<td id="lat-dir-angle-joelho-maleolo">0º</td>
|
| 389 |
+
<td>0º</td>
|
| 390 |
+
</tr>
|
| 391 |
+
</tbody>
|
| 392 |
+
</table>
|
| 393 |
+
</div>
|
| 394 |
+
|
| 395 |
+
<!-- Tabela de ângulos para vista lateral esquerda -->
|
| 396 |
+
<div id="lateral-esquerda-angle-table" class="p-4 border-t border-gray-200 hidden">
|
| 397 |
+
<h3 class="text-sm font-medium text-gray-700 mb-2">Análise Angular (Vista Lateral Esquerda)</h3>
|
| 398 |
+
<table class="angle-table">
|
| 399 |
+
<thead>
|
| 400 |
+
<tr>
|
| 401 |
+
<th>Estruturas</th>
|
| 402 |
+
<th>Diferença Angular</th>
|
| 403 |
+
<th>Normal</th>
|
| 404 |
+
</tr>
|
| 405 |
+
</thead>
|
| 406 |
+
<tbody>
|
| 407 |
+
<tr>
|
| 408 |
+
<td>Trago Esquerdo - Acrômio Esquerdo</td>
|
| 409 |
+
<td id="lat-esq-angle-tragos-acromio">0º</td>
|
| 410 |
+
<td>0º</td>
|
| 411 |
+
</tr>
|
| 412 |
+
<tr>
|
| 413 |
+
<td>Acrômio Esquerdo - Trocânter Maior Esquerdo</td>
|
| 414 |
+
<td id="lat-esq-angle-acromio-trocanter">0º</td>
|
| 415 |
+
<td>0º</td>
|
| 416 |
+
</tr>
|
| 417 |
+
<tr>
|
| 418 |
+
<td>Trocânter Maior Esquerdo - Linha Articular Joelho E</td>
|
| 419 |
+
<td id="lat-esq-angle-trocanter-joelho">0º</td>
|
| 420 |
+
<td>0º</td>
|
| 421 |
+
</tr>
|
| 422 |
+
<tr>
|
| 423 |
+
<td>Linha Articular Joelho E - Maléolo Lateral Esquerdo</td>
|
| 424 |
+
<td id="lat-esq-angle-joelho-maleolo">0º</td>
|
| 425 |
+
<td>0º</td>
|
| 426 |
+
</tr>
|
| 427 |
+
</tbody>
|
| 428 |
+
</table>
|
| 429 |
+
</div>
|
| 430 |
+
|
| 431 |
<div class="p-4 border-t border-gray-200 flex justify-between">
|
| 432 |
<button id="resetBtn" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition">
|
| 433 |
<i class="fas fa-undo mr-2"></i> Limpar Marcadores
|
|
|
|
| 520 |
<input type="radio" name="spine" id="spine-kyphosis" class="hidden custom-radio">
|
| 521 |
<label for="spine-kyphosis" class="px-3 py-1 border border-gray-300 rounded-full text-sm cursor-pointer hover:bg-blue-50">Cifose</label>
|
| 522 |
|
| 523 |
+
<input type="radio" name="spine" id="spine-llordosis" class="hidden custom-radio">
|
| 524 |
<label for="spine-lordosis" class="px-3 py-1 border border-gray-300 rounded-full text-sm cursor-pointer hover:bg-blue-50">Lordose</label>
|
| 525 |
|
| 526 |
<input type="radio" name="spine" id="spine-scoliosis" class="hidden custom-radio">
|
|
|
|
| 576 |
const viewTabs = document.querySelectorAll('.view-tab');
|
| 577 |
const anteriorMarkerSelector = document.getElementById('anterior-marker-selector');
|
| 578 |
const posteriorMarkerSelector = document.getElementById('posterior-marker-selector');
|
| 579 |
+
const lateralDireitaMarkerSelector = document.getElementById('lateral-direita-marker-selector');
|
| 580 |
+
const lateralEsquerdaMarkerSelector = document.getElementById('lateral-esquerda-marker-selector');
|
| 581 |
const anteriorAngleTable = document.getElementById('anterior-angle-table');
|
| 582 |
const posteriorAngleTable = document.getElementById('posterior-angle-table');
|
| 583 |
+
const lateralDireitaAngleTable = document.getElementById('lateral-direita-angle-table');
|
| 584 |
+
const lateralEsquerdaAngleTable = document.getElementById('lateral-esquerda-angle-table');
|
| 585 |
const markerOptions = document.querySelectorAll('.marker-option');
|
| 586 |
|
| 587 |
let markers = [];
|
|
|
|
| 609 |
currentView = this.dataset.view;
|
| 610 |
|
| 611 |
// Mostrar/ocultar seletor de marcadores específicos para cada vista
|
| 612 |
+
anteriorMarkerSelector.classList.add('hidden');
|
| 613 |
+
anteriorAngleTable.classList.add('hidden');
|
| 614 |
+
posteriorMarkerSelector.classList.add('hidden');
|
| 615 |
+
posteriorAngleTable.classList.add('hidden');
|
| 616 |
+
lateralDireitaMarkerSelector.classList.add('hidden');
|
| 617 |
+
lateralDireitaAngleTable.classList.add('hidden');
|
| 618 |
+
lateralEsquerdaMarkerSelector.classList.add('hidden');
|
| 619 |
+
lateralEsquerdaAngleTable.classList.add('hidden');
|
| 620 |
+
|
| 621 |
if (currentView === 'anterior') {
|
| 622 |
anteriorMarkerSelector.classList.remove('hidden');
|
| 623 |
anteriorAngleTable.classList.remove('hidden');
|
|
|
|
|
|
|
| 624 |
} else if (currentView === 'posterior') {
|
|
|
|
|
|
|
| 625 |
posteriorMarkerSelector.classList.remove('hidden');
|
| 626 |
posteriorAngleTable.classList.remove('hidden');
|
| 627 |
+
} else if (currentView === 'lateral-direita') {
|
| 628 |
+
lateralDireitaMarkerSelector.classList.remove('hidden');
|
| 629 |
+
lateralDireitaAngleTable.classList.remove('hidden');
|
| 630 |
+
} else if (currentView === 'lateral-esquerda') {
|
| 631 |
+
lateralEsquerdaMarkerSelector.classList.remove('hidden');
|
| 632 |
+
lateralEsquerdaAngleTable.classList.remove('hidden');
|
| 633 |
}
|
| 634 |
|
| 635 |
// Atualizar imagem exibida
|
|
|
|
| 664 |
updateAnteriorAngleTable();
|
| 665 |
} else if (currentView === 'posterior') {
|
| 666 |
updatePosteriorAngleTable();
|
| 667 |
+
} else if (currentView === 'lateral-direita') {
|
| 668 |
+
updateLateralDireitaAngleTable();
|
| 669 |
+
} else if (currentView === 'lateral-esquerda') {
|
| 670 |
+
updateLateralEsquerdaAngleTable();
|
| 671 |
}
|
| 672 |
} else {
|
| 673 |
postureImage.classList.add('hidden');
|
|
|
|
| 701 |
} else if (currentView === 'posterior') {
|
| 702 |
posteriorMarkerSelector.classList.remove('hidden');
|
| 703 |
posteriorAngleTable.classList.remove('hidden');
|
| 704 |
+
} else if (currentView === 'lateral-direita') {
|
| 705 |
+
lateralDireitaMarkerSelector.classList.remove('hidden');
|
| 706 |
+
lateralDireitaAngleTable.classList.remove('hidden');
|
| 707 |
+
} else if (currentView === 'lateral-esquerda') {
|
| 708 |
+
lateralEsquerdaMarkerSelector.classList.remove('hidden');
|
| 709 |
+
lateralEsquerdaAngleTable.classList.remove('hidden');
|
| 710 |
}
|
| 711 |
};
|
| 712 |
|
| 713 |
reader.onerror = function() {
|
| 714 |
+
alert('Ocorreu um erro ao ler o arquivo. Por favor, tente novamente.');
|
| 715 |
};
|
| 716 |
|
| 717 |
reader.readAsDataURL(file);
|
|
|
|
| 729 |
const y = e.clientY - rect.top;
|
| 730 |
|
| 731 |
// Verificar se um tipo de marcador foi selecionado (para vistas que requerem)
|
| 732 |
+
if ((currentView === 'anterior' || currentView === 'posterior' || currentView === 'lateral-direita' || currentView === 'lateral-esquerda') && !selectedMarkerType) {
|
| 733 |
alert('Por favor, selecione o tipo de marcador que deseja adicionar.');
|
| 734 |
return;
|
| 735 |
}
|
| 736 |
|
| 737 |
// Verificar se já existe um marcador com o mesmo nome nesta visualização
|
| 738 |
+
if (currentView === 'anterior' || currentView === 'posterior' || currentView === 'lateral-direita' || currentView === 'lateral-esquerda') {
|
| 739 |
const existingMarker = markers.find(m =>
|
| 740 |
m.view === currentView && m.type === selectedMarkerType
|
| 741 |
);
|
|
|
|
| 768 |
marker.className = `marker ${color} animate-pulse`;
|
| 769 |
markerContainer.appendChild(marker);
|
| 770 |
|
| 771 |
+
// Criar label para o marcador (apenas para vistas com tipos definidos)
|
| 772 |
+
if ((currentView === 'anterior' || currentView === 'posterior' || currentView === 'lateral-direita' || currentView === 'lateral-esquerda') && selectedMarkerType) {
|
| 773 |
const label = document.createElement('div');
|
| 774 |
label.className = 'marker-label';
|
| 775 |
label.textContent = selectedMarkerType;
|
|
|
|
| 790 |
x: x,
|
| 791 |
y: y,
|
| 792 |
view: currentView,
|
| 793 |
+
type: (currentView === 'anterior' || currentView === 'posterior' || currentView === 'lateral-direita' || currentView === 'lateral-esquerda') ? selectedMarkerType : null
|
| 794 |
});
|
| 795 |
|
| 796 |
// Configurar arrastar do marcador
|
|
|
|
| 806 |
updateAnteriorAngleTable();
|
| 807 |
} else if (currentView === 'posterior') {
|
| 808 |
updatePosteriorAngleTable();
|
| 809 |
+
} else if (currentView === 'lateral-direita') {
|
| 810 |
+
updateLateralDireitaAngleTable();
|
| 811 |
+
} else if (currentView === 'lateral-esquerda') {
|
| 812 |
+
updateLateralEsquerdaAngleTable();
|
| 813 |
}
|
| 814 |
}
|
| 815 |
|
|
|
|
| 868 |
updateAnteriorAngleTable();
|
| 869 |
} else if (currentView === 'posterior') {
|
| 870 |
updatePosteriorAngleTable();
|
| 871 |
+
} else if (currentView === 'lateral-direita') {
|
| 872 |
+
updateLateralDireitaAngleTable();
|
| 873 |
+
} else if (currentView === 'lateral-esquerda') {
|
| 874 |
+
updateLateralEsquerdaAngleTable();
|
| 875 |
}
|
| 876 |
}
|
| 877 |
}, { once: true });
|
|
|
|
| 902 |
markerElement.className = `marker ${color}`;
|
| 903 |
markerContainer.appendChild(markerElement);
|
| 904 |
|
| 905 |
+
// Adicionar label se for vista com tipos definidos
|
| 906 |
+
if ((currentView === 'anterior' || currentView === 'posterior' || currentView === 'lateral-direita' || currentView === 'lateral-esquerda') && marker.type) {
|
| 907 |
const label = document.createElement('div');
|
| 908 |
label.className = 'marker-label';
|
| 909 |
label.textContent = marker.type;
|
|
|
|
| 1024 |
}
|
| 1025 |
}
|
| 1026 |
|
| 1027 |
+
// Atualizar tabela de ângulos para vista lateral direita
|
| 1028 |
+
function updateLateralDireitaAngleTable() {
|
| 1029 |
+
// Obter marcadores específicos
|
| 1030 |
+
const tragoDir = markers.find(m => m.view === 'lateral-direita' && m.type === 'Trago Direito');
|
| 1031 |
+
const acromioDir = markers.find(m => m.view === 'lateral-direita' && m.type === 'Acrômio Direito');
|
| 1032 |
+
const trocanterDir = markers.find(m => m.view === 'lateral-direita' && m.type === 'Trocânter Maior Direito');
|
| 1033 |
+
const joelhoDir = markers.find(m => m.view === 'lateral-direita' && m.type === 'Linha Articular do Joelho Direito');
|
| 1034 |
+
const maleoloLatDir = markers.find(m => m.view === 'lateral-direita' && m.type === 'Maléolo Lateral Direito');
|
| 1035 |
+
|
| 1036 |
+
// Calcular ângulos se os marcadores existirem
|
| 1037 |
+
if (tragoDir && acromioDir) {
|
| 1038 |
+
const angle = calculateAngle(tragoDir, acromioDir);
|
| 1039 |
+
document.getElementById('lat-dir-angle-tragos-acromio').textContent = `${angle}º`;
|
| 1040 |
+
}
|
| 1041 |
+
|
| 1042 |
+
if (acromioDir && trocanterDir) {
|
| 1043 |
+
const angle = calculateAngle(acromioDir, trocanterDir);
|
| 1044 |
+
document.getElementById('lat-dir-angle-acromio-trocanter').textContent = `${angle}º`;
|
| 1045 |
+
}
|
| 1046 |
+
|
| 1047 |
+
if (trocanterDir && joelhoDir) {
|
| 1048 |
+
const angle = calculateAngle(trocanterDir, joelhoDir);
|
| 1049 |
+
document.getElementById('lat-dir-angle-trocanter-joelho').textContent = `${angle}º`;
|
| 1050 |
+
}
|
| 1051 |
+
|
| 1052 |
+
if (joelhoDir && maleoloLatDir) {
|
| 1053 |
+
const angle = calculateAngle(joelhoDir, maleoloLatDir);
|
| 1054 |
+
document.getElementById('lat-dir-angle-joelho-maleolo').textContent = `${angle}º`;
|
| 1055 |
+
}
|
| 1056 |
+
}
|
| 1057 |
+
|
| 1058 |
+
// Atualizar tabela de ângulos para vista lateral esquerda
|
| 1059 |
+
function updateLateralEsquerdaAngleTable() {
|
| 1060 |
+
// Obter marcadores específicos
|
| 1061 |
+
const tragoEsq = markers.find(m => m.view === 'lateral-esquerda' && m.type === 'Trago Esquerdo');
|
| 1062 |
+
const acromioEsq = markers.find(m => m.view === 'lateral-esquerda' && m.type === 'Acrômio Esquerdo');
|
| 1063 |
+
const trocanterEsq = markers.find(m => m.view === 'lateral-esquerda' && m.type === 'Trocânter Maior Esquerdo');
|
| 1064 |
+
const joelhoEsq = markers.find(m => m.view === 'lateral-esquerda' && m.type === 'Linha Articular do Joelho Esquerdo');
|
| 1065 |
+
const maleoloLatEsq = markers.find(m => m.view === 'lateral-esquerda' && m.type === 'Maléolo Lateral Esquerdo');
|
| 1066 |
+
|
| 1067 |
+
// Calcular ângulos se os marcadores existirem
|
| 1068 |
+
if (tragoEsq && acromioEsq) {
|
| 1069 |
+
const angle = calculateAngle(tragoEsq, acromioEsq);
|
| 1070 |
+
document.getElementById('lat-esq-angle-tragos-acromio').textContent = `${angle}º`;
|
| 1071 |
+
}
|
| 1072 |
+
|
| 1073 |
+
if (acromioEsq && trocanterEsq) {
|
| 1074 |
+
const angle = calculateAngle(acromioEsq, trocanterEsq);
|
| 1075 |
+
document.getElementById('lat-esq-angle-acromio-trocanter').textContent = `${angle}º`;
|
| 1076 |
+
}
|
| 1077 |
+
|
| 1078 |
+
if (trocanterEsq && joelhoEsq) {
|
| 1079 |
+
const angle = calculateAngle(trocanterEsq, joelhoEsq);
|
| 1080 |
+
document.getElementById('lat-esq-angle-trocanter-joelho').textContent = `${angle}º`;
|
| 1081 |
+
}
|
| 1082 |
+
|
| 1083 |
+
if (joelhoEsq && maleoloLatEsq) {
|
| 1084 |
+
const angle = calculateAngle(joelhoEsq, maleoloLatEsq);
|
| 1085 |
+
document.getElementById('lat-esq-angle-joelho-maleolo').textContent = `${angle}º`;
|
| 1086 |
+
}
|
| 1087 |
+
}
|
| 1088 |
+
|
| 1089 |
// Função para calcular ângulo entre dois marcadores
|
| 1090 |
function calculateAngle(marker1, marker2) {
|
| 1091 |
// Calcular diferença vertical e horizontal
|
|
|
|
| 1124 |
document.getElementById('post-angle-joelho').textContent = '0º';
|
| 1125 |
document.getElementById('post-angle-maleolo-dir').textContent = '0º';
|
| 1126 |
document.getElementById('post-angle-maleolo-esq').textContent = '0º';
|
| 1127 |
+
} else if (currentView === 'lateral-direita') {
|
| 1128 |
+
document.getElementById('lat-dir-angle-tragos-acromio').textContent = '0º';
|
| 1129 |
+
document.getElementById('lat-dir-angle-acromio-trocanter').textContent = '0º';
|
| 1130 |
+
document.getElementById('lat-dir-angle-trocanter-joelho').textContent = '0º';
|
| 1131 |
+
document.getElementById('lat-dir-angle-joelho-maleolo').textContent = '0º';
|
| 1132 |
+
} else if (currentView === 'lateral-esquerda') {
|
| 1133 |
+
document.getElementById('lat-esq-angle-tragos-acromio').textContent = '0º';
|
| 1134 |
+
document.getElementById('lat-esq-angle-acromio-trocanter').textContent = '0º';
|
| 1135 |
+
document.getElementById('lat-esq-angle-trocanter-joelho').textContent = '0º';
|
| 1136 |
+
document.getElementById('lat-esq-angle-joelho-maleolo').textContent = '0º';
|
| 1137 |
}
|
| 1138 |
});
|
| 1139 |
|
prompts.txt
CHANGED
|
@@ -1,2 +1,4 @@
|
|
| 1 |
Na Vista Anterior, Vista Posterior, Vista Lateral Direita e Vista Lateral Esquerda, o usuário não pode usar mais de um marcador do mesmo nome. O nome do marcador não deve aparecer na foto que foi importada, apenas quando o usuário encosta com a seta do mouse.
|
| 2 |
-
Na Vista Posterior, coloque um total de 17 marcadores, com os seguintes nomes: C7, T5, L1, Acrômio Direito, Acrômio Esquerdo, EIPS Direita, EIPS Esquerda, Trocânter Maior Direito, Trocânter Maior Esquerdo,Linha Articular do Joelho D, Linha Articular do Joelho E, Calcâneo D, Calcâneo E, Maléolo Lateral Direito, Maléolo Medial Direito, Maléolo Lateral Esquerdo e Maléolo Medial Esquerdo. Repita a mesma tabela da Vista Anterior. Porém mude o nome das estruturas. Os ângulos que devem ser gerados devem ser entre Acrômio Direito e Acrômio Esquerdo, entre C7 e T5, entre T5 e L1, Entre EIPS Direita e EIPS Esquerda, entre Trocanter Maior Direito e Trocanter Maior Esquerdo, entre Linha Articular do Joelho D e Linha Articular do Joelho E, entre Maléolo Lateral Direito e Maléolo Medial Direito e entre Maléolo Lateral Esquerdo e Maléolo Medial Esquerdo. A coluna Normal da tabela, deve ter os mesmos valores de referência.
|
|
|
|
|
|
|
|
|
| 1 |
Na Vista Anterior, Vista Posterior, Vista Lateral Direita e Vista Lateral Esquerda, o usuário não pode usar mais de um marcador do mesmo nome. O nome do marcador não deve aparecer na foto que foi importada, apenas quando o usuário encosta com a seta do mouse.
|
| 2 |
+
Na Vista Posterior, coloque um total de 17 marcadores, com os seguintes nomes: C7, T5, L1, Acrômio Direito, Acrômio Esquerdo, EIPS Direita, EIPS Esquerda, Trocânter Maior Direito, Trocânter Maior Esquerdo,Linha Articular do Joelho D, Linha Articular do Joelho E, Calcâneo D, Calcâneo E, Maléolo Lateral Direito, Maléolo Medial Direito, Maléolo Lateral Esquerdo e Maléolo Medial Esquerdo. Repita a mesma tabela da Vista Anterior. Porém mude o nome das estruturas. Os ângulos que devem ser gerados devem ser entre Acrômio Direito e Acrômio Esquerdo, entre C7 e T5, entre T5 e L1, Entre EIPS Direita e EIPS Esquerda, entre Trocanter Maior Direito e Trocanter Maior Esquerdo, entre Linha Articular do Joelho D e Linha Articular do Joelho E, entre Maléolo Lateral Direito e Maléolo Medial Direito e entre Maléolo Lateral Esquerdo e Maléolo Medial Esquerdo. A coluna Normal da tabela, deve ter os mesmos valores de referência.
|
| 3 |
+
na Vista Lateral Direita, estarão disponíveis 5 marcadores, com os seguintes nomes: Trago Direito, Acrômio Direito, Trocânter Maior Direito, Linha articular do Joelho Direito e Maléolo Lateral Direito. Repita a mesma tabela da Vista Posterior, apenas mudando o nome das estruturas. Na tabela, informe o ângulo formado entre Trago Direito e Acrômio Direito, entre Acrômio Direito e Trocânter Maior Direito e entre Trocânter Maior Direito e Linha Articular do Joelho Direito e entre a Linha Articular do Joelho Direito e Maléolo Lateral Direito. Mantenha os mesmos parâmetros na coluna Normal da tabela.
|
| 4 |
+
na Vista Lateral Esquerda, estarão disponíveis 5 marcadores, com os seguintes nomes: Trago Esquerdo, Acrômio Esquerdo, Trocânter Maior Esquerdo, Linha articular do Joelho Esquerdo e Maléolo Lateral Esquerdo. Repita a mesma tabela da Vista Lateral Direita, apenas mudando o nome das estruturas. Na tabela, informe o ângulo formado entre Trago Esquerdo e Acrômio Esquerdo, entre Acrômio Esquerdo e Trocânter Maior Esquerdo e entre Trocânter Maior Esquerdo e Linha Articular do Joelho Esquerdo e entre a Linha Articular do Joelho Esquerdo e Maléolo Lateral Esquerdo. Mantenha os mesmos parâmetros na coluna Normal da tabela.
|