You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
6.7 KiB
C++

#include "stdafx.h"
#include "SigmaView.h"
#include "ItemSelect.h"
#pragma pack(1)
struct ViewFactor
{
double offsetX;
double offsetY;
double zoomFactor;
};
#pragma pack()
extern "C" __declspec(dllexport)
void SetScrollBar(CSigmaView* pView, int& hMax, int& vMax, int& hPage, int& vPage, int& hPos, int& vPos)
{
pView->SetScrollBar(hMax, vMax, hPage, vPage, hPos, vPos);
}
extern "C" __declspec(dllexport)
void HScroll(CSigmaView* pView, int nSBCode, int nPos, int nScrollMax)
{
pView->OnHScroll(nSBCode, nPos, nScrollMax);
}
extern "C" __declspec(dllexport)
void Scroll(CSigmaView* pView, int orientation, double offset)
{
pView->Scroll(orientation, offset);
}
extern "C" __declspec(dllexport)
void ViewEnlarge(CSigmaView* pView)
{
pView->OnViewEnlarge();
}
extern "C" __declspec(dllexport)
void ViewEnlargeByMousePoint(CSigmaView * pView, int mouseX, int mouseY)
{
pView->OnViewEnlargeByMousePoint(mouseX, mouseY);
}
extern "C" __declspec(dllexport)
void ViewReduceByMousePoint(CSigmaView * pView, int mouseX, int mouseY)
{
pView->ViewReduceByMousePoint(mouseX, mouseY);
}
extern "C" __declspec(dllexport)
void ViewReduce(CSigmaView* pView)
{
pView->OnViewReduce();
}
extern "C" __declspec(dllexport)
void ViewReduceWithFactor(CSigmaView* pView, double factor)
{
pView->OnViewReduce(factor);
}
extern "C" __declspec(dllexport)
void ViewReduceForScreenPoint(CSigmaView* pView)
{
pView->ReduceForScreenPoint();
}
extern "C" __declspec(dllexport)
void OffsetViewportOrigion(CSigmaView* pView, int x, int y)
{
pView->OffsetViewportOrg(x, y);
}
extern "C" __declspec(dllexport)
void ViewExtend(CSigmaView* pView)
{
pView->OnViewExtend();
}
extern "C" __declspec(dllexport)
void Extend(CSigmaView* pView, double locationX,double locationY, double width, double height, int mode)
{
pView->Extend(locationX, locationY, width, height, mode);
}
//kind 视图操作的类型 0--无效值 1--平移 2--窗口放大
extern "C" __declspec(dllexport)
void SetViewOperationKind(CSigmaView* pView, int kind)
{
if (kind == 1)
{
pView->SetViewPan();
}
else if (kind == 2) {
pView->SetViewWindow();
}
}
extern "C" __declspec(dllexport)
void ViewPanTo(CSigmaView* pView, int mouseX, int mouseY)
{
pView->PanTo(mouseX, mouseY);
}
extern "C" __declspec(dllexport)
void SetViewWindow(CSigmaView* pView) {
pView->SetViewWindow();
}
extern "C" __declspec(dllexport)
int GetViewFactors(CSigmaView * pView, ViewFactor * factorsOut)
{
if (pView == 0)
return -1;
if (pView->m_pDoc == 0)
return -1;
CItemView * item = pView->m_pDoc->GetItemView();
if (item == 0)
return -1;
item->GetViewFactors(factorsOut->offsetX, factorsOut->offsetY, factorsOut->zoomFactor);
return 1;
}
extern "C" __declspec(dllexport)
int SetViewScreenFactors(CSigmaView * pView, double offsetX, double offsetY, double zoomFactor)
{
if (pView == 0 || pView->m_pDoc == 0)
return -1;
CItemView * item = pView->m_pDoc->GetItemView();
if (item == 0)
return -1;
item->SetViewScreenFactors(offsetX, offsetY, zoomFactor);
return 1;
}
extern "C" __declspec(dllexport)
int SetViewFactors(CSigmaView * pView, double offsetXIn, double offsetYIn, double zoomFactorIn)
{
if (pView == 0)
return -1;
if (pView->m_pDoc == 0)
return -1;
CItemView * item = pView->m_pDoc->GetItemView();
if (item == 0)
return -1;
item->SetViewFactors(offsetXIn, offsetYIn, zoomFactorIn);
return 1;
}
extern "C" __declspec(dllexport)
int GetDrawingWithAndHeightInScreen(CSigmaView * pView, int * widthOut, int * heightOut)
{
*widthOut = 0;
*heightOut = 0;
if (pView == 0)
return -1;
if (pView->m_pDoc == 0)
return -1;
pView->m_pDoc->GetDrawingWithAndHeightInScreen(*widthOut, *heightOut);
return 1;
}
extern "C" __declspec(dllexport)
int FillScreenByStrech(CSigmaView * pView)
{
if (pView == 0)
return -1;
pView->FillScreenByStrech();
return 1;
}
extern "C" __declspec(dllexport)
int FillScreenToCenter(CSigmaView * pView)
{
if (pView == 0)
return -1;
pView->FillScreenToCenter();
return 1;
}
extern "C" __declspec(dllexport)
int ToCenterAndFixScale(CSigmaView * pView)
{
if (pView == 0)
return -1;
pView->ToCenterAndFixScale();
return 1;
}
extern "C" __declspec(dllexport)
void SetZoomMode(CSigmaView* pView,int zoomMode)
{
pView->SetZoomMode(zoomMode);
}
/**
* 获取当前图件显示区域
*
* \param left 指定矩形左上角的 x 坐标
* \param top 指定矩形左上角的 y 坐标
* \param right 指定矩形右下角的 x 坐标
* \param bottom 指定矩形右下角的 y 坐标
*/
extern "C" __declspec(dllexport)
void GetRealViewRect(CSigmaView *pView, double &left, double &top, double &right, double &bottom)
{
CXyDC& xyDC = pView->m_pDoc->GetDC();
CRect8 realRect = xyDC.GetReal(xyDC.GetViewRect());
realRect.NormalizeRect();
left = realRect.left;
top = realRect.top;
right = realRect.right;
bottom = realRect.bottom;
}
extern "C" __declspec(dllexport)
void GetViewStatus(CSigmaView * pView, double &left, double & top, double& scaleX, double& scaleY)
{
CXyDC& xyDC = pView->m_pDoc->GetDC();
CRect8 realRect = xyDC.GetReal(xyDC.GetViewRect());
realRect.NormalizeRect();
left = realRect.left;
top = realRect.top;
xyDC.GetScale(scaleX, scaleY);
}
extern "C" __declspec(dllexport)
void SetViewStatus(CSigmaView * pView, double left, double top, double scaleX, double scaleY)
{
CXyDC& xyDC = pView->m_pDoc->GetDC();
xyDC.SetScale(scaleX, scaleY);
CRect8 realRect = xyDC.GetReal(xyDC.GetViewRect());
xyDC.OffsetRect(left - realRect.left, top - realRect.top);
CSigmaDoc* pDoc = pView->m_pDoc;
CItemSelect* pItemSelect = pDoc->GetSelectItem();
if (pItemSelect!=nullptr)
{
pItemSelect->ReloadTrackerPath();
}
}
/**
* 设置当前图件显示区域
*
* \param pView
* \param left 指定矩形左上角的 x 坐标
* \param top 指定矩形左上角的 y 坐标
* \param right 指定矩形右下角的 x 坐标
* \param bottom 指定矩形右下角的 y 坐标
*/
extern "C" __declspec(dllexport)
void SetRealViewRect(CSigmaView *pView, double left, double top, double right, double bottom)
{
CXyDC& xyDC = pView->m_pDoc->GetDC();
CRect8 realRect{ left, top, right, bottom };
realRect.NormalizeRect();
pView->m_pDoc->GetDC().Extend(realRect, 0);
}
/**
* 获取当前缩放比
*
* \param pView
* \param scaleX 水平缩放比
* \param scaleY 垂直缩放比
*/
extern "C" __declspec(dllexport)
void GetScaleSize(CSigmaView* pView, double& scaleX, double& scaleY)
{
pView->m_pDoc->GetDC().GetScale(scaleX, scaleY);
}
/**
* 设置显示 z 值时只留几位小数
* \param pView
* \param precision
*/
extern "C" __declspec(dllexport)
void SetViewPrecision(CSigmaView* pView, int precision)
{
AfxGetPublicFunction()->SetDisplayPrecision(precision);
}
/**
* 设置当前缩放比
*
* \param pView
* \param scaleX 水平缩放比
* \param scaleY 垂直缩放比
*/
extern "C" __declspec(dllexport)
void SetScaleSize(CSigmaView* pView, double scaleX, double scaleY)
{
pView->m_pDoc->GetDC().SetScale(scaleX, scaleY);
}