Page 1 of 1

Buttons click method

Posted: Fri Jul 22, 2016 11:52 am
by snfge
Hi
I want develope a method when I click a menus , left button click is add point to polyline and right button is end create polyline, how can I do it, I write the code like other method, but when I left button click, the code not work.

Re: Buttons click method

Posted: Fri Jul 22, 2016 1:12 pm
by daniel
Then, you should refer to the way the interactive segmentation tool works. See the ccGraphicalSegmentationTool class.

Re: Buttons click method

Posted: Thu Jul 28, 2016 2:19 am
by snfge
Hi
I add the code to mainwindow.cpp, but when I click, the "addPointToPolyline" not work, please help me, thank you.

Code: Select all

void MainWindow::doActionShowHelpDialog()
{
	m_polyVertices = new ccPointCloud("vertices");
	m_segmentationPoly = new ccPolyline(m_polyVertices);
	m_segmentationPoly->setForeground(true);
	m_segmentationPoly->setColor(ccColor::green);
	m_segmentationPoly->showColors(true);
	m_segmentationPoly->set2DMode(true);

	m_associatedWin = getActiveGLWindow();
	if (m_associatedWin)
	{
		connect(m_associatedWin, SIGNAL(leftButtonClicked(int, int)), this, SLOT(addPointToPolyline(int, int)));
		connect(m_associatedWin, SIGNAL(rightButtonClicked(int, int)), this, SLOT(closePolyLine(int, int)));
		connect(m_associatedWin, SIGNAL(mouseMoved(int, int, Qt::MouseButtons)), this, SLOT(updatePolyLine(int, int, Qt::MouseButtons)));
	}
	if (m_segmentationPoly)
	{
		m_segmentationPoly->setDisplay(m_associatedWin);
	}

}
//////////////////////////////////////////////////////////////////////////添加点,左键
void MainWindow::addPointToPolyline(int x, int y)
{
	assert(m_polyVertices);
	assert(m_segmentationPoly);
	unsigned vertCount = m_polyVertices->size();

	//new point
	CCVector3 P(static_cast<PointCoordinateType>(x - m_associatedWin->width() / 2),
		static_cast<PointCoordinateType>(m_associatedWin->height() / 2 - y),
		0);

	//CTRL key pressed at the same time?
	//bool ctrlKeyPressed = m_rectangularSelection || ((QApplication::keyboardModifiers() & Qt::ControlModifier) == Qt::ControlModifier);

	//start new polyline?
	if ( vertCount == 0)
	{
		//reset state
		//m_state = (ctrlKeyPressed ? RECTANGLE : POLYLINE);
		//m_state |= (STARTED | RUNNING);
		//reset polyline
		m_polyVertices->clear();
		if (!m_polyVertices->reserve(2))
		{
			ccLog::Error("Out of memory!");
			//allowPolylineExport(false);
			return;
		}
		//we add the same point twice (the last point will be used for display only)
		m_polyVertices->addPoint(P);
		m_polyVertices->addPoint(P);
		m_segmentationPoly->clear();
		if (!m_segmentationPoly->addPointIndex(0, 2))
		{
			ccLog::Error("Out of memory!");
			//allowPolylineExport(false);
			return;
		}
	}
	else //next points in "polyline mode" only
	{
		//we were already in 'polyline' mode?
		if (m_state & POLYLINE)
		{
			if (!m_polyVertices->reserve(vertCount + 1))
			{
				ccLog::Error("Out of memory!");
				//allowPolylineExport(false);
				return;
			}

			//we replace last point by the current one
			CCVector3* lastP = const_cast<CCVector3*>(m_polyVertices->getPointPersistentPtr(vertCount - 1));
			*lastP = P;
			//and add a new (equivalent) one
			m_polyVertices->addPoint(P);
			if (!m_segmentationPoly->addPointIndex(vertCount))
			{
				ccLog::Error("Out of memory!");
				return;
			}
			m_segmentationPoly->setClosed(true);
		}
		else //we must change mode
		{
			assert(false); //we shouldn't fall here?!
			m_state &= (~RUNNING);
			addPointToPolyline(x, y);
			return;
		}
	}

	m_associatedWin->redraw(true, false);
}

Re: Buttons click method

Posted: Thu Jul 28, 2016 6:07 am
by daniel
It would have been better to add this code in another class (just as ccGraphicalSegmentationTool or ccTracePolylineTool, etc.).

And have you declared 'addPointToPolyline' as a slot? Do you at least enter inside the function? (you can use the debug mode to trace the call and run the code step by step).

Re: Buttons click method

Posted: Sat Aug 06, 2016 12:05 pm
by snfge
Hi
Can I build a Class like the "ccTracePolylineTool" and can use the button click method?

Re: Buttons click method

Posted: Mon Aug 08, 2016 5:17 pm
by daniel
I guess so?