{"version":3,"file":"fikoyt-shared-fiko-cad-diff-dialog.component-1cuoqxJr.mjs","sources":["../../../projects/shared/src/lib/service/fikoyt-ui/src/lib/fiko-three-js/IFikoThreeJS/fiko-cad-diff/fiko-cad-diff-dialog.component.ts"],"sourcesContent":["/**\r\n * FikoCAD Diff Dialog - CATIA V5 Compare Products Tarzı\r\n * Taşınabilir, ufak boyutlu dialog - FikoThreeJS ile iki viewport\r\n * Arka pencere (fiko-cad-diff.component) ile aynı açık gri tema\r\n */\r\n\r\nimport {\r\n Component,\r\n Input,\r\n ViewChild,\r\n ElementRef,\r\n OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n Injector,\r\n ViewContainerRef,\r\n EnvironmentInjector,\r\n NgZone,\r\n SimpleChanges,\r\n OnChanges,\r\n Type,\r\n OnInit\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport * as THREE from 'three';\r\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js';\r\nimport { CadDiffSonuc, RGB, CadDiffColors, DiffModelSecim } from './FikoCadDiffService';\r\n\r\nexport type PanelViewMode = 'diff_a' | 'diff_b' | 'diff_both' | 'original_a' | 'original_b';\r\n\r\n@Component({\r\n selector: 'fikoyt-cad-diff-dialog',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n
\r\n \r\n
\r\n \r\n CAD Farklar - Karşılaştırma\r\n \r\n | {{ sonuc.sure?.toFixed(0) || 0 }}ms\r\n \r\n
\r\n\r\n \r\n
\r\n
Model Görünümü
\r\n
\r\n \r\n
\r\n
\r\n A\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Yükleniyor...\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n B\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Yükleniyor...\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n Aynı\r\n
\r\n
\r\n \r\n Silinen\r\n
\r\n
\r\n \r\n Eklenen\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n Eşleşme:\r\n {{ sonuc?.toleransIcindeYuzde?.toFixed(1) || 0 }}%\r\n
\r\n
\r\n Silinen nokta:\r\n {{ formatSayi(sonuc?.farkliVertexA || 0) }}\r\n
\r\n
\r\n Eklenen nokta:\r\n {{ formatSayi(sonuc?.farkliVertexB || 0) }}\r\n
\r\n
0\">\r\n Maks. sapma (P99):\r\n {{ formatMesafe(sonuc?.maxSapma || 0) }}\r\n
\r\n
0\">\r\n Ort. sapma:\r\n {{ formatMesafe(sonuc?.ortalamaSapma || 0) }}\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n `,\r\n styles: [`\r\n :host {\r\n display: flex;\r\n width: 100%;\r\n height: 100%;\r\n min-width: 300px;\r\n min-height: 300px;\r\n font-size: 10px;\r\n }\r\n\r\n .govde {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n min-width: 300px;\r\n min-height: 300px;\r\n color: #333;\r\n background: linear-gradient(135deg, #f5f5f5, #e8e8e8);\r\n border: 1px solid #bbb;\r\n border-radius: 4px;\r\n padding: 8px;\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\r\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n }\r\n\r\n .baslik {\r\n flex-shrink: 0;\r\n color: #1a5276;\r\n font-weight: 600;\r\n font-size: 12px;\r\n margin-bottom: 8px;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding-bottom: 6px;\r\n border-bottom: 1px solid #ccc;\r\n }\r\n\r\n .baslik i.icon { margin: 0; color: #2980b9; }\r\n\r\n .alt-bilgi {\r\n margin-left: auto;\r\n font-size: 9px;\r\n color: #666;\r\n }\r\n\r\n .section-panel {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n background: #fff;\r\n border: 1px solid #ccc;\r\n border-radius: 3px;\r\n padding: 6px 8px;\r\n margin-bottom: 6px;\r\n min-height: 0;\r\n overflow: hidden;\r\n }\r\n\r\n .section-title {\r\n flex-shrink: 0;\r\n font-size: 10px;\r\n font-weight: 600;\r\n color: #1a5276;\r\n margin-bottom: 6px;\r\n padding-bottom: 4px;\r\n border-bottom: 1px solid #ddd;\r\n }\r\n\r\n .viewport-row {\r\n flex: 1;\r\n display: flex;\r\n gap: 6px;\r\n min-height: 0;\r\n }\r\n\r\n .viewport-panel {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n background: #fafafa;\r\n border: 1px solid #ddd;\r\n border-radius: 3px;\r\n overflow: hidden;\r\n transition: opacity 0.2s ease;\r\n min-height: 0;\r\n min-width: 0;\r\n }\r\n\r\n .model-baslik {\r\n flex-shrink: 0;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding: 4px 6px;\r\n background: #f0f0f0;\r\n font-size: 9px;\r\n color: #666;\r\n border-bottom: 1px solid #ddd;\r\n }\r\n\r\n .panel-secici {\r\n flex: 1;\r\n padding: 2px 4px;\r\n font-size: 9px;\r\n border: 1px solid #ccc;\r\n border-radius: 3px;\r\n background: #fff;\r\n color: #333;\r\n cursor: pointer;\r\n outline: none;\r\n }\r\n\r\n .panel-secici:hover {\r\n border-color: #2980b9;\r\n }\r\n\r\n .panel-secici:focus {\r\n border-color: #2980b9;\r\n box-shadow: 0 0 3px rgba(41, 128, 185, 0.3);\r\n }\r\n\r\n .etiket {\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 2px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-weight: bold;\r\n font-size: 10px;\r\n color: white;\r\n }\r\n\r\n .etiket.a { background: #3498db; }\r\n .etiket.b { background: #9b59b6; }\r\n\r\n .viewer-container {\r\n flex: 1;\r\n width: 100%;\r\n min-height: 100px;\r\n position: relative;\r\n background: #2a2a3a;\r\n overflow: hidden;\r\n }\r\n\r\n .yukleniyor {\r\n position: absolute;\r\n top: 0; left: 0; right: 0; bottom: 0;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n background: rgba(42, 42, 58, 0.9);\r\n color: #888;\r\n font-size: 9px;\r\n }\r\n\r\n .spinner {\r\n width: 16px;\r\n height: 16px;\r\n border: 2px solid rgba(0,150,200,0.2);\r\n border-top-color: #2980b9;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n }\r\n\r\n @keyframes spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n\r\n .renk-aciklama {\r\n flex-shrink: 0;\r\n display: flex;\r\n justify-content: center;\r\n gap: 20px;\r\n margin-bottom: 6px;\r\n padding: 4px 0;\r\n }\r\n\r\n .renk-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n font-size: 9px;\r\n color: #666;\r\n }\r\n\r\n .renk-kutu {\r\n width: 20px;\r\n height: 12px;\r\n border-radius: 2px;\r\n border: 1px solid #999;\r\n }\r\n\r\n .catia-stats {\r\n flex-shrink: 0;\r\n background: #fff;\r\n border: 1px solid #ccc;\r\n border-radius: 3px;\r\n padding: 6px 8px;\r\n margin-bottom: 6px;\r\n }\r\n\r\n .stat-row {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 2px 0;\r\n font-size: 9px;\r\n border-bottom: 1px solid #f0f0f0;\r\n }\r\n\r\n .stat-row:last-child { border-bottom: none; }\r\n\r\n .stat-label { color: #666; }\r\n\r\n .stat-value {\r\n color: #333;\r\n font-weight: 500;\r\n }\r\n\r\n .stat-value.kirmizi { color: #d12b4a; }\r\n .stat-value.mavi { color: #2e85d0; }\r\n .stat-value.yesil { color: #27ae60; }\r\n\r\n .arac-cubugu {\r\n flex-shrink: 0;\r\n display: flex;\r\n gap: 4px;\r\n justify-content: center;\r\n }\r\n\r\n .arac-cubugu button {\r\n padding: 4px !important;\r\n opacity: 0.7;\r\n }\r\n\r\n .arac-cubugu button:hover { opacity: 1; }\r\n\r\n .arac-cubugu button.active {\r\n opacity: 1;\r\n background: #e8f4fc;\r\n box-shadow: 0 0 4px rgba(41, 128, 185, 0.5);\r\n }\r\n\r\n .ui.icon.mini.button {\r\n padding: 4px;\r\n margin: 0;\r\n background: #f0f0f0;\r\n border: 1px solid #ccc;\r\n color: #333;\r\n }\r\n\r\n .ui.icon.mini.button:hover {\r\n background: #e0e0e0;\r\n }\r\n\r\n .ui.icon.mini.button i.icon {\r\n margin: 0;\r\n font-size: 10px;\r\n }\r\n `]\r\n})\r\nexport class FikoCadDiffDialogComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\r\n // Dialog parametreleri (FikoDialogCore'dan gelir)\r\n @Input() pencere?: { instance: any; _refreshId: number };\r\n\r\n // Input parametreleri\r\n private _sonuc: CadDiffSonuc | null = null;\r\n @Input()\r\n set sonuc(value: CadDiffSonuc | null) {\r\n this._sonuc = value;\r\n // Viewport'lar hazırsa mesh'leri yükle\r\n if (value && this.viewportsReady) {\r\n this.loadMeshesWhenReady();\r\n }\r\n }\r\n get sonuc(): CadDiffSonuc | null {\r\n return this._sonuc;\r\n }\r\n @Input() modelA: DiffModelSecim | null = null;\r\n @Input() modelB: DiffModelSecim | null = null;\r\n @Input() colors: CadDiffColors = {\r\n same: { r: 0.78, g: 0.72, b: 0.32 }, // Warm gold (CATIA V5)\r\n removed: { r: 0.82, g: 0.18, b: 0.32 }, // Coral-magenta\r\n added: { r: 0.18, g: 0.52, b: 0.82 } // Steel blue\r\n };\r\n @Input() edgeColor: RGB = { r: 0.1, g: 0.1, b: 0.1 };\r\n @Input() showEdges = true;\r\n\r\n // ViewChild referansları\r\n @ViewChild('threeJsContainerA', { read: ViewContainerRef, static: true })\r\n viewContainerRefA!: ViewContainerRef;\r\n\r\n @ViewChild('threeJsContainerB', { read: ViewContainerRef, static: true })\r\n viewContainerRefB!: ViewContainerRef;\r\n\r\n @ViewChild('viewerContainerA', { static: true })\r\n viewerContainerARef!: ElementRef;\r\n\r\n @ViewChild('viewerContainerB', { static: true })\r\n viewerContainerBRef!: ElementRef;\r\n\r\n // Three.js referansları\r\n private threeJsA?: any;\r\n private threeJsB?: any;\r\n private sahneA?: any;\r\n private sahneB?: any;\r\n private componentRefA?: any;\r\n private componentRefB?: any;\r\n\r\n // Panel mesh referansları\r\n private diffMeshA?: THREE.Mesh;\r\n private diffMeshB?: THREE.Mesh;\r\n private diffEdgesA?: THREE.LineSegments;\r\n private diffEdgesB?: THREE.LineSegments;\r\n private originalMeshA?: THREE.Mesh;\r\n private originalMeshB?: THREE.Mesh;\r\n private originalEdgesA?: THREE.LineSegments;\r\n private originalEdgesB?: THREE.LineSegments;\r\n\r\n hazirA = false;\r\n hazirB = false;\r\n syncEnabled = true;\r\n panelAMode: PanelViewMode = 'diff_a';\r\n panelBMode: PanelViewMode = 'diff_b';\r\n private isSyncing = false;\r\n private viewportsReady = false;\r\n private meshesLoaded = false;\r\n\r\n // ResizeObserver\r\n private resizeObserverA?: ResizeObserver;\r\n private resizeObserverB?: ResizeObserver;\r\n private resizeObserverMain?: ResizeObserver;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private environmentInjector: EnvironmentInjector,\r\n private ngZone: NgZone,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // FikoDialogCore'un wrapper div'lerinin boyutlandırmasını düzelt\r\n this.setupParentStyles();\r\n }\r\n\r\n /**\r\n * FikoDialogCore içindeki parent wrapper'ların stillerini ayarla\r\n * Bu sayede dialog boyutlandığında içerik de boyutlanır\r\n */\r\n private setupParentStyles(): void {\r\n const hostElement = this.elementRef.nativeElement as HTMLElement;\r\n if (!hostElement) return;\r\n\r\n // Host element'i flex container yap\r\n hostElement.style.display = 'flex';\r\n hostElement.style.width = '100%';\r\n hostElement.style.height = '100%';\r\n hostElement.style.minWidth = '400px';\r\n hostElement.style.minHeight = '350px';\r\n\r\n // Parent wrapper (ngComponentOutlet'in oluşturduğu div)\r\n const parentWrapper = hostElement.parentElement;\r\n if (parentWrapper) {\r\n parentWrapper.style.display = 'flex';\r\n parentWrapper.style.flex = '1';\r\n parentWrapper.style.width = '100%';\r\n parentWrapper.style.height = '100%';\r\n parentWrapper.style.minHeight = '350px';\r\n\r\n // Grandparent (scrolling content div)\r\n const scrollingContent = parentWrapper.parentElement;\r\n if (scrollingContent) {\r\n scrollingContent.style.display = 'flex';\r\n scrollingContent.style.flexDirection = 'column';\r\n scrollingContent.style.flex = '1';\r\n scrollingContent.style.height = 'calc(100% - 30px)'; // Başlık için yer bırak\r\n scrollingContent.style.minHeight = '350px';\r\n\r\n // Modal dialog container - 3 seviye yukarı\r\n const modalDialog = scrollingContent.parentElement;\r\n if (modalDialog) {\r\n modalDialog.style.display = 'flex';\r\n modalDialog.style.flexDirection = 'column';\r\n modalDialog.style.minWidth = '500px';\r\n modalDialog.style.minHeight = '450px';\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // sonuc değiştiğinde ve viewport'lar hazırsa mesh'leri yükle\r\n if (changes['sonuc'] && this.viewportsReady && !this.meshesLoaded) {\r\n this.loadMeshesWhenReady();\r\n }\r\n }\r\n\r\n async ngAfterViewInit(): Promise {\r\n // Ana element için ResizeObserver kur - dialog boyutu değiştiğinde tüm viewport'ları güncelle\r\n this.setupMainResizeObserver();\r\n\r\n // İki FikoThreeJsComponent'i paralel yükle\r\n await Promise.all([\r\n this.loadViewport('A'),\r\n this.loadViewport('B')\r\n ]);\r\n }\r\n\r\n /**\r\n * Ana element için ResizeObserver kur\r\n * Dialog boyutu değiştiğinde tüm viewport'ları günceller\r\n */\r\n private setupMainResizeObserver(): void {\r\n const hostElement = this.elementRef.nativeElement as HTMLElement;\r\n if (!hostElement) return;\r\n\r\n this.resizeObserverMain = new ResizeObserver(() => {\r\n this.ngZone.runOutsideAngular(() => {\r\n // Viewport boyutlarını güncelle\r\n if (this.threeJsA) {\r\n this.fixRendererSize(this.threeJsA, 'A');\r\n }\r\n if (this.threeJsB) {\r\n this.fixRendererSize(this.threeJsB, 'B');\r\n }\r\n });\r\n });\r\n\r\n this.resizeObserverMain.observe(hostElement);\r\n\r\n // Parent'ı da izle (dialog container)\r\n const parent = hostElement.parentElement;\r\n if (parent) {\r\n this.resizeObserverMain.observe(parent);\r\n }\r\n }\r\n\r\n /**\r\n * Viewport'lar hazır olduğunda mesh'leri yükle\r\n */\r\n private loadMeshesWhenReady(): void {\r\n // Tüm veriler hazır mı kontrol et\r\n if (!this.sonuc || this.meshesLoaded) return;\r\n\r\n if (this.sahneA && this.sonuc.meshA) {\r\n this.addDiffMesh(this.sahneA, 'A');\r\n this.threeJsA?.ciz?.();\r\n }\r\n if (this.sahneB && this.sonuc.meshB) {\r\n this.addDiffMesh(this.sahneB, 'B');\r\n this.threeJsB?.ciz?.();\r\n }\r\n\r\n this.meshesLoaded = true;\r\n\r\n // Ekrana sığdır ve kameraları senkronize et\r\n setTimeout(() => {\r\n this.ekranaSigdir();\r\n\r\n // İkinci bir senkronizasyon - tüm render işlemleri tamamlandıktan sonra\r\n setTimeout(() => {\r\n if (this.syncEnabled) {\r\n // A'nın kamera durumunu al ve B'ye uygula (master-slave yaklaşımı)\r\n this.forceFullCameraSync();\r\n }\r\n }, 50);\r\n }, 100);\r\n }\r\n\r\n /**\r\n * Kameraları tam olarak senkronize et (zorla)\r\n * Master viewport olarak A kullanılır\r\n */\r\n private forceFullCameraSync(): void {\r\n const kameraA = this.threeJsA?.aktifKamera;\r\n const kameraB = this.threeJsB?.aktifKamera;\r\n const kontrolA = this.threeJsA?.aktifKontrol;\r\n const kontrolB = this.threeJsB?.aktifKontrol;\r\n\r\n if (!kameraA || !kameraB || !kontrolA || !kontrolB) return;\r\n\r\n // Pozisyon kopyala\r\n kameraB.position.copy(kameraA.position);\r\n\r\n // Quaternion kopyala (bakış yönü)\r\n kameraB.quaternion.copy(kameraA.quaternion);\r\n\r\n // Up vektörü kopyala\r\n kameraB.up.copy(kameraA.up);\r\n\r\n // Orthographic kamera için zoom kopyala\r\n if (kameraA.isOrthographicCamera && kameraB.isOrthographicCamera) {\r\n kameraB.zoom = kameraA.zoom;\r\n kameraB.updateProjectionMatrix();\r\n }\r\n\r\n // OrbitControls target kopyala\r\n if (kontrolA.target && kontrolB.target) {\r\n kontrolB.target.copy(kontrolA.target);\r\n }\r\n\r\n // OrbitControls güncelle\r\n kontrolB.update?.();\r\n\r\n // Render\r\n this.threeJsB?.ciz?.();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // ResizeObserver'ları temizle\r\n this.resizeObserverMain?.disconnect();\r\n this.resizeObserverA?.disconnect();\r\n this.resizeObserverB?.disconnect();\r\n\r\n this.componentRefA?.destroy();\r\n this.componentRefB?.destroy();\r\n }\r\n\r\n /**\r\n * Viewport yükle\r\n */\r\n private async loadViewport(panel: 'A' | 'B'): Promise {\r\n try {\r\n const { FikoThreeJsComponent } = await import('../../fiko-three-js.component');\r\n const { SahneStepViewer } = await import('../../Fiko3DComponent/sahne-step-viewer/SahneStepViewer');\r\n\r\n if (!FikoThreeJsComponent) return;\r\n\r\n const viewContainerRef = panel === 'A' ? this.viewContainerRefA : this.viewContainerRefB;\r\n viewContainerRef.clear();\r\n\r\n // Component oluştur\r\n const componentRef = viewContainerRef.createComponent(FikoThreeJsComponent, {\r\n environmentInjector: this.environmentInjector,\r\n injector: this.injector\r\n });\r\n\r\n // Referans kaydet\r\n if (panel === 'A') {\r\n this.componentRefA = componentRef;\r\n } else {\r\n this.componentRefB = componentRef;\r\n }\r\n\r\n // Input'ları ayarla\r\n const instance = componentRef.instance;\r\n if (instance) {\r\n instance.antiAlias = false;\r\n instance.enableShadows = false;\r\n instance.maxFPS = 60;\r\n instance.pixelRatio = 1;\r\n instance.enablePostProcessing = false;\r\n instance.enableFrustumCulling = true;\r\n instance.enableLOD = false;\r\n }\r\n\r\n // Host element boyutu - %100 dolduracak şekilde\r\n const hostElement = componentRef.location.nativeElement as HTMLElement;\r\n if (hostElement) {\r\n hostElement.style.width = '100%';\r\n hostElement.style.height = '100%';\r\n hostElement.style.display = 'block';\r\n hostElement.style.position = 'absolute';\r\n hostElement.style.top = '0';\r\n hostElement.style.left = '0';\r\n }\r\n\r\n componentRef.changeDetectorRef.detectChanges();\r\n\r\n // Sahne initialize\r\n this.initScene(instance, SahneStepViewer, panel);\r\n } catch (error) {\r\n console.error(`[FikoCadDiffDialog] Viewport ${panel} yüklenemedi:`, error);\r\n }\r\n }\r\n\r\n /**\r\n * Sahne initialize\r\n */\r\n private initScene(instance: any, SahneClass: any, panel: 'A' | 'B'): void {\r\n let attempts = 0;\r\n const maxAttempts = 30;\r\n\r\n const check = () => {\r\n attempts++;\r\n if (instance?.canvas?.nativeElement && instance?.sunucu) {\r\n this.createScene(instance, SahneClass, panel);\r\n } else if (attempts < maxAttempts) {\r\n setTimeout(check, 100);\r\n }\r\n };\r\n\r\n setTimeout(check, 50);\r\n }\r\n\r\n /**\r\n * Sahne oluştur\r\n */\r\n private createScene(instance: any, SahneClass: any, panel: 'A' | 'B'): void {\r\n try {\r\n const sahne = new SahneClass(instance);\r\n instance.sahneler.push(sahne);\r\n\r\n if (panel === 'A') {\r\n this.threeJsA = instance;\r\n this.sahneA = sahne;\r\n } else {\r\n this.threeJsB = instance;\r\n this.sahneB = sahne;\r\n }\r\n\r\n // Renderer boyutunu düzelt\r\n this.fixRendererSize(instance, panel);\r\n\r\n // Işık ekle\r\n this.addLights(sahne);\r\n\r\n // NOT: Mesh'ler burada değil, onReady'de veya loadMeshesWhenReady'de yüklenecek\r\n // çünkü sonuc input'u henüz set edilmemiş olabilir\r\n\r\n // Render\r\n instance.ciz?.();\r\n\r\n // Hazır olmasını bekle\r\n this.waitForReady(instance, panel);\r\n } catch (error) {\r\n console.error(`[FikoCadDiffDialog] Sahne ${panel} oluşturulamadı:`, error);\r\n }\r\n }\r\n\r\n /**\r\n * Işık ekle\r\n */\r\n private addLights(sahne: any): void {\r\n const ambient = new THREE.AmbientLight(0xffffff, 0.6);\r\n sahne.add(ambient);\r\n\r\n const directional = new THREE.DirectionalLight(0xffffff, 0.8);\r\n directional.position.set(100, 100, 100);\r\n sahne.add(directional);\r\n\r\n const directional2 = new THREE.DirectionalLight(0xffffff, 0.4);\r\n directional2.position.set(-100, -100, -100);\r\n sahne.add(directional2);\r\n }\r\n\r\n /**\r\n * Tüm mesh türlerini sahneye ekle (diff + original)\r\n */\r\n private addDiffMesh(sahne: any, panel: 'A' | 'B'): void {\r\n const defaultMode = panel === 'A' ? this.panelAMode : this.panelBMode;\r\n\r\n // diff_both modunda hem A hem B görünür\r\n const showDiffA = defaultMode === 'diff_a' || defaultMode === 'diff_both';\r\n const showDiffB = defaultMode === 'diff_b' || defaultMode === 'diff_both';\r\n\r\n // Diff Mesh A\r\n this.addMeshToScene(sahne, this.sonuc?.meshA, 'DIFF_MESH_A', 'DIFF_EDGES_A', true, showDiffA);\r\n\r\n // Diff Mesh B\r\n this.addMeshToScene(sahne, this.sonuc?.meshB, 'DIFF_MESH_B', 'DIFF_EDGES_B', true, showDiffB);\r\n\r\n // Original Model A - ana sahnedeki modelin klonu (materyaller dahil)\r\n if (this.modelA?.nesne) {\r\n this.addOriginalModelToScene(sahne, this.modelA.nesne, 'ORIGINAL_GROUP_A', defaultMode === 'original_a');\r\n }\r\n\r\n // Original Model B - ana sahnedeki modelin klonu (materyaller dahil)\r\n if (this.modelB?.nesne) {\r\n this.addOriginalModelToScene(sahne, this.modelB.nesne, 'ORIGINAL_GROUP_B', defaultMode === 'original_b');\r\n }\r\n }\r\n\r\n /**\r\n * Orijinal modeli sahneye ekle (materyaller dahil tam klon)\r\n */\r\n private addOriginalModelToScene(sahne: any, sourceModel: THREE.Object3D, groupName: string, visible: boolean): void {\r\n // Daha önce eklenmiş mi kontrol et\r\n let existingGroup: THREE.Object3D | null = null;\r\n sahne.traverse((obj: THREE.Object3D) => {\r\n if (obj.name === groupName) existingGroup = obj;\r\n });\r\n if (existingGroup) return;\r\n\r\n // Modeli tamamen klonla (materyaller dahil)\r\n const clone = sourceModel.clone(true);\r\n clone.name = groupName;\r\n clone.visible = visible;\r\n\r\n // Tüm child mesh'leri görünür yap (ana sahnede gizlenmiş olabilir)\r\n clone.traverse((child) => {\r\n if (child instanceof THREE.Mesh) {\r\n child.visible = true;\r\n // Frustum culling kapat (küçük viewport için)\r\n child.frustumCulled = false;\r\n }\r\n });\r\n\r\n sahne.add(clone);\r\n }\r\n\r\n /**\r\n * Mesh'i sahneye ekle\r\n */\r\n private addMeshToScene(\r\n sahne: any,\r\n geometry: THREE.BufferGeometry | undefined,\r\n meshName: string,\r\n edgeName: string,\r\n useVertexColors: boolean,\r\n visible: boolean\r\n ): void {\r\n if (!geometry) return;\r\n\r\n // Daha önce eklenmiş mi kontrol et\r\n let existingMesh: THREE.Object3D | null = null;\r\n sahne.traverse((obj: THREE.Object3D) => {\r\n if (obj.name === meshName) existingMesh = obj;\r\n });\r\n if (existingMesh) return;\r\n\r\n // Material\r\n const material = useVertexColors\r\n ? new THREE.MeshStandardMaterial({\r\n vertexColors: true,\r\n side: THREE.DoubleSide,\r\n roughness: 0.55,\r\n metalness: 0.15,\r\n polygonOffset: true,\r\n polygonOffsetFactor: 4,\r\n polygonOffsetUnits: 4,\r\n envMapIntensity: 0.6\r\n })\r\n : new THREE.MeshStandardMaterial({\r\n color: 0x888888,\r\n side: THREE.DoubleSide,\r\n roughness: 0.55,\r\n metalness: 0.15,\r\n polygonOffset: true,\r\n polygonOffsetFactor: 4,\r\n polygonOffsetUnits: 4,\r\n envMapIntensity: 0.6\r\n });\r\n\r\n const mesh = new THREE.Mesh(geometry, material);\r\n mesh.name = meshName;\r\n mesh.visible = visible;\r\n sahne.add(mesh);\r\n\r\n // Edge'leri ekle\r\n if (this.showEdges) {\r\n const edgeGeo = new THREE.EdgesGeometry(geometry, 30);\r\n const edgeMat = new THREE.LineBasicMaterial({\r\n color: new THREE.Color(this.edgeColor.r, this.edgeColor.g, this.edgeColor.b),\r\n depthTest: true,\r\n depthWrite: false\r\n });\r\n const edges = new THREE.LineSegments(edgeGeo, edgeMat);\r\n edges.name = edgeName;\r\n edges.renderOrder = 1;\r\n edges.visible = visible;\r\n sahne.add(edges);\r\n }\r\n }\r\n\r\n /**\r\n * Object3D'den geometry çıkar (merged)\r\n */\r\n private extractGeometryFromObject(obj: THREE.Object3D): THREE.BufferGeometry | null {\r\n if (!obj) return null;\r\n\r\n const geometries: THREE.BufferGeometry[] = [];\r\n\r\n obj.traverse((child) => {\r\n if (child instanceof THREE.Mesh && child.geometry) {\r\n try {\r\n // Geometry'yi clone et\r\n const geo = child.geometry.clone();\r\n\r\n // Position attribute kontrolü\r\n if (!geo.attributes.position) return;\r\n\r\n // World matrix güncelle ve uygula\r\n child.updateWorldMatrix(true, false);\r\n\r\n // Matrix'i oluştur (parent chain dahil)\r\n const worldMatrix = new THREE.Matrix4();\r\n worldMatrix.copy(child.matrixWorld);\r\n\r\n geo.applyMatrix4(worldMatrix);\r\n geometries.push(geo);\r\n } catch (e) {\r\n // Clone başarısız olursa atla\r\n }\r\n }\r\n });\r\n\r\n if (geometries.length === 0) return null;\r\n if (geometries.length === 1) return geometries[0];\r\n\r\n // Birleştir\r\n try {\r\n return mergeGeometries(geometries, false);\r\n } catch (e) {\r\n // Birleştirme başarısız olursa ilk geometry'yi döndür\r\n return geometries[0];\r\n }\r\n }\r\n\r\n /**\r\n * Hazır olmasını bekle\r\n */\r\n private waitForReady(instance: any, panel: 'A' | 'B'): void {\r\n let attempts = 0;\r\n const maxAttempts = 50;\r\n\r\n const check = () => {\r\n attempts++;\r\n if (instance?.sahneler?.[0]) {\r\n this.onReady(instance, panel);\r\n } else if (attempts < maxAttempts) {\r\n setTimeout(check, 100);\r\n }\r\n };\r\n\r\n setTimeout(check, 200);\r\n }\r\n\r\n /**\r\n * Viewport hazır\r\n */\r\n private onReady(instance: any, panel: 'A' | 'B'): void {\r\n this.fixRendererSize(instance, panel);\r\n\r\n // ResizeObserver kur - boyut değişikliklerini dinle\r\n this.setupResizeObserver(panel);\r\n\r\n if (panel === 'A') {\r\n this.hazirA = true;\r\n } else {\r\n this.hazirB = true;\r\n }\r\n\r\n // İkisi de hazır olduğunda\r\n if (this.hazirA && this.hazirB) {\r\n this.viewportsReady = true;\r\n this.setupCameraSync();\r\n\r\n // Mesh'ler henüz yüklenmediyse ve sonuc varsa yükle\r\n if (this.sonuc && !this.meshesLoaded) {\r\n this.loadMeshesWhenReady();\r\n } else {\r\n this.ekranaSigdir();\r\n }\r\n }\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n /**\r\n * Renderer boyutunu container'a göre ayarla\r\n */\r\n private fixRendererSize(instance: any, panel?: 'A' | 'B'): void {\r\n // Container'dan gerçek boyutu al\r\n const containerRef = panel === 'A' ? this.viewerContainerARef : this.viewerContainerBRef;\r\n const container = containerRef?.nativeElement;\r\n\r\n let width = 200;\r\n let height = 150;\r\n\r\n if (container) {\r\n const rect = container.getBoundingClientRect();\r\n width = Math.floor(rect.width) || 200;\r\n height = Math.floor(rect.height) || 150;\r\n }\r\n\r\n if (instance.canvas?.nativeElement) {\r\n const canvas = instance.canvas.nativeElement as HTMLCanvasElement;\r\n canvas.style.width = `${width}px`;\r\n canvas.style.height = `${height}px`;\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n\r\n instance.sunucu?.setSize?.(width, height, false);\r\n\r\n if (instance.aktifKamera?.isOrthographicCamera) {\r\n instance.aktifKamera.left = width / -2;\r\n instance.aktifKamera.right = width / 2;\r\n instance.aktifKamera.top = height / 2;\r\n instance.aktifKamera.bottom = height / -2;\r\n instance.aktifKamera.updateProjectionMatrix();\r\n }\r\n\r\n instance.aktifKontrol?.handleResize?.();\r\n instance.ciz?.();\r\n }\r\n\r\n /**\r\n * ResizeObserver kur - container boyutu değiştiğinde renderer'ı güncelle\r\n */\r\n private setupResizeObserver(panel: 'A' | 'B'): void {\r\n const containerRef = panel === 'A' ? this.viewerContainerARef : this.viewerContainerBRef;\r\n const instance = panel === 'A' ? this.threeJsA : this.threeJsB;\r\n const container = containerRef?.nativeElement;\r\n\r\n if (!container || !instance) return;\r\n\r\n const observer = new ResizeObserver(() => {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.fixRendererSize(instance, panel);\r\n });\r\n });\r\n\r\n observer.observe(container);\r\n\r\n if (panel === 'A') {\r\n this.resizeObserverA = observer;\r\n } else {\r\n this.resizeObserverB = observer;\r\n }\r\n }\r\n\r\n /**\r\n * Kamera senkronizasyonunu kur\r\n */\r\n private setupCameraSync(): void {\r\n const kontrolA = this.threeJsA?.aktifKontrol;\r\n const kontrolB = this.threeJsB?.aktifKontrol;\r\n\r\n if (!kontrolA || !kontrolB) return;\r\n\r\n kontrolA.addEventListener?.('change', () => {\r\n if (this.syncEnabled && !this.isSyncing) {\r\n this.isSyncing = true;\r\n this.syncCamera(this.threeJsA, this.threeJsB);\r\n this.isSyncing = false;\r\n }\r\n });\r\n\r\n kontrolB.addEventListener?.('change', () => {\r\n if (this.syncEnabled && !this.isSyncing) {\r\n this.isSyncing = true;\r\n this.syncCamera(this.threeJsB, this.threeJsA);\r\n this.isSyncing = false;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Kamerayı senkronize et\r\n */\r\n private syncCamera(source: any, target: any): void {\r\n const sourceKamera = source?.aktifKamera;\r\n const sourceKontrol = source?.aktifKontrol;\r\n const targetKamera = target?.aktifKamera;\r\n const targetKontrol = target?.aktifKontrol;\r\n\r\n if (!sourceKamera || !targetKamera || !sourceKontrol || !targetKontrol) return;\r\n\r\n // Pozisyon kopyala\r\n targetKamera.position.copy(sourceKamera.position);\r\n\r\n // Quaternion kopyala (bakış yönü)\r\n targetKamera.quaternion.copy(sourceKamera.quaternion);\r\n\r\n // Up vektörü kopyala (önemli - döndürme eksenini belirler)\r\n targetKamera.up.copy(sourceKamera.up);\r\n\r\n // Orthographic kamera için zoom kopyala\r\n if (sourceKamera.isOrthographicCamera && targetKamera.isOrthographicCamera) {\r\n targetKamera.zoom = sourceKamera.zoom;\r\n targetKamera.updateProjectionMatrix();\r\n }\r\n\r\n // OrbitControls target kopyala\r\n if (sourceKontrol.target && targetKontrol.target) {\r\n targetKontrol.target.copy(sourceKontrol.target);\r\n }\r\n\r\n // OrbitControls güncelle\r\n targetKontrol.update?.();\r\n target.ciz?.();\r\n }\r\n\r\n /**\r\n * Ekrana sığdır - Her iki viewport da AYNI konuma sığdırılır\r\n */\r\n ekranaSigdir(): void {\r\n // Her iki mesh'i kapsayan ortak bounding box hesapla\r\n const combinedBox = new THREE.Box3();\r\n let hasMesh = false;\r\n\r\n // Sahne A'dan mesh'leri ekle\r\n if (this.sahneA) {\r\n this.sahneA.traverse((obj: any) => {\r\n if (obj instanceof THREE.Mesh && obj.geometry) {\r\n combinedBox.expandByObject(obj);\r\n hasMesh = true;\r\n }\r\n });\r\n }\r\n\r\n // Sahne B'den mesh'leri ekle\r\n if (this.sahneB) {\r\n this.sahneB.traverse((obj: any) => {\r\n if (obj instanceof THREE.Mesh && obj.geometry) {\r\n combinedBox.expandByObject(obj);\r\n hasMesh = true;\r\n }\r\n });\r\n }\r\n\r\n if (!hasMesh) return;\r\n\r\n const center = new THREE.Vector3();\r\n const size = new THREE.Vector3();\r\n combinedBox.getCenter(center);\r\n combinedBox.getSize(size);\r\n\r\n const maxDim = Math.max(size.x, size.y, size.z);\r\n if (maxDim === 0) return;\r\n\r\n // Her iki viewport'u da AYNI konuma sığdır\r\n this.fitViewportToBox(this.threeJsA, center, maxDim);\r\n this.fitViewportToBox(this.threeJsB, center, maxDim);\r\n }\r\n\r\n /**\r\n * Viewport'u belirtilen merkez ve boyuta sığdır\r\n */\r\n private fitViewportToBox(threeJs: any, center: THREE.Vector3, maxDim: number): void {\r\n if (!threeJs) return;\r\n\r\n const kamera = threeJs.aktifKamera;\r\n const kontrol = threeJs.aktifKontrol;\r\n\r\n if (!kamera || !kontrol) return;\r\n\r\n // Önce OrbitControls target'ını ayarla (kamera pozisyonundan ÖNCE)\r\n if (kontrol.target) {\r\n kontrol.target.set(center.x, center.y, center.z);\r\n }\r\n\r\n // Kamera pozisyonunu ayarla - isometrik görünüm\r\n const distance = maxDim * 2;\r\n const cameraPos = new THREE.Vector3(\r\n center.x + distance,\r\n center.y + distance,\r\n center.z + distance\r\n );\r\n kamera.position.copy(cameraPos);\r\n\r\n // Kamerayı merkeze baktır (önemli - bakış yönünü ayarlar)\r\n kamera.lookAt(center);\r\n\r\n if (kamera.isOrthographicCamera) {\r\n const viewWidth = kamera.right - kamera.left;\r\n const viewHeight = kamera.top - kamera.bottom;\r\n const zoomX = viewWidth / (maxDim * 1.5);\r\n const zoomY = viewHeight / (maxDim * 1.5);\r\n kamera.zoom = Math.min(zoomX, zoomY);\r\n kamera.updateProjectionMatrix();\r\n }\r\n\r\n // OrbitControls'u güncelle (pozisyon ve target ayarlandıktan sonra)\r\n kontrol.update?.();\r\n threeJs.ciz?.();\r\n }\r\n\r\n kameraSifirla(): void {\r\n this.ekranaSigdir();\r\n }\r\n\r\n toggleSync(): void {\r\n this.syncEnabled = !this.syncEnabled;\r\n this.cd.detectChanges();\r\n }\r\n\r\n /**\r\n * Panel görünüm modu değiştiğinde\r\n */\r\n onPanelModeChange(panel: 'A' | 'B'): void {\r\n const mode = panel === 'A' ? this.panelAMode : this.panelBMode;\r\n const sahne = panel === 'A' ? this.sahneA : this.sahneB;\r\n const threeJs = panel === 'A' ? this.threeJsA : this.threeJsB;\r\n\r\n if (!sahne) return;\r\n\r\n // Tüm mesh'leri gizle\r\n this.hideAllMeshesInScene(sahne);\r\n\r\n // Seçilen moda göre görünürlüğü ayarla\r\n switch (mode) {\r\n case 'diff_a':\r\n this.showMeshByName(sahne, 'DIFF_MESH_A', true);\r\n this.showMeshByName(sahne, 'DIFF_EDGES_A', true);\r\n break;\r\n case 'diff_b':\r\n this.showMeshByName(sahne, 'DIFF_MESH_B', true);\r\n this.showMeshByName(sahne, 'DIFF_EDGES_B', true);\r\n break;\r\n case 'diff_both':\r\n // Hem eklenen hem silinen - ikisini birden göster\r\n this.showMeshByName(sahne, 'DIFF_MESH_A', true);\r\n this.showMeshByName(sahne, 'DIFF_EDGES_A', true);\r\n this.showMeshByName(sahne, 'DIFF_MESH_B', true);\r\n this.showMeshByName(sahne, 'DIFF_EDGES_B', true);\r\n break;\r\n case 'original_a':\r\n this.showMeshByName(sahne, 'ORIGINAL_GROUP_A', true);\r\n break;\r\n case 'original_b':\r\n this.showMeshByName(sahne, 'ORIGINAL_GROUP_B', true);\r\n break;\r\n }\r\n\r\n threeJs?.ciz?.();\r\n this.cd.detectChanges();\r\n }\r\n\r\n /**\r\n * Sahnedeki tüm diff/original mesh'leri gizle\r\n */\r\n private hideAllMeshesInScene(sahne: any): void {\r\n const meshNames = [\r\n 'DIFF_MESH_A', 'DIFF_EDGES_A',\r\n 'DIFF_MESH_B', 'DIFF_EDGES_B',\r\n 'ORIGINAL_GROUP_A', 'ORIGINAL_GROUP_B'\r\n ];\r\n\r\n sahne.traverse((obj: THREE.Object3D) => {\r\n if (meshNames.includes(obj.name)) {\r\n obj.visible = false;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * İsme göre mesh görünürlüğünü ayarla\r\n */\r\n private showMeshByName(sahne: any, name: string, visible: boolean): void {\r\n sahne.traverse((obj: THREE.Object3D) => {\r\n if (obj.name === name) {\r\n obj.visible = visible;\r\n }\r\n });\r\n }\r\n\r\n formatSayi(sayi: number): string {\r\n if (sayi >= 1000000) return (sayi / 1000000).toFixed(1) + 'M';\r\n if (sayi >= 1000) return (sayi / 1000).toFixed(1) + 'K';\r\n return sayi.toString();\r\n }\r\n\r\n formatSayiDec(sayi: number, decimals: number = 2): string {\r\n if (sayi >= 1000000) return (sayi / 1000000).toFixed(1) + 'M';\r\n if (sayi >= 1000) return (sayi / 1000).toFixed(1) + 'K';\r\n return sayi.toFixed(decimals);\r\n }\r\n\r\n formatMesafe(mm: number): string {\r\n if (mm <= 0) return '0 mm';\r\n if (mm >= 1000) return (mm / 1000).toFixed(2) + ' m';\r\n if (mm >= 10) return mm.toFixed(1) + ' mm';\r\n if (mm >= 1) return mm.toFixed(2) + ' mm';\r\n if (mm >= 0.01) return mm.toFixed(3) + ' mm';\r\n return mm.toExponential(1) + ' mm';\r\n }\r\n\r\n rgbToHex(rgb: RGB): string {\r\n const toHex = (c: number) => {\r\n const hex = Math.round(c * 255).toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n };\r\n return '#' + toHex(rgb.r) + toHex(rgb.g) + toHex(rgb.b);\r\n }\r\n}\r\n"],"names":["i2"],"mappings":"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"}