/** * Creates a new ray using a geometric transform. * * @param type of transform (Kernel constant) */ public GeoElement[] createTransformedObject( int type, String label, GeoPoint Q, GeoLine l, GeoVector vec, NumberValue n) { AlgoElement algoParent = keepTypeOnGeometricTransform ? getParentAlgorithm() : null; // CREATE RAY if (algoParent instanceof AlgoJoinPointsRay) { // transform points AlgoJoinPointsRay algo = (AlgoJoinPointsRay) algoParent; GeoPoint[] points = {algo.getP(), algo.getQ()}; points = kernel.transformPoints(type, points, Q, l, vec, n); GeoElement ray = kernel.Ray(label, points[0], points[1]); ray.setVisualStyleForTransformations(this); GeoElement[] geos = {ray, points[0], points[1]}; return geos; } else if (algoParent instanceof AlgoRayPointVector) { // transform startpoint GeoPoint[] points = {getStartPoint()}; points = kernel.transformPoints(type, points, Q, l, vec, n); // get transformed line from this ray GeoLine transformedLine = kernel.getTransformedLine(type, this, Q, l, vec, n); cons.removeFromConstructionList(transformedLine.getParentAlgorithm()); // get direction of transformed line boolean oldSuppressLabelCreation = cons.isSuppressLabelsActive(); cons.setSuppressLabelCreation(true); AlgoDirection algoDir = new AlgoDirection(cons, transformedLine); cons.removeFromConstructionList(algoDir); GeoVector direction = algoDir.getVector(); cons.setSuppressLabelCreation(oldSuppressLabelCreation); // ray through transformed point with direction of transformed line GeoElement ray = kernel.Ray(label, points[0], direction); ray.setVisualStyleForTransformations(this); GeoElement[] geos = {ray, points[0], direction}; return geos; } else { // create LINE GeoLine transformedLine = kernel.getTransformedLine(type, this, Q, l, vec, n); transformedLine.setLabel(label); GeoElement[] ret = {transformedLine}; return ret; } }