не отрисовывает wxGraphicsPath Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
AntonyTony
Earned a small fee
Earned a small fee
Posts: 13
Joined: Tue Jan 28, 2020 10:03 am

не отрисовывает wxGraphicsPath

Post by AntonyTony » Mon Oct 12, 2020 8:11 am

Пробовал два способа отрисовки объектов, оба ничего не отрисовывают. Метод Test::Draw(...) вызывается из wxView::OnDraw(wxDC *dc), отрисовка на прямую через dc работает нормально, только я хотел отрисововать составные объекты и для этого использовать wxGraphicsPath.
Способ первый (как в примере):

Code: Select all

void Test::Draw( wxDC *graphics)
{
	wxPaintDC* dc = wxDynamicCast(graphics, wxPaintDC);
	wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
	if (gc)
	{
		gc->SetPen(*wxRED_PEN);
		wxGraphicsPath path = gc->CreatePath();
		path.AddCircle(50.0, 50.0, 50.0);
		path.MoveToPoint(0.0, 50.0);
		path.AddLineToPoint(100.0, 50.0);
		path.MoveToPoint(50.0, 0.0);
		path.AddLineToPoint(50.0, 100.0);
		path.CloseSubpath();
		path.AddRectangle(25.0, 25.0, 50.0, 50.0);
		gc->StrokePath(path);
		gc->DrawPath(path);
		delete gc;
	}
}
Способ второй:

Code: Select all

void Test::Draw( wxDC *graphics)
{
	wxGraphicsContext* graphicsContainer = wxGraphicsContext::Create(graphics);
	graphicsPath = graphicsContainer->CreatePath();
	graphicsPath.MoveToPoint(0, 0);
	graphicsPath.AddLineToPoint(100, 100);
	graphicsContainer->DrawPath(graphicsPath);			
}
Можно сделать отрисовку составных объектов через dc->DrawLine и т.п., но хотелось бы разобраться с wxGraphicsPath. В чём мой косяк?

Kvaz1r
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 228
Joined: Tue Jun 07, 2016 1:07 pm

Re: не отрисовывает wxGraphicsPath

Post by Kvaz1r » Mon Oct 12, 2020 2:04 pm

Было бы неплохо увидеть воспроизводимый пример кода. В первом случае wxGraphicsContext точно создается нормально?

Попробуйте взять рабочий пример с использованием этого класса(например, отсюда) и сравнить с тем, что у вас.

Post Reply