|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F>ļ<EFBFBD>: CItem<65><6D><EFBFBD><EFBFBD>չ
|
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
|
|
|
|
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|
|
|
|
|
//
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2006-12-07
|
|
|
|
|
|
//
|
|
|
|
|
|
//
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include ".\itemlinkcurve.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace NItem
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
class CItemSolidLink :
|
|
|
|
|
|
public CItemLinkCurve
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CItemSolidLink(CSigmaDoc * ppDoc);
|
|
|
|
|
|
virtual ~CItemSolidLink(void);
|
|
|
|
|
|
|
|
|
|
|
|
virtual BOOL DoSelectEnd(void);
|
|
|
|
|
|
int GetSubMenu() override;
|
|
|
|
|
|
|
|
|
|
|
|
void ClearAssistantCurve(void);
|
|
|
|
|
|
CList<POSITION, POSITION> AssistantCurveList; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class CItemSolid : public CItemSolidLink
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CItemSolid(CSigmaDoc * ppDoc);
|
|
|
|
|
|
virtual ~CItemSolid(void);
|
|
|
|
|
|
int m_iMaxExtendLength;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
class CURVE_SEGMENT
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CURVE_SEGMENT(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bExtend = FALSE;
|
|
|
|
|
|
head = -1e100;
|
|
|
|
|
|
tail = 1e100;
|
|
|
|
|
|
pCurve = NULL;
|
|
|
|
|
|
m_bExtendLastCurve = FALSE;
|
|
|
|
|
|
};
|
|
|
|
|
|
int m_bExtend = FALSE;
|
|
|
|
|
|
double head, tail;
|
|
|
|
|
|
CCurveEx* pCurve;
|
|
|
|
|
|
|
|
|
|
|
|
//Ϊ<><CEAA>UNDO<44><4F>REDO<44><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
|
CCrossPoint PrevPoint;
|
|
|
|
|
|
int m_bExtendLastCurve = 0;
|
|
|
|
|
|
};
|
|
|
|
|
|
CList<CURVE_SEGMENT, CURVE_SEGMENT> CurveGroup;
|
|
|
|
|
|
CCrossPoint PrevPoint, FirstPoint;
|
|
|
|
|
|
BOOL m_bExtendFirstCurve = FALSE;
|
|
|
|
|
|
BOOL m_bExtendLastCurve = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
CCrossPoint GetPoint(SELECT_ITEM& item, CCurveEx* p1, CCurveEx* p2, CCrossPoint& otherPoint);
|
|
|
|
|
|
BOOL CreateTwoCurveSolid(SELECT_ITEM& item1, SELECT_ITEM& item2);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
virtual BOOL SelectItem(POSITION pos, CPoint2D point) override;
|
|
|
|
|
|
virtual BOOL DoSelectEnd(void);
|
|
|
|
|
|
int GetSubMenu() override;
|
|
|
|
|
|
int OnMouseMove(CDC* pDC, UINT nFlags, CPoint point) override;
|
|
|
|
|
|
virtual void Undo(void);
|
|
|
|
|
|
|
|
|
|
|
|
static CCrossPoint GetNearestCrossPoint(CCrossList& cross, CPoint2D point);
|
|
|
|
|
|
int CrossWithExtend(CCurveEx* p1, CCurveEx* p2, CCrossList& cross);
|
|
|
|
|
|
int CrossWithMustExtend(CCurveEx* p1, CCurveEx* p2, CCrossList& cross);
|
|
|
|
|
|
void GetCurve(CURVE_SEGMENT& segment, CList <dfPoint, dfPoint>& list);
|
|
|
|
|
|
POSITION CreateCurve(CList<CURVE_SEGMENT, CURVE_SEGMENT>& cg);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class CItemPathFill :
|
|
|
|
|
|
public CItem
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CItemPathFill(CSigmaDoc * ppDoc);
|
|
|
|
|
|
virtual ~CItemPathFill(void);
|
|
|
|
|
|
|
|
|
|
|
|
//virtual BOOL InitPropertyGrid(CXTPPropertyGrid& grid);
|
|
|
|
|
|
//virtual BOOL OnGridItemChangeValue(CXTPPropertyGridItem* pItem);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
CString m_strBlockName;
|
|
|
|
|
|
COLORREF m_colFill = RGB(0, 0, 0); //<2F><><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
int m_fillMode; //<2F><><EFBFBD>䷽ʽ
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> ITEM
|
|
|
|
|
|
class CItemSolidAuto :
|
|
|
|
|
|
public CItem
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CItemSolidAuto(CSigmaDoc * ppDoc);
|
|
|
|
|
|
virtual ~CItemSolidAuto(void);
|
|
|
|
|
|
int m_iMaxExtendLength;
|
|
|
|
|
|
|
|
|
|
|
|
virtual void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override;
|
|
|
|
|
|
virtual BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) override;
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
void GetCurves();
|
|
|
|
|
|
void ClearCurveList(void);
|
|
|
|
|
|
int GetSubMenu();
|
|
|
|
|
|
|
|
|
|
|
|
CCurveEx* CreateSolid();
|
|
|
|
|
|
CCurveEx* GetMinInsideCurve();
|
|
|
|
|
|
|
|
|
|
|
|
double CItemSolidAuto::CrossProduct(dfPoint p, dfPoint q);
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>߶<EFBFBD><DFB6>Ƿ<EFBFBD><C7B7>ཻ,<2C><><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>,p1<70><31>q1<71><31><EFBFBD>߶<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>β<EFBFBD>˵㣬p2<70><32>q2<71><32><EFBFBD>߶<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>β<EFBFBD>˵㣬cr<63>ǽ<EFBFBD><C7BD><EFBFBD>
|
|
|
|
|
|
bool CItemSolidAuto::Cross(dfPoint p1, dfPoint q1, dfPoint p2, dfPoint q2, dfPoint& cr);
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPtrList CurveList;
|
|
|
|
|
|
CPtrList InsideCurveList;
|
|
|
|
|
|
dfPoint dfp;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
};
|