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

85 lines
2.3 KiB
C++

#include "stdafx.h"
#include "SigmaView.h"
#include "DrawBend.h"
#include "SectionDoc.h"
#include "Item.h"
#include "ItemSelect.h"
#include "ActionDeleteLayerItem.h"
#include "ItemPointAdd.h"
#include "ItemScaleEmbellish.h"
#include "./spdlog/spdlog.h"
#include "ItemSolid.h"
#include "./spdlog/sinks/rotating_file_sink.h"
#include "QTransformTracker.h"
#include "ActionListItem.h"
#include "ActionEmbellishItem.h"
#include "ActionLayerRenameItem.h"
#include "actionaddlayeritem.h"
#include "ItemExportFile.h"
// 获得范围内所有的图元,可以指定图层,图元类型,不指定则不加限制
extern "C" __declspec(dllexport)
bool XyGetElementsByRange(CXy* pXy,POSITION posBorder, LPCTSTR layerName, int elementType, BYTE*& buffElement, int& buffLen)
{
COne* pOneBorder = pXy->GetAt(posBorder);
CCurveEx *pBorder = (CCurveEx*)pOneBorder->value;
CXyElementFilter filter;
CString strLayerName(layerName);
if (!strLayerName.IsEmpty())
{
filter.addLayer(strLayerName, true);
}
if (elementType > 0)
{
filter.addType(elementType);
}
NBase::CPositionList lstResult;
NBase::CPositionList lstSelection;
pXy->GetElement(filter, lstSelection);
for (POSITION pos = lstSelection.GetHeadPosition(); pos != nullptr; lstSelection.GetNext(pos))
{
POSITION onePos = lstSelection.GetAt(pos);
if (onePos == posBorder) {
continue;
}
COne *pOne = pXy->GetAt(onePos);
if (pOne->GetType() == DOUBLEFOX_CURVE)
{
CCurveEx* pCurve = (CCurveEx*)(pOne->GetValue());
int inside = pBorder->IsInside(*pCurve);
if (inside == 0)
{
continue;
}
lstResult.AddTail(onePos);
}
else if (pOne->GetType() == DOUBLEFOX_POINT|| pOne->GetType() == DOUBLEFOX_XYZ)
{
CPointNameBase *pPoint = (CPointNameBase *)pOne->GetValue();
if (pBorder->IsInside(pPoint->x0, pPoint->y0))
{
lstResult.AddTail(onePos);
}
}
}
if (lstResult.GetSize() > 0) {
pXy->WriteMemory(buffElement, buffLen, lstResult, 3, 0);
return true;
}
return false;
}
// 获得图层的所有图元
extern "C" __declspec(dllexport)
BOOL GetDataByLayer(CSigmaView * pView, LPCTSTR layerName, BYTE*& buffElement, int& buffLen) {
CXy* pxy = pView->m_pDoc->m_pXy;
if (pxy == NULL)
{
return false;
}
CPositionList lst;
pxy->GetElement(layerName, lst, 1);
pxy->WriteMemory(buffElement, buffLen, lst, 3, 0);
return true;
}