修改Reander的属性名

This commit is contained in:
JackLee 2026-04-12 22:49:39 +08:00
parent 56aee7da62
commit 90fe9ffe46
9 changed files with 92 additions and 77 deletions

View File

@ -57,11 +57,12 @@ add_library(opencax SHARED
NativeEGLOCCT/V3d/V3dCtx/V3dCtx.h NativeEGLOCCT/V3d/V3dCtx/V3dCtx.h
NativeEGLOCCT/V3d/V3dView/V3dView.h NativeEGLOCCT/V3d/V3dView/V3dView.h
NativeEGLOCCT/V3d/V3dWin/V3dWin.h NativeEGLOCCT/V3d/V3dWin/V3dWin.h
NativeEGLOCCT/V3d/V3dCa/V3dCa.h NativeEGLOCCT/V3d/V3dCamera/V3dCamera.h
NativeEGLOCCT/V3d/V3dDrawer/V3dDrawer.h NativeEGLOCCT/V3d/V3dDrawer/V3dDrawer.h
NativeEGLOCCT/V3d/V3dTri/V3dTri.h NativeEGLOCCT/V3d/V3dTri/V3dTri.h
NativeEGLOCCT/V3d/V3dTri/V3dWCSTri.h NativeEGLOCCT/V3d/V3dTri/V3dWCSTri.h
NativeEGLOCCT/V3d/V3dTri/V3dTriCube.h NativeEGLOCCT/V3d/V3dTri/V3dTriCube.h
# Cpp Src # Cpp Src
NativeEGLOCCT/EGLMgr/EGLCore.cpp NativeEGLOCCT/EGLMgr/EGLCore.cpp
NativeEGLOCCT/EGLMgr/EGLSubCore.cpp NativeEGLOCCT/EGLMgr/EGLSubCore.cpp
@ -73,7 +74,7 @@ add_library(opencax SHARED
NativeEGLOCCT/V3d/V3dViewer/V3dViewer.cpp NativeEGLOCCT/V3d/V3dViewer/V3dViewer.cpp
NativeEGLOCCT/V3d/V3dCtx/V3dCtx.cpp NativeEGLOCCT/V3d/V3dCtx/V3dCtx.cpp
NativeEGLOCCT/V3d/V3dView/V3dView.cpp NativeEGLOCCT/V3d/V3dView/V3dView.cpp
NativeEGLOCCT/V3d/V3dCa/V3dCa.cpp NativeEGLOCCT/V3d/V3dCamera/V3dCamera.cpp
NativeEGLOCCT/V3d/V3dWin/V3dWin.cpp NativeEGLOCCT/V3d/V3dWin/V3dWin.cpp
NativeEGLOCCT/V3d/V3dDrawer/V3dDrawer.cpp NativeEGLOCCT/V3d/V3dDrawer/V3dDrawer.cpp
NativeEGLOCCT/V3d/V3dTri/V3dTri.cpp NativeEGLOCCT/V3d/V3dTri/V3dTri.cpp

View File

@ -193,7 +193,7 @@ void NativeMgr::OnMouseEvent(OH_NativeXComponent *comp, void *win) {
return; return;
} }
//Test Mouse MIDDLE_BUTTON Long Press //Test Mouse MIDDLE_BUTTON Long Press
//HILOG_WARN(NATIVE_TAG, "ExtraMouseEventInfo:%{public}s",extra); HILOG_WARN(NATIVE_TAG, "ExtraMouseEventInfo:%{public}d",extra);
std::lock_guard<std::mutex> lock(mapMutex); std::lock_guard<std::mutex> lock(mapMutex);
//通过时间戳判断事件唯一性.保证单一时间戳只触发一次事件 //通过时间戳判断事件唯一性.保证单一时间戳只触发一次事件
if(mouseEvent.timestamp==NativeMgr::timestamp){ if(mouseEvent.timestamp==NativeMgr::timestamp){
@ -214,7 +214,8 @@ void NativeMgr::OnMouseEvent(OH_NativeXComponent *comp, void *win) {
HILOG_INFO(NATIVE_TAG, "ALLAction:%{public}d",mouseEvent.action); HILOG_INFO(NATIVE_TAG, "ALLAction:%{public}d",mouseEvent.action);
HILOG_INFO(NATIVE_TAG, "ALLTimestamp:%{public}d",mouseEvent.timestamp); HILOG_INFO(NATIVE_TAG, "ALLTimestamp:%{public}d",mouseEvent.timestamp);
} }
//鼠标滚轮缩放实现
//以下代码为采用按住鼠标右键不放进行Move改变Carmera的旋转视角 //以下代码为采用按住鼠标右键不放进行Move改变Carmera的旋转视角
//旋转视角分为三种模式: //旋转视角分为三种模式:
//自由模式.基于世界坐标系0,0,0 //自由模式.基于世界坐标系0,0,0
@ -345,7 +346,7 @@ ArkUI_NodeHandle CreateNodeHandle(void* userData) {
// 注册XComponent回调函数 // 注册XComponent回调函数
OH_NativeXComponent_RegisterCallback(nativeXComponent, &NativeMgr::xSurfaceTouchEventCallBack); OH_NativeXComponent_RegisterCallback(nativeXComponent, &NativeMgr::xSurfaceTouchEventCallBack);
//注册XComponent组件鼠标回调事件 //注册XComponent组件鼠标回调事件
//OH_NativeXComponent_RegisterMouseEventCallback(nativeXComponent, &NativeMgr::xMouseEventCallBack); OH_NativeXComponent_RegisterMouseEventCallback(nativeXComponent, &NativeMgr::xMouseEventCallBack);
// nodeAPI->registerNodeEvent(xc, NODE_ON_MOUSE, 1, &xc); // nodeAPI->registerNodeEvent(xc, NODE_ON_MOUSE, 1, &xc);
// nodeAPI->registerNodeEvent(xc, NODE_ON_AXIS, 1, &xc); // nodeAPI->registerNodeEvent(xc, NODE_ON_AXIS, 1, &xc);
// nodeAPI->addNodeEventReceiver(xc, [](ArkUI_NodeEvent *event) { // nodeAPI->addNodeEventReceiver(xc, [](ArkUI_NodeEvent *event) {

View File

@ -15,13 +15,13 @@ width(0),
height(0), height(0),
v3dTri(new V3dTri), v3dTri(new V3dTri),
v3dTriCube(new V3dTriCube), v3dTriCube(new V3dTriCube),
v3dcr(new V3dCa), v3dCamera(new V3dCamera),
v3dctx(new V3dCtx), v3dCtx(new V3dCtx),
v3dogd(new V3dOGD), v3dOgd(new V3dOGD),
v3dview(new V3dView), v3dView(new V3dView),
v3ddrawer(new V3dDrawer), v3dDrawer(new V3dDrawer),
v3dviewer(new V3dViewer), v3dViewer(new V3dViewer),
v3dwin(new V3dWin) v3dWin(new V3dWin)
{ {
width = w; width = w;
height = h; height = h;
@ -31,58 +31,58 @@ Render::~Render() { shapes_.clear(); }
bool Render::init(EGLDisplay eglDisp,EGLContext ctx,EGLConfig eglConfig) { bool Render::init(EGLDisplay eglDisp,EGLContext ctx,EGLConfig eglConfig) {
//初始化OpenGL //初始化OpenGL
if (!v3dogd->InitV3dOGD(eglDisp,ctx,eglConfig)) { if (!v3dOgd->InitV3dOGD(eglDisp,ctx,eglConfig)) {
HILOG_ERROR(NATIVE_TAG, "Init GraphicDriver Fail!"); HILOG_ERROR(NATIVE_TAG, "Init GraphicDriver Fail!");
return false; return false;
} }
//初始化视口管理 //初始化视口管理
if (!v3dviewer->InitV3dViewer(v3dogd->graphicDriver)) { if (!v3dViewer->InitV3dViewer(v3dOgd->graphicDriver)) {
HILOG_ERROR(NATIVE_TAG, "Init Viewer Fail!"); HILOG_ERROR(NATIVE_TAG, "Init Viewer Fail!");
return false; return false;
} }
//初始化OCCT内部上下文 //初始化OCCT内部上下文
if (!v3dctx->InitV3dCtx(v3dviewer->viewer)) { if (!v3dCtx->InitV3dCtx(v3dViewer->viewer)) {
HILOG_ERROR(NATIVE_TAG, "Init Ctx Fail!"); HILOG_ERROR(NATIVE_TAG, "Init Ctx Fail!");
return false; return false;
}else{ }else{
//初始化OCCT上下文的Drawer(全局属性设置) //初始化OCCT上下文的Drawer(全局属性设置)
v3ddrawer->InitV3dAllAspect(v3dctx->ctx); v3dDrawer->InitV3dAllAspect(v3dCtx->ctx);
} }
//初始化绑定Window //初始化绑定Window
if (!v3dwin->InitV3dWin(width, height)) { if (!v3dWin->InitV3dWin(width, height)) {
HILOG_ERROR(NATIVE_TAG, "Init Window Fail!"); HILOG_ERROR(NATIVE_TAG, "Init Window Fail!");
return false; return false;
} }
//初始化视图 //初始化视图
if (!v3dview->InitV3dView(v3dviewer->viewer,ctx,v3dwin->win)) { if (!v3dView->InitV3dView(v3dViewer->viewer,ctx,v3dWin->win)) {
HILOG_ERROR(NATIVE_TAG, "Init View Fail!"); HILOG_ERROR(NATIVE_TAG, "Init View Fail!");
return false; return false;
} else { } else {
v3dview->InitViewOption(); v3dView->InitViewOption();
} }
if (!v3dcr->InitV3dCa(v3dview->view)) { if (!v3dCamera->InitV3dCamera(v3dView->view)) {
HILOG_ERROR(NATIVE_TAG, "Init Camera Fail!"); HILOG_ERROR(NATIVE_TAG, "Init Camera Fail!");
return false; return false;
} }
//初始化世界坐标系 //初始化世界坐标系
if (!v3dTri->InitV3dTri(v3dctx->ctx)) { if (!v3dTri->InitV3dTri(v3dCtx->ctx)) {
HILOG_ERROR(NATIVE_TAG, "Init AXIS Fail!"); HILOG_ERROR(NATIVE_TAG, "Init AXIS Fail!");
return false; return false;
} }
//初始化正方体视角切换指示器 //初始化正方体视角切换指示器
if (!v3dTriCube->InitV3dTriCube(v3dctx->ctx)) { if (!v3dTriCube->InitV3dTriCube(v3dCtx->ctx)) {
HILOG_ERROR(NATIVE_TAG, "Init AXIS Cuba Fail!"); HILOG_ERROR(NATIVE_TAG, "Init AXIS Cuba Fail!");
return false; return false;
} }
//InitDevText(); //InitDevText();
v3dview->ResetView(); v3dView->ResetView();
return true; return true;
} }
bool Render::loadModel(const std::string &filePath) { bool Render::loadModel(const std::string &filePath) {
// 清除现有模型 // 清除现有模型
for (auto &shape : shapes_) { for (auto &shape : shapes_) {
v3dctx->ctx->Remove(shape, false); v3dCtx->ctx->Remove(shape, false);
} }
shapes_.clear(); shapes_.clear();
@ -120,14 +120,14 @@ bool Render::loadModel(const std::string &filePath) {
// 设置材质 // 设置材质
Handle(Prs3d_Drawer) drawer = aisShape->Attributes(); Handle(Prs3d_Drawer) drawer = aisShape->Attributes();
drawer->SetFaceBoundaryDraw(true); drawer->SetFaceBoundaryDraw(true);
drawer->SetWireAspect(v3ddrawer->v3d_LineAspect); drawer->SetWireAspect(v3dDrawer->v3d_LineAspect);
drawer->SetShadingAspect(v3ddrawer->v3d_ShadingAspect); drawer->SetShadingAspect(v3dDrawer->v3d_ShadingAspect);
v3dctx->ctx->Display(aisShape, true); v3dCtx->ctx->Display(aisShape, true);
shapes_.push_back(aisShape); shapes_.push_back(aisShape);
} }
} }
v3dview->view->ZFitAll(); v3dView->view->ZFitAll();
v3dview->ResetView(); v3dView->ResetView();
OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "LoadModel", OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "LoadModel",
"Successfully loaded STEP file with %{public}d shapes", numShapes); "Successfully loaded STEP file with %{public}d shapes", numShapes);
return true; return true;
@ -140,28 +140,28 @@ void Render::setTranslation(float tx, float ty) {
} }
void Render::render() { void Render::render() {
if (v3dview->view.IsNull()) { if (v3dView->view.IsNull()) {
OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "Render", "View Is Null"); OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "Render", "View Is Null");
return; return;
} }
v3dview->MustBeResized(); v3dView->MustBeResized();
v3dview->Redraw(); v3dView->Redraw();
} }
void Render::resize(int w, int h) { void Render::resize(int w, int h) {
HILOG_ERROR(NATIVE_TAG, "InPut Size:%{public}d,%{public}d", w, h); HILOG_ERROR(NATIVE_TAG, "InPut Size:%{public}d,%{public}d", w, h);
v3dwin->Resize(w, h); v3dWin->Resize(w, h);
} }
void Render::setRotation(float xAngle, float yAngle) { v3dcr->SetRotation(xAngle, yAngle); } void Render::setRotation(float xAngle, float yAngle) { v3dCamera->SetRotation(xAngle, yAngle); }
void Render::setZoomLevel(float zoom) { void Render::setZoomLevel(float zoom) {
v3dTri->SetZoomLevel(std::max(0.1f, std::min(zoom, 5.0f))); // 限制缩放范围 v3dTri->SetZoomLevel(std::max(0.1f, std::min(zoom, 5.0f))); // 限制缩放范围
} }
void Render::setClearColor(float r, float g, float b, float a) { v3dview->SetClearColor(r, g, b, a); } void Render::setClearColor(float r, float g, float b, float a) { v3dView->SetClearColor(r, g, b, a); }
void Render::resetView() { v3dview->ResetView(); } void Render::resetView() { v3dView->ResetView(); }
void Render::SwitchView(std::string str) { void Render::SwitchView(std::string str) {
v3dview->SwitchView(str); v3dCamera->SwitchView(str);
} }
void Render::InitDevText(){ void Render::InitDevText(){
Handle(AIS_TextLabel) aTextLabel = new AIS_TextLabel(); Handle(AIS_TextLabel) aTextLabel = new AIS_TextLabel();
@ -169,7 +169,7 @@ void Render::InitDevText(){
aTextLabel->SetText(chinese_array); aTextLabel->SetText(chinese_array);
gp_Pnt position(0-(width/3), 0-(height/3), 0.0); // 例如,在原点 gp_Pnt position(0-(width/3), 0-(height/3), 0.0); // 例如,在原点
aTextLabel->SetPosition(position); aTextLabel->SetPosition(position);
v3dctx->ctx->Display(aTextLabel, Standard_True); v3dCtx->ctx->Display(aTextLabel, Standard_True);
HILOG_ERROR(NATIVE_TAG, "aTextLabel字体名字:%{public}s", aTextLabel->FontName().ToCString()); HILOG_ERROR(NATIVE_TAG, "aTextLabel字体名字:%{public}s", aTextLabel->FontName().ToCString());
HILOG_ERROR(NATIVE_TAG, "aTextLabel字体名字:%{public}s", aTextLabel->Attributes()->TextAspect()->Aspect()->Font().ToCString()); HILOG_ERROR(NATIVE_TAG, "aTextLabel字体名字:%{public}s", aTextLabel->Attributes()->TextAspect()->Aspect()->Font().ToCString());
} }

View File

@ -16,7 +16,7 @@
#include "../V3d/V3dTri/V3dTri.h" #include "../V3d/V3dTri/V3dTri.h"
#include "../V3d/V3dTri/V3dTriCube.h" #include "../V3d/V3dTri/V3dTriCube.h"
#include "../V3d/V3dCa/V3dCa.h" #include "../V3d/V3dCamera/V3dCamera.h"
#include "../V3d/V3dCtx/V3dCtx.h" #include "../V3d/V3dCtx/V3dCtx.h"
#include "../V3d/V3dOGD/V3dOGD.h" #include "../V3d/V3dOGD/V3dOGD.h"
#include "../V3d/V3dWin/V3dWin.h" #include "../V3d/V3dWin/V3dWin.h"
@ -49,13 +49,13 @@ private:
int height; int height;
V3dTri* v3dTri; V3dTri* v3dTri;
V3dTriCube* v3dTriCube; V3dTriCube* v3dTriCube;
V3dCa* v3dcr; V3dCamera* v3dCamera;
V3dCtx* v3dctx; V3dCtx* v3dCtx;
V3dOGD* v3dogd; V3dOGD* v3dOgd;
V3dDrawer* v3ddrawer; V3dDrawer* v3dDrawer;
V3dView* v3dview; V3dView* v3dView;
V3dViewer* v3dviewer; V3dViewer* v3dViewer;
V3dWin* v3dwin; V3dWin* v3dWin;
std::vector<Handle(AIS_Shape)> shapes_; std::vector<Handle(AIS_Shape)> shapes_;
}; };
} // namespace NativeRender } // namespace NativeRender

