ForCAX/entry/src/main/cpp/NativeEGLOCCT/Visualization/View/V3dView.cpp
2026-04-20 05:09:23 +08:00

80 lines
2.6 KiB
C++

//
// Created on 2026/3/6.
//
// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found,
// please include "napi/native_api.h".
#include "V3dView.h"
#include "Quantity_NameOfColor.hxx"
#include "V3d_TypeOfAxe.hxx"
#include "V3d_TypeOfVisualization.hxx"
#ifndef NATIVE_TAG
#define NATIVE_TAG "VIEW"
#endif
namespace NativeOpenCAX {
V3dView::V3dView() : view(nullptr) {}
V3dView::~V3dView() {}
bool V3dView::InitV3dView(Handle(V3d_Viewer) & viewer,EGLContext ctx,Handle(Aspect_NeutralWindow)& win) {
try {
view = viewer->CreateView();
view->SetWindow(win, ctx);
HILOG_INFO(NATIVE_TAG, "InitView Done");
return true;
} catch (std::exception &e) {
HILOG_INFO(NATIVE_TAG, "InitView Fail:%{public}d", e.what());
return false;
}
}
void V3dView::InitViewOption() {
// 设置渲染参数
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 = 2;
// 设置背景渐变
view->SetBgGradientColors(Quantity_Color(Quantity_NOC_GRAY), Quantity_Color(Quantity_NOC_BLACK),
Aspect_GFM_VER, // 垂直渐变
false);
// 设置默认相机位置
view->SetProj(V3d_XposYnegZpos);
view->FitAll(0.05, false);
// 可选:显示坐标轴
view->ZBufferTriedronSetup();
// 调整相机视角
view->Camera()->SetProjectionType(Graphic3d_Camera::Projection_Perspective);
view->SetBackgroundColor(Quantity_NOC_GRAY90);
//左下角默认坐标系
view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_ANTIQUEWHITE, 0.3, V3d_ZBUFFER);
view->Trihedron(false)->LabelAspect(V3d_Y)->SetHeight(50);
view->Trihedron(false)->LabelAspect(V3d_X)->SetHeight(50);
view->Trihedron(false)->LabelAspect(V3d_Z)->SetHeight(50);
view->SetBackgroundColor(Quantity_NOC_GRAY90);
}
void V3dView::SetClearColor(float r, float g, float b, float a) {
clearColor = Quantity_Color(r, g, b, Quantity_TOC_RGB);
if (!view.IsNull()) {
view->SetBackgroundColor(clearColor);
}
}
void V3dView::MustBeResized() { view->MustBeResized(); }
void V3dView::Redraw() {
view->Redraw();
}
void V3dView::ResetView() {
if (!view.IsNull()) {
view->SetProj(V3d_XposYnegZpos);
view->FitAll(0.05, false);
}
}
}