*/}}
Browse Source

Fix viewing camera undo crash

YimingWu 2 years ago
parent
commit
e1866854b0
1 changed files with 15 additions and 7 deletions
  1. 15 7
      resources/la_widgets_viewers.c

+ 15 - 7
resources/la_widgets_viewers.c

@@ -57,6 +57,7 @@ void la_RootObjectDrawFullscreenQuad(tnsOffscreen* DeferredOffScr,tnsCamera* c,
 
 void la_RootObjectDraw(laBoxedTheme *bt, tnsObject *root, laUiItem* ui){
     laCanvasExtra *e = ui->Extra;
+    la_3DViewEnsureCamera(e);
     tnsCamera *c = e->UsingCamera ? e->UsingCamera : e->ViewingCamera;
     int W, H;
     W = ui->R - ui->L;
@@ -538,6 +539,15 @@ void laDefault3DViewOverlay(laUiItem *ui){
         //laShowItemFull(gu, gcr, e, "npr_line_mode", LA_WIDGET_ENUM_CYCLE, 0, 0, 0);
     }
 }
+void la_3DViewEnsureCamera(laCanvasExtra* e){
+    if(e->ViewingCamera) return;
+    tnsVector3d pos={-15, -20, 7};
+    tnsCamera* c= tnsCreateCamera(0, "VIEWING_CAMERA", rad(50), LA_COLOR3(pos), rad(70), 0, rad(-40), 25);
+    memAssignRef(e,&e->ViewingCamera,c);
+    tnsVector3d target={0,0,0}; tnsVector3d up={0,0,1};
+    tnsLookAt(e->ViewingCamera, target, up);
+    e->ViewingCamera->FocusDistance=tnsDist3dv(pos,target);
+}
 void la_3DViewInit(laUiItem *ui){
     laCanvasExtra *e = ui->Extra;
 
@@ -550,12 +560,7 @@ void la_3DViewInit(laUiItem *ui){
     ui->Extra = e;
     e->ParentUi = ui;
 
-    tnsVector3d pos={-15, -20, 7};
-    tnsCamera* c= tnsCreateCamera(0, "VIEWING_CAMERA", rad(50), LA_COLOR3(pos), rad(70), 0, rad(-40), 25);
-    memAssignRef(e,&e->ViewingCamera,c);
-    tnsVector3d target={0,0,0}; tnsVector3d up={0,0,1};
-    tnsLookAt(e->ViewingCamera, target, up);
-    e->ViewingCamera->FocusDistance=tnsDist3dv(pos,target);
+    la_3DViewEnsureCamera(e);
 
     e->GridSize = 10;
     e->GridSpan = 15;
@@ -568,6 +573,9 @@ void la_3DViewInit(laUiItem *ui){
     e->HeightCoeff = 10;
 
     laFirstColumn(laAddTabPage(ui, "New Group"));
+
+    laRecordDifferences(0,"tns.world");
+    laPushDifferences("Created camera for 3D view widget,",0);
 }
 void la_3DViewDestroy(laUiItem *ui){
     laCanvasExtra *e = ui->Extra;
@@ -575,7 +583,7 @@ void la_3DViewDestroy(laUiItem *ui){
     tnsDelete2DOffscreen(e->OffScr);
     tnsDelete2DOffscreen(e->OffScrShadow);
     
-    tnsDestroyObject(e->ViewingCamera);
+    if(e->ViewingCamera) tnsDestroyObject(e->ViewingCamera);
 
     memFree(e);
 }