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/InterfaceSelect.cpp

1569 lines
41 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "stdafx.h"
#include "SigmaView.h"
#include "SectionDoc.h"
#include "ItemSelect.h"
#include "ItemProportion.h"
#include "ItemEllipse.h"
#include "ItemCircle.h"
#include "ItemArc.h"
#include "ItemPointEdit.h"
#include "ItemFrame.h"
#include "ItemGrid.h"
#include "ItemNet.h"
#include "ItemText.h"
#include "ItemCurveEdit.h"
#include "ItemRectangle.h"
#include "ItemSolid.h"
#include "ItemSelectElement.h"
#include "ItemBreakCurve.h"
#include "actionmodifieditem.h"
#include "ActionModifiedMeshItem.h"
#include "ActionEmbellishItem.h"
#include "ActionAddItem.h"
#include <atlstr.h>
#include "VtkInterface.h"
#include "DrawOperator/FormatReader/GenerateImageMesh.h"
static CItemSelectElement * GetCItemSelectElementFromView(CSigmaView * pView)
{
if (pView == NULL)
return 0;
CItem * pItem = pView->GetItem();
if (pItem == NULL)
return 0;
CItemSelectElement * itemSelect = dynamic_cast<CItemSelectElement *>(pItem);
return itemSelect;
}
CItemSelect * GetItemSelectFromView(CSigmaView * pView)
{
if (pView == NULL)
return 0;
CItem * pItem = pView->GetItem();
if (pItem == NULL)
return 0;
CItemSelect * itemSelect = dynamic_cast<CItemSelect *>(pItem);
return itemSelect;
}
CItemBreakCurve * GetCItemBreakCurveFromView(CSigmaView *pView)
{
if (pView == NULL)
return 0;
CItem * pItem = pView->GetItem();
if (pItem == NULL)
return 0;
CItemBreakCurve * itemBreakCurve = dynamic_cast<CItemBreakCurve *>(pItem);
return itemBreakCurve;
}
extern "C" __declspec(dllexport)
int SelectGetCount(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
return itemSelect->GetCountSelected();
}
extern "C" __declspec(dllexport)
bool SelectStatusChanged(CSigmaView* pView)
{
if (pView == NULL)
return false;
CItem * pItem = pView->GetItem();
if (pItem == NULL)
return false;
CItemSelect * itemSelect = dynamic_cast<CItemSelect *>(pItem);
if (itemSelect == NULL)
return false;
return itemSelect->IsSelectionChanged;
}
extern "C" __declspec(dllexport)
bool SelectIsSameType(CSigmaView* pView)
{
if (pView == NULL)
return false;
CItem * pItem = pView->GetItem();
if (pItem == NULL)
return false;
CItemSelect * itemSelect = dynamic_cast<CItemSelect *>(pItem);
if (itemSelect == NULL)
return false;
return itemSelect->IsSameType();
}
extern "C" __declspec(dllexport)
bool SelectIsOnMoving(CSigmaView* pView)
{
CItemSelect * pItem = GetItemSelectFromView(pView);
if (pItem == nullptr)
{
return false;
}
return pItem->OnMoving();
}
extern "C" __declspec(dllexport)
void SelectMoveElementsTo(CSigmaView* pView, int x, int y) {
CItemSelect * pItem = GetItemSelectFromView(pView);
if (pItem == nullptr)
{
return;
}
pItem->MoveElementsTo(CPoint(x, y));
}
extern "C" __declspec(dllexport)
void SelectDrawTrackPath(CSigmaView* pView, HDC hdcMem)
{
CItemSelect * pItem = GetItemSelectFromView(pView);
if (pItem == nullptr)
{
return;
}
CDC *pDC = CDC::FromHandle(hdcMem);
pItem->DrawTrackPath(pDC);
}
extern "C" __declspec(dllexport)
void SelectGetTrackerRect(CSigmaView* pView, int& left, int& top, int& right, int& bottom)
{
CItemSelect * pItem = GetItemSelectFromView(pView);
if (pItem == nullptr)
{
return;
}
CRect rect = pItem->GetTrackerRect();
left = rect.left;
top = rect.top;
right = rect.right;
bottom = rect.bottom;
}
BOOL Select_InsertMesh(CSigmaView* pView, LPCTSTR meshFile, POSITION& newMeshPos)
{
CXy* pXyCurrent = pView->m_pDoc->GetDraw();
CString strExt;
CSplitPath sp(meshFile);
strExt = sp.GetExtension();
strExt.MakeLower();
CXy* pxy = new CXy;
pxy->m_bRealTimeDraw = false;
if (strExt == _T(".dfb") || strExt == _T(".dft"))
pView->m_pDoc->SerializeRead(pxy, meshFile);
else if (!pxy->ReadOtherWithExtension(meshFile)) //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2>ɹ<EFBFBD>ʱ
pxy->ReadWithExtension(meshFile);
if (!pxy->GetProjection().IsEmpty() && !pXyCurrent->GetProjection().IsEmpty())
pxy->ChangeToProjection(pXyCurrent->GetProjection());
POSITION posNew = pxy->FindFirstElement(DOUBLEFOX_MESH);
if (posNew == nullptr) {
delete pxy;
return false;
}
CMesh* pMeshNew = (CMesh*)(pxy->GetAt(posNew))->value;
CFunction2D* pGridNew = (CFunction2D*)pMeshNew->GetMesh();
long numxNew, numyNew;
pMeshNew->GetNumber(numxNew, numyNew);
CMesh* pMesh = new CMesh;
pMesh->SetMeshType(MESH_DFG);
//pMesh->m_bRealTimeDraw = pMeshOld->m_bRealTimeDraw;
CDimension2D* m_pDfg = new CDimension2D;
m_pDfg->Create(numxNew, numyNew, pGridNew->P0[0], pGridNew->P0[1], pGridNew->delt[0], pGridNew->delt[1]);
m_pDfg->SetRange(pGridNew->range[0], pGridNew->range[1]);
pMesh->SetMesh(m_pDfg, MESH_DFG, FALSE);
for (int i = 0; i < numxNew; i++) {
for (int j = 0; j < numyNew; j++) {
pMesh->GetDfg()->SetValue(i, j, pMeshNew->GetValue(i, j));
}
}
COne* pOneMesh = pXyCurrent->CreateOne(pMesh, DOUBLEFOX_MESH);
POSITION posMesh = pXyCurrent->AddHeadOne(pOneMesh);
//POSITION posMesh = pXyCurrent->AddElement(pMesh, DOUBLEFOX_MESH);
CLayer * pLayer = pXyCurrent->FindAddLayer("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
//COne* pOneMesh = pXyCurrent->GetAt(posMesh);
pOneMesh->SetLayer(pLayer);
pView->m_pDoc->SetActionItem(new CActionAddItem(pView->m_pDoc, IDS_STRING_ACTION_ADD, pOneMesh));
newMeshPos = posMesh;
pMesh->GetBitmap();
pXyCurrent->EnableMeshPackage(pXyCurrent->IsEnableMeshPackage(), true);
delete pxy;
return true;
}
extern "C" __declspec(dllexport)
BOOL Select_ReplaceMesh(CSigmaView* pView, LPCTSTR meshFile, POSITION oldMeshPos, POSITION& newMeshPos)
{
CXy* pXyCurrent = pView->m_pDoc->GetDraw();
if (oldMeshPos == nullptr)
{
oldMeshPos = pXyCurrent->FindFirstElement(DOUBLEFOX_MESH);
}
if (oldMeshPos == nullptr) {
return Select_InsertMesh(pView, meshFile, newMeshPos);
}
CString strExt;
CSplitPath sp(meshFile);
strExt = sp.GetExtension();
strExt.MakeLower();
CXy* pxy = new CXy;
pxy->m_bRealTimeDraw = false;
if (strExt == _T(".dfb") || strExt == _T(".dft"))
pView->m_pDoc->SerializeRead(pxy, meshFile);
else if (!pxy->ReadOtherWithExtension(meshFile)) //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2>ɹ<EFBFBD>ʱ
pxy->ReadWithExtension(meshFile);
if (!pxy->GetProjection().IsEmpty() && !pXyCurrent->GetProjection().IsEmpty())
pxy->ChangeToProjection(pXyCurrent->GetProjection());
//CPositionList select;
//pView->m_pDoc->GetDraw()->MoveInBottom(pxy, select);
POSITION posNew = pxy->FindFirstElement(DOUBLEFOX_MESH);
if (posNew == nullptr) {
delete pxy;
return false;
}
COne* pNewOne = pxy->GetAt(posNew);
//pxy->RemoveAtNoClear(posNew);
COne* pOldOne = pXyCurrent->GetAt(oldMeshPos);
//<2F><><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//CActionModifiedMesh* pAction = new CActionModifiedMesh(pView->m_pDoc, IDS_STRING_PANE_COLOR_BAR);
//pAction->BackupOldItem(oldMeshPos, pOldOne);
//pNewOne->m_pParentXY = pXyCurrent;
//POSITION posInsert = pXyCurrent->InsertElementAfter(oldMeshPos, pNewOne);
//pNewOne->SetLayer(pOldOne->GetLayer());
CMesh* pMeshNew = (CMesh*)pNewOne->value;
CMesh* pMeshOld = (CMesh*)pOldOne->value;
CMesh* pMesh = new CMesh;
pMesh->SetMeshType(MESH_DFG);
pMesh->m_bRealTimeDraw = pMeshOld->m_bRealTimeDraw;
CDimension2D* m_pDfg = new CDimension2D;
//*(CGrid*)m_pDfg = *(CGrid*)(pMeshNew->GetDfg());
CFunction2D* pGridNew = (CFunction2D*)pMeshNew->GetMesh();
long numxNew, numyNew;
pMeshNew->GetNumber(numxNew, numyNew);
//pMeshNew->y
m_pDfg->Create(numxNew, numyNew, pGridNew->P0[0], pGridNew->P0[1], pGridNew->delt[0], pGridNew->delt[1]);
m_pDfg->SetRange(pGridNew->range[0], pGridNew->range[1]);
pMesh->SetMesh(m_pDfg, MESH_DFG, FALSE);
for (int i = 0; i < numxNew; i++) {
for (int j = 0; j < numyNew; j++) {
pMesh->GetDfg()->SetValue(i, j, pMeshNew->GetValue(i, j));
}
}
COne *pOne = new COne;
pOne->SetType(DOUBLEFOX_MESH);
pOne->value = pMesh;
pOne->CloneOtherParameter(*pOldOne);
pMesh->CloneOtherParamter(*pMeshOld);
pMesh->GetBitmap();
newMeshPos = pXyCurrent->AddHeadOne(pOne);
//pMeshNew->CloneOtherParamter(*pMeshOld);
//long numx, numy;
//pMeshOld->GetNumber(numx, numy);
//long numxNew, numyNew;
//pMeshNew->GetNumber(numxNew, numyNew);
//for (int i = 0; i < numx && i < numxNew; i++) {
// for (int j = 0; j < numy && j < numyNew; j++) {
// pMeshOld->SetZ(i, j, pMeshNew->GetValue(i, j));
// }
//}
pXyCurrent->RemoveAt(pOldOne);
pXyCurrent->EnableMeshPackage(pXyCurrent->IsEnableMeshPackage(), true);
delete pxy;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pAction->BackupNewItem();
//pView->m_pDoc->SetActionItem(pAction);
return true;
}
extern "C" __declspec(dllexport)
BOOL Select_CreateMeshColorBar(CSigmaView* pView, ColorPoint* colorPoints, int length, LPCTSTR barSavePath, LPCTSTR xmlSavePath,
double minz, double maxz)
{
std::vector<ColorPoint> vector(colorPoints, colorPoints + length);
GenerateImageMesh * pColorBar = new GenerateImageMesh();
bool state = pColorBar->CreateMeshColorBar(vector, barSavePath, minz, maxz, xmlSavePath);
delete pColorBar;
return state;
}
extern "C" __declspec(dllexport)
BOOL Select_CreateColorBarData(CSigmaView* pView, POSITION oldMeshPos, ColorPoint* colorPoints,
int numColors, int &vSize, double zmin, double zmax, int colorType, int sortType)
{
COne * pOne1 = pView->m_pDoc->GetDraw()->GetAt(oldMeshPos);
if (pOne1 == 0) return false;
CImageInsert* pValue = (CImageInsert*)pOne1->GetValue();
GenerateImageMesh * pColorBar = new GenerateImageMesh();
pColorBar->SetImageBase((CxImage)*pValue->m_pImage);
pColorBar->SetZminByZmax(zmin, zmax);
GenerateImageMesh::ColorMethod colorMethod;
GenerateImageMesh::SortMethod sortMethod;
switch (colorType)
{
case 0:
colorMethod = GenerateImageMesh::ColorMethod::HSV_M;
break;
case 1:
colorMethod = GenerateImageMesh::ColorMethod::UNIFORMSAMPLING_M;
break;
case 2:
colorMethod = GenerateImageMesh::ColorMethod::KMEANS_M;
break;
default:
break;
}
switch (sortType)
{
case 0:
sortMethod = GenerateImageMesh::SortMethod::BRIGHTNESS_SORT;
break;
case 1:
{
if(colorType == 0 || colorType == 1)
sortMethod = GenerateImageMesh::SortMethod::HUE_SORT;
if(colorType == 2)
sortMethod = GenerateImageMesh::SortMethod::HUE_SORT_COLD;
break;
}
break;
default:
break;
}
std::vector<ColorPoint> vector;
bool state = pColorBar->CreateColorBarData(vector, colorMethod, sortMethod, numColors);
for (int i = 0; i < vector.size(); ++i) {
colorPoints[i] = vector[i];
}
vSize = vector.size();
delete pColorBar;
return state;
}
extern "C" __declspec(dllexport)
BOOL Select_CreateReplaceMesh(CSigmaView* pView, POSITION oldMeshPos, POSITION& newMeshPos,
int colorNum, double gridZmin, double gridZmax,
int numX, int numY, double dLocationX, double dLocationY
, double dDeltX, double dDeltY, double dMaxX, double dMaxY, ColorPoint* colorPoints, ColorPoint* colorListPoints, int colorListNum)
{
COne * pOne1 = pView->m_pDoc->GetDraw()->GetAt(oldMeshPos);
if (pOne1 == 0)
return false;
CImageInsert* pValue = (CImageInsert*)pOne1->GetValue();
CLayer * lay = pOne1->GetLayer();
//CString str = lay->GetName();
GenerateImageMesh * pCreateMesh = new GenerateImageMesh();
pCreateMesh->SetImageBase((CxImage)*pValue->m_pImage);
pCreateMesh->SetZminByZmax(gridZmin, gridZmax);
std::vector<ColorPoint> vector(colorPoints, colorPoints + colorNum);
std::vector<ColorPoint> vectorColor(colorListPoints, colorListPoints + colorListNum);
//<2F><><EFBFBD><EFBFBD>xy
CMesh * pMesh = pCreateMesh->CreateImageMeshProcess(numX, numY, dLocationX, dLocationY, dDeltX, dDeltY, dMaxX, dMaxY, vector, vectorColor);
pMesh->GetBitmap();
CXy* pXyCurrent = pView->m_pDoc->GetDraw();
COne* pOneMesh = pXyCurrent->CreateOne(pMesh, DOUBLEFOX_MESH);
POSITION posMesh = pXyCurrent->AddHeadOne(pOneMesh);
CLayer * pLayer = pXyCurrent->FindAddLayer("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
pOneMesh->SetLayer(pLayer);
pView->m_pDoc->SetActionItem(new CActionAddItem(pView->m_pDoc, IDS_STRING_ACTION_ADD, pOneMesh));
newMeshPos = posMesh;
pXyCurrent->EnableMeshPackage(pXyCurrent->IsEnableMeshPackage(), true);
//COne * pOne = new COne;
//pOne->SetType(DOUBLEFOX_MESH);
//pOne->value = pMesh;
//newMeshPos = pXyCurrent->AddHeadOne(pOne);
//pXyCurrent->EnableMeshPackage(pXyCurrent->IsEnableMeshPackage(), true);
return true;
}
extern "C" __declspec(dllexport)
BOOL Select_ReselectByPosition(CSigmaView* pView, POSITION posNew) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return FALSE;
itemSelect->Select(posNew, false);
return TRUE;
}
extern "C" __declspec(dllexport)
BOOL Select_GetElementByPosition(CSigmaView* pView, BYTE*& buffElement, int& buffLen, POSITION elementPtr, bool allContent)
{
if (pView->m_pDoc == 0)
return FALSE;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(elementPtr));
if (pOne == 0)
return FALSE;
if (pOne->GetType() == DOUBLEFOX_MESH) {
if (allContent) {
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else {
((CMesh*)(pOne->value))->WriteElementDML(buffElement, buffLen);
}
return TRUE;
}
else if (pOne->GetType() == DOUBLEFOX_TEXT) {
((CText*)(pOne->value))->color = pOne->color;
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else if (pOne->GetType() == DOUBLEFOX_ELLIPSE)
{
((CEllipse*)(pOne->value))->color = pOne->color;
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else if (pOne->GetType() == DOUBLEFOX_CIRCLE)
{
((CCircle*)(pOne->value))->color = pOne->color;
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else if (pOne->GetType() == DOUBLEFOX_ARC)
{
((CArc*)(pOne->value))->color = pOne->color;
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else if (pOne->GetType() == DOUBLEFOX_SCALERULER)
{
((CScaleRuler*)(pOne->value))->color = pOne->color;
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else if (pOne->GetType() == DOUBLEFOX_PROPORTION)
{
((CProportion*)(pOne->value))->color = pOne->color;
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else if (pOne->GetType() == DOUBLEFOX_IMAGE)
{
((CImageInsert*)(pOne->value))->WriteElementDML(buffElement, buffLen);
}
else if (pOne->GetType() == DOUBLEFOX_BLOCK)
{
if (allContent)
{
pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
else {
pOne->WriteSummaryMemory(buffElement, 0, buffLen, 3);
}
return true;
}
else
{
return pOne->WriteMemory(buffElement, 0, buffLen, 3);
}
return false;
}
extern "C" __declspec(dllexport)
BOOL Select_IsElementLocationChanged(CSigmaView* pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
return itemSelect->m_isLocationChanged;
}
extern "C" __declspec(dllexport)
BOOL GetElementByLocation(CSigmaView* pView, BYTE*& buffElement, int& buffLen
, int mouseX, int mouseY)
{
CPoint2D pt;
pt.x0 = mouseX;
pt.y0 = mouseY;
pt = pView->m_pDoc->GetDC().GetReal(pt);
POSITION pos = pView->m_pDoc->GetSelectedItem(pt);
if (pos == nullptr) {
return false;
}
BOOL bReturn = Select_GetElementByPosition(pView, buffElement, buffLen, pos, false);
return bReturn;
}
extern "C" __declspec(dllexport)
BOOL SelectGetPointsZRange(CSigmaView * pView, double& zMin, double& zMax)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
return itemSelect->GetPointsZRange(zMin, zMax);
}
extern "C" __declspec(dllexport)
BOOL SelectSetPointsColor(CSigmaView * pView, LPCTSTR colorItemsData, double dWidth, double dHeight)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
return itemSelect->SetPointsColor(colorItemsData, dWidth, dHeight);
}
extern "C" __declspec(dllexport)
const BSTR GetSelectedNames(CSigmaView * pView) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
if (itemSelect->m_selection.IsEmpty())
return false;
CString strData("");
itemSelect->GetSelectedNames(strData);
return strData.AllocSysString();
}
extern "C" __declspec(dllexport)
BOOL SelectGetElement(CSigmaView * pView, BYTE*& buffElement, int& buffLen, POSITION& elementPtr, bool allContent)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
if (itemSelect->m_selection.IsEmpty())
return false;
POSITION pos = itemSelect->m_selection.GetHead();
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
elementPtr = pos;
BOOL bReturn = Select_GetElementByPosition(pView, buffElement, buffLen, elementPtr, allContent);
// <20><>Ҫ<EFBFBD>ͷ<EFBFBD> free(buffElement);
return bReturn;
}
extern "C" __declspec(dllexport)
BOOL SelectGetElementPositions(CSigmaView * pView, POSITION*& array, int & len) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
if (itemSelect->m_selection.IsEmpty())
return false;
len = itemSelect->m_selection.GetCount();
array = new POSITION[len];
POSITION pos, pt;
pos = itemSelect->m_selection.GetHeadPosition();
int i = 0;
while (pos != NULL)
{
pt = itemSelect->m_selection.GetNext(pos);
array[i++] = pt;
}
//array = pPositions;
return true;
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ߽<DAB1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ͼԪ
extern "C" __declspec(dllexport)
int SelectInCurveRange(CSigmaView * pView) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
return itemSelect->SelectInCurve();
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ߽<DAB1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ͼԪ
extern "C" __declspec(dllexport)
int SelectTypeInCurveRange(CSigmaView * pView, int elementType) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
return itemSelect->SelectInCurve(elementType);
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ٷֱȵ<D6B1>ͼԪ
extern "C" __declspec(dllexport)
int SelectInCurveRangeEx(CSigmaView * pView, double factor) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
return itemSelect->SelectInCurveEx(factor);
}
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ٷֱȵ<D6B1>ͼԪ
extern "C" __declspec(dllexport)
int SelectTypeInCurveRangeEx(CSigmaView * pView, int elementType, double factor) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
return itemSelect->SelectInCurveEx(elementType, factor);
}
extern "C" __declspec(dllexport)
int Select_SamePropertyElements(CSigmaView* pView)
{
CItemSelect *itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
return itemSelect->SelectSamePropertyElements();
}
extern "C" __declspec(dllexport)
void Select_SetTypes(CSigmaView* pView, int* types, int size)
{
CItemSelect *itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
{
return;
}
itemSelect->SetSelectTypes(types, size);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ͼԪ
extern "C" __declspec(dllexport)
bool Select_GetElements(CSigmaView * pView, BYTE*& buffElement, int& buffLen)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
if (itemSelect->m_selection.IsEmpty())
return false;
BOOL bReturn = itemSelect->WriteData(pView->m_pDoc->GetDraw(), buffElement, buffLen, 3);
// <20><>Ҫ<EFBFBD>ͷ<EFBFBD> free(buffElement);
return bReturn;
}
extern "C" __declspec(dllexport)
bool Select_WriteTemplate(CSigmaView* pView, LPCTSTR outputFile)
{
CFile fw;
if (!fw.Open(outputFile, CFile::modeCreate | CFile::modeWrite))
{
return false;
}
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
if (itemSelect->m_selection.IsEmpty())
return false;
CXy* pxy = pView->m_pDoc->GetDraw();
pxy->DFD_WriteMark(*(CFile*)&fw, CUR_VERSION, 1);
pxy->DFD_WriteLegend(*(CFile*)&fw, CUR_VERSION, 1);
pxy->DFD_Write(*(CFile*)&fw, itemSelect->m_selection);
fw.Close();
return true;
}
/**
* <20><>ȡѡ<C8A1>еĶ<D0B5><C4B6><EFBFBD><EFBFBD>Σ<EFBFBD>ֻ<EFBFBD><D6BB>ѡ<EFBFBD><D1A1>һ<EFBFBD><D2BB>ͼԪ<CDBC><D4AA><EFBFBD>Ҹ<EFBFBD>ͼԪ<CDBC>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ͼԪ<CDBC><D4AA>Ϣ
* \return
*/
extern "C" __declspec(dllexport)
POSITION SelectGetPolygon(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == nullptr)
{
return nullptr;
}
if (itemSelect->m_selection.GetCount() != 1)
{
return nullptr;
}
POSITION pt = itemSelect->m_selection.GetHead();
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pt));
if (pOne->GetType() == DOUBLEFOX_CURVE)
{
CCurveEx* pCurve = (CCurveEx*)(pOne->value);
if (IsPolygon(pCurve))
{
return pt;
}
}
return nullptr;
}
extern "C" __declspec(dllexport)
int SelectGetElementType(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
if (itemSelect->m_selection.IsEmpty())
return 0;
if (itemSelect->m_selection.GetCount() != 1) {
return 0;
}
POSITION pos = itemSelect->m_selection.GetHead();
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
return pOne->GetType();
}
extern "C" __declspec(dllexport)
void* SelectGetMesh(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
if (itemSelect->m_selection.IsEmpty())
return 0;
if (itemSelect->m_selection.GetCount() != 1) {
return 0;
}
POSITION pos = itemSelect->m_selection.GetHead();
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne->GetType() == DOUBLEFOX_MESH)
{
KevVtkMeshData *pKevVtkMeshData = new KevVtkMeshData;
CMesh *pMesh = (CMesh *)pOne->GetValue();
double zmin, zmax;
pMesh->GetM(zmin, zmax);
pKevVtkMeshData->m_zMin = zmin;
pKevVtkMeshData->m_zMax = zmax;
double x0, y0;
pMesh->GetOrg(x0, y0);
pKevVtkMeshData->x0 = x0;
pKevVtkMeshData->y0 = y0;
double dx, dy;
pMesh->GetDelt(dx, dy);
pKevVtkMeshData->dx = dx;
pKevVtkMeshData->dy = dy;
CGrid* pGrid = pMesh->GetMesh();
long numX = pGrid->xnum();
long numY = pGrid->ynum();
pKevVtkMeshData->numX = numX;
pKevVtkMeshData->numY = numY;
CDimension3D* pdfg = pMesh->GetDfg();
if (pdfg == NULL)
return nullptr;
pKevVtkMeshData->num = pdfg->num;
pKevVtkMeshData->P0 = pdfg->P0;
pKevVtkMeshData->delt = pdfg->delt;
double* pShadow = new double[pdfg->total];
std::memcpy(pShadow, pdfg->u, pdfg->total*sizeof(double));
pKevVtkMeshData->shadow_u = pShadow;
pKevVtkMeshData->origin_u = pdfg->u;
pKevVtkMeshData->range = pdfg->range;
pKevVtkMeshData->n = pdfg->n;
CColorBase& color = pMesh->color;
for (int i = 0; i < color.sizeColor(); i++)
{
CColorItem& item = color.GetColorItem(i);
KevVtkColorItem *pColorItem = new KevVtkColorItem();
pColorItem->z = item.z;
pColorItem->color[0] = item.color.rgbRed;
pColorItem->color[1] = item.color.rgbGreen;
pColorItem->color[2] = item.color.rgbBlue;
pColorItem->color[3] = item.color.rgbReserved;
pColorItem->gradient = item.m_bContinue;
pKevVtkMeshData->m_colorList.push_back(pColorItem);
}
pKevVtkMeshData->id = pMesh->GetId();
pKevVtkMeshData->m_layerName = pOne->GetLayer()->GetPathName();
return pKevVtkMeshData;
}
else
{
return nullptr;
}
}
//extern "C" __declspec(dllexport)
//bool SelectSetGridData(CSigmaView* pView, BYTE* buffElement, int buffLen, POSITION elementPtr)
//{
// {
// CActionModifiedItem* m_pAction = NULL;
// CItemSelect* pSelItem = pView->m_pDoc->GetSelectItem();
// if (pSelItem)
// {
// m_pAction = new CActionModifiedItem(pView->m_pDoc, IDS_STRING_TOOLBAR_EDIT);
// m_pAction->AddCloneItem(pSelItem->m_selection);
// }
// pView->m_pDoc->SetActionItem(m_pAction);
// }
// BOOL bEdited = FALSE;
// POSITION pos;
// pos = (POSITION)elementPtr;
// COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
//
// if (pOne->GetType() == DOUBLEFOX_MESH)
// {
// CMesh* pMesh = (CMesh*)(pOne->value);
// // pMesh->m_bRealTimeDraw = false;
// // pMesh->ReadElementDML(buffElement, -1, buffLen);
// //pMesh->SetM(m_zrange.cx, m_zrange.cy);
//
// pMesh->SetM(pMesh->m_pRuler->zmin, pMesh->m_pRuler->zmax);
// pMesh->GetBitmap();
// bEdited = true;
// }
// return bEdited;
//}
extern "C" __declspec(dllexport)
BOOL SelectSetElement(CSigmaView* pView, BYTE* buffElement, int buffLen, POSITION elementPtr, bool state, double zmin, double zmax)
{
if (pView == nullptr || buffElement == nullptr || buffLen <= 0 || elementPtr == nullptr)
{
return FALSE;
}
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(elementPtr));
if (pOne == nullptr)
{
return FALSE;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ռ<EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B4A6><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><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>
if (pOne->GetType() == DOUBLEFOX_MESH)
{
auto pAction = std::make_unique<CActionModifiedMeshItem>(pView->m_pDoc, IDS_STRING_TOOLBAR_EDIT);
pAction->BackupOldArguments(pOne);
CMesh* pMesh = (CMesh*)(pOne->value);
pMesh->m_bRealTimeDraw = false;
pMesh->ReadElementDML(buffElement,-1, buffLen);
if (state)
{
pMesh->SetM(pMesh->m_pRuler->zmin, pMesh->m_pRuler->zmax);
}
else
{
//<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ҫʹ<D2AA><CAB9><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>е<EFBFBD>ֵ
pMesh->SetM(zmin, zmax);
}
pMesh->GetBitmap();
pAction->BackupNewArguments();
pView->m_pDoc->SetActionItem(pAction.release());
return true;
}
CActionModifiedItem* pAction = new CActionModifiedItem(pView->m_pDoc, IDS_STRING_TOOLBAR_EDIT);
pAction->BackupOldItem(elementPtr, pOne);
BOOL bEdited = FALSE;
// TODO: <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>޸<EFBFBD>
if (pOne->GetType() == DOUBLEFOX_SECTION) {
((CSection*)(pOne->value))->ReadElementDML(buffElement, -1, buffLen);
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_MESH) {
CMesh* pMesh = (CMesh*)(pOne->value);
pMesh->m_bRealTimeDraw = false;
pMesh->ReadElementDML(buffElement,-1, buffLen);
pMesh->SetM(pMesh->m_pRuler->zmin, pMesh->m_pRuler->zmax);
pMesh->GetBitmap();
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_TEXT) {
pOne->ReadMemory(buffElement, -1, buffLen, 3);
CText* pText = (CText*)(pOne->value);
pText->color= pOne->color;
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_ELLIPSE)
{
pOne->ReadMemory(buffElement, 0, buffLen, 3);
((CEllipse*)(pOne->value))->color = pOne->color;
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_CIRCLE)
{
pOne->ReadMemory(buffElement, 0, buffLen, 3);
((CCircle*)(pOne->value))->color = pOne->color;
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_ARC)
{
pOne->ReadMemory(buffElement, 0, buffLen, 3);
((CArc*)(pOne->value))->color = pOne->color;
TRACE(_T("CArc Width:"), ((CArc*)(pOne->value))->m_dCurveWidth);
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_PROPORTION)
{
pOne->ReadMemory(buffElement, 0, buffLen, 3);
((CProportion*)(pOne->value))->color = pOne->color;
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_SCALERULER)
{
pOne->ReadMemory(buffElement, 0, buffLen, 3);
((CScaleRuler*)(pOne->value))->color = pOne->color;
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_CURVE)
{
CHowToViewCurve* pHWCOld = pOne->HowToViewCurve;
if (pHWCOld != NULL)
{
pHWCOld->Empty();
}
pOne->ReadMemory(buffElement, 0, buffLen, 3);
//if (pOne->HowToViewCurve != nullptr)
//{
// pOne->HowToViewCurve->EnableDrawSourceCurve(TRUE);
// pOne->HowToViewCurve->IsSolid();
// CCurveProperties* pCurveView = new CCurveProperties();
// pCurveView->SetCurveType(PLINE_SOLID);
// pCurveView->color = pOne->color;
// pOne->HowToViewCurve->Add(pCurveView);
//}
CString strName1 = pOne->GetName();
bEdited = true;
}
else if (pOne->GetType() == DOUBLEFOX_BLOCK)
{
pOne->ReadSummaryMemory(buffElement, 0, buffLen, 3);
bEdited = true;
}
else
{
if (pOne->HowToViewCurve != NULL)
{
pOne->HowToViewCurve->Empty();
}
pOne->ReadMemory(buffElement, -1, buffLen, 3);
bEdited = true;
}
pAction->BackupNewItem();
pView->m_pDoc->SetActionItem(pAction);
return bEdited;
}
extern "C" __declspec(dllexport)
BOOL SetElementVisibility(CSigmaView * pView, POSITION elementPtr, bool visible)
{
POSITION pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == nullptr)
{
return FALSE;
}
if (visible == TRUE)
{
pOne->SetViewState(VIEW_STATE); // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɼ<EFBFBD>
}
else
{
pOne->SetViewState(UNVIEW_STATE); // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ɼ<EFBFBD>
}
return TRUE;
}
extern "C" __declspec(dllexport)
BOOL SelectRemoveCurveStyle(CSigmaView * pView, POSITION elementPtr, int index)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
if (pOne->HowToViewCurve == NULL) return FALSE;
CHowToViewCurve* pHW = pOne->HowToViewCurve;
pHW->RemoveAt(index);
if (pHW->GetCount() == 0)
{
delete pOne->HowToViewCurve;
pOne->HowToViewCurve = NULL;
}
return TRUE;
}
extern "C" __declspec(dllexport)
BOOL SelectRemovePointStyle(CSigmaView * pView, POSITION elementPtr)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
if (pOne->HowToViewPoint == NULL) return FALSE;
delete pOne->HowToViewPoint;
pOne->HowToViewPoint = nullptr;
return TRUE;
}
extern "C" __declspec(dllexport)
BOOL SelectMoveUpCurveStyle(CSigmaView * pView, POSITION elementPtr, int nIndex) {
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
if (pOne->HowToViewCurve == NULL) return FALSE;
CHowToViewCurve* pHW = pOne->HowToViewCurve;
return pHW->MoveUp(nIndex);
}
extern "C" __declspec(dllexport)
BOOL SelectMoveDownCurveStyle(CSigmaView * pView, POSITION elementPtr, int nIndex) {
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
if (pOne->HowToViewCurve == NULL) return FALSE;
CHowToViewCurve* pHW = pOne->HowToViewCurve;
return pHW->MoveDown(nIndex);
}
extern "C" __declspec(dllexport)
int RenameElement(CSigmaView * pView, LPCTSTR oldName, LPCTSTR newName, LPCTSTR layerName)
{
CXy * pXy = pView->m_pDoc->m_pXy;
if (pXy == NULL) return 0;
CString strLayer(layerName);
bool isLayerEmpty = strLayer.IsEmpty();
CPtrList* pl = pXy->GetValueList();
POSITION posCurrent = pl->GetHeadPosition();
COne* pOne;
int nCount = 0;
while (posCurrent)
{
pOne = pXy->GetAt(posCurrent);
if (pOne->GetName() == oldName)
{
if (!isLayerEmpty && strLayer != pOne->GetLayer()->GetName())
{
pl->GetNext(posCurrent);
continue;
}
pOne->SetName(newName);
nCount++;
}
pl->GetNext(posCurrent);
}
return nCount;
}
extern "C" __declspec(dllexport)
int ResetCurveStyle(CSigmaView * pView, LPCTSTR curveName, LPCTSTR layerName, int type, BYTE * buffCurve, int bufLen)
{
CXy * pXy = pView->m_pDoc->m_pXy;
if (pXy == NULL) return 0;
CString strLayer(layerName);
bool isLayerEmpty = strLayer.IsEmpty();
CPtrList* pl = pXy->GetValueList();
POSITION posCurrent = pl->GetHeadPosition();
COne* pOne;
int nCount = 0;
while (posCurrent)
{
pOne = pXy->GetAt(posCurrent);
if (pOne->GetType() == DOUBLEFOX_CURVE && pOne->GetName() == curveName)
{
if (!isLayerEmpty && strLayer != pOne->GetLayer()->GetName())
{
pl->GetNext(posCurrent);
continue;
}
if (pOne->HowToViewCurve == NULL) {
pOne->HowToViewCurve = new CHowToViewCurve();
}
CHowToViewCurve* pHWCOld = pOne->HowToViewCurve;
pHWCOld->Empty();
switch (type)
{
case CurveArrowHead:
case CurveArrowTail:
pHWCOld->Add(new CCurveArrow());
break;
case CurveProperties:
pHWCOld->Add(new CCurveProperties());
break;
case CurveLocate:
pHWCOld->Add(new CCurveLocate());
break;
case CurveScale:
pHWCOld->Add(new CCurveScale());
break;
case CurveNameHead:
case CurveNameTail:
pHWCOld->Add(new CCurveName());
break;
case CurveTwoMark:
pHWCOld->Add(new CCurveTwoMark());
break;
case CurveRgn:
pHWCOld->Add(new CCurveRgn());
break;
case CurveInName:
pHWCOld->Add(new CCurveInName());
break;
case CurveInNameAny:
pHWCOld->Add(new CCurveInNameAny());
break;
case CurveEffect:
pHWCOld->Add(new CCurveEffect());
break;
case CurveCenterName:
pHWCOld->Add(new CCurveCenterName());
break;
}
pHWCOld->SetAt(pHWCOld->GetCount() - 1, buffCurve, bufLen, 3);
nCount++;
}
pl->GetNext(posCurrent);
}
return nCount;
}
extern "C" __declspec(dllexport)
BOOL SelectCreateCurveStyle(CSigmaView * pView, POSITION elementPtr, int type, BYTE * buffCurve, int bufLen)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
if (pOne->HowToViewCurve == NULL) {
pOne->HowToViewCurve = new CHowToViewCurve();
}
CHowToViewCurve* pHWCOld = pOne->HowToViewCurve;
//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>Redo/Undo
CActionEmbellishItem *pActionItem = new CActionEmbellishItem(pView->m_pDoc, ActionTypeLayerEmbellishCurveAdd, pOne);
pActionItem->SetOldHowToView(pOne); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch (type)
{
case CurveArrowHead:
case CurveArrowTail:
pHWCOld->Add(new CCurveArrow());
break;
case CurveProperties:
pHWCOld->Add(new CCurveProperties());
break;
case CurveLocate:
pHWCOld->Add(new CCurveLocate());
break;
case CurveScale:
pHWCOld->Add(new CCurveScale());
break;
case CurveNameHead:
case CurveNameTail:
pHWCOld->Add(new CCurveName());
break;
case CurveTwoMark:
pHWCOld->Add(new CCurveTwoMark());
break;
case CurveRgn:
pHWCOld->Add(new CCurveRgn());
break;
case CurveInName:
pHWCOld->Add(new CCurveInName());
break;
case CurveInNameAny:
pHWCOld->Add(new CCurveInNameAny());
break;
case CurveEffect:
pHWCOld->Add(new CCurveEffect());
break;
case CurveCenterName:
pHWCOld->Add(new CCurveCenterName());
break;
}
BOOL result = pHWCOld->SetAt(pHWCOld->GetCount() - 1, buffCurve, bufLen, 3) != NULL;
pActionItem->SetNewHowToView(pOne);
pView->m_pDoc->SetActionItem(pActionItem);
return result;
}
extern "C" __declspec(dllexport)
BOOL SelectCreatePointStyle(CSigmaView * pView, POSITION elementPtr, BYTE * buffPoint, int bufLen)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
CHowToViewPoint htp;
BOOL bSuccess = htp.ReadMemory(buffPoint, bufLen, 3);
if (bSuccess == FALSE) {
return FALSE;
}
CActionEmbellishItem* pActionItem = new CActionEmbellishItem(pView->m_pDoc, 0, pOne);
pActionItem->SetOldHowToView(pOne); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pOne->HowToViewPoint == NULL) {
pOne->HowToViewPoint = new CHowToViewPoint();
}
*(pOne->HowToViewPoint) = htp;
pActionItem->SetNewHowToView(pOne); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pView->m_pDoc->Modified();
pView->m_pDoc->SetActionItem(pActionItem);
return TRUE;
}
extern "C" __declspec(dllexport)
BOOL SelectGetLayerNames(CSigmaView * pView, BYTE*& buffData, int& bufLen)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
CString layers;
CPositionList* ppl = &(itemSelect->m_selection);
if (ppl != NULL && !ppl->IsEmpty())
{
layers = pView->m_pDoc->GetSelectedElementLayer(*ppl);
bufLen = layers.GetLength();
buffData = new BYTE[bufLen + 1];
memcpy(buffData, (VOID*)LPCTSTR(layers), bufLen);
}
return true;
}
extern "C" __declspec(dllexport)
BOOL SelectGetLayerName(CSigmaView * pView, POSITION elementPtr, char * buffPoint, int bufLen)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
CLayer* pLayer = pOne->GetLayer();
if (pLayer == NULL) return FALSE;
CString name = pLayer->GetName();
strncpy(buffPoint, name.GetBuffer(), min(bufLen, name.GetLength() + 1));
return TRUE;
}
extern "C" __declspec(dllexport)
BOOL SelectSetLayerByName(CSigmaView * pView, POSITION elementPtr, LPCTSTR layerName)
{
CXy* pxy = pView->m_pDoc->m_pXy;
CLayer* pLayer = pxy->FindLayer(layerName);
if (pLayer == NULL) return FALSE;
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL) return FALSE;
POSITION pos;
pos = (POSITION)elementPtr;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == NULL) return FALSE;
pOne->SetLayer(pLayer);
return TRUE;
}
extern "C" __declspec(dllexport)
int ItemSelectElement_GetCountSelected(CSigmaView * pView)
{
if (pView == 0)
return -1;
CItemSelectElement * item = GetCItemSelectElementFromView(pView);
if (item == 0)
return -1;
return item->GetCountSelected();
}
extern "C" __declspec(dllexport)
int Select_HightLightFirstCurve(CSigmaView * pView, HDC hdc)
{
if (pView == 0)
return -1;
CItemBreakCurve * item = GetCItemBreakCurveFromView(pView);
if (item == 0)
return -1;
CDC *pDC = CDC::FromHandle(hdc);
pView->SetDrawDC(pDC);
item->HightLightFirstCurve();
return 1;
}
extern "C" __declspec(dllexport)
BOOL SelectSetCursor(CSigmaView * pView, int ptX, int ptY, int& handle)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
BOOL bSuccess = itemSelect->OnSetCursor(CPoint(ptX, ptY), handle);
return bSuccess;
}
extern "C" __declspec(dllexport)
int Select_GetKindOfSelectedElement(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
if (itemSelect->m_selection.IsEmpty())
return -1;
POSITION pos = itemSelect->m_selection.GetHead();
if (pos == 0)
return -1;
COne* pOne = (COne*)(pView->m_pDoc->GetDraw()->GetAt(pos));
if (pOne == 0)
return -1;
return pOne->GetType();
}
extern "C" __declspec(dllexport)
int Select_ByNames(CSigmaView * pView, LPCTSTR data) {
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return 0;
CString strData(data);
itemSelect->SelectByNames(strData);
return 1;
}
extern "C" __declspec(dllexport)
int Select_SelectAll(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
itemSelect->SelectAll();
return 1;
}
extern "C" __declspec(dllexport)
int Select_ClearAll(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
itemSelect->ClearAll(nullptr);
return 1;
}
extern "C" __declspec(dllexport)
int Select_SelectAllByKind(CSigmaView * pView, int kind)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
itemSelect->SelectAll(kind);
return 1;
}
extern "C" __declspec(dllexport)
int Select_ReloadTrack(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
pView->m_pDoc->GetSelectionSet(itemSelect->m_selection);
itemSelect->ReloadTrackerPath();
return 0;
}
extern "C" __declspec(dllexport)
int Select_EnableTracker(CSigmaView * pView, int bEnable)
{
if (pView == 0)
return -1;
if (pView->m_pDoc == 0)
return -1;
CItemSelect * pSelect = pView->m_pDoc->GetSelectItem();
if(pSelect)
{
pSelect->EnableTracker(bEnable == 1 ? true : false);
}
return 1;
}
extern "C" __declspec(dllexport)
int Select_SelectOneGraph(CSigmaView * pView, POSITION pos)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
itemSelect->Select(pos, FALSE);
itemSelect->ReloadTrackerPath();
return 1;
}
extern "C" __declspec(dllexport)
void Select_CreateGroup(CSigmaView * pView, POSITION& pos)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return;
pos = itemSelect->GroupSelectionToBlock();
}
extern "C" __declspec(dllexport)
bool Select_UngroupAll(CSigmaView * pView, int& layerCount)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
return itemSelect->UngroupAll(layerCount);
}
extern "C" __declspec(dllexport)
bool Select_SaveSelectKml(CSigmaView* pView, POSITION pos, LPCTSTR path)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
CXy* pXyCurrent = pView->m_pDoc->GetDraw();
return itemSelect->SaveSelectKml(pos, pXyCurrent, path);
}
extern "C" __declspec(dllexport)
bool Select_DisperseMetaEmf(CSigmaView* pView, POSITION pos, long timestamp)
{
CItemSelect* itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return false;
CXy* pXyCurrent = pView->m_pDoc->GetDraw();
return itemSelect->DisperseMetaEmf(pos, pXyCurrent, timestamp);
}
extern "C" __declspec(dllexport)
int Select_PointCount(CSigmaView * pView)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == NULL)
return -1;
return itemSelect->PointCount();
}
extern "C" __declspec(dllexport)
void SelectChangeToLayer(CSigmaView * pView, LPCTSTR layerName)
{
CItemSelect * itemSelect = GetItemSelectFromView(pView);
if (itemSelect == nullptr)
{
return;
}
CXy* pXy = pView->m_pDoc->m_pXy;
CLayer* pLayer = pXy->FindLayer(layerName);
if (pLayer == nullptr)
{
return;
}
CPositionList& selection = itemSelect->m_selection;
for (POSITION pos = selection.GetHeadPosition(); pos != nullptr; selection.GetNext(pos))
{
POSITION pt = selection.GetAt(pos);
COne* pOne = (COne*)(pXy->GetAt(pt));
pOne->SetLayer(pLayer);
}
}
extern "C" __declspec(dllexport)
BOOL HasMeshState(CSigmaView * pView, POSITION oldMeshPos)
{
CXy* pXyCurrent = pView->m_pDoc->GetDraw();
if (oldMeshPos == nullptr)
{
oldMeshPos = pXyCurrent->FindFirstElement(DOUBLEFOX_MESH);
}
if (oldMeshPos == nullptr) {
return false;
}
else
{
return true;
}
}