解决一些小麻烦
This commit is contained in:
parent
3153a0f43f
commit
adbd81bf1a
@ -16,8 +16,15 @@ namespace NativeOpenCAX {
|
|||||||
Axis::Axis() : axiPlacement(nullptr), axiTrihedron(nullptr), axiViewCube(nullptr) {}
|
Axis::Axis() : axiPlacement(nullptr), axiTrihedron(nullptr), axiViewCube(nullptr) {}
|
||||||
Axis::~Axis() {}
|
Axis::~Axis() {}
|
||||||
|
|
||||||
|
void Axis::SetAxisTextStyle(Handle(Prs3d_TextAspect) _textStyle){
|
||||||
|
textStyle=_textStyle;
|
||||||
|
}
|
||||||
bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) {
|
bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) {
|
||||||
try {
|
try {
|
||||||
|
//坐标显示文本
|
||||||
|
const char16_t x_Axis[] = u"X";
|
||||||
|
const char16_t y_Axis[] = u"Y";
|
||||||
|
const char16_t z_Axis[] = u"Z";
|
||||||
// 创建场景中心参考坐标系
|
// 创建场景中心参考坐标系
|
||||||
gp_Ax2 theAxis;
|
gp_Ax2 theAxis;
|
||||||
double theSize =200; // 大小
|
double theSize =200; // 大小
|
||||||
@ -44,21 +51,15 @@ bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) {
|
|||||||
axiTrihedron->SetDatumPartColor(Prs3d_DP_XAxis, Quantity_NOC_GRAY85);
|
axiTrihedron->SetDatumPartColor(Prs3d_DP_XAxis, Quantity_NOC_GRAY85);
|
||||||
axiTrihedron->SetDatumPartColor(Prs3d_DP_YAxis, Quantity_NOC_GRAY85);
|
axiTrihedron->SetDatumPartColor(Prs3d_DP_YAxis, Quantity_NOC_GRAY85);
|
||||||
axiTrihedron->SetDatumPartColor(Prs3d_DP_ZAxis, Quantity_NOC_GRAY85);
|
axiTrihedron->SetDatumPartColor(Prs3d_DP_ZAxis, Quantity_NOC_GRAY85);
|
||||||
axiTrihedron->SetLabel(Prs3d_DP_XAxis, "X");
|
axiTrihedron->SetLabel(Prs3d_DP_XAxis, x_Axis);
|
||||||
axiTrihedron->SetLabel(Prs3d_DP_YAxis, "Y");
|
axiTrihedron->SetLabel(Prs3d_DP_YAxis, y_Axis);
|
||||||
axiTrihedron->SetLabel(Prs3d_DP_ZAxis, "Z");
|
axiTrihedron->SetLabel(Prs3d_DP_ZAxis, z_Axis);
|
||||||
axiTrihedron->SetSize(theSize);
|
axiTrihedron->SetSize(theSize);
|
||||||
textAspect = axiTrihedron->Attributes()->TextAspect();
|
if(!textStyle.IsNull()){
|
||||||
if(textAspect.IsNull()){
|
axiTrihedron->Attributes()->DatumAspect()->SetTextAspect(textStyle);
|
||||||
textAspect=new Prs3d_TextAspect();
|
|
||||||
//textAspect->SetFont("HarmonyOS Sans");
|
|
||||||
textAspect->SetHeight(3000.0);
|
|
||||||
textAspect->SetColor(Quantity_NOC_GRAY85);
|
|
||||||
axiTrihedron->Attributes()->DatumAspect()->SetTextAspect(textAspect);
|
|
||||||
}
|
}
|
||||||
axiTrihedron->SetTransformPersistence(new Graphic3d_TransformPers(Graphic3d_TMF_ZoomPers, anOrg));
|
axiTrihedron->SetTransformPersistence(new Graphic3d_TransformPers(Graphic3d_TMF_ZoomPers, anOrg));
|
||||||
axiTrihedron->Attributes()->SetZLayer(Graphic3d_ZLayerId_Topmost);
|
axiTrihedron->Attributes()->SetZLayer(Graphic3d_ZLayerId_Topmost);
|
||||||
//axiTrihedron->SetInfiniteState(true);
|
|
||||||
context->Display(axiTrihedron, true);
|
context->Display(axiTrihedron, true);
|
||||||
HILOG_INFO(NATIVE_TAG, "InitLocalAxis Done");
|
HILOG_INFO(NATIVE_TAG, "InitLocalAxis Done");
|
||||||
return true;
|
return true;
|
||||||
@ -69,23 +70,31 @@ bool Axis::InitAxis(Handle(AIS_InteractiveContext) & context) {
|
|||||||
}
|
}
|
||||||
bool Axis::InitAxisCube(Handle(AIS_InteractiveContext) & context) {
|
bool Axis::InitAxisCube(Handle(AIS_InteractiveContext) & context) {
|
||||||
try {
|
try {
|
||||||
|
//立方体面显示文本
|
||||||
|
const char16_t rightCube[] = u"右视图";
|
||||||
|
const char16_t backCube[] = u"后视图";
|
||||||
|
const char16_t topCube[] = u"俯视图";
|
||||||
|
const char16_t leftCube[] = u"左视图";
|
||||||
|
const char16_t frontCube[] = u"前视图";
|
||||||
|
const char16_t bottomCube[] = u"仰视图";
|
||||||
// 视图立方体
|
// 视图立方体
|
||||||
axiViewCube = new AIS_ViewCube();
|
axiViewCube = new AIS_ViewCube();
|
||||||
axiViewCube->SetBoxSideLabel(V3d_Xpos, "Right");
|
axiViewCube->SetBoxSideLabel(V3d_Xpos, TCollection_AsciiString(rightCube));
|
||||||
axiViewCube->SetBoxSideLabel(V3d_Ypos, "Back");
|
axiViewCube->SetBoxSideLabel(V3d_Ypos, TCollection_AsciiString(backCube));
|
||||||
axiViewCube->SetBoxSideLabel(V3d_Zpos, "Top");
|
axiViewCube->SetBoxSideLabel(V3d_Zpos, TCollection_AsciiString(topCube));
|
||||||
axiViewCube->SetBoxSideLabel(V3d_Xneg, "Left");
|
axiViewCube->SetBoxSideLabel(V3d_Xneg, TCollection_AsciiString(leftCube));
|
||||||
axiViewCube->SetBoxSideLabel(V3d_Yneg, "Front");
|
axiViewCube->SetBoxSideLabel(V3d_Yneg, TCollection_AsciiString(frontCube));
|
||||||
axiViewCube->SetBoxSideLabel(V3d_Zneg, "Bottom");
|
axiViewCube->SetBoxSideLabel(V3d_Zneg, TCollection_AsciiString(bottomCube));
|
||||||
axiViewCube->SetDrawAxes(false);
|
axiViewCube->SetDrawAxes(false);
|
||||||
axiViewCube->SetSize(60, true);
|
axiViewCube->SetSize(100, true);
|
||||||
axiViewCube->SetTransparency(0.0);
|
axiViewCube->SetTransparency(0.0);
|
||||||
axiViewCube->SetFixedAnimationLoop(true);
|
axiViewCube->SetFixedAnimationLoop(true);
|
||||||
axiViewCube->SetTextColor(Quantity_Color(Quantity_NOC_BLUE1));
|
axiViewCube->SetTextColor(Quantity_Color(Quantity_NOC_YELLOW2));
|
||||||
axiViewCube->SetFontHeight(20);
|
axiViewCube->SetFontHeight(2000);
|
||||||
|
axiViewCube->SetFont("HarmonyOS Sans");
|
||||||
axiViewCube->SetMaterial(Graphic3d_MaterialAspect(Graphic3d_NOM_ALUMINIUM));
|
axiViewCube->SetMaterial(Graphic3d_MaterialAspect(Graphic3d_NOM_ALUMINIUM));
|
||||||
axiViewCube->SetTransformPersistence(
|
axiViewCube->SetTransformPersistence(
|
||||||
new Graphic3d_TransformPers(Graphic3d_TMF_TriedronPers, Aspect_TOTP_RIGHT_UPPER, NCollection_Vec2<int>(100, 100)));
|
new Graphic3d_TransformPers(Graphic3d_TMF_TriedronPers, Aspect_TOTP_RIGHT_UPPER, NCollection_Vec2<int>(125, 125)));
|
||||||
context->Display(axiViewCube, true);
|
context->Display(axiViewCube, true);
|
||||||
HILOG_INFO(NATIVE_TAG, "Init Axi View Cube Done");
|
HILOG_INFO(NATIVE_TAG, "Init Axi View Cube Done");
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -21,6 +21,7 @@ public:
|
|||||||
~Axis();
|
~Axis();
|
||||||
bool InitAxis(Handle(AIS_InteractiveContext)& context);
|
bool InitAxis(Handle(AIS_InteractiveContext)& context);
|
||||||
bool InitAxisCube(Handle(AIS_InteractiveContext) & context);
|
bool InitAxisCube(Handle(AIS_InteractiveContext) & context);
|
||||||
|
void SetAxisTextStyle(Handle(Prs3d_TextAspect) textStyle);
|
||||||
void SetRotationX(float x);
|
void SetRotationX(float x);
|
||||||
void SetRotationY(float y);
|
void SetRotationY(float y);
|
||||||
void SetRotationZ(float z);
|
void SetRotationZ(float z);
|
||||||
@ -33,7 +34,7 @@ private:
|
|||||||
Handle(AIS_Trihedron) axiTrihedron;
|
Handle(AIS_Trihedron) axiTrihedron;
|
||||||
//定义三面体
|
//定义三面体
|
||||||
Handle(AIS_ViewCube) axiViewCube;
|
Handle(AIS_ViewCube) axiViewCube;
|
||||||
Handle(Prs3d_TextAspect) textAspect;
|
Handle(Prs3d_TextAspect) textStyle;
|
||||||
private:
|
private:
|
||||||
//旋转X轴
|
//旋转X轴
|
||||||
float rotationX=0.0f;
|
float rotationX=0.0f;
|
||||||
|
|||||||
@ -17,9 +17,11 @@ Camera::~Camera() {}
|
|||||||
bool Camera::InitCamera(Handle(V3d_View)& view) {
|
bool Camera::InitCamera(Handle(V3d_View)& view) {
|
||||||
try {
|
try {
|
||||||
camera = new Graphic3d_Camera;
|
camera = new Graphic3d_Camera;
|
||||||
|
// 将角度转换为弧度并计算对应的缩放因子
|
||||||
camera->SetFOVy(45.0);
|
camera->SetFOVy(45.0);
|
||||||
camera->SetZRange(1.0, 1000.0);
|
camera->SetZRange(1, 10.0);
|
||||||
view->SetCamera(camera);
|
view->SetCamera(camera);
|
||||||
|
HILOG_ERROR(NATIVE_TAG,"Camera Scale:%{public}f",camera->Scale());
|
||||||
HILOG_INFO(NATIVE_TAG, "InitCamera Done");
|
HILOG_INFO(NATIVE_TAG, "InitCamera Done");
|
||||||
return true;
|
return true;
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
|
|||||||
@ -142,11 +142,13 @@ void NativeManager::OnSurfaceCreated(OH_NativeXComponent *component, void *windo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OH_NativeXComponent_GetXComponentSize(component, window, &width_, &height_);
|
OH_NativeXComponent_GetXComponentSize(component, window, &bfWidth, &bfHeight);
|
||||||
int64_t id = 0;
|
int64_t id = 0;
|
||||||
std::lock_guard<std::mutex> lock(mapMutex);
|
std::lock_guard<std::mutex> lock(mapMutex);
|
||||||
if (renderThreadMap.find(id) == renderThreadMap.end()) {
|
if (renderThreadMap.find(id) == renderThreadMap.end()) {
|
||||||
auto renderThread = std::make_shared<NativeRenderThread>();
|
auto renderThread = std::make_shared<NativeRenderThread>();
|
||||||
|
renderThread->initNativeReader(bfWidth, bfHeight);
|
||||||
|
HILOG_ERROR(NATIVE_TAG,"uint64_t bfSize:%{public}dX%{public}d",bfWidth,bfHeight);
|
||||||
renderThreadMap[id] = renderThread;
|
renderThreadMap[id] = renderThread;
|
||||||
renderThread->start(reinterpret_cast<OHNativeWindow*>(window));
|
renderThread->start(reinterpret_cast<OHNativeWindow*>(window));
|
||||||
}
|
}
|
||||||
@ -162,21 +164,21 @@ void NativeManager::OnSurfaceDestroyed(OH_NativeXComponent *component, void *win
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uint64_t width,height;
|
|
||||||
void NativeManager::OnSurfaceChanged(OH_NativeXComponent *component, void *window) {
|
void NativeManager::OnSurfaceChanged(OH_NativeXComponent *component, void *window) {
|
||||||
OH_NativeXComponent_GetXComponentSize(component, window, &width_, &height_);
|
OH_NativeXComponent_GetXComponentSize(component, window, &afWidth, &afHeight);
|
||||||
|
|
||||||
int64_t id = 0;
|
int64_t id = 0;
|
||||||
{
|
{
|
||||||
if(width==width_ && height==height_){
|
if(bfWidth==afWidth && bfHeight==afHeight){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::lock_guard<std::mutex> lock(mapMutex);
|
std::lock_guard<std::mutex> lock(mapMutex);
|
||||||
if (renderThreadMap.find(id) != renderThreadMap.end()) {
|
if (renderThreadMap.find(id) != renderThreadMap.end()) {
|
||||||
HILOG_ERROR(NATIVE_TAG,"uint32_t Size:%{public}dX%{public}d",width_,height_);
|
HILOG_ERROR(NATIVE_TAG,"uint64_t Size:%{public}dX%{public}d",bfWidth,bfHeight);
|
||||||
renderThreadMap[id]->resizeWindow(width_, height_);
|
bfWidth=afWidth;
|
||||||
width=width_;
|
bfHeight=afHeight;
|
||||||
height=height_;
|
renderThreadMap[id]->resizeWindow(bfWidth, bfHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -81,9 +81,15 @@ private:
|
|||||||
public:
|
public:
|
||||||
// [StartExclude plugin_manager_h_part]
|
// [StartExclude plugin_manager_h_part]
|
||||||
OH_NativeXComponent_TouchEvent touchEvent_;
|
OH_NativeXComponent_TouchEvent touchEvent_;
|
||||||
|
|
||||||
std::string modelPath_;
|
std::string modelPath_;
|
||||||
uint64_t width_;
|
//窗体Size改变前
|
||||||
uint64_t height_;
|
uint64_t bfWidth;
|
||||||
|
uint64_t bfHeight;
|
||||||
|
//窗体Size改变后
|
||||||
|
uint64_t afWidth;
|
||||||
|
uint64_t afHeight;
|
||||||
|
|
||||||
int64_t timestamp;
|
int64_t timestamp;
|
||||||
static int32_t hasDraw_;
|
static int32_t hasDraw_;
|
||||||
static int32_t hasChangeColor_;
|
static int32_t hasChangeColor_;
|
||||||
|
|||||||
@ -26,7 +26,9 @@ bool NativeRender::init(EGLCore &_eglCore) {
|
|||||||
HILOG_ERROR(NATIVE_TAG, "Init GraphicDriver Fail!");
|
HILOG_ERROR(NATIVE_TAG, "Init GraphicDriver Fail!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!ts->InitTextStyle()) {
|
if (ts->InitTextStyle()) {
|
||||||
|
mAxis->SetAxisTextStyle(ts->text);
|
||||||
|
}else{
|
||||||
HILOG_ERROR(NATIVE_TAG, "Init TextSyle Fail!");
|
HILOG_ERROR(NATIVE_TAG, "Init TextSyle Fail!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -54,6 +56,7 @@ bool NativeRender::init(EGLCore &_eglCore) {
|
|||||||
HILOG_ERROR(NATIVE_TAG, "Init Camera Fail!");
|
HILOG_ERROR(NATIVE_TAG, "Init Camera Fail!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mAxis->InitAxis(ctx->context)) {
|
if (!mAxis->InitAxis(ctx->context)) {
|
||||||
HILOG_ERROR(NATIVE_TAG, "Init AXIS Fail!");
|
HILOG_ERROR(NATIVE_TAG, "Init AXIS Fail!");
|
||||||
return false;
|
return false;
|
||||||
@ -188,102 +191,6 @@ void NativeRender::setZoomLevel(float zoom) {
|
|||||||
void NativeRender::setClearColor(float r, float g, float b, float a) { vw->SetClearColor(r, g, b, a); }
|
void NativeRender::setClearColor(float r, float g, float b, float a) { vw->SetClearColor(r, g, b, a); }
|
||||||
void NativeRender::resetView() { vw->ResetView(); }
|
void NativeRender::resetView() { vw->ResetView(); }
|
||||||
void NativeRender::SwitchView(std::string view) {
|
void NativeRender::SwitchView(std::string view) {
|
||||||
fontDev();
|
|
||||||
vw->SwitchView(view);
|
vw->SwitchView(view);
|
||||||
}
|
}
|
||||||
// 字体测试
|
|
||||||
void NativeRender::fontDev() {
|
|
||||||
//获取鸿蒙系统字体管理信息
|
|
||||||
// OH_Drawing_FontConfigInfoErrorCode fontConfigInfoErrorCode; // 用于接收错误代码
|
|
||||||
// OH_Drawing_FontConfigInfo *fontConfigInfo = OH_Drawing_GetSystemFontConfigInfo(&fontConfigInfoErrorCode);
|
|
||||||
// if (fontConfigInfoErrorCode != SUCCESS_FONT_CONFIG_INFO) {
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, "PrintSysFontMetrics", "获取系统信息失败,错误代码为: %{public}d",
|
|
||||||
// fontConfigInfoErrorCode);
|
|
||||||
// }
|
|
||||||
// // 获取系统字体配置信息示例
|
|
||||||
// if (fontConfigInfo != nullptr) {
|
|
||||||
// // 获取字体文件路径数量,打印日志
|
|
||||||
// size_t fontDirCount = fontConfigInfo->fontDirSize;
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "PrintSysFontMetrics", "字体文件路径数量为: %{public}zu\n",
|
|
||||||
// fontDirCount);
|
|
||||||
// // 遍历字体文件路径列表,打印日志
|
|
||||||
// for (size_t i = 0; i < fontDirCount; ++i) {
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "PrintSysFontMetrics", "字体文件路径为: %{public}s\n",
|
|
||||||
// fontConfigInfo->fontDirSet[i]);
|
|
||||||
// }
|
|
||||||
// // 获取通用字体集数量,打印日志
|
|
||||||
// size_t genericCount = fontConfigInfo->fontGenericInfoSize;
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "PrintSysFontMetrics", "通用字体集数量为: %{public}zu\n",
|
|
||||||
// genericCount);
|
|
||||||
// // 遍历获取每个通用字体集中的字体家族名(例如 HarmonyOS Sans),打印日志
|
|
||||||
// for (size_t i = 0; i < genericCount; ++i) {
|
|
||||||
// OH_Drawing_FontGenericInfo &genericInfo = fontConfigInfo->fontGenericInfoSet[i];
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "PrintSysFontMetrics",
|
|
||||||
// "获取第%{public}zu个通用字体集中的字体家族名为: %{public}s", i, genericInfo.familyName);
|
|
||||||
// for(size_t i = 0; i < genericInfo.adjustInfoSize; ++i){
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "PrintSysFontMetrics",
|
|
||||||
// "获取第%{public}zu个通用字体集中的字体别名: %{public}s", i, genericInfo.aliasInfoSet->familyName);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
//OCCT字体管理信息获取
|
|
||||||
// auto mgr=Font_FontMgr::GetInstance();
|
|
||||||
// Handle(Font_SystemFont) sysFont=new Font_SystemFont("HarmonyOS_Sans_Regular");
|
|
||||||
// sysFont->SetFontPath(Font_FontAspect_Regular, "/data/storage/el1/bundle/entry/resources/rawfile/fonts/HarmonyOS_Sans_Regular.ttf");
|
|
||||||
// TCollection_ExtendedString aFontName("HarmonyOS_Sans_Regular"); // 为你自定义的字体起一个名称,后续绘制时会用到
|
|
||||||
//
|
|
||||||
// // 注册字体。第二个参数如果是 Standard_True,表示强制注册,即使同名也覆盖。
|
|
||||||
// bool isRegistered = mgr->RegisterFont(sysFont, Standard_True);
|
|
||||||
//
|
|
||||||
// if (!isRegistered) {
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","Error: Cannot register font: %{public}s",sysFont->FontName().ToCString());
|
|
||||||
// return; // 或者进行错误处理
|
|
||||||
// } else {
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","Successfully registered font: %{public}s",sysFont->FontName().ToCString());
|
|
||||||
// }
|
|
||||||
// mgr->InitFontDataBase();
|
|
||||||
// mgr->AddFontAlias("HarmonyOS-Sans", "HarmonyOS-Sans");
|
|
||||||
// Font_FontAspect aspect = Font_FA_Regular;
|
|
||||||
// // 查找sans别名,优先匹配HarmonyOS Sans
|
|
||||||
// Handle(Font_SystemFont) font = mgr->FindFont("HarmonyOS_Sans_Regular", aspect);
|
|
||||||
// if (!font.IsNull()) {
|
|
||||||
// // 打印实际匹配到的字体名,若为HarmonyOS Sans则生效
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","SO库匹配到的字体名:%{public}s",font->FontName().ToCString());
|
|
||||||
// }
|
|
||||||
// Handle(Font_SystemFont) sysFont=new Font_SystemFont("HarmonyOS-Sans");
|
|
||||||
// sysFont->SetFontPath(Font_FontAspect_Regular, "/data/storage/el1/bundle/entry/resources/rawfile/fonts");
|
|
||||||
// bool err=mgr->RegisterFont(sysFont,true);
|
|
||||||
// if(err){
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT RegisterFont Done");
|
|
||||||
// }
|
|
||||||
// NCollection_Sequence<occ::handle<TCollection_HAsciiString>> theAliases;
|
|
||||||
// mgr->GetAllAliases(theAliases);
|
|
||||||
// for(auto ft:theAliases){
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT Aliases: %{public}s", ft->ToCString());
|
|
||||||
// }
|
|
||||||
|
|
||||||
//Handle(Font_SystemFont)sFont = mgr->GetFont("HarmonyOS-Sans");
|
|
||||||
//OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT sysFont: %{public}s", sFont->FontName().ToCString());
|
|
||||||
//查找指定的字体
|
|
||||||
// const TCollection_AsciiString theFontName='HarmonyOS-Sans';
|
|
||||||
// Font_FontAspect theFontAspect;
|
|
||||||
// mgr->FindFont(theFontName, theFontAspect);
|
|
||||||
// OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT Font_FontAspect: %{public}s", theFontAspect);
|
|
||||||
|
|
||||||
//字体示例
|
|
||||||
Handle(AIS_TextLabel) aTextLabel = new AIS_TextLabel();
|
|
||||||
//TCollection_ExtendedString tostr;
|
|
||||||
//const char* str = "\xC4\xE3\xBA\xC3";
|
|
||||||
//Resource_Unicode::ConvertGBToUnicode(str, tostr);
|
|
||||||
const char16_t chinese_array[] = u"新时代社会主义新中国接班人";
|
|
||||||
aTextLabel->SetText(chinese_array);
|
|
||||||
aTextLabel->Attributes()->SetTextAspect(ts->text);
|
|
||||||
gp_Pnt position(0.0, 0.0, 0.0); // 例如,在原点
|
|
||||||
aTextLabel->SetPosition(position);
|
|
||||||
ctx->context->Display(aTextLabel, Standard_True);
|
|
||||||
HILOG_ERROR(NATIVE_TAG, "aTextLabel字体名字:%{public}s", aTextLabel->FontName().ToCString());
|
|
||||||
HILOG_ERROR(NATIVE_TAG, "aTextLabel字体名字:%{public}s", aTextLabel->Attributes()->TextAspect()->Aspect()->Font().ToCString());
|
|
||||||
}
|
|
||||||
} // namespace NativeOpenCAX
|
} // namespace NativeOpenCAX
|
||||||
@ -49,17 +49,8 @@ public:
|
|||||||
void setZoomLevel(float zoom);
|
void setZoomLevel(float zoom);
|
||||||
void setTranslation(float x, float y);
|
void setTranslation(float x, float y);
|
||||||
void setCameraRotationMode(bool state);
|
void setCameraRotationMode(bool state);
|
||||||
void fontDev();
|
|
||||||
//视图
|
//视图
|
||||||
void SwitchView(std::string);
|
void SwitchView(std::string);
|
||||||
void SetFrontView();
|
|
||||||
void SetTopView();
|
|
||||||
void SetLeftSideView();
|
|
||||||
void SetRightSideView();
|
|
||||||
void SetBottomView();
|
|
||||||
void SetRearView();
|
|
||||||
void SetISOView();
|
|
||||||
void SetDIMView();
|
|
||||||
private:
|
private:
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
|
|||||||
@ -8,18 +8,17 @@ namespace NativeOpenCAX {
|
|||||||
|
|
||||||
NativeRenderThread::NativeRenderThread()
|
NativeRenderThread::NativeRenderThread()
|
||||||
: isRunning_(false),
|
: isRunning_(false),
|
||||||
nativeWindow_(nullptr),
|
nativeWindow_(nullptr)
|
||||||
windowWidth_(1280),
|
|
||||||
windowHeight_(720)
|
|
||||||
{
|
{
|
||||||
eglCore_ = new EGLCore();
|
eglCore_ = new EGLCore();
|
||||||
renderer_= new NativeRender(windowWidth_,windowHeight_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NativeRenderThread::~NativeRenderThread() {
|
NativeRenderThread::~NativeRenderThread() {
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
void NativeRenderThread::initNativeReader(int width,int height){
|
||||||
|
renderer_= new NativeRender(width,height);
|
||||||
|
}
|
||||||
bool NativeRenderThread::start(OHNativeWindow* window) {
|
bool NativeRenderThread::start(OHNativeWindow* window) {
|
||||||
if (isRunning_) {
|
if (isRunning_) {
|
||||||
return true;
|
return true;
|
||||||
@ -57,39 +56,6 @@ void NativeRenderThread::renderLoop() {
|
|||||||
if (!eglCore_->init(nativeWindow_)) {
|
if (!eglCore_->init(nativeWindow_)) {
|
||||||
OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "EGLCoreInit","Failed to initialize EGL");
|
OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "EGLCoreInit","Failed to initialize EGL");
|
||||||
}
|
}
|
||||||
ftMgr=Font_FontMgr::GetInstance();
|
|
||||||
ftMgr->InitFontDataBase();
|
|
||||||
ftMgr->SetPrintErrors(true);
|
|
||||||
ftMgr->SetTraceAliases(true);
|
|
||||||
Handle(Font_SystemFont) sysFont=new Font_SystemFont("HarmonyOS_Sans_Medium");
|
|
||||||
sysFont->SetFontPath(Font_FontAspect_Regular, "/data/storage/el2/base/haps/entry/files/fonts/");
|
|
||||||
// 注册字体。第二个参数如果是 Standard_True,表示强制注册,即使同名也覆盖。
|
|
||||||
bool isRegistered = ftMgr->RegisterFont(sysFont, Standard_True);
|
|
||||||
|
|
||||||
if (!isRegistered) {
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","Error: Cannot register font: %{public}s",sysFont->FontName().ToCString());
|
|
||||||
return; // 或者进行错误处理
|
|
||||||
} else {
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","Successfully registered font: %{public}s",sysFont->FontName().ToCString());
|
|
||||||
}
|
|
||||||
|
|
||||||
Handle(Font_SystemFont) fsf;
|
|
||||||
fsf=ftMgr->GetFont("HarmonyOS_Sans_Medium");
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT Path: %{public}s", fsf->FontPath(Font_FontAspect_Regular).ToCString());
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT GetFont: %{public}s", fsf->FontName().ToCString());
|
|
||||||
//输出所有字体
|
|
||||||
NCollection_Sequence<occ::handle<TCollection_HAsciiString>> theAliases;
|
|
||||||
ftMgr->GetAllAliases(theAliases);
|
|
||||||
for(auto ft:theAliases){
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT Aliases: %{public}s", ft->ToCString());
|
|
||||||
}
|
|
||||||
//checkfont
|
|
||||||
NCollection_List<occ::handle<Font_SystemFont>> fsfs;
|
|
||||||
fsfs=ftMgr->GetAvailableFonts();
|
|
||||||
for(auto fta:fsfs){
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT Font: %{public}s", fta->FontName().ToCString());
|
|
||||||
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "OCCT","OCCT Font Path: %{public}s", fta->FontPath(Font_FontAspect_Regular).ToCString());
|
|
||||||
}
|
|
||||||
// 初始化OCCT渲染器
|
// 初始化OCCT渲染器
|
||||||
if (!renderer_->init(*eglCore_)) {
|
if (!renderer_->init(*eglCore_)) {
|
||||||
OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "NativeRenderInit","Failed to initialize OCCT renderer");
|
OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "NativeRenderInit","Failed to initialize OCCT renderer");
|
||||||
@ -129,9 +95,9 @@ void NativeRenderThread::renderLoop() {
|
|||||||
renderer_->setClearColor(command.param2, command.param3, command.param4, command.param5);
|
renderer_->setClearColor(command.param2, command.param3, command.param4, command.param5);
|
||||||
break;
|
break;
|
||||||
case CMD_RESIZE:
|
case CMD_RESIZE:
|
||||||
windowWidth_ = static_cast<int>(command.param2);
|
rdWidth = static_cast<int>(command.param2);
|
||||||
windowHeight_ = static_cast<int>(command.param3);
|
rdHeight = static_cast<int>(command.param3);
|
||||||
renderer_->resize(windowWidth_, windowHeight_);
|
renderer_->resize(rdWidth, rdHeight);
|
||||||
break;
|
break;
|
||||||
case CMD_SWITCH_VIEW:
|
case CMD_SWITCH_VIEW:
|
||||||
renderer_->SwitchView(command.param1);
|
renderer_->SwitchView(command.param1);
|
||||||
|
|||||||
@ -23,7 +23,7 @@ public:
|
|||||||
|
|
||||||
bool start(OHNativeWindow* window);
|
bool start(OHNativeWindow* window);
|
||||||
void stop();
|
void stop();
|
||||||
|
void initNativeReader(int width,int height);
|
||||||
void loadModel(const std::string& filePath);
|
void loadModel(const std::string& filePath);
|
||||||
void setCameraRotationMode(bool state);
|
void setCameraRotationMode(bool state);
|
||||||
void setRotation(float xAngle, float yAngle);
|
void setRotation(float xAngle, float yAngle);
|
||||||
@ -73,8 +73,8 @@ private:
|
|||||||
std::mutex callbackMutex_;
|
std::mutex callbackMutex_;
|
||||||
Callback renderCompleteCallback_;
|
Callback renderCompleteCallback_;
|
||||||
Handle(Font_FontMgr) ftMgr ;
|
Handle(Font_FontMgr) ftMgr ;
|
||||||
int windowWidth_;
|
int rdWidth=0;
|
||||||
int windowHeight_;
|
int rdHeight=0;
|
||||||
};
|
};
|
||||||
} // namespace NaitveRenderThread
|
} // namespace NaitveRenderThread
|
||||||
#endif //NATIVE_RENDER_THREAD_H
|
#endif //NATIVE_RENDER_THREAD_H
|
||||||
@ -21,7 +21,8 @@ bool TextStyle::InitTextStyle() {
|
|||||||
try {
|
try {
|
||||||
text = new Prs3d_TextAspect();
|
text = new Prs3d_TextAspect();
|
||||||
text->SetFont("HarmonyOS Sans");
|
text->SetFont("HarmonyOS Sans");
|
||||||
text->SetHeight(5000);
|
//缩放比例计算.根据XComp的对角线大小.按照Camera的缩放
|
||||||
|
text->SetHeight(2000);
|
||||||
text->Aspect()->SetColor(Quantity_NOC_GRAY95);
|
text->Aspect()->SetColor(Quantity_NOC_GRAY95);
|
||||||
text->Aspect()->SetColorSubTitle(Quantity_NOC_BLACK);
|
text->Aspect()->SetColorSubTitle(Quantity_NOC_BLACK);
|
||||||
text->Aspect()->SetDisplayType(Aspect_TODT_SHADOW);
|
text->Aspect()->SetDisplayType(Aspect_TODT_SHADOW);
|
||||||
|
|||||||
@ -40,12 +40,13 @@ void View::SetViewOption() {
|
|||||||
Aspect_GFM_VER, // 垂直渐变
|
Aspect_GFM_VER, // 垂直渐变
|
||||||
false);
|
false);
|
||||||
// 设置默认相机位置
|
// 设置默认相机位置
|
||||||
|
view->SetSize(0.1);
|
||||||
view->SetProj(V3d_XposYnegZpos);
|
view->SetProj(V3d_XposYnegZpos);
|
||||||
view->FitAll(0.05, false);
|
view->FitAll(0.02, false);
|
||||||
// 可选:显示坐标轴
|
// 可选:显示坐标轴
|
||||||
view->ZBufferTriedronSetup();
|
view->ZBufferTriedronSetup();
|
||||||
// 调整相机视角
|
// 调整相机视角
|
||||||
view->Camera()->SetProjectionType(Graphic3d_Camera::Projection_Perspective);
|
view->Camera()->SetProjectionType(Graphic3d_Camera::Projection_Orthographic);
|
||||||
view->SetBackgroundColor(Quantity_NOC_GRAY90);
|
view->SetBackgroundColor(Quantity_NOC_GRAY90);
|
||||||
//左下角默认坐标系
|
//左下角默认坐标系
|
||||||
view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_ANTIQUEWHITE, 0.3, V3d_ZBUFFER);
|
view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_ANTIQUEWHITE, 0.3, V3d_ZBUFFER);
|
||||||
@ -54,7 +55,7 @@ void View::SetViewOption() {
|
|||||||
if(!tri.IsNull()){
|
if(!tri.IsNull()){
|
||||||
HILOG_INFO(NATIVE_TAG, "V3d_Trihedron X");
|
HILOG_INFO(NATIVE_TAG, "V3d_Trihedron X");
|
||||||
tri->LabelAspect(V3d_X)->SetFont("HarmonyOS Sans");
|
tri->LabelAspect(V3d_X)->SetFont("HarmonyOS Sans");
|
||||||
tri->LabelAspect(V3d_X)->SetHeight(20.0);
|
tri->LabelAspect(V3d_X)->SetHeight(1500.0);
|
||||||
tri->LabelAspect(V3d_X)->SetColor(Quantity_Color(Quantity_NOC_YELLOW));
|
tri->LabelAspect(V3d_X)->SetColor(Quantity_Color(Quantity_NOC_YELLOW));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +81,8 @@ void View::Redraw() {
|
|||||||
void View::ResetView() {
|
void View::ResetView() {
|
||||||
if (!view.IsNull()) {
|
if (!view.IsNull()) {
|
||||||
view->SetProj(V3d_XposYnegZpos);
|
view->SetProj(V3d_XposYnegZpos);
|
||||||
view->FitAll(0.05, false);
|
//view->FitAll(0.05, false);
|
||||||
|
view->AutoZFit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user