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.
190 lines
4.5 KiB
C++
190 lines
4.5 KiB
C++
#include "StdAfx.h"
|
|
#include "itemcircle.h"
|
|
#include "SigmaDoc.h"
|
|
|
|
namespace NItem
|
|
{
|
|
CItemCircle::CItemCircle(CSigmaDoc * ppDoc)
|
|
: CItemEllipse(ppDoc)
|
|
{
|
|
this->SetType(ITEM_CIRCLE);
|
|
}
|
|
|
|
CItemCircle::~CItemCircle(void)
|
|
{
|
|
}
|
|
|
|
BOOL CItemCircle::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
|
|
{
|
|
return TRUE;
|
|
//GetDoc()->GetCursor().SetCursor(CursorCrosshair);
|
|
//return GetDoc()->GetCursor().SetCursor();
|
|
}
|
|
|
|
void CItemCircle::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk)
|
|
{
|
|
CPoint2D dp = GetDC()->GetReal(point);
|
|
|
|
m_downPoint=dp;
|
|
m_upPoint=dp;
|
|
DoDrawOther(pDC, 1);
|
|
|
|
//GetView()->SetCapture();
|
|
}
|
|
|
|
int CItemCircle::OnMouseMove(CDC *pDC, UINT nFlags, CPoint point)
|
|
{
|
|
if(!IsCaptureState()) return 1;
|
|
|
|
CPoint2D dp=GetDC()->GetReal(point);
|
|
DoDrawOther(pDC, 2);
|
|
m_upPoint=dp;
|
|
DoDrawOther(pDC, 2);
|
|
return 1;
|
|
}
|
|
|
|
void CItemCircle::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk)
|
|
{
|
|
if(!IsCaptureState()) return;
|
|
|
|
m_upPoint=GetDC()->GetReal(point);
|
|
DoDrawOther(pDC, 3);
|
|
ReleaseCapture();
|
|
|
|
if(AfxGetPublicFunction()->Distance2(m_downPoint.x0,m_downPoint.y0,m_upPoint.x0,m_upPoint.y0)<1e10) return;
|
|
DoLButtonUp(pDC);
|
|
}
|
|
|
|
BOOL CItemCircle::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
{
|
|
//switch(nChar)
|
|
//{
|
|
//case VK_ESCAPE:
|
|
// if(IsCaptureState())
|
|
// {
|
|
// CRect8 rect=GetRect();
|
|
// DoDrawOther(3);
|
|
// ReleaseCapture();
|
|
// return TRUE;
|
|
// }
|
|
// else
|
|
// {
|
|
// //GetDoc()->EnableDefaultTool();
|
|
// }
|
|
// break;
|
|
//}
|
|
return FALSE;
|
|
}
|
|
|
|
void CItemCircle::DoLButtonUp(CDC *pDC)
|
|
{
|
|
CCircle* pc=new CCircle();
|
|
pc->x0=m_downPoint.x0;
|
|
pc->y0=m_downPoint.y0;
|
|
pc->m_size.cx=AfxGetPublicFunction()->Distance(m_downPoint.x0,m_downPoint.y0,m_upPoint.x0,m_upPoint.y0);
|
|
pc->m_size.cx=pc->m_size.cy;
|
|
|
|
if(GetDoc()->GetDraw()==NULL) {delete pc;return;}
|
|
POSITION pos=AddElement(pc,DOUBLEFOX_CIRCLE);
|
|
//GetDoc()->Select(pos);
|
|
}
|
|
|
|
void CItemCircle::DoDrawOther(CDC* pDC, int nButton)
|
|
{
|
|
CItemFocusRect::DoDrawOther(pDC, nButton);
|
|
|
|
int od=GetDC()->GetDC()->SetROP2(R2_NOTXORPEN);
|
|
GetDC()->Ellipse(m_downPoint.x0,m_downPoint.y0,m_upPoint.x0,m_upPoint.y0);
|
|
GetDC()->GetDC()->SetROP2(od);
|
|
}
|
|
|
|
/*
|
|
BOOL CItemCircle::InitPropertyGrid(CXTPPropertyGrid& grid)
|
|
{
|
|
if(!this->IsEditState()) return FALSE;
|
|
|
|
CPropertyGridItemAdd ItemAdd(NULL);
|
|
|
|
CXTPPropertyGridItem* pItem=grid.AddCategory(IDS_STRING_Circle); ItemAdd.SetItem(pItem); pItem->Expand();
|
|
|
|
CString strFormat=GetFloatFormatString();
|
|
COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos());
|
|
CCircle* pCircle=(CCircle*)pOne->GetValue();
|
|
|
|
m_point.SetPoint(pCircle->x0,pCircle->y0);
|
|
ItemAdd.AddItemPoint(IDS_GI_CIRCLE_COOR, m_point, &m_point);
|
|
ItemAdd.AddItemDouble(IDS_GI_CIRCLE_RADIUS, pCircle->m_size.cx, strFormat, NULL);
|
|
|
|
m_dCurveWidth = GetUnitMode().toPrintUnit(pCircle->m_dCurveWidth);
|
|
ItemAdd.AddItemUnitDouble(IDS_STRING_CURVE_WIDTH, GetUnit(), m_dCurveWidth, strFormat, &m_dCurveWidth);
|
|
|
|
m_nWidthPosition=GetWdithPosition(pCircle);
|
|
ItemAdd.AddItemCombo(IDS_GI_WIDTH_POSITION, IDS_GI_CURVE_WIDTH_POSITION, m_nWidthPosition, &m_nWidthPosition);
|
|
ItemAdd.AddItemColor(IDS_GI_COLOR, pOne->color, NULL);
|
|
|
|
CItem::InitPropertyGrid(grid);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CItemCircle::OnGridItemChangeValue(CXTPPropertyGridItem* pItem)
|
|
{
|
|
COne* pOne=(COne*)GetDoc()->GetDraw()->GetAt(GetPos());
|
|
CCircle* pCircle=(CCircle*)pOne->GetValue();
|
|
|
|
BOOL bUpdate=FALSE;
|
|
switch(pItem->GetID())
|
|
{
|
|
case IDS_GI_CIRCLE_COOR:
|
|
pCircle->x0=m_point.x0;
|
|
pCircle->y0=m_point.y0;
|
|
bUpdate=TRUE;
|
|
break;
|
|
case IDS_GI_CIRCLE_RADIUS:
|
|
pCircle->m_size.cx = ((CXTPPropertyGridItemDouble*)pItem)->GetDouble();
|
|
pCircle->m_size.cy = pCircle->m_size.cx;
|
|
bUpdate=TRUE;
|
|
break;
|
|
case IDS_STRING_CURVE_WIDTH:
|
|
pCircle->m_dCurveWidth = GetUnitMode().toRealUnit(m_dCurveWidth);
|
|
bUpdate=TRUE;
|
|
break;
|
|
case IDS_GI_WIDTH_POSITION:
|
|
SetWidthPosition(pCircle, m_nWidthPosition);
|
|
bUpdate=TRUE;
|
|
break;
|
|
case IDS_GI_COLOR:
|
|
pOne->color = ((CXTPPropertyGridItemColor*)pItem)->GetColor();
|
|
bUpdate=TRUE;
|
|
break;
|
|
}
|
|
return bUpdate | CItem::OnGridItemChangeValue(pItem);
|
|
}
|
|
*/
|
|
|
|
int CItemEllipse::GetWdithPosition(CEllipse* pell)
|
|
{
|
|
int pos=0;
|
|
switch(pell->GetWidthPosition())
|
|
{
|
|
case CEllipse::posIn: pos=0; break;
|
|
case CEllipse::posCenter: pos=1; break;
|
|
case CEllipse::posOut: pos=2; break;
|
|
}
|
|
return pos;
|
|
}
|
|
|
|
void CItemEllipse::SetWidthPosition(CEllipse* pell, int nPos)
|
|
{
|
|
switch(nPos)
|
|
{
|
|
case 0: pell->SetWidthPosition(CEllipse::posIn); break;
|
|
case 1: pell->SetWidthPosition(CEllipse::posCenter); break;
|
|
case 2: pell->SetWidthPosition(CEllipse::posOut); break;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}//namespace
|
|
|