From 0f2a7226cdd2c67926d43a5a79d3bfb6c324129b Mon Sep 17 00:00:00 2001 From: zamtmn Date: Mon, 17 Oct 2022 19:03:10 +0500 Subject: [PATCH] Fix #6 --- .../zengine/zgl/drawers/uzgldrawergeneral.pas | 8 +-- .../zgl/drawers/uzgldrawergeneral2d.pas | 68 ++++++++----------- .../zengine/zgl/drawers/uzgldrawerogl.pas | 12 ++-- .../zgl/drawers/uzglviewareageneral.pas | 12 ++-- 4 files changed, 41 insertions(+), 59 deletions(-) diff --git a/cad_source/zengine/zgl/drawers/uzgldrawergeneral.pas b/cad_source/zengine/zgl/drawers/uzgldrawergeneral.pas index 69ed336d3..2d44a003e 100644 --- a/cad_source/zengine/zgl/drawers/uzgldrawergeneral.pas +++ b/cad_source/zengine/zgl/drawers/uzgldrawergeneral.pas @@ -75,8 +75,8 @@ TZGLGeneralDrawer=class(TZGLAbstractDrawer) procedure SetOGLMatrix(const cam:GDBObjCamera;const w,h:integer);override; procedure PostRenderDraw;override; - procedure pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLCS:Boolean=False);overload;override; - procedure pushMatrixAndSetTransform(Transform:DMatrix4F;ResetLCS:Boolean=False);overload;override; + procedure pushMatrixAndSetTransform(Transform:DMatrix4D;FromOneMatrix:Boolean=False);overload;override; + procedure pushMatrixAndSetTransform(Transform:DMatrix4F;FromOneMatrix:Boolean=False);overload;override; procedure popMatrix;override; end; TLCSProp=record @@ -95,10 +95,10 @@ implementation procedure TZGLGeneralDrawer.popMatrix; begin end; -procedure TZGLGeneralDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLCS:Boolean=False); +procedure TZGLGeneralDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;FromOneMatrix:Boolean=False); begin end; -procedure TZGLGeneralDrawer.pushMatrixAndSetTransform(Transform:DMatrix4F;ResetLCS:Boolean=False); +procedure TZGLGeneralDrawer.pushMatrixAndSetTransform(Transform:DMatrix4F;FromOneMatrix:Boolean=False); begin end; function TZGLGeneralDrawer.GetLLPrimitivesCreator:TLLPrimitivesCreatorAbstract; diff --git a/cad_source/zengine/zgl/drawers/uzgldrawergeneral2d.pas b/cad_source/zengine/zgl/drawers/uzgldrawergeneral2d.pas index 626f35e1d..10c7152c9 100644 --- a/cad_source/zengine/zgl/drawers/uzgldrawergeneral2d.pas +++ b/cad_source/zengine/zgl/drawers/uzgldrawergeneral2d.pas @@ -61,8 +61,8 @@ TZGLGeneral2DDrawer=class(TZGLGeneralDrawer) procedure TranslateCoord2D(const tx,ty:single);override; procedure ScaleCoord2D(const sx,sy:single);override; - procedure pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLCS:Boolean=False);overload;override; - procedure pushMatrixAndSetTransform(Transform:DMatrix4F;ResetLCS:Boolean=False);overload;override; + procedure pushMatrixAndSetTransform(Transform:DMatrix4D;FromOneMatrix:Boolean=False);overload;override; + procedure pushMatrixAndSetTransform(Transform:DMatrix4F;FromOneMatrix:Boolean=False);overload;override; procedure DisableLCS(var matrixs:tmatrixs);overload;override; procedure EnableLCS(var matrixs:tmatrixs);overload;override; @@ -590,53 +590,41 @@ constructor TZGLGeneral2DDrawer.create; mstackindex:=-1; end; -procedure TZGLGeneral2DDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLCS:Boolean=False); +procedure TZGLGeneral2DDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;FromOneMatrix:Boolean=False); begin - inc(mstackindex); - mstack[mstackindex]:=matr; - if ResetLCS{ and (not LCS.notuseLCS)} then begin - //matr:=matrwoLCS; - LCS.notuseLCS:=true; - LCS.CurrentCamCSOffset:=NulVertex; - LCS.CurrentCamCSOffsetS:=NulVertex3S; - end; - matr:=MatrixMultiply(matr,Transform); + inc(mstackindex); + mstack[mstackindex]:=matr; + if FromOneMatrix then + matr:=OneMatrix; + matr:=MatrixMultiply(matr,Transform); end; -procedure TZGLGeneral2DDrawer.pushMatrixAndSetTransform(Transform:DMatrix4F;ResetLCS:Boolean=False); +procedure TZGLGeneral2DDrawer.pushMatrixAndSetTransform(Transform:DMatrix4F;FromOneMatrix:Boolean=False); begin - inc(mstackindex); - mstack[mstackindex]:=matr; - if ResetLCS{ and (not LCS.notuseLCS)} then begin - //matr:=matrwoLCS; - LCS.notuseLCS:=true; - LCS.CurrentCamCSOffset:=NulVertex; - LCS.CurrentCamCSOffsetS:=NulVertex3S; - end; - matr:=MatrixMultiply(matr,Transform); + inc(mstackindex); + mstack[mstackindex]:=matr; + if FromOneMatrix then + matr:=OneMatrix; + matr:=MatrixMultiply(matr,Transform); end; procedure TZGLGeneral2DDrawer.popMatrix; begin - if mstackindex>-1 then - begin - matr:=mstack[mstackindex]; - dec(mstackindex); - end; - LCS:=LCSSave; + if mstackindex>-1 then begin + matr:=mstack[mstackindex]; + dec(mstackindex); + end; + LCS:=LCSSave; end; procedure TZGLGeneral2DDrawer.DisableLCS(var matrixs:tmatrixs); var m:DMatrix4D; begin - m:=uzegeometry.MatrixMultiply(matrwithLCS,ProjMatrwithLCS); + {m:=uzegeometry.MatrixMultiply(matrwoLCS,ProjMatrwoLCS); sx:=(m[0].v[0]/m[3].v[3]*0.5)*matrixs.pviewport.v[2] ; sy:=-(m[1].v[1]/m[3].v[3]*0.5)*matrixs.pviewport.v[3] ; tx:=(m[3].v[0]/m[3].v[3]*0.5+0.5)*matrixs.pviewport.v[2]; - - ty:=matrixs.pviewport.v[3]-(m[3].v[1]/m[3].v[3]*0.5+0.5)*matrixs.pviewport.v[3]; - - matrixs.pmodelMatrix^:=matrwithLCS; - matrixs.pprojMatrix^:=ProjMatrwithLCS; - + ty:=matrixs.pviewport.v[3]-(m[3].v[1]/m[3].v[3]*0.5+0.5)*matrixs.pviewport.v[3];} + matrixs.pmodelMatrix^:=matrWithLCS; + matrixs.pprojMatrix^:=ProjMatrWithLCS; LCS.notuseLCS:=true; LCS.CurrentCamCSOffset:=NulVertex; LCS.CurrentCamCSOffsetS:=NulVertex3S; @@ -645,15 +633,13 @@ procedure TZGLGeneral2DDrawer.EnableLCS(var matrixs:tmatrixs); var m:DMatrix4D; begin - m:=uzegeometry.MatrixMultiply(matrwoLCS,ProjMatrwoLCS); + (*m:=uzegeometry.MatrixMultiply({matrWithLCS,ProjMatrWithLCS}matrixs.pmodelMatrix^,matrixs.pprojMatrix^); sx:=(m[0].v[0]/m[3].v[3]*0.5)*matrixs.pviewport.v[2] ; sy:=-(m[1].v[1]/m[3].v[3]*0.5)*matrixs.pviewport.v[3] ; tx:=(m[3].v[0]/m[3].v[3]*0.5+0.5)*matrixs.pviewport.v[2]; - ty:=matrixs.pviewport.v[3]-(m[3].v[1]/m[3].v[3]*0.5+0.5)*matrixs.pviewport.v[3]; - - matrixs.pmodelMatrix^:=matrwoLCS; - matrixs.pprojMatrix^:=ProjMatrwoLCS; - + ty:=matrixs.pviewport.v[3]-(m[3].v[1]/m[3].v[3]*0.5+0.5)*matrixs.pviewport.v[3];*) + matrixs.pmodelMatrix^:=matrWoLCS; + matrixs.pprojMatrix^:=ProjMatrWoLCS; LCS:=LCSSave; end; diff --git a/cad_source/zengine/zgl/drawers/uzgldrawerogl.pas b/cad_source/zengine/zgl/drawers/uzgldrawerogl.pas index 7b041e450..e6aed3c03 100644 --- a/cad_source/zengine/zgl/drawers/uzgldrawerogl.pas +++ b/cad_source/zengine/zgl/drawers/uzgldrawerogl.pas @@ -108,8 +108,8 @@ TZGLOpenGLDrawer=class(TZGLGeneralDrawer) procedure SetOGLMatrix(const cam:GDBObjCamera;const w,h:integer);override; {} - procedure pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLCS:Boolean=False);overload;override; - procedure pushMatrixAndSetTransform(Transform:DMatrix4F;ResetLCS:Boolean=False);overload;override; + procedure pushMatrixAndSetTransform(Transform:DMatrix4D;FromOneMatrix:Boolean=False);overload;override; + procedure pushMatrixAndSetTransform(Transform:DMatrix4F;FromOneMatrix:Boolean=False);overload;override; procedure DisableLCS(var matrixs:tmatrixs);overload;override; procedure EnableLCS(var matrixs:tmatrixs);overload;override; procedure popMatrix;override; @@ -119,10 +119,10 @@ TZGLOpenGLDrawer=class(TZGLGeneralDrawer) code:integer; implementation //uses log; -procedure TZGLOpenGLDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLCS:Boolean=False); +procedure TZGLOpenGLDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;FromOneMatrix:Boolean=False); begin oglsm.myglPushMatrix; - if ResetLCS {and (not LCS.notuseLCS)} then begin + if FromOneMatrix {and (not LCS.notuseLCS)} then begin oglsm.myglLoadMatrixd(@mm); {LCS.notuseLCS:=true; LCS.CurrentCamCSOffset:=NulVertex; @@ -130,10 +130,10 @@ procedure TZGLOpenGLDrawer.pushMatrixAndSetTransform(Transform:DMatrix4D;ResetLC end; oglsm.myglMultMatrixD(Transform) end; -procedure TZGLOpenGLDrawer.pushMatrixAndSetTransform(Transform:DMatrix4F;ResetLCS:Boolean=False); +procedure TZGLOpenGLDrawer.pushMatrixAndSetTransform(Transform:DMatrix4F;FromOneMatrix:Boolean=False); begin oglsm.myglPushMatrix; - if ResetLCS and (not LCS.notuseLCS) then begin + if FromOneMatrix and (not LCS.notuseLCS) then begin oglsm.myglLoadMatrixd(@mm); {LCS.notuseLCS:=true; LCS.CurrentCamCSOffset:=NulVertex; diff --git a/cad_source/zengine/zgl/drawers/uzglviewareageneral.pas b/cad_source/zengine/zgl/drawers/uzglviewareageneral.pas index 4def91c05..b880e2cf5 100644 --- a/cad_source/zengine/zgl/drawers/uzglviewareageneral.pas +++ b/cad_source/zengine/zgl/drawers/uzglviewareageneral.pas @@ -315,14 +315,10 @@ procedure TGeneralViewArea.showcursor(var DC:TDrawContext); tempplane.v[3]:=(tempplane.v[3]-param.mousefrustumLCS[4].v[3])/2; {курсор фрустума выделения} if param.md.mousein then - if (param.md.mode and MGetSelectObject) <> 0 then - begin - {_NotUseLCS:=LCS.NotUseLCS; - LCS.NotUseLCS:=true;} - dc.drawer.DisableLCS(dc.DrawingContext.matrixs); - drawfrustustum(param.mousefrustumLCS,dc); - //LCS.NotUseLCS:=_NotUseLCS; - dc.drawer.EnableLCS(dc.DrawingContext.matrixs); + if (param.md.mode and MGetSelectObject) <> 0 then begin + dc.drawer.DisableLCS(dc.DrawingContext.matrixs); + drawfrustustum(param.mousefrustumLCS,dc); + dc.drawer.EnableLCS(dc.DrawingContext.matrixs); end; {оси курсора} {_NotUseLCS:=LCS.NotUseLCS;