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.

355 lines
8.6 KiB
C

1 month ago
#pragma once
#include <functional>
#include "itemfocusrect.h"
#include <GdiPlus.h>
#include "QTransformTracker.h"
#include "VoronoiMap/InterfaceElements.h"
#include "Util.h"
namespace NItem
{
/**
* <EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
class CItemSelect : public CItemFocusRect
{
public:
enum SelectMode
{
selnone, // <20><>ѡ
netSelect,
move,
size,
};
SelectMode selectMode;
bool m_isLocationChanged;
public:
CItemSelect(CSigmaDoc * ppDoc);
virtual ~CItemSelect(void);
virtual void OnLButtonDblClk(UINT nFlags, CPoint point) override;
virtual void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override;
virtual void OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk=0) override;
virtual int OnMouseMove(CDC *pDC, UINT nFlags, CPoint point) override;
1 month ago
1 month ago
void MoveElementsTo(CPoint point);
1 month ago
void TransformElements(CPoint ptStart, CPoint ptEnd);
1 month ago
virtual void OnRButtonDown(UINT nFlags, CPoint point) override;
virtual BOOL OnMoving();
void DrawTrackPath(CDC* pDC);
virtual BOOL OnSetCursor(CPoint pt, int& handle);
1 month ago
BOOL GetHandle(CPoint pt, int& handle);
1 month ago
BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) override;
BOOL OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) override;
virtual void OnDraw(CXyDC* pDC) override;
virtual void OnDraw(CXyDC* pXyDC, CDC* pDC) override;
/**
* <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>ͱ߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \return
*/
int CreateVoronoiMap();
int CreateVoronoiMap(POSITION& posCurve, CPositionList& addCurveList);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \return
*/
int CreateDelaunayMap();
int CreateDelaunayMap(POSITION& posCurve, CPositionList& addCurveList);
/**
* <EFBFBD><EFBFBD>ѡ<EFBFBD>еĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ϡ<EFBFBD><EFBFBD><EFBFBD>޳<EFBFBD>һЩ<EFBFBD><EFBFBD>
*
* \param minSpacing <EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
int SimplifySelectPoints(double minSpacing);
void ReloadTrackerPath(void);
/**
* ɾ<EFBFBD><EFBFBD>ѡ<EFBFBD>е<EFBFBD>ͼԪ
*
*/
virtual int DeleteSelection(void);
void InvalidateSelection(void);
QTransformTracker& GetTracker();
//HTracker * GetTracker();
void EnableTracker(bool bEnbale);
//QTransformTracker* GetQTracker(void);
bool InitItemForGrid();
CPositionList m_selection; // <20><>ѡ<EFBFBD>е<EFBFBD>ͼԪ<CDBC>б<EFBFBD>
CRect8 m_lastRect; // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѡ<EFBFBD><D1A1>ʱ<EFBFBD><CAB1> Rect
int GetSelectedCount(void);
bool GetPointsZRange(double& zMin, double& zMax);
bool SetPointsColor(CString colorItemsData, double dWidth, double dHeight);
void SelectWithinRect(CRect8 rect, BOOL bAdd = FALSE);
1 month ago
1 month ago
void SetEnableRotate(bool enable);
protected:
vector<int> SelectTypes;
void CloneSelection();
void Remove(POSITION posObj);
int nDragHandle;
CRect8 m_posRect;
bool m_bPointTextSelected; //<2F>Ƿ<EFBFBD><C7B7>ǵ<EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ֱ<EFBFBD>ѡ<EFBFBD><D1A1>
CItem * m_pItemForGrid;
//HTracker m_tracker;
QTransformTracker m_Tracker;
bool m_bTrackerEnable;
bool m_bEnableRotate;
public:
vector<int>& GetSelectTypes() { return SelectTypes; }
void SetSelectTypes(int* types, int size);
void Deselect(POSITION posObj);
void LoadRectPath(Gdiplus::GraphicsPath &path, CRect8 rect);
void LoadCurvePath(Gdiplus::GraphicsPath& path, CCurveEx* pc);
void LoadPath(POSITION pos);
void LoadPath(COne* pOne);
int EndTransformSelection(UINT nFlags, CPoint point, int handle);
BOOL TransformSelection(float* matrix, int nMode, void* pActionItem);
void SelectSameLayer(void);
void SelectSameProperty(void);
void Select(POSITION posObj, BOOL bAdd, CPoint2D& point);
void Select(POSITION posObj, BOOL bAdd = FALSE);
void Select(CPositionList& select, BOOL bAdd = FALSE);
int CurveInRegion(CCurveEx* pCurve, CCurveEx* pRgn);
int IsInside(CCurveEx* pRgn, CRect8& rgnRange, COne* pOne);
int SelectInCurve();
int SelectInCurve(int elementType);
int SelectInCurveEx(double factor);
int SelectInCurveEx(int elementType, double factor);
1 month ago
// ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD>η<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>ͼԪ
virtual void SelectInScreenRegion(double left, double bottom, double right, double top, bool add);
1 month ago
int SelectSamePropertyElements();
void MakeViewData(COne * pOneSelect, CString &strSelect);
int SelectByNames(CString& data);
void SelectAll(void);
void ClearAll(CDC* pDC);
void ReversalSelectAll(void);
void SelectAll(UINT nElementType, BOOL bAdd = FALSE);
virtual void CancelSelection(void);
BOOL IsSelected(POSITION pos);
int GetCountSelected(void);
void OffsetSelected(double dx, double dy);
CRect8 GetSelectedRect(void);
CRect GetTrackerRect();
void DeleteItemGrid(void);
void GetSelectedNames(CString& names);
bool Past(int nPasteMode); //0=ճ<><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>1=ճ<><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>㣬2=ճ<><D5B3>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
void PasteNative(CXy* pDraw, CPositionList& list, COleDataObject& dataObject, bool bPasteInCurrentLayer);
void Serialize (CXy* pDraw, CPositionList& list, CArchive& ar, bool bPasteInCurrentLayer);
bool WriteData(CXy* pDraw, BYTE*& outBuffer, int& destLen, int formatCode);
POSITION PasteEmbedded(CXy* pDraw, COleDataObject& dataObject, CPoint point);
void Copy(void);
BOOL IsSameType(void); //ѡ<>е<EFBFBD><D0B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ͳһ
BOOL IsElementType(int nElementType);
BOOL IsCanPaste(void);
CItem* GetItemForGrid(void);
CItem* FindItemForGrid(POSITION pos, BOOL bMulElement=FALSE);
BOOL IsCanMoveCoor(COne* pOne);
POSITION SelectionToFillPath(void);
POSITION GroupSelectionToSymbol();
POSITION GroupSelectionToBlock();
BOOL UngroupAll(int& layerCount);
BOOL UngroupSymbol(POSITION pos, bool nReplaceExist, int& layerCount);
BOOL IsSelectionChanged;
CItem* GetItem() {
return m_pItemForGrid;
}
void SetItem(CItem * pOther) {
this->m_pItemForGrid = pOther;
}
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ѡ<EFBFBD>е<EFBFBD>ͼԪ
*
* \return
*/
std::list<COne*> SelectionCones();
/**
* <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><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int PointCount();
/**
* Ԫ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ɢ <EFBFBD><EFBFBD>emf<EFBFBD><EFBFBD>
* \param pos <EFBFBD><EFBFBD>ǰѡ<EFBFBD><EFBFBD>ͼԪ
* \return
*/
int DisperseMetaEmf(POSITION pos, CXy* pXy, long timestamp);
1 month ago
/**
* <EFBFBD><EFBFBD><EFBFBD>ǰͼԪΪKML
* \param pos <EFBFBD><EFBFBD>ǰѡ<EFBFBD><EFBFBD>ͼԪ
* \return
*/
int SaveSelectKml(POSITION pos, CXy* pXy, CString path);
1 month ago
protected:
CXy* SelectionToXy();
private:
/**
* <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>µıպ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \return
* \note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><EFBFBD>ͷ<EFBFBD>
*/
std::vector<CCurveEx*> CollectPolygons();
/**
* <EFBFBD>жϸ<EFBFBD>ͼԪ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD>ҿɱ
*
* \param pOne
* \return
*/
static bool COneVisibleAndEditable(COne *pOne);
/**
* <EFBFBD>ռ<EFBFBD>Ŀ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param layer ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
std::list<CPolyline> CollectLayerPolyline(CString layer);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD>߿<EFBFBD><EFBFBD>ڵĶϲ<EFBFBD><EFBFBD><EFBFBD>
*
* \param pBlock <EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>
* \return
*/
std::list<CCurveEx*> CollectFlts(CCurveEx *pBlock);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD>߿<EFBFBD><EFBFBD>ڵľ<EFBFBD>
*
* \param pBlock <EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>
* \return
*/
std::vector<CWellPoint> CollectWells(CCurveEx *pBlock);
/**
* <EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD>ͼԪ
*
* \return
*/
POSITION FirstPositionAfterWell();
/**
* <EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
*
* \param layerName ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param result <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
* \param addCurveList <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
*/
void DrawResultToLayer(CString layerName, std::list<CPolyline>& result, CPositionList& addCurveList);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param flts <EFBFBD>ϲ<EFBFBD>
* \param wells <EFBFBD><EFBFBD>
* \param border <EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>
* \param results <EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
int DrawDelaunay(std::list<CPolyline> &flts, std::vector<CWellPoint> &wells, CPolyline &border, std::list<CPolyline> *results);
/**
* <EFBFBD><EFBFBD><EFBFBD>ƹͼ
*
* \param flts <EFBFBD>ϲ<EFBFBD>
* \param wells <EFBFBD><EFBFBD>
* \param border <EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>
* \param results <EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
int DrawVorono(std::list<CPolyline> &flts, std::vector<CWellPoint> &wells, CPolyline &border, std::list<CPolyline> *results);
/**
* ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*
* \param flts <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
std::vector<CWellPoint> GetWellByDelaunay(std::list<CPolyline> &flts);
std::list<COne*> PositionsToCones(CPositionList &list);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PointXYZ
*
* \return
*/
std::vector<CPointXYZ> SelectedPointXYZs();
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĵ<EFBFBD>
*
* \param curves <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
std::vector<CPointXYZ> GetPointsInCurves(std::vector<CCurveEx *> &curves);
/**
* <EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٳ<EFBFBD>ϡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>еĵ<EFBFBD>
*
* \param removedPoints <EFBFBD><EFBFBD>ϡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
* \param needRemoved <EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>Ҫ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD>Ľڵ<EFBFBD>
* \return
*/
int FindNeedRemovePoints(const std::vector<CPointXYZ> &removePoints, CPositionList &needRemoved);
/**
*
* \param points
* \param idxReserved
* \param
* \return
*/
static bool CPointXYZIdxContains(const std::vector<CPointXYZ> &points, const CPointXYZ &point);
/**
* <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>
*
* \param text
* \return
*/
CString RemoveSuperSubscript(const CString& text);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD>ӳɵ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
*
* \param text
* \return
*/
CString GetSuperSubscript(const CString& text);
};
}