docs: @Override
  	public Quaternion getOrientation() {
  		Quaternion orient = null;
  		if (this.orientation!=null) {
  			orient = this.orientation.get();
  		}
  		if (orient==null) {
  			Vector3d norm = getNormal();
  			assert(norm!=null);
  			CoordinateSystem3D cs = CoordinateSystem3D.getDefaultCoordinateSystem();
  			assert(cs!=null);
  			Vector3f up = cs.getUpVector();
  			assert(up!=null);
  			Vector3d axis = new Vector3d();
  			FunctionalVector3D.crossProduct(
  					up.getX(), up.getY(), up.getZ(),
  					norm.getX(), norm.getY(), norm.getZ(),
  					cs, axis);
  			axis.normalize();
  			orient = new Quaternion();
  			orient.setAxisAngle(
  					axis, 
  					FunctionalVector3D.signedAngle(
  							up.getX(), up.getY(), up.getZ(),
  							norm.getX(), norm.getY(), norm.getZ()));
  			this.orientation = new SoftReference<>(orient);
  		}
  		return orient;
  	}