package org.geogebra.common.geogebra3D.euclidian3D; import org.geogebra.common.awt.GPoint; import org.geogebra.common.euclidian.TextDispatcher; import org.geogebra.common.geogebra3D.kernel3D.geos.GeoPoint3D; import org.geogebra.common.kernel.CircularDefinitionException; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.Path; import org.geogebra.common.kernel.Region; import org.geogebra.common.kernel.StringTemplate; import org.geogebra.common.kernel.Matrix.Coords; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoNumeric; import org.geogebra.common.kernel.geos.GeoText; import org.geogebra.common.kernel.kernelND.GeoPointND; import org.geogebra.common.kernel.kernelND.HasVolume; import org.geogebra.common.util.StringUtil; /** * Dispatcher for Area / Length texts * */ public class TextDispatcher3D extends TextDispatcher { private EuclidianView3D view3D; /** * @param kernel * kernel * @param view * view */ public TextDispatcher3D(Kernel kernel, EuclidianView3D view) { super(kernel, view); view3D = view; } @Override protected GeoPointND getPointForDynamicText(Region object, GPoint loc) { Coords coords = view3D.getCursor3D().getCoords(); return view3D.getEuclidianController().createNewPoint( removeUnderscoresAndBraces(l10n.getPlain("Point") + object.getLabel(StringTemplate.defaultTemplate)), false, object, coords.getX(), coords.getY(), coords.getZ(), false, false); } @Override protected GeoPointND getPointForDynamicText(Path object, GPoint loc) { Coords coords = view3D.getCursor3D().getCoords(); return view3D.getEuclidianController().getCompanion().createNewPoint( removeUnderscoresAndBraces(l10n.getPlain("Point") + object.getLabel(StringTemplate.defaultTemplate)), false, object, coords.getX(), coords.getY(), coords.getZ(), false, false); } @Override protected GeoPointND getPointForDynamicText(GPoint loc) { GeoPoint3D cursor = view3D.getCursor3D(); if (cursor.hasRegion()) { return getPointForDynamicText(cursor.getRegion(), loc); } if (cursor.isPointOnPath()) { return getPointForDynamicText(cursor.getPath(), loc); } return super.getPointForDynamicText(loc); } @Override protected void setNoPointLoc(GeoText text, GPoint loc) { try { GeoPoint3D p = new GeoPoint3D(kernel.getConstruction()); p.setCoords(view3D.getCursor3D().getCoords()); text.setStartPoint(p); } catch (CircularDefinitionException e) { e.printStackTrace(); } } /** * @param hasVolume * element that has volume * @param loc * text location */ public void createVolumeText(GeoElement hasVolume, GPoint loc) { GeoNumeric volume = kernel.getManager3D().Volume(null, (HasVolume) hasVolume); // text GeoText text = createDynamicTextForMouseLoc("VolumeOfA", hasVolume, volume, loc); if (hasVolume.isLabelSet()) { volume.setLabel(removeUnderscoresAndBraces( StringUtil.toLowerCase(l10n.getCommand("Volume")) + hasVolume.getLabelSimple())); text.setLabel(removeUnderscoresAndBraces( l10n.getPlain("Text") + hasVolume.getLabelSimple())); } } }