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.

127 lines
3.1 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<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;
};
};