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++

1 month ago
#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);
1 month ago
//<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);
1 month ago
//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;
1 month ago
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pAction->BackupNewItem();
//pView->m_pDoc->SetActionItem(pAction);
1 month ago
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;
}
/**
* <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>Ϣ
* \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)
1 month ago
BOOL SelectSetElement(CSigmaView* pView, BYTE* buffElement, int buffLen, POSITION elementPtr, bool state, double zmin, double zmax)
1 month ago
{
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);
1 month ago
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);
}
1 month ago
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);
}
1 month ago
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);
}
1 month ago
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);
}
}
1 month ago
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;
}
}