#include "AppFunc.h" #include "XJPoint3D.h" #include "XJOSGView.h" #include "XJObjectManager.h" #include "OMPeriodicLattice.h" #include static CXJOSGView* osgView = nullptr; void Func_InitView(void* hwnd, char* rootPath) { if (hwnd == nullptr) return; if (osgView == nullptr) { osgView = new CXJOSGView(hwnd, 0); osgView->SetBackGroudBmpPath(rootPath); //初始化场景 osgView->InitOSG("OsgView"); //初始化视角 osgView->SetCameraLookAt(Point3D(0.0, -200.0, 0.0), Point3D(0.0, 0.0, 0.0), Point3D(0.0, 0.0, 1.0)); osgView->ZoomView(); } } void Func_InitViewWithColor(void* hwnd, int r, int g, int b) { if (hwnd == nullptr) return; if (osgView == nullptr) { osgView = new CXJOSGView(hwnd, 0); osgView->SetBackGroudColor(r, g, b, 1); //初始化场景 osgView->InitOSG("OsgView"); //初始化视角 osgView->SetCameraLookAt(Point3D(0.0, -200.0, 0.0), Point3D(0.0, 0.0, 0.0), Point3D(0.0, 0.0, 1.0)); osgView->ZoomView(); } OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetInvalidColor(r, g, b); } void Func_RenderView() { osgView->RequestRedraw(); CXJOSGView::Render(osgView); } void Func_ZoomView() { osgView->ZoomView(); osgView->SetProjView(OSG_VIEW_TOP); } void Func_SetZRange(double zMin, double zMax) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetZRange(zMin, zMax); } int Func_CreateMesh(unsigned int numx, unsigned int numy, double x0, double y0, double dx, double dy, double* values) { if (numx * numy == 0 || numx == 1 || numy == 1) return -1; OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); if (pMesh->Create(numx, numy, x0, y0, dx, dy, values)) return -1; return 0; } void Func_SetColorList(const std::vector& colorList) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetColorList(colorList); } void Func_SetContourList(const std::vector& contourList) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetContourList(contourList); } void Func_SetFaultList(const std::vector& faultList, bool isOffset) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetFaultList(faultList, isOffset); } void Func_SetControlPoint(const std::vector& pointList) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetControlPointList(pointList); } void Func_SetBoundary(const PlineList& bound) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetBound(bound); } void Func_SetOtherLines(const PlineList& lines) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetOtherLines(lines); } double* Func_GetValue() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); return pMesh->GetValue(); } void Func_GetContourList(std::vector& contourList) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->GetContourList(contourList); } void Func_FreeAll() { if (osgView) { delete osgView; osgView = nullptr; } GetObjectManager()->ClearUndoRedo(); OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->Clear(); } void Func_DrawCircle(int ipx, int ipy, float rad) { osgView->DrawCircleOnWindow(ipx, ipy, rad); } void Func_ClearCircle() { osgView->ClearCircleOnWindow(); } void Func_StrechUp(int ipx, int ipy, float rad, float per, int type, float wellrad) { //鼠标窗口位置 Point3D tempPoision0(ipx, ipy, 0); Point3D tempPoision1(ipx, ipy + rad, 0); //鼠标像素对应的网格位置 Point3D NP0, FP0, NP1, FP1; osgView->TranslatePointW2NFP(tempPoision0, NP0, FP0); osgView->TranslatePointW2NFP(tempPoision1, NP1, FP1); float R = (NP0 - NP1).Magnitude(); OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->BrushMesh(NP0, R, per, type, wellrad); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_PushDown(int ipx, int ipy, float rad, float per, int type, float wellrad) { //鼠标位置 Point3D tempPoision0(ipx, ipy, 0); Point3D tempPoision1(ipx, ipy + rad, 0); //鼠标像素对应的网格位置 Point3D NP0, FP0, NP1, FP1; osgView->TranslatePointW2NFP(tempPoision0, NP0, FP0); osgView->TranslatePointW2NFP(tempPoision1, NP1, FP1); float R = (NP0 - NP1).Magnitude(); OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->BrushMesh(NP0, R, -per, type, wellrad); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_DragAway(int startx, int starty, int endx, int endy, float rad, float per, int type, float wellrad) { //鼠标位置 Point3D tempPoision0(endx, endy, 0); Point3D tempPoision1(endx, endy + rad, 0); Point3D tempPoision2(startx, starty, 0); Point3D NP0, FP0, NP1, FP1; osgView->TranslatePointW2NFP(tempPoision0, NP0, FP0); osgView->TranslatePointW2NFP(tempPoision1, NP1, FP1); float R = (NP0 - NP1).Magnitude(); osgView->TranslatePointW2NFP(tempPoision2, NP1, FP1); OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->DuabMesh(NP1, NP0, R, per, type, wellrad); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_Smooth(int ipx, int ipy, float rad, float per, int type, float wellrad) { //鼠标位置 Point3D tempPoision0(ipx, ipy, 0); Point3D tempPoision1(ipx, ipy + rad, 0); Point3D NP0, FP0, NP1, FP1; osgView->TranslatePointW2NFP(tempPoision0, NP0, FP0); osgView->TranslatePointW2NFP(tempPoision1, NP1, FP1); float R = (NP0 - NP1).Magnitude(); OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SmoothMesh(NP0, R, per, type, wellrad); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_OffsetFault() { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->OffsetFault(); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_CutContourByFault() { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->OptimizeIsopleths(); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_ShowMesh(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->SetVisibility(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_ShowIsopleth(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->ShowIsopleth(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_ShowControlPoint(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->ShowControlPoint(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_ShowFault(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->ShowFault(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_ShowBound(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->ShowBound(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_ShowOtherLines(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->ShowOtherLines(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_ShowMeshVertex(bool bShow) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->ShowMeshVertex(bShow); osgView->UpdateObjectView(pMesh, UPDATE_VISIBLE); } void Func_SetProperty(double isopStep, int markStep, double minIsop, double maxIsop, double zMin, double zMax) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->SetIsoplethProperty(isopStep, markStep, minIsop, maxIsop, zMin, zMax); pMesh->UpdateIsopleth(); osgView->UpdateObjectView(pMesh, UPDATE_ISOPLETH); } void Func_GetProperty(double& isopStep, int& markStep, double& minIsop, double& maxIsop, double& zMin, double& zMax) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->GetIsoplethProperty(isopStep, markStep, minIsop, maxIsop, zMin, zMax); } void Func_StartCommand() { CXJObjectManager::GetInstance()->StartCommand(); } void Func_EndCommand() { CXJObjectManager::GetInstance()->EndCommand(); } void Func_Undo() { CXJObjectManager::GetInstance()->Undo(); OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_Redo() { CXJObjectManager::GetInstance()->Redo(); OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } //是否可以撤销 bool Func_CanUndo() { int curStep = CXJObjectManager::GetInstance()->GetUndoCurStep(); return (curStep > 0 ? true : false); } //是否可以重做 bool Func_CanRedo() { int curStep = CXJObjectManager::GetInstance()->GetUndoCurStep(); int stepCount = CXJObjectManager::GetInstance()->GetUndoCount(); return (curStep < stepCount ? true : false); } /*******************二期新增功能*******************/ void Func_WellAdaptiveAdjust(float rad, float range, float miu) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->AdjuestWithWellPoint(rad, range, miu); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_EnablePickMeshZ(bool bEnable) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); if (pMesh) { if (bEnable) osgView->EnablePickZValue(pMesh, true); else osgView->EnablePickZValue(pMesh, false); } } void Func_SetWellColor(int r, int g, int b) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->SetWellColor(r, g, b); osgView->UpdateObjectView(pMesh, UPDATE_WELL); } void Func_SetWellTxtSize(float size) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->SetWellTxtSize(size); osgView->UpdateObjectView(pMesh, UPDATE_WELL); } void Func_EnableFillFault(bool bEnable) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); if (pMesh) { if (bEnable) pMesh->ShowFilledFault(true); else pMesh->ShowFilledFault(false); osgView->UpdateObjectView(pMesh, UPDATE_FAULT); } } void Func_FilterMesh(float throld) { OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); if (pMesh) { pMesh->FilterIsopleths(throld); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } } void Func_EnableDrawPolygon(bool bEnable) { osgView->EnableOpDrawPolygon(bEnable); } void Func_StretchlUpPolygon(float per, bool state, float wellRad) { std::vector polygen; osgView->GetOpDrawPolygon(polygen); OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->StretchlUpPolygon(polygen, per, wellRad, state); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_PushDownPolygon(float per, bool state, float wellRad) { std::vector polygen; osgView->GetOpDrawPolygon(polygen); OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->StretchlUpPolygon(polygen, -per, wellRad, state); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_SmoothPolygon(float per, bool state, float wellRad) { std::vector polygen; osgView->GetOpDrawPolygon(polygen); OMPeriodicLattice* pMesh = CXJObjectManager::GetInstance()->GetPeriodicLattice(); pMesh->SmoothPolygon(polygen, per, wellRad, state); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_OptimizeMesh(int startx, int starty, int endx, int endy, float rad, float per) { //鼠标位置 Point3D tempPoision0(endx, endy, 0); Point3D tempPoision1(endx, endy + rad, 0); Point3D tempPoision2(startx, starty, 0); Point3D NP0, FP0, NP1, FP1; osgView->TranslatePointW2NFP(tempPoision0, NP0, FP0); osgView->TranslatePointW2NFP(tempPoision1, NP1, FP1); float R = (NP0 - NP1).Magnitude(); osgView->TranslatePointW2NFP(tempPoision2, NP1, FP1); OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->TransitFault(NP1, NP0, R, per); osgView->UpdateObjectView(pMesh, UPDATE_WIREFRAME); } void Func_GetViewPos(double& px, double& py, double& scale) { Point2D pt; double s = 1.0; osgView->GetViewPos(pt, s); px = pt.x(); py = pt.y(); scale = s; } void Func_SetViewPos(double px, double py, double scale) { osgView->SetViewPos(px, py, scale); } void Func_GetMousePos(double& px, double& py) { int cx = 0, cy = 0; osgView->GetMousePos(cx, cy); Point3D pt(cx, cy, 0); Point3D np, fp; osgView->TranslatePointW2NFP(pt, np, fp); px = np.x(); py = np.y(); } void Func_SetMousePos(double px, double py) { Point3D pt(px, py, 0); int cx=0, cy = 0; osgView->ProjectObjectToWindow(pt, cx, cy); osgView->ShowMouse(cx, cy); } bool Func_CompileExpressionZ(char * expressionStr) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); bool state = pMesh->CompileExpressionZ(expressionStr); return state; } bool Func_CalculateZByExpression(char* expressionStr) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); bool state = pMesh->CalculateZByExpression(expressionStr); osgView->UpdateObjectView(pMesh, UPDATE_ALL); return state; } double Func_GetZMin() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); return pMesh->GetZMin(); } double Func_GetZMax() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); return pMesh->GetZMax(); } void Func_SetDecimalNumber(int num) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetDecimalNumber(num); osgView->UpdateObjectView(pMesh, UPDATE_ALL); } int Func_GetDecimalNumber() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); return pMesh->GetDecimalNumber(); } void Func_SetFaultControlState(bool state) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->SetFaultControlState(state); } bool Func_GetFaultControlState() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); return pMesh->GetFaultControlState(); } bool Func_RectificationMeshWellCompute(double deltaz, int type, double factor) { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); bool state = pMesh->RectificationMeshWellCompute(deltaz, type, factor); //osgView->UpdateObjectView(pMesh, UPDATE_ALL); return state; } void Func_MeshWellThreadStop() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->MeshWellThreadStop(); } int Func_GetWellRectificationProgress() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); return pMesh->GetMeshWellRectificationProgress(); } void Func_UpdateObjectView() { OMPeriodicLattice* pMesh = GetObjectManager()->GetPeriodicLattice(); pMesh->UpdataMeshWellRectificationView(); osgView->UpdateObjectView(pMesh, UPDATE_ALL); }