diff --git a/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.cpp b/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.cpp index dd4d0089..57fb7236 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.cpp +++ b/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.cpp @@ -5,6 +5,7 @@ // please include "napi/native_api.h". #include "Axis.h" +#include "Graphic3d_NameOfMaterial.hxx" #include "Prs3d_DatumMode.hxx" #include "Quantity_NameOfColor.hxx" @@ -16,9 +17,6 @@ namespace NativeOpenCAX { Axis::Axis() : axiPlacement(nullptr), axiTrihedron(nullptr), axiViewCube(nullptr) {} Axis::~Axis() {} -void Axis::SetAxisTextStyle(Handle(Prs3d_TextAspect) _textStyle){ - textStyle=_textStyle; -} bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) { try { //坐标显示文本 @@ -27,7 +25,7 @@ bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) { const char16_t z_Axis[] = u"Z"; // 创建场景中心参考坐标系 gp_Ax2 theAxis; - double theSize =200; // 大小 + double theSize =250; // 大小 // 设置原点 theAxis.SetLocation(gp_Pnt(0, 0, 0)); // 以世界坐标轴为准,设置Z,X轴方向 @@ -55,9 +53,6 @@ bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) { axiTrihedron->SetLabel(Prs3d_DP_YAxis, y_Axis); axiTrihedron->SetLabel(Prs3d_DP_ZAxis, z_Axis); axiTrihedron->SetSize(theSize); - if(!textStyle.IsNull()){ - axiTrihedron->Attributes()->DatumAspect()->SetTextAspect(textStyle); - } axiTrihedron->SetTransformPersistence(new Graphic3d_TransformPers(Graphic3d_TMF_ZoomPers, anOrg)); axiTrihedron->Attributes()->SetZLayer(Graphic3d_ZLayerId_Topmost); context->Display(axiTrihedron, true); @@ -68,8 +63,8 @@ bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) { return false; } } -bool Axis::InitAxisCube(Handle(AIS_InteractiveContext) & context) { - try { +bool Axis::InitAxisCube(Handle(AIS_InteractiveContext) & context,Handle(Prs3d_TextAspect) _textStyle) { + try { //立方体面显示文本 const char16_t rightCube[] = u"右视图"; const char16_t backCube[] = u"后视图"; @@ -90,8 +85,7 @@ bool Axis::InitAxisCube(Handle(AIS_InteractiveContext) & context) { axiViewCube->SetTransparency(0.0); axiViewCube->SetFixedAnimationLoop(true); axiViewCube->SetTextColor(Quantity_Color(Quantity_NOC_YELLOW2)); - axiViewCube->SetFontHeight(2000); - axiViewCube->SetFont("HarmonyOS Sans"); + axiViewCube->SetFontHeight(35); axiViewCube->SetMaterial(Graphic3d_MaterialAspect(Graphic3d_NOM_ALUMINIUM)); axiViewCube->SetTransformPersistence( new Graphic3d_TransformPers(Graphic3d_TMF_TriedronPers, Aspect_TOTP_RIGHT_UPPER, NCollection_Vec2(125, 125))); @@ -102,6 +96,7 @@ bool Axis::InitAxisCube(Handle(AIS_InteractiveContext) & context) { HILOG_INFO(NATIVE_TAG, "Init Axi View Cube Fail:%{public}d", e.what()); return false; } + } void Axis::SetRotationX(float rx) { rotationX = rx; } diff --git a/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.h b/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.h index f0f2f126..20e67ee1 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.h +++ b/entry/src/main/cpp/NativeEGLOCCT/Axis/Axis.h @@ -20,8 +20,7 @@ public: Axis(); ~Axis(); bool InitAxis(Handle(AIS_InteractiveContext)& context); - bool InitAxisCube(Handle(AIS_InteractiveContext) & context); - void SetAxisTextStyle(Handle(Prs3d_TextAspect) textStyle); + bool InitAxisCube(Handle(AIS_InteractiveContext) & context,Handle(Prs3d_TextAspect) _textStyle); void SetRotationX(float x); void SetRotationY(float y); void SetRotationZ(float z); @@ -34,7 +33,6 @@ private: Handle(AIS_Trihedron) axiTrihedron; //定义三面体 Handle(AIS_ViewCube) axiViewCube; - Handle(Prs3d_TextAspect) textStyle; private: //旋转X轴 float rotationX=0.0f; diff --git a/entry/src/main/cpp/NativeEGLOCCT/Context/Context.cpp b/entry/src/main/cpp/NativeEGLOCCT/Context/Context.cpp index bd77c920..16036c54 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/Context/Context.cpp +++ b/entry/src/main/cpp/NativeEGLOCCT/Context/Context.cpp @@ -14,10 +14,12 @@ namespace NativeOpenCAX { Context::Context() : context(nullptr) {} Context::~Context() {} -bool Context::InitContext(Handle(V3d_Viewer)& viewer) { +bool Context::InitContext(Handle(V3d_Viewer)& viewer,Handle(Prs3d_TextAspect) _textAspect) { try { context = new AIS_InteractiveContext(viewer); context->SetDisplayMode(AIS_Shaded, true); // 默认使用着色模式 + Handle(Prs3d_Drawer) theDrawer=context->DefaultDrawer(); + theDrawer->SetTextAspect(_textAspect); HILOG_INFO(NATIVE_TAG, "InitCtx Done"); return true; } catch (std::exception &e) { diff --git a/entry/src/main/cpp/NativeEGLOCCT/Context/Context.h b/entry/src/main/cpp/NativeEGLOCCT/Context/Context.h index efc53270..bb7f2cb2 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/Context/Context.h +++ b/entry/src/main/cpp/NativeEGLOCCT/Context/Context.h @@ -17,7 +17,7 @@ class Context{ public: Context(); ~Context(); - bool InitContext(Handle(V3d_Viewer)& viewer); + bool InitContext(Handle(V3d_Viewer)& viewer,Handle(Prs3d_TextAspect) _textAspect); public: Handle(AIS_InteractiveContext) context; }; diff --git a/entry/src/main/cpp/NativeEGLOCCT/NativeRender.cpp b/entry/src/main/cpp/NativeEGLOCCT/NativeRender.cpp index d800aed2..cfb6e6f8 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/NativeRender.cpp +++ b/entry/src/main/cpp/NativeEGLOCCT/NativeRender.cpp @@ -26,9 +26,7 @@ bool NativeRender::init(EGLCore &_eglCore) { HILOG_ERROR(NATIVE_TAG, "Init GraphicDriver Fail!"); return false; } - if (ts->InitTextStyle()) { - mAxis->SetAxisTextStyle(ts->text); - }else{ + if (!ts->InitTextStyle()) { HILOG_ERROR(NATIVE_TAG, "Init TextSyle Fail!"); return false; } @@ -36,7 +34,7 @@ bool NativeRender::init(EGLCore &_eglCore) { HILOG_ERROR(NATIVE_TAG, "Init Viewer Fail!"); return false; } - if (!ctx->InitContext(vr->viewer)) { + if (!ctx->InitContext(vr->viewer,ts->GetFontStyle(STYLE_AXIS))) { HILOG_ERROR(NATIVE_TAG, "Init Ctx Fail!"); return false; } @@ -48,8 +46,8 @@ bool NativeRender::init(EGLCore &_eglCore) { HILOG_ERROR(NATIVE_TAG, "Init View Fail!"); return false; } else { - vw->SetViewOption(); - vw->SetText(ts->text); + vw->SetViewOption(ts->GetFontStyle(STYLE_AXIS)); + vw->SetText(ts->GetFontStyle(STYLE_AXIS)); vw->SetWin(win->window); } if (!cr->InitCamera(vw->view)) { @@ -62,7 +60,7 @@ bool NativeRender::init(EGLCore &_eglCore) { return false; } - if (!mAxis->InitAxisCube(ctx->context)) { + if (!mAxis->InitAxisCube(ctx->context,ts->GetFontStyle(STYLE_FACE))) { HILOG_ERROR(NATIVE_TAG, "Init AXIS Cuba Fail!"); return false; } diff --git a/entry/src/main/cpp/NativeEGLOCCT/NativeRenderThread.cpp b/entry/src/main/cpp/NativeEGLOCCT/NativeRenderThread.cpp index 00fb981d..748ba54d 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/NativeRenderThread.cpp +++ b/entry/src/main/cpp/NativeEGLOCCT/NativeRenderThread.cpp @@ -56,6 +56,7 @@ void NativeRenderThread::renderLoop() { if (!eglCore_->init(nativeWindow_)) { OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "EGLCoreInit","Failed to initialize EGL"); } + ftMgr=Font_FontMgr::GetInstance(); // 初始化OCCT渲染器 if (!renderer_->init(*eglCore_)) { OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "NativeRenderInit","Failed to initialize OCCT renderer"); diff --git a/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.cpp b/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.cpp index 9fb8a808..f0423c54 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.cpp +++ b/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.cpp @@ -5,6 +5,7 @@ // please include "napi/native_api.h". #include "TextStyle.h" +#include "Font_FontAspect.hxx" #ifndef NATIVE_TAG #define NATIVE_TAG "TEXTSTYLE" @@ -14,22 +15,18 @@ namespace NativeOpenCAX { -TextStyle::TextStyle() : text(nullptr) {} +TextStyle::TextStyle() : +currentFontType(FONT_STYLE_TYPE::STYLE_AXIS), +fontStyle(std::map()) +{ + +} TextStyle::~TextStyle() {} bool TextStyle::InitTextStyle() { try { - text = new Prs3d_TextAspect(); - text->SetFont("HarmonyOS Sans"); - //缩放比例计算.根据XComp的对角线大小.按照Camera的缩放 - text->SetHeight(2000); - text->Aspect()->SetColor(Quantity_NOC_GRAY95); - text->Aspect()->SetColorSubTitle(Quantity_NOC_BLACK); - text->Aspect()->SetDisplayType(Aspect_TODT_SHADOW); - text->Aspect()->SetTextFontAspect(Font_FA_Bold); - text->Aspect()->SetTextZoomable(false); - text->SetHorizontalJustification(Graphic3d_HTA_LEFT); - text->SetVerticalJustification(Graphic3d_VTA_BOTTOM); + InitAxisText(); + InitCubeText(); HILOG_INFO(NATIVE_TAG, "InitTextSyle Done"); return true; } catch (std::exception &e) { @@ -37,4 +34,72 @@ bool TextStyle::InitTextStyle() { return false; } } +void TextStyle::InitAxisText(){ + FONT_STYLE_TYPE styleType=FONT_STYLE_TYPE::STYLE_AXIS; + Handle(Prs3d_TextAspect) axisText= new Prs3d_TextAspect(); + axisText = new Prs3d_TextAspect(); + axisText->SetHeight(70); + axisText->SetFont("HarmonyOS Sans"); + axisText->Aspect()->SetFont("HarmonyOS Sans"); + axisText->Aspect()->SetColor(Quantity_NOC_GRAY95); + axisText->Aspect()->SetColorSubTitle(Quantity_NOC_BLACK); + axisText->Aspect()->SetDisplayType(Aspect_TODT_SHADOW); + axisText->Aspect()->SetTextFontAspect(Font_FA_Regular); + axisText->Aspect()->SetTextZoomable(false); + axisText->SetHorizontalJustification(Graphic3d_HTA_LEFT); + axisText->SetVerticalJustification(Graphic3d_VTA_BOTTOM); + fontStyle[styleType]=axisText; +} +void TextStyle::InitCubeText(){ + FONT_STYLE_TYPE styleType=FONT_STYLE_TYPE::STYLE_FACE; + Handle(Prs3d_TextAspect) cubeText= new Prs3d_TextAspect(); + cubeText = new Prs3d_TextAspect(); + cubeText->SetHeight(2000); + cubeText->SetFont("HarmonyOS Sans"); + cubeText->Aspect()->SetFont("HarmonyOS Sans"); + cubeText->Aspect()->SetColor(Quantity_NOC_GRAY95); + cubeText->Aspect()->SetColorSubTitle(Quantity_NOC_BLACK); + cubeText->Aspect()->SetDisplayType(Aspect_TODT_SHADOW); + cubeText->Aspect()->SetTextFontAspect(Font_FA_Bold); + cubeText->Aspect()->SetTextZoomable(true); + cubeText->SetHorizontalJustification(Graphic3d_HTA_LEFT); + cubeText->SetVerticalJustification(Graphic3d_VTA_BOTTOM); + fontStyle[styleType]=cubeText; +} +Handle(Prs3d_TextAspect) TextStyle::GetFontStyle(FONT_STYLE_TYPE type){ + return fontStyle[type]; +} +void TextStyle::SetPrs3dFont(const char* theFont){ + fontStyle[currentFontType]->SetFont(theFont); +} +void TextStyle::SetPrs3dHeight(int textSize){ + fontStyle[currentFontType]->SetHeight(textSize); +} +void TextStyle::SetPrs3dColor(Quantity_Color &theColor){ + fontStyle[currentFontType]->SetColor(theColor); +} +void TextStyle::SetPrs3dHTA(Graphic3d_HorizontalTextAlignment theJustification){ + fontStyle[currentFontType]->SetHorizontalJustification(theJustification); +} +void TextStyle::SetPrs3dVTA(Graphic3d_VerticalTextAlignment theJustification){ + fontStyle[currentFontType]->SetVerticalJustification(theJustification); +} +void TextStyle::SetPrs3dAspectText3d(Handle(Graphic3d_AspectText3d) theAspect){ + fontStyle[currentFontType]->SetAspect(theAspect); +} +void TextStyle::SetGrs3dSetColor(const Quantity_Color &theColor){ + fontStyle[currentFontType]->Aspect()->SetColor(theColor); +} +void TextStyle::SetGrs3dSetColorRGBA(const Quantity_ColorRGBA &theColor){ + fontStyle[currentFontType]->Aspect()->SetColor(theColor); +} +void TextStyle::SetGrs3dSetTextFont(Handle(TCollection_HAsciiString) theFont){ + fontStyle[currentFontType]->Aspect()->SetTextFont(theFont); +} +void TextStyle::SetGrs3dSetZoomable(bool theFlag){ + fontStyle[currentFontType]->Aspect()->SetTextZoomable(theFlag); +} +void TextStyle::SetGrs3dDisplayType(Font_FontAspect theFontAspect){ + fontStyle[currentFontType]->Aspect()->SetTextFontAspect(theFontAspect); +} } \ No newline at end of file diff --git a/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.h b/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.h index a8e3fb14..5a2f5bae 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.h +++ b/entry/src/main/cpp/NativeEGLOCCT/TextStyle/TextStyle.h @@ -9,13 +9,15 @@ #include #include "NativeEGLOCCT/common.h" -#include "Font_NameOfFont.hxx" #include - +#include //字体样式类型.主要用于区别该样式用于何处 enum FONT_STYLE_TYPE{ STYLE_AXIS, STYLE_FACE, +}; +struct TextStyleOpts{ + }; namespace NativeOpenCAX{ class TextStyle{ @@ -23,9 +25,26 @@ public: TextStyle(); ~TextStyle(); bool InitTextStyle(); + Handle(Prs3d_TextAspect) GetFontStyle(FONT_STYLE_TYPE); + //Prs3d + void SetPrs3dFont(const char* theFont); + void SetPrs3dHeight(int textSize); + void SetPrs3dColor(Quantity_Color &theColor); + void SetPrs3dHTA(Graphic3d_HorizontalTextAlignment theJustification); + void SetPrs3dVTA(Graphic3d_VerticalTextAlignment theJustification); + void SetPrs3dAspectText3d(Handle(Graphic3d_AspectText3d) theAspect); + //Grs3d + void SetGrs3dSetColor(const Quantity_Color &theColor); + void SetGrs3dSetColorRGBA(const Quantity_ColorRGBA &theColor); + void SetGrs3dSetTextFont(Handle(TCollection_HAsciiString) theFont); + void SetGrs3dSetZoomable(bool theFlag); + void SetGrs3dDisplayType(Font_FontAspect theFontAspect); +private: + void InitAxisText(); + void InitCubeText(); public: - Handle(Prs3d_TextAspect) text; //一个字体管理样式对象管理.主要负责对字体样式的归一化集中管理 + FONT_STYLE_TYPE currentFontType; std::map fontStyle; }; } diff --git a/entry/src/main/cpp/NativeEGLOCCT/View/View.cpp b/entry/src/main/cpp/NativeEGLOCCT/View/View.cpp index a749c84c..e49fc9b6 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/View/View.cpp +++ b/entry/src/main/cpp/NativeEGLOCCT/View/View.cpp @@ -7,6 +7,7 @@ #include "View.h" #include "Quantity_NameOfColor.hxx" #include "V3d_TypeOfAxe.hxx" +#include "V3d_TypeOfVisualization.hxx" #ifndef NATIVE_TAG #define NATIVE_TAG "VIEW" @@ -27,40 +28,29 @@ bool View::InitView(Handle(V3d_Viewer) & viewer) { return false; } } -void View::SetViewOption() { +void View::SetViewOption(Handle(Prs3d_TextAspect) _textStyle) { // 设置渲染参数 view->SetImmediateUpdate(false); view->ChangeRenderingParams().Method = Graphic3d_RM_RASTERIZATION; view->ChangeRenderingParams().IsShadowEnabled = Standard_False; view->ChangeRenderingParams().IsReflectionEnabled = Standard_False; - view->ChangeRenderingParams().IsAntialiasingEnabled = Standard_True; - view->ChangeRenderingParams().Resolution = 1; +// view->ChangeRenderingParams().IsAntialiasingEnabled = Standard_True; +// view->ChangeRenderingParams().Resolution = 2; // 设置背景渐变 view->SetBgGradientColors(Quantity_Color(Quantity_NOC_GRAY), Quantity_Color(Quantity_NOC_BLACK), Aspect_GFM_VER, // 垂直渐变 false); - // 设置默认相机位置 - view->SetSize(0.1); view->SetProj(V3d_XposYnegZpos); - view->FitAll(0.02, false); - // 可选:显示坐标轴 - view->ZBufferTriedronSetup(); - // 调整相机视角 view->Camera()->SetProjectionType(Graphic3d_Camera::Projection_Orthographic); view->SetBackgroundColor(Quantity_NOC_GRAY90); - //左下角默认坐标系 view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_ANTIQUEWHITE, 0.3, V3d_ZBUFFER); - Handle(V3d_Trihedron) tri; - tri=view->Trihedron(false); - if(!tri.IsNull()){ - HILOG_INFO(NATIVE_TAG, "V3d_Trihedron X"); - tri->LabelAspect(V3d_X)->SetFont("HarmonyOS Sans"); - tri->LabelAspect(V3d_X)->SetHeight(1500.0); - tri->LabelAspect(V3d_X)->SetColor(Quantity_Color(Quantity_NOC_YELLOW)); - } + view->Trihedron(false)->LabelAspect(V3d_Y)->SetAspect(_textStyle->Aspect()); + view->Trihedron(false)->LabelAspect(V3d_X)->SetAspect(_textStyle->Aspect()); + view->Trihedron(false)->LabelAspect(V3d_Z)->SetAspect(_textStyle->Aspect()); + view->SetBackgroundColor(Quantity_NOC_GRAY90); } -void View::SetText(Handle(Prs3d_TextAspect) & text) { +void View::SetText(Handle(Prs3d_TextAspect) text) { view->ChangeRenderingParams().StatsTextAspect = text->Aspect(); view->ChangeRenderingParams().StatsTextHeight = text->Height(); } diff --git a/entry/src/main/cpp/NativeEGLOCCT/View/View.h b/entry/src/main/cpp/NativeEGLOCCT/View/View.h index d1855e84..62f1a709 100644 --- a/entry/src/main/cpp/NativeEGLOCCT/View/View.h +++ b/entry/src/main/cpp/NativeEGLOCCT/View/View.h @@ -21,9 +21,9 @@ public: View(); ~View(); bool InitView(Handle(V3d_Viewer)& viewer); - void SetViewOption(); + void SetViewOption(Handle(Prs3d_TextAspect) _textStyle); void SetWin(Handle(Aspect_NeutralWindow)& win); - void SetText(Handle(Prs3d_TextAspect)& text); + void SetText(Handle(Prs3d_TextAspect) text); void SetClearColor(float r, float g, float b, float a); void MustBeResized(); void Redraw(); diff --git a/entry/src/main/resources/resfile/fonts/simhei.ttf b/entry/src/main/resources/resfile/fonts/simhei.ttf deleted file mode 100644 index c5030aea..00000000 Binary files a/entry/src/main/resources/resfile/fonts/simhei.ttf and /dev/null differ