Exemple #1
0
QStringList cc2DLabel::getLabelContent(int precision)
{
	QStringList body;

	switch(m_points.size())
	{
	case 0:
		//can happen if the associated cloud(s) has(ve) been deleted!
		body << "Deprecated";
		break;

	case 1: //point
		{
			LabelInfo1 info;
			getLabelInfo1(info);
			if (!info.cloud)
				break;

			//coordinates
			AddPointCoordinates(body,info.pointIndex,info.cloud,precision);

			//normal
			if (info.hasNormal)
			{
				QString normStr = QString("Normal: (%1;%2;%3)").arg(info.normal.x,0,'f',precision).arg(info.normal.y,0,'f',precision).arg(info.normal.z,0,'f',precision);
				body << normStr;
			}
			//color
			if (info.hasRGB)
			{
				QString colorStr = QString("Color: (%1;%2;%3)").arg(info.rgb[0]).arg(info.rgb[1]).arg(info.rgb[2]);
				body << colorStr;
			}
			//scalar field
			if (info.hasSF)
			{
				QString sfVal = GetSFValueAsString(info, precision);
				QString sfStr = QString("%1 = %2").arg(info.sfName).arg(sfVal);
				body << sfStr;
			}
		}
		break;

	case 2: //vector
		{
			LabelInfo2 info;
			getLabelInfo2(info);
			if (!info.cloud1 || !info.cloud2)
				break;

			//distance is now the default label title
			//PointCoordinateType dist = info.diff.norm();
			//QString distStr = QString("Distance = %1").arg(dist,0,'f',precision);
			//body << distStr;

			QString vecStr =	MathSymbolDelta + QString("X: %1\t").arg(info.diff.x,0,'f',precision)
							+	MathSymbolDelta + QString("Y: %1\t").arg(info.diff.y,0,'f',precision)
							+	MathSymbolDelta + QString("Z: %1"  ).arg(info.diff.z,0,'f',precision);

			body << vecStr;

			PointCoordinateType dXY = sqrt(info.diff.x*info.diff.x + info.diff.y*info.diff.y);
			PointCoordinateType dXZ = sqrt(info.diff.x*info.diff.x + info.diff.z*info.diff.z);
			PointCoordinateType dZY = sqrt(info.diff.z*info.diff.z + info.diff.y*info.diff.y);

			vecStr =	MathSymbolDelta + QString("XY: %1\t").arg(dXY,0,'f',precision)
					+	MathSymbolDelta + QString("XZ: %1\t").arg(dXZ,0,'f',precision)
					+	MathSymbolDelta + QString("ZY: %1"  ).arg(dZY,0,'f',precision);
			body << vecStr;

			AddPointCoordinates(body,info.point1Index,info.cloud1,precision);
			AddPointCoordinates(body,info.point2Index,info.cloud2,precision);
		}
		break;

	case 3: //triangle/plane
		{
			LabelInfo3 info;
			getLabelInfo3(info);

			//area
			QString areaStr = QString("Area = %1").arg(info.area,0,'f',precision);
			body << areaStr;

			//coordinates
			AddPointCoordinates(body,info.point1Index,info.cloud1,precision,"A");
			AddPointCoordinates(body,info.point2Index,info.cloud2,precision,"B");
			AddPointCoordinates(body,info.point3Index,info.cloud3,precision,"C");

			//normal
			QString normStr = QString("Normal: (%1;%2;%3)").arg(info.normal.x,0,'f',precision).arg(info.normal.y,0,'f',precision).arg(info.normal.z,0,'f',precision);
			body << normStr;

			//angles
			QString angleStr = QString("Angles: A=%1 - B=%2 - C=%3 deg.")
									.arg(info.angles.u[0],0,'f',precision)
									.arg(info.angles.u[1],0,'f',precision)
									.arg(info.angles.u[2],0,'f',precision);
			body << angleStr;

			//edges
			QString edgesStr = QString("Edges: AB=%1 - BC=%2 - CA=%3")
									.arg(info.edges.u[0],0,'f',precision)
									.arg(info.edges.u[1],0,'f',precision)
									.arg(info.edges.u[2],0,'f',precision);
			body << edgesStr;
		}
		break;

	default:
		assert(false);
		break;
	}

	return body;
}
Exemple #2
0
QStringList cc2DLabel::getLabelContent(int precision)
{
	QStringList body;

	switch(m_points.size())
	{
	case 0:
		//can happen if the associated cloud(s) has(ve) been deleted!
		body << "Deprecated";
		break;

	case 1: //point
		{
			//init title
			/*title = m_title;
			//automatically elide the title
			title = titleFontMetrics.elidedText(title,Qt::ElideRight,dx);
			//*/

			//coordinates
			ccGenericPointCloud* cloud = m_points[0].cloud;
			const unsigned& pointIndex = m_points[0].index;
			AddPointCoordinates(body,pointIndex,cloud,precision);

			//normal
			if (cloud->hasNormals())
			{
				const CCVector3& N = cloud->getPointNormal(pointIndex);
				QString normStr = QString("Normal: (%1;%2;%3)").arg(N.x,0,'f',precision).arg(N.y,0,'f',precision).arg(N.z,0,'f',precision);
				body << normStr;
			}
			//color
			if (cloud->hasColors())
			{
				const colorType* C = cloud->getPointColor(pointIndex);
				assert(C);
				QString colorStr = QString("Color: (%1;%2;%3)").arg(C[0]).arg(C[1]).arg(C[2]);
				body << colorStr;
			}
			//scalar field
			if (cloud->hasDisplayedScalarField())
			{
				ScalarType D = cloud->getPointScalarValue(pointIndex);
				QString sfStr = QString("Scalar: %1").arg(D,0,'f',precision);
				body << sfStr;
			}
		}
		break;

	case 2: //vector
		{
			//1st point
			ccGenericPointCloud* cloud1 = m_points[0].cloud;
			const unsigned& pointIndex1 = m_points[0].index;
			const CCVector3* P1 = cloud1->getPointPersistentPtr(pointIndex1);
			//2nd point
			ccGenericPointCloud* cloud2 = m_points[1].cloud;
			const unsigned& pointIndex2 = m_points[1].index;
			const CCVector3* P2 = cloud2->getPointPersistentPtr(pointIndex2);

			PointCoordinateType d = (*P1-*P2).norm();
			QString distStr = QString("Distance = %1").arg(d,0,'f',precision);
			body << distStr;

			AddPointCoordinates(body,pointIndex1,cloud1,precision);
			AddPointCoordinates(body,pointIndex2,cloud2,precision);
		}
		break;

	case 3: //triangle/plane
		{
			//1st point
			ccGenericPointCloud* cloud1 = m_points[0].cloud;
			const unsigned& pointIndex1 = m_points[0].index;
			const CCVector3* P1 = cloud1->getPointPersistentPtr(pointIndex1);
			//2nd point
			ccGenericPointCloud* cloud2 = m_points[1].cloud;
			const unsigned& pointIndex2 = m_points[1].index;
			const CCVector3* P2 = cloud2->getPointPersistentPtr(pointIndex2);
			//3rd point
			ccGenericPointCloud* cloud3 = m_points[2].cloud;
			const unsigned& pointIndex3 = m_points[2].index;
			const CCVector3* P3 = cloud3->getPointPersistentPtr(pointIndex3);

			//area
			CCVector3 P1P2 = *P2-*P1;
			CCVector3 P1P3 = *P3-*P1;
			CCVector3 N = P1P2.cross(P1P3); //N=ABxAC
			PointCoordinateType area = N.norm()*(PointCoordinateType)0.5;
			QString areaStr = QString("Area = %1").arg(area,0,'f',precision);
			body << areaStr;

			//coordinates
			AddPointCoordinates(body,pointIndex1,cloud1,precision);
			AddPointCoordinates(body,pointIndex2,cloud2,precision);
			AddPointCoordinates(body,pointIndex3,cloud3,precision);

			//normal
			N.normalize();
			QString normStr = QString("Normal: (%1;%2;%3)").arg(N.x,0,'f',precision).arg(N.y,0,'f',precision).arg(N.z,0,'f',precision);
			body << normStr;

			//angle
			CCVector3 P2P3 = *P3-*P2;

            //negatives
            CCVector3 _P1P2 = -P1P2;
            CCVector3 _P1P3 = -P1P3;
            CCVector3 _P2P3 = -P2P3;

			double angleAtP1 = GetAngle_deg(P1P2,P1P3);
            double angleAtP2 = GetAngle_deg(P2P3,_P1P2);
            double angleAtP3 = GetAngle_deg(_P1P3,_P2P3); //should be equal to 180-a1-a2!
			QString angleStr = QString("Angles: A=%1 - B=%3 - C=%5 deg.").arg(angleAtP1,0,'f',precision).arg(angleAtP2,0,'f',precision).arg(angleAtP3,0,'f',precision);
			body << angleStr;
		}
		break;

	default:
		assert(false);
		break;
	}

	return body;
}