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.
kev/Drawer/Module/GeoSigmaDraw/InterfaceProportion.cpp

278 lines
6.8 KiB
C++

1 month ago
#include "stdafx.h"
#include "SigmaView.h"
#include "SectionDoc.h"
#include "ItemProportion.h"
1 month ago
#include "ActionListItem.h"
1 month ago
static CItemProportion * getItemProportion(CSigmaView * pView)
{
CItem * pItem = pView->GetItem();
if (pItem == NULL)
return NULL;
CItemProportion * proportionItem = dynamic_cast<CItemProportion *>(pItem);
return proportionItem;
}
extern "C" __declspec(dllexport)
int CreateProportion(CSigmaView * pView)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
pItem->InsertProportion();
return 1;
}
extern "C" __declspec(dllexport)
int Proportion_ChangeScale(CSigmaView * pView, double length)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeScale(length);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeScaleHeight(CSigmaView * pView, double height)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeScaleHeight(height);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeNumber(CSigmaView * pView, int number)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeNumber(number);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeShowMode(CSigmaView * pView, int mode)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeShowMode(mode);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeUnit(CSigmaView * pView, int unit)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeUnit(unit);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeColor(CSigmaView * pView, int r, int g, int b)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeColor(r, g, b);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeTextScale(CSigmaView * pView, double scale)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeTextScale(scale);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeAlign(CSigmaView * pView, int align)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeAlign(align);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeTextHeight(CSigmaView * pView, int height)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeTextHeight(height);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeTextWidth(CSigmaView * pView, int width)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeTextWidth(width);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeTextHeightAlone(CSigmaView * pView, int alone)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeTextHeightAlone(alone);
}
extern "C" __declspec(dllexport)
int Proportion_ChangeCoordinate(CSigmaView * pView, double x, double y)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->ChangeCoordinate(x, y);
}
extern "C" __declspec(dllexport)
int Proportion_Create(CSigmaView * pView)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->Add();
}
extern "C" __declspec(dllexport)
int Proportion_GetScale(CSigmaView * pView)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
return -1;
return pItem->GetScale();
}
extern "C" __declspec(dllexport)
void Proportion_SetParameter(CSigmaView * pView, struct ProportionData * data) {
CItemProportion * pItem = getItemProportion(pView);
if (pItem == nullptr) {
return;
}
pItem->SetParameter(data);
}
extern "C" __declspec(dllexport)
int Proportion_GetData(CSigmaView * pView, struct ProportionData * data)
{
CItemProportion * pItem = getItemProportion(pView);
if (pItem == NULL)
{
//data->ScaleFactor = pView->m_pDoc->GetDraw()->m_dScaleFactor;
CUnit cu;
double h = cu.Millimetres(pView->m_pDoc->GetDraw()->m_unit.cx); //<2F><><EFBFBD><EFBFBD>1<EFBFBD><31>ʵ<EFBFBD>ʵ<EFBFBD>λ<EFBFBD>ĺ<EFBFBD><C4BA>׳<EFBFBD><D7B3><EFBFBD>
//1<><31><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
double m_dScaleLength = pView->m_pDoc->GetDraw()->m_dScaleFactor / h;
//ת<><D7AA>Ϊ1<CEAA><31><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
m_dScaleLength *= 10;
m_dScaleLength = 2000;
data->ScaleLength = m_dScaleLength;
data->ColorR = 0;
data->ColorG = 0;
data->ColorB = 0;
data->Unit = 2;
data->TextSpace = 1;
data->TextAlign = 1;
data->TextScale = 1;
return -1;
}
pItem->GetData(data);
return 1;
}
1 month ago
/**
* \brief <EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ԭ<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>á<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>Undo<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>ˮƽ<EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> X <EFBFBD><EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> yMax <EFBFBD><EFBFBD> offset ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱλ<EFBFBD>á<EFBFBD>
* \param pView ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ Sigma <EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ nullptr<EFBFBD><EFBFBD>
* \param layerName Ŀ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>
* \param xMin <EFBFBD><EFBFBD><EFBFBD>ֲο<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> X <EFBFBD><EFBFBD><EFBFBD>
* \param yMin <EFBFBD><EFBFBD><EFBFBD>ֲο<EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĵײ<EFBFBD> Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>βο<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param xMax <EFBFBD><EFBFBD><EFBFBD>ֲο<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD>Ҳ<EFBFBD> X <EFBFBD><EFBFBD><EFBFBD>
* \param yMax <EFBFBD><EFBFBD><EFBFBD>ֲο<EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĶ<EFBFBD><EFBFBD><EFBFBD> Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊƫ<EFBFBD>ƻ<EFBFBD>׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param scaleValue <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷ֶδ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD> /100.0 <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>
* \param count <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><EFBFBD>ֶܷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param offset <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> yMax <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵĴ<EFBFBD>ֱƫ<EFBFBD>ƾ<EFBFBD><EFBFBD>
* \return true <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
* \return false <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pView Ϊ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>
*/
extern "C" __declspec(dllexport)
bool CreateProportionFull(
CSigmaView* pView,
LPCSTR layerName,
double xMin,
double yMin,
double xMax,
double yMax,
int scaleValue,
int count,
int offset)
{
if (pView == nullptr || pView->m_pDoc == nullptr || pView->m_pDoc->m_pXy == nullptr)
{
TRACE("%s: <20>Ƿ<EFBFBD> view <20><><EFBFBD><EFBFBD> document ָ<><D6B8>\n", __FUNCTION__);
return false;
}
auto pAction = std::make_unique<CActionListItem>(pView->m_pDoc, IDS_STRING_ACTION_DELETE);
CXy* pXy = pView->m_pDoc->m_pXy;
CLayer* pLayer = pXy->FindLayer(layerName);
if (pLayer == nullptr)
{
const CString currentLayer = pXy->GetCurrentLayer()->GetPathName();
pLayer = pXy->FindAddLayer(layerName);
pAction->AddLayerAddItem(pLayer, currentLayer);
}
auto pProportion = std::make_unique<CProportion>();
double unitLen = scaleValue / 100.0;
double totalLen = unitLen * count;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B7A8>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [xMin, xMax]<5D><><EFBFBD><EFBFBD>ֱƫ<D6B1><C6AB> yMax
pProportion->x0 = xMin + (std::fabs(xMax - xMin) - totalLen) / 2.0;
pProportion->y0 = yMax + offset;
pProportion->m_dScaleLength = scaleValue / 100.0;
pProportion->num = count;
auto pOne = std::make_unique<COne>();
pOne->SetValueSafe(pProportion.release());
pOne->SetLayer(pLayer);
POSITION pos = pXy->AddTailOne(pOne.release());
CPositionList items;
items.AddTail(pos);
pAction->AddAddItem(items);
pView->m_pDoc->SetActionItem(pAction.release());
}