View File

@ -0,0 +1,4 @@
V3dCamera 为相机主类型,包含相机对象,后期可以扩展多相机切换<br>
V3dAnimCamera为相机运动动画对象,可以执行多种相机动画,包括相机移动,旋转等<br>

View File

@ -4,7 +4,7 @@
// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found, // Node APIs are not fully supported. To solve the compilation error of the interface cannot be found,
// please include "napi/native_api.h". // please include "napi/native_api.h".
#include "V3dCa.h" #include "V3dCamera.h"
#ifndef NATIVE_TAG #ifndef NATIVE_TAG
#define NATIVE_TAG "CAMERA" #define NATIVE_TAG "CAMERA"
@ -12,10 +12,15 @@
namespace NativeOpenCAX { namespace NativeOpenCAX {
V3dCa::V3dCa() : camera(nullptr) {} V3dCamera::V3dCamera() :
V3dCa::~V3dCa() {} camera(nullptr)
bool V3dCa::InitV3dCa(Handle(V3d_View)& view) { {
}
V3dCamera::~V3dCamera() {}
bool V3dCamera::InitV3dCamera(Handle(V3d_View)& _view) {
try { try {
view=_view;
camera = new Graphic3d_Camera; camera = new Graphic3d_Camera;
// 将角度转换为弧度并计算对应的缩放因子 // 将角度转换为弧度并计算对应的缩放因子
camera->SetFOVy(45.0); camera->SetFOVy(45.0);
@ -30,7 +35,29 @@ bool V3dCa::InitV3dCa(Handle(V3d_View)& view) {
return false; return false;
} }
} }
void V3dCa::SetRotation(float xAngle, float yAngle) { //切换视图
void V3dCamera::SwitchView(std::string nView) {
V3d_TypeOfOrientation tV3d;
if (nView == "CMD_VIEW_FRONT") {
tV3d = V3d_Yneg;
} else if (nView == "CMD_VIEW_TOP") {
tV3d = V3d_Zpos;
} else if (nView == "CMD_VIEW_LEFT_SIDE") {
tV3d = V3d_Xneg;
} else if (nView == "CMD_VIEW_RIGHT_SIDE") {
tV3d = V3d_Xpos;
} else if (nView == "CMD_VIEW_BOTTOM") {
tV3d = V3d_Zneg;
} else if (nView == "CMD_VIEW_REAR") {
tV3d = V3d_Ypos;
} else if (nView == "CMD_VIEW_ISO") {
tV3d = V3d_XposYnegZpos;
} else if (nView == "CMD_VIEW_DIM") {
tV3d = V3d_XposYposZpos;
}
view->SetProj(tV3d);
}
void V3dCamera::SetRotation(float xAngle, float yAngle) {
gp_Pnt currentEye = camera->Eye(); gp_Pnt currentEye = camera->Eye();
gp_Pnt currentCenter = camera->Center(); gp_Pnt currentCenter = camera->Center();
gp_Dir currentUp = camera->Up(); gp_Dir currentUp = camera->Up();

View File

@ -12,14 +12,16 @@
#include <gp_Quaternion.hxx> #include <gp_Quaternion.hxx>
namespace NativeOpenCAX { namespace NativeOpenCAX {
class V3dCa{ class V3dCamera{
public: public:
V3dCa(); V3dCamera();
~V3dCa(); ~V3dCamera();
bool InitV3dCa(Handle(V3d_View)& view); bool InitV3dCamera(Handle(V3d_View)& view);
void SwitchView(std::string view);
void SetRotation(float xAngle, float yAngle); void SetRotation(float xAngle, float yAngle);
public: public:
Handle(Graphic3d_Camera) camera; Handle(Graphic3d_Camera) camera;
Handle(V3d_View) view;
}; };
} // namespace NativeOpenCAX } // namespace NativeOpenCAX

View File

@ -76,25 +76,5 @@ void V3dView::ResetView() {
} }
} }
void V3dView::SwitchView(std::string nView) {
V3d_TypeOfOrientation tV3d;
if (nView == "CMD_VIEW_FRONT") {
tV3d = V3d_Yneg;
} else if (nView == "CMD_VIEW_TOP") {
tV3d = V3d_Zpos;
} else if (nView == "CMD_VIEW_LEFT_SIDE") {
tV3d = V3d_Xneg;
} else if (nView == "CMD_VIEW_RIGHT_SIDE") {
tV3d = V3d_Xpos;
} else if (nView == "CMD_VIEW_BOTTOM") {
tV3d = V3d_Zneg;
} else if (nView == "CMD_VIEW_REAR") {
tV3d = V3d_Ypos;
} else if (nView == "CMD_VIEW_ISO") {
tV3d = V3d_XposYnegZpos;
} else if (nView == "CMD_VIEW_DIM") {
tV3d = V3d_XposYposZpos;
}
view->SetProj(tV3d);
}
} }

View File

@ -26,7 +26,7 @@ public:
void MustBeResized(); void MustBeResized();
void Redraw(); void Redraw();
void ResetView(); void ResetView();
void SwitchView(std::string view);
public: public:
Handle(V3d_View) view; Handle(V3d_View) view;
Quantity_Color clearColor; Quantity_Color clearColor;