|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include "SigmaView.h"
|
|
|
|
|
|
#include "SectionDoc.h"
|
|
|
|
|
|
#include "ItemProportion.h"
|
|
|
|
|
|
#include "ActionListItem.h"
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* \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());
|
|
|
|
|
|
}
|