|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include <stack>
|
|
|
|
|
|
#include <random>
|
|
|
|
|
|
#include "DrawOperator/XyIO.h"
|
|
|
|
|
|
#include "TinyXml/tinyxml.h"
|
|
|
|
|
|
#include "ActionDeleteItem.h"
|
|
|
|
|
|
#include "DrawOperator/Net.h"
|
|
|
|
|
|
#include "DrawOperator/LibraryManager.h"
|
|
|
|
|
|
#include "DrawOperator\FileUtility.h"
|
|
|
|
|
|
#include "DrawOperator/unordered_dense.h"
|
|
|
|
|
|
#include "DrawOperator\MergePDFFile.h"
|
|
|
|
|
|
#include "ActionAddItem.h"
|
|
|
|
|
|
#include "Util.h"
|
|
|
|
|
|
#include "Legend.h"
|
|
|
|
|
|
#include "UndecidedZone.h"
|
|
|
|
|
|
#include "SigmaView.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zMin <EFBFBD><EFBFBD> zMax <EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* \param pXy ͼ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* \param layerName ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* \param zMin <EFBFBD><EFBFBD>С z ֵ
|
|
|
|
|
|
* \param zMax <EFBFBD><EFBFBD><EFBFBD><EFBFBD> z ֵ
|
|
|
|
|
|
* \param plAdd <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼԪ POSITION
|
|
|
|
|
|
* \return
|
|
|
|
|
|
*/
|
|
|
|
|
|
int CreateFavorableAreaImpl(CXy* pSourceXy, CXy* pTargetXy, const CString& layerName, double zMin, double zMax, CPositionList& plAdd)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pSourceXy == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("pXy <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (zMin >= zMax)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("zMin <20><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD> zMax\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CPositionList select;
|
|
|
|
|
|
pSourceXy->GetElement(DOUBLEFOX_MESH, select);
|
|
|
|
|
|
if (select.IsEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CLayer* pLayer = pTargetXy->FindAddLayer(layerName);
|
|
|
|
|
|
if (pLayer == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ͼ<EFBFBD><EFBFBD>\"%s\"ʧ<EFBFBD><EFBFBD>", layerName);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (POSITION pos = select.GetHeadPosition(); pos != nullptr; select.GetNext(pos))
|
|
|
|
|
|
{
|
|
|
|
|
|
POSITION pt = select.GetAt(pos);
|
|
|
|
|
|
COne* pOne = pSourceXy->GetAt(pt);
|
|
|
|
|
|
if (pOne == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CMesh* pMesh = pOne->GetValueSafe<CMesh>();
|
|
|
|
|
|
UndecidedZone undecidedZone(pMesh);
|
|
|
|
|
|
std::vector<std::unique_ptr<CCurveEx>> curves = undecidedZone.ComputeRegions(zMin, zMax);
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& curve : curves)
|
|
|
|
|
|
{
|
|
|
|
|
|
auto pOne = std::make_unique<COne>();
|
|
|
|
|
|
pOne->SetLayer(pLayer);
|
|
|
|
|
|
pOne->SetValueSafe(std::move(curve.release()));
|
|
|
|
|
|
pOne->SetColor(RGB(0, 0, 0));
|
|
|
|
|
|
|
|
|
|
|
|
POSITION posAdd = pTargetXy->AddTailOne(pOne.release());
|
|
|
|
|
|
plAdd.AddTail(posAdd);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return plAdd.GetCount();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
|
|
|
int XyCreateFavorableArea(CXy* pSourceXy, CXy* pTargetXy, const LPCTSTR layerName, double zMin, double zMax)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pSourceXy == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("pSourceXy <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (pTargetXy == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("pTargetXy <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (layerName == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("layerName <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CPositionList plAdd;
|
|
|
|
|
|
return CreateFavorableAreaImpl(pSourceXy, pTargetXy, layerName, zMin, zMax, plAdd);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* \param pView ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* \param layerName Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* \param zMin <EFBFBD><EFBFBD>С z ֵ
|
|
|
|
|
|
* \param zMax <EFBFBD><EFBFBD><EFBFBD><EFBFBD> z ֵ
|
|
|
|
|
|
* \return
|
|
|
|
|
|
*/
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
|
|
|
int CreateFavorableArea(CSigmaView* pView, CXy* pTargetXy, LPCTSTR layerName, double zMin, double zMax)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pView == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("pView <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (layerName == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
TRACE("layerName <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CPositionList plAdd;
|
|
|
|
|
|
int nCount = CreateFavorableAreaImpl(pView->m_pDoc->m_pXy, pTargetXy, layerName, zMin, zMax, plAdd);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ĵĵ<C4B5>ǰͼ<C7B0><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (pView->m_pDoc->m_pXy == pTargetXy && plAdd.GetCount() > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
auto pItem = std::make_unique<CActionAddItem>(pView->m_pDoc, 0, plAdd);
|
|
|
|
|
|
pView->m_pDoc->SetActionItem(pItem.release());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return nCount;
|
|
|
|
|
|
}
|