Spaces:
Sleeping
Sleeping
Commit ·
863ef50
1
Parent(s): fe24149
✨ Render Circular Odontogram teeth with dynamic Quadrant matching colors
Browse files
toothmap_frontend/src/App.jsx
CHANGED
|
@@ -57,6 +57,17 @@ function getRadialStyle(index, isUpper) {
|
|
| 57 |
};
|
| 58 |
}
|
| 59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
function computeIoU(b1, b2) {
|
| 61 |
const ix = Math.max(b1[0], b2[0]), iy = Math.max(b1[1], b2[1]);
|
| 62 |
const iw = Math.min(b1[2], b2[2]) - ix, ih = Math.min(b1[3], b2[3]) - iy;
|
|
@@ -331,10 +342,10 @@ export default function App() {
|
|
| 331 |
return (
|
| 332 |
<div key={t}
|
| 333 |
style={styleNode.wrapper}
|
| 334 |
-
className={`w-9 h-12 rounded-t-sm rounded-b-[16px] flex items-center justify-center text-sm font-bold transition-all shadow-lg ${
|
| 335 |
uniquePipelineResults.some(r => r.fdi === t)
|
| 336 |
-
?
|
| 337 |
-
: 'bg-zinc-800 text-zinc-500 border
|
| 338 |
}`}>
|
| 339 |
<span style={styleNode.text}>{t}</span>
|
| 340 |
</div>
|
|
@@ -348,10 +359,10 @@ export default function App() {
|
|
| 348 |
return (
|
| 349 |
<div key={t}
|
| 350 |
style={styleNode.wrapper}
|
| 351 |
-
className={`w-9 h-12 rounded-b-sm rounded-t-[16px] flex items-center justify-center text-sm font-bold transition-all shadow-lg ${
|
| 352 |
uniquePipelineResults.some(r => r.fdi === t)
|
| 353 |
-
?
|
| 354 |
-
: 'bg-zinc-800 text-zinc-500 border
|
| 355 |
}`}>
|
| 356 |
<span style={styleNode.text}>{t}</span>
|
| 357 |
</div>
|
|
@@ -366,9 +377,14 @@ export default function App() {
|
|
| 366 |
</div>
|
| 367 |
|
| 368 |
{/* Legend below chart */}
|
| 369 |
-
<div className="flex justify-center gap-
|
| 370 |
-
<div className="flex items-center gap-
|
| 371 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 372 |
Detected Tooth
|
| 373 |
</div>
|
| 374 |
<div className="flex items-center gap-2">
|
|
|
|
| 57 |
};
|
| 58 |
}
|
| 59 |
|
| 60 |
+
function getToothClasses(fdi, isUpper) {
|
| 61 |
+
const quad = Math.floor(fdi / 10);
|
| 62 |
+
switch (quad) {
|
| 63 |
+
case 1: return `text-blue-300 border-blue-500/60 shadow-[0_0_15px_rgba(59,130,246,0.3)] ${isUpper ? 'bg-gradient-to-b from-blue-500/20 to-blue-500/40' : 'bg-gradient-to-t from-blue-500/20 to-blue-500/40'}`;
|
| 64 |
+
case 2: return `text-green-300 border-green-500/60 shadow-[0_0_15px_rgba(34,197,94,0.3)] ${isUpper ? 'bg-gradient-to-b from-green-500/20 to-green-500/40' : 'bg-gradient-to-t from-green-500/20 to-green-500/40'}`;
|
| 65 |
+
case 3: return `text-amber-300 border-amber-500/60 shadow-[0_0_15px_rgba(245,158,11,0.3)] ${isUpper ? 'bg-gradient-to-b from-amber-500/20 to-amber-500/40' : 'bg-gradient-to-t from-amber-500/20 to-amber-500/40'}`;
|
| 66 |
+
case 4: return `text-red-300 border-red-500/60 shadow-[0_0_15px_rgba(239,68,68,0.3)] ${isUpper ? 'bg-gradient-to-b from-red-500/20 to-red-500/40' : 'bg-gradient-to-t from-red-500/20 to-red-500/40'}`;
|
| 67 |
+
default: return 'text-purple-300 border-purple-500/60 shadow-[0_0_15px_rgba(168,85,247,0.3)] bg-purple-500/20';
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
function computeIoU(b1, b2) {
|
| 72 |
const ix = Math.max(b1[0], b2[0]), iy = Math.max(b1[1], b2[1]);
|
| 73 |
const iw = Math.min(b1[2], b2[2]) - ix, ih = Math.min(b1[3], b2[3]) - iy;
|
|
|
|
| 342 |
return (
|
| 343 |
<div key={t}
|
| 344 |
style={styleNode.wrapper}
|
| 345 |
+
className={`w-9 h-12 rounded-t-sm rounded-b-[16px] flex items-center justify-center text-sm font-bold transition-all shadow-lg border ${
|
| 346 |
uniquePipelineResults.some(r => r.fdi === t)
|
| 347 |
+
? getToothClasses(t, true)
|
| 348 |
+
: 'bg-zinc-800 text-zinc-500 border-zinc-700/50'
|
| 349 |
}`}>
|
| 350 |
<span style={styleNode.text}>{t}</span>
|
| 351 |
</div>
|
|
|
|
| 359 |
return (
|
| 360 |
<div key={t}
|
| 361 |
style={styleNode.wrapper}
|
| 362 |
+
className={`w-9 h-12 rounded-b-sm rounded-t-[16px] flex items-center justify-center text-sm font-bold transition-all shadow-lg border ${
|
| 363 |
uniquePipelineResults.some(r => r.fdi === t)
|
| 364 |
+
? getToothClasses(t, false)
|
| 365 |
+
: 'bg-zinc-800 text-zinc-500 border-zinc-700/50'
|
| 366 |
}`}>
|
| 367 |
<span style={styleNode.text}>{t}</span>
|
| 368 |
</div>
|
|
|
|
| 377 |
</div>
|
| 378 |
|
| 379 |
{/* Legend below chart */}
|
| 380 |
+
<div className="flex justify-center gap-10 mt-4 text-sm text-zinc-400 font-medium">
|
| 381 |
+
<div className="flex items-center gap-3">
|
| 382 |
+
<div className="flex align-center -space-x-1.5 opacity-90">
|
| 383 |
+
<span className="w-4 h-4 rounded-full bg-gradient-to-bl from-blue-400 to-blue-600 border border-zinc-900 shadow-sm relative z-40"></span>
|
| 384 |
+
<span className="w-4 h-4 rounded-full bg-gradient-to-bl from-green-400 to-green-600 border border-zinc-900 shadow-sm relative z-30"></span>
|
| 385 |
+
<span className="w-4 h-4 rounded-full bg-gradient-to-bl from-amber-400 to-amber-600 border border-zinc-900 shadow-sm relative z-20"></span>
|
| 386 |
+
<span className="w-4 h-4 rounded-full bg-gradient-to-bl from-red-400 to-red-600 border border-zinc-900 shadow-sm relative z-10"></span>
|
| 387 |
+
</div>
|
| 388 |
Detected Tooth
|
| 389 |
</div>
|
| 390 |
<div className="flex items-center gap-2">
|