|
|
|
|
|
#include "stdafx.h"
|
|
|
#include "DrawOperator\LibraryManager.h"
|
|
|
#include "SigmaView.h"
|
|
|
#include "DrawOperator\MapStringToPtrNoCase.h"
|
|
|
|
|
|
bool GetXySymbolNames(CXy * pXy, BYTE *& symbolNames, int & buffLen)
|
|
|
{
|
|
|
if (pXy == nullptr)
|
|
|
{
|
|
|
buffLen = 0;
|
|
|
return false;
|
|
|
}
|
|
|
CMapStringToPtrNoCase* pMarks = pXy->GetMark();
|
|
|
if (pMarks == nullptr|| pMarks->GetCount()==0)
|
|
|
{
|
|
|
buffLen = 0;
|
|
|
return false;
|
|
|
}
|
|
|
CMemFile fw(10240U);
|
|
|
CString strMarkName;
|
|
|
void* pDraw = NULL;
|
|
|
POSITION p = pMarks->GetStartPosition();
|
|
|
while (p)
|
|
|
{
|
|
|
pMarks->GetNextAssoc(p, strMarkName, pDraw);
|
|
|
if (pDraw == NULL) continue;
|
|
|
//strMarkName = ((CXy*)pDraw)->m_strName;
|
|
|
strMarkName.AppendChar(';');
|
|
|
fw.Write(strMarkName.GetBuffer(), strMarkName.GetLength());
|
|
|
strMarkName.ReleaseBuffer();
|
|
|
}
|
|
|
buffLen = fw.GetLength();
|
|
|
symbolNames = fw.Detach();
|
|
|
return true;
|
|
|
}
|
|
|
bool RemoveXySymbol(CXy* pXy, CXy* pxySymbol)
|
|
|
{
|
|
|
CMapStringToPtrNoCase* pMarks = pXy->GetMark();
|
|
|
|
|
|
CMemFile fw(10240U);
|
|
|
CString strMarkName;
|
|
|
void* pDraw = NULL;
|
|
|
POSITION p = pMarks->GetStartPosition();
|
|
|
while (p)
|
|
|
{
|
|
|
pMarks->GetNextAssoc(p, strMarkName, pDraw);
|
|
|
if (pDraw == NULL) continue;
|
|
|
if ((CXy*)pDraw == pxySymbol)
|
|
|
{
|
|
|
pXy->RemoveMark(strMarkName);
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
void ResetSymbol(CSigmaView* pView)
|
|
|
{
|
|
|
CXy* pXy = pView->m_pDoc->m_pXy;
|
|
|
if (pXy->GetCount() > 0)
|
|
|
{
|
|
|
pXy->PositionNew(0);
|
|
|
}
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool XyDrawSymbol(CXy * pXy, HDC hdcMem, int width, int height)
|
|
|
{
|
|
|
if (pXy == NULL) return FALSE;
|
|
|
CDC *pDC = CDC::FromHandle(hdcMem);
|
|
|
CXyDC xyDC; xyDC.Create(pDC);
|
|
|
CRect rt(0, 0, width - 1, height - 1);
|
|
|
rt.DeflateRect(3, 3);
|
|
|
|
|
|
CRect8 rect(1e100, -1e100, -1e100, 1e100);
|
|
|
if (pXy->GetCount() > 0)
|
|
|
{
|
|
|
pXy->GetRange(rect);
|
|
|
pXy->m_range = rect;
|
|
|
xyDC.Extend(rect, rt, EXTEND_MODE_CENTER);
|
|
|
pXy->Draw(xyDC);
|
|
|
}
|
|
|
|
|
|
pDC->SelectStockObject(NULL_BRUSH);
|
|
|
pDC->SelectStockObject(BLACK_PEN);
|
|
|
pDC->Rectangle(0, 0, width - 1, height - 1);
|
|
|
pDC->SelectStockObject(WHITE_PEN);
|
|
|
pDC->Rectangle(1, 1, width - 2, height - 2);
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool XyDrawSymbolFill(CXy * pXy, HDC hdcMem, int width, int height)
|
|
|
{
|
|
|
if (pXy == NULL) return FALSE;
|
|
|
CDC *pDC = CDC::FromHandle(hdcMem);
|
|
|
CXyDC xyDC; xyDC.Create(pDC);
|
|
|
CRect rt(0, 0, width, height);
|
|
|
|
|
|
CRect8 rect(1e100, -1e100, -1e100, 1e100);
|
|
|
if (pXy->GetCount() > 0)
|
|
|
{
|
|
|
pXy->GetRange(rect);
|
|
|
pXy->m_range = rect;
|
|
|
xyDC.Extend(rect, rt, EXTEND_MODE_CENTER);
|
|
|
pXy->Draw(xyDC);
|
|
|
}
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool InitLibrary(LPCTSTR strNewPath, BYTE*& buffNodes, int& buffLen, BOOL bNotJudgeSamePath)
|
|
|
{
|
|
|
bool bInitSucess = AfxGetMarkLibMgr()->InitLib(strNewPath, bNotJudgeSamePath);
|
|
|
CMemFile fw(10240U);
|
|
|
//<2F><><EFBFBD>ط<EFBFBD><D8B7>ſ<EFBFBD><C5BF>еķ<D0B5><C4B7><EFBFBD>
|
|
|
//if (IsLoadMark())
|
|
|
{
|
|
|
CString strTreePath;
|
|
|
CLibraryItem *pItem;
|
|
|
POSITION pos = AfxGetMarkLibMgr()->m_libXy.GetHeadPosition();
|
|
|
while (pos)
|
|
|
{
|
|
|
pItem = (CLibraryItem*)AfxGetMarkLibMgr()->m_libXy.GetNext(pos);
|
|
|
//strTreePath = AfxGetMarkLibMgr()->GetTreePathName(pItem->m_strFileName);
|
|
|
strTreePath = pItem->m_strFileName;
|
|
|
strTreePath.AppendChar(';');
|
|
|
//int nLen = str.GetLength();
|
|
|
fw.Write(strTreePath.GetBuffer(), strTreePath.GetLength());
|
|
|
strTreePath.ReleaseBuffer();
|
|
|
}
|
|
|
buffLen = fw.GetLength();
|
|
|
buffNodes = fw.Detach();
|
|
|
}
|
|
|
return TRUE;
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool GetLibraryPath(BYTE*& pathData, int& buffLen)
|
|
|
{
|
|
|
CMemFile fw(10240U);
|
|
|
CString strPath = AfxGetMarkLibMgr()->m_strPath;
|
|
|
fw.Write(strPath.GetBuffer(), strPath.GetLength());
|
|
|
strPath.ReleaseBuffer();
|
|
|
buffLen = fw.GetLength();
|
|
|
pathData = fw.Detach();
|
|
|
return true;
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool LibraryAddNewGroup(LPCSTR fileName)
|
|
|
{
|
|
|
AfxGetMarkLibMgr()->AddNewGroup(fileName);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
void LibraryRemoveGroup(LPCSTR fileName)
|
|
|
{
|
|
|
AfxGetMarkLibMgr()->RemoveGroup(fileName);
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
void LibraryReloadGroup(LPCSTR fileName)
|
|
|
{
|
|
|
if (fileName == nullptr)
|
|
|
{
|
|
|
TRACE("fileName <20><><EFBFBD><EFBFBD>Ϊ nullptr\n");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
AfxGetMarkLibMgr()->ReloadGroup(fileName);
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
BOOL LibraryRenameGroup(LPCSTR fileName, LPCTSTR fileNew)
|
|
|
{
|
|
|
return AfxGetMarkLibMgr()->RenameGroup(fileName, fileNew);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool LibrarySaveAll()
|
|
|
{
|
|
|
return AfxGetMarkLibMgr()->SaveAll();
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool GetLibrarySymbolNames(LPCTSTR fileName, BYTE*& symbolNames, int& buffLen)
|
|
|
{
|
|
|
POSITION pos = AfxGetMarkLibMgr()->Find(fileName);
|
|
|
if (pos == NULL) return NULL;
|
|
|
|
|
|
CLibraryItem *pItem = AfxGetMarkLibMgr()->GetAt(pos);
|
|
|
int r = pItem->Read();
|
|
|
CXy *pXy = pItem->m_pxy;
|
|
|
|
|
|
return GetXySymbolNames(pXy, symbolNames, buffLen);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool GetDrawerSymbolNames(CSigmaView* pView, BYTE *& symbolNames, int & buffLen)
|
|
|
{
|
|
|
CXy* pXy = pView->m_pDoc->m_pXy;
|
|
|
return GetXySymbolNames(pXy, symbolNames, buffLen);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool RemoveLibrarySymbol(LPCTSTR fileName, CXy* pxySymbol)
|
|
|
{
|
|
|
POSITION pos = AfxGetMarkLibMgr()->Find(fileName);
|
|
|
if (pos == NULL) return NULL;
|
|
|
|
|
|
CLibraryItem *pItem = AfxGetMarkLibMgr()->GetAt(pos);
|
|
|
int r = pItem->Read();
|
|
|
CXy *pXy = pItem->m_pxy;
|
|
|
return RemoveXySymbol(pXy, pxySymbol);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool RemoveDrawerSymbol(CSigmaView* pView, CXy* pxySymbol)
|
|
|
{
|
|
|
CXy* pXy = pView->m_pDoc->m_pXy;
|
|
|
return RemoveXySymbol(pXy, pxySymbol);
|
|
|
}
|
|
|
bool CreateXySymbol(CXy* pItemXy, LPCTSTR symbolName, CXy*& pSymbolXy)
|
|
|
{
|
|
|
pSymbolXy = new CXy;
|
|
|
pSymbolXy->m_strName = symbolName;
|
|
|
int nResult = pItemXy->AddMark(pSymbolXy);
|
|
|
if (nResult == 0)
|
|
|
{
|
|
|
delete pSymbolXy;
|
|
|
pSymbolXy = nullptr;
|
|
|
return FALSE;
|
|
|
}
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
int XyAddBufferData(CXy * pXy, LPCTSTR data);
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
int XyAddDataAsSymble(CXy * pXy, LPCTSTR data, LPCTSTR symbolName, bool overwrite)
|
|
|
{
|
|
|
CXy* pSymbolXy = new CXy;
|
|
|
int nResult = XyAddBufferData(pSymbolXy, data);
|
|
|
pSymbolXy->m_strName = symbolName;
|
|
|
nResult = pXy->AddMark(pSymbolXy, overwrite);
|
|
|
//delete pSymbolXy;
|
|
|
return nResult;
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool CreateLibrarySymbol(LPCTSTR fileName, LPCTSTR symbolName, CXy*& pSymbolXy)
|
|
|
{
|
|
|
POSITION pos = AfxGetMarkLibMgr()->Find(fileName);
|
|
|
if (pos == NULL) return FALSE;
|
|
|
CXy* pItemXy = AfxGetMarkLibMgr()->GetItemXy(pos);
|
|
|
return CreateXySymbol(pItemXy, symbolName, pSymbolXy);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool CreateDrawerSymbol(CSigmaView* pView, LPCTSTR symbolName, CXy*& pSymbolXy)
|
|
|
{
|
|
|
CXy* pItemXy = pView->m_pDoc->m_pXy;
|
|
|
return CreateXySymbol(pItemXy, symbolName, pSymbolXy);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool LibraryCopySymbol(LPCTSTR fileName, CXy* pSymbolXy, LPCTSTR symbolName, CXy*& pSymbolNew)
|
|
|
{
|
|
|
POSITION pos = AfxGetMarkLibMgr()->Find(fileName);
|
|
|
if (pos == NULL) return FALSE;
|
|
|
CXy* pItemXy = AfxGetMarkLibMgr()->GetItemXy(pos);
|
|
|
pSymbolNew = new CXy;
|
|
|
*pSymbolNew = *pSymbolXy;
|
|
|
pSymbolNew->m_strName = symbolName;
|
|
|
return pItemXy->AddMark(pSymbolNew, false);
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool DrawerCopySymbol(CSigmaView* pView, CXy* pSymbolXy, LPCTSTR symbolName, CXy*& pSymbolNew)
|
|
|
{
|
|
|
CXy* pItemXy = pView->m_pDoc->m_pXy;
|
|
|
pSymbolNew = new CXy;
|
|
|
*pSymbolNew = *pSymbolXy;
|
|
|
pSymbolNew->m_strName = symbolName;
|
|
|
return pItemXy->AddMark(pSymbolNew, true);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool DrawerCopyAllSymbol(CXy* pXySource, CXy* pXyDest, bool overwrite)
|
|
|
{
|
|
|
CMapStringToPtrNoCase* pMarks = pXySource->GetMark();
|
|
|
if (pMarks == nullptr || pMarks->GetCount() == 0)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
CString strMarkName;
|
|
|
void* pDraw = NULL;
|
|
|
POSITION p = pMarks->GetStartPosition();
|
|
|
while (p)
|
|
|
{
|
|
|
pMarks->GetNextAssoc(p, strMarkName, pDraw);
|
|
|
if (pDraw == NULL) continue;
|
|
|
CXy* pXyFind = (CXy*)pDraw;
|
|
|
CXy* pSymbolNew = new CXy;
|
|
|
*pSymbolNew = *pXyFind;
|
|
|
pSymbolNew->m_strName = strMarkName;
|
|
|
pXyDest->AddMark(pSymbolNew, overwrite);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool LibaryDrawSymbol(LPCTSTR fileName, LPCTSTR symbolName, HDC hdcMem, int width, int height, CXy*& pXy)
|
|
|
{
|
|
|
pXy = AfxGetMarkLibMgr()->FindMark(fileName, symbolName);
|
|
|
return XyDrawSymbol(pXy, hdcMem, width, height);
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool DrawerDrawSymbol(CSigmaView* pView, LPCTSTR symbolName, HDC hdcMem, int width, int height, CXy*& pXy)
|
|
|
{
|
|
|
pXy = (CXy*)(pView->m_pDoc->m_pXy->FindMark(symbolName));
|
|
|
return XyDrawSymbol(pXy, hdcMem, width, height);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool LibaryDrawSymbolFill(LPCTSTR fileName, LPCTSTR symbolName, HDC hdcMem, int width, int height, CXy*& pXy)
|
|
|
{
|
|
|
pXy = AfxGetMarkLibMgr()->FindMark(fileName, symbolName);
|
|
|
return XyDrawSymbolFill(pXy, hdcMem, width, height);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool DrawerDrawSymbolFill(CSigmaView* pView, LPCTSTR symbolName, HDC hdcMem, int width, int height, CXy*& pXy)
|
|
|
{
|
|
|
if (pView == nullptr) {
|
|
|
return false;
|
|
|
}
|
|
|
pXy = (CXy*)(pView->m_pDoc->m_pXy->FindMark(symbolName));
|
|
|
return XyDrawSymbolFill(pXy, hdcMem, width, height);
|
|
|
}
|
|
|
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool SetDrawXyName(CXy* pXy, LPCTSTR fileName, LPCTSTR newName)
|
|
|
{
|
|
|
AfxGetMarkLibMgr()->ReNameMark(fileName, pXy->m_strName, newName);
|
|
|
//pXy->m_strName = newName;
|
|
|
return TRUE;
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
void RenameSymble(CSigmaView* pView, LPCTSTR oldName, LPCTSTR newName) {
|
|
|
CXy* pXy = pView->m_pDoc->m_pXy;
|
|
|
//if(pXy->mark.GetCount())
|
|
|
void *v = NULL;
|
|
|
pXy->mark.Lookup(oldName, v);
|
|
|
pXy->mark.RemoveKey(oldName);
|
|
|
|
|
|
CXy* pMark = (CXy*)v;
|
|
|
pMark->m_strName = newName;
|
|
|
pXy->mark.SetAt(newName, pMark);
|
|
|
|
|
|
pXy->PositionNew(2);
|
|
|
}
|
|
|
extern "C" __declspec(dllexport)
|
|
|
bool GetDrawXyName(CXy* pXy, BYTE *& symbolName, int & buffLen)
|
|
|
{
|
|
|
CMemFile fw(10240U);
|
|
|
CString strMarkName = pXy->m_strName;
|
|
|
fw.Write(strMarkName.GetBuffer(), strMarkName.GetLength());
|
|
|
strMarkName.ReleaseBuffer();
|
|
|
buffLen = fw.GetLength();
|
|
|
symbolName = fw.Detach();
|
|
|
return TRUE;
|
|
|
}
|