void ShapeVisitor_Comparator::visit (Shape_Plane & shape) {
    QSharedPointer<Shape_Plane> otherShape = otherShape_.dynamicCast<Shape_Plane> ();
    if (! otherShape.isNull ()) {
        comparisonResult_ =
            (shape.getNormalVector () == otherShape->getNormalVector ())
            &&
            (shape.getD () == otherShape->getD ())
            ;
    } else {
        comparisonResult_ = false;
    }
}
void ShapeVisitor_RestrictedPositionGetter::visit( Shape_Plane& shape )
{
	float t;
	float m = - shape.getD() - shape.getNormalVector().x() * mOriginalPosition.x() - shape.getNormalVector().y() * mOriginalPosition.y() - shape.getNormalVector().z() * mOriginalPosition.z();

	double shapeX= static_cast<double>( shape.getNormalVector().x() );
	double shapeY= static_cast<double>( shape.getNormalVector().y() );
	double shapeZ= static_cast<double>( shape.getNormalVector().z() );
	double n = pow( shapeX, 2.0 ) + pow( shapeY, 2.0 ) + pow( shapeZ, 2.0 );
	if ( !qFuzzyCompare( n,0.0 ) )
		//if (n != 0.0)
	{
		t = m / static_cast<float>( n );
	}
	else {
		t = 0.f;
	}

	mRestrictedPosition = osg::Vec3f(
							  mOriginalPosition.x() + t * shape.getNormalVector().x(),
							  mOriginalPosition.y() + t * shape.getNormalVector().y(),
							  mOriginalPosition.z() + t * shape.getNormalVector().z()
						  );
